SlideShare una empresa de Scribd logo
1 de 114
Descargar para leer sin conexión
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA




                                           CONTENIDO


                          1. Diagrama de unidades de aprendizaje

                          2. Encapsulamiento

                          3. Herencia

                          4. Polimorfismo

                          5. Guías de laboratorio
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA




                 DIAGRAMA DE UNIDADES DE APRENDIZAJE




      ENCAPSULAMIENTO                                    HERENCIA




                                          POLIMORFISMO
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA


                                                                       SEMANA 01
                                      ENCAPSULAMIENTO

   Programación orientada a objetos, diseño de clases y creación de objetos.

Programación orientada a objetos

La programación orientada a objetos es un nuevo enfoque de programación ya
aceptado universalmente por la comunidad de programadores. Esta aceptación se
sustenta en los múltiples beneficios que trae y los resume en sus siguientes
características principales:

Abstracción, a través de la cual definimos y establecemos el contenido de una clase.

Encapsulamiento, a través de la cual establecemos los niveles de acceso a los
componentes de una clase, siendo el acceso privado obligatorio para todos los
atributos de la clase.

Herencia, a través de la cual se puede extender o agregar y/o modificar o reutilizar la
funcionalidad de una clase existente, llamada padre, en otra clase llamada hija para
evitar la redundancia en el código ya desarrollado. Esta característica resume la frase
“aprovecha lo que ya está hecho”.

Polimorfismo, a través de la cual se puede programar lo genérico de algún proceso sin
saber el detalle de cómo se va a llevar a cabo. Por ejemplo, podemos programar la
secuencia genérica de un proceso de cálculo sin saber aún la forma del cálculo que se
hará. Esta característica se orienta a la construcción de plantillas de uso general para
que, a través de la herencia esas plantillas se puedan particularizar.

Diseño de clases

Una clase, en la práctica es un nuevo tipo de dato particularizado que se compone de:
nombre, atributos, constructores y métodos. Los atributos representan los datos y/o
características de la clase, los constructores permiten crear objetos de la clase y los
métodos representan la funcionalidad de la clase que será utilizada por los objetos.
                                    Nombre

                                     Atributos

                                     Constructores



                                     Métodos
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

Generalmente los atributos son de acceso privado y los métodos son de acceso
público.

Los contructores tienen el mismo nombre de la clase. Cuando una clase no tiene un
constructor explícito, se debe considerar uno implícito, por defecto vacío.



Sintaxis general:

public class Nombre{

        // atributos privados

        // constructores públicos

        // métodos de acceso y modificación públicos y/o privados

}

Creación de objetos

Un objeto, en la práctica es una variable cuyo tipo de dato es una clase. Cuando el
objeto es creado, obtiene una copia de los atributos de la clase para uso exclusivo de
dicho objeto. Por ésta razón, todos los objetos de una clase tendrán los mismos
atributos pero cada uno con valores diferentes.

Sintaxis general:

        Clase objeto;                       // declaración del objeto

        Objeto = new Clase();               // creación del objeto, invoca al constructor

Asignación de objetos

Cuando un objeto es asignado a otro, éste guarda la dirección de memoria del objeto
existente. Luego, el acceso a los datos puede hacerse por cualquiera de los objetos.

Sintaxis general:

        Clase a, b;                // declaración de 2 objetos

        a = new Clase();           // crea un objeto con sus propios datos/atributos

        b = a;                     // asignación del objeto a en el objeto b.

Luego, tanto a como b pueden utilizar la misma funcionalidad de la clase y referirse a
los mismos datos creados para el objeto a.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

Ejemplo 1

Diseñe una clase de nombre Producto con los siguientes atributos privados: código
(cadena), descripción (cadena), precio (real) y con los métodos públicos get/set.
Considere un constructor implícito.

public class Producto {
    // atributos privados
    prívate String codigo, descripcion;
    prívate double precio;

     // métodos get
     public String getCodigo(){return codigo;}
     public String getDescripcion(){return descripcion;}
     public double getPrecio(){ return precio;}

     // métodos set
     public void setCodigo(String c){
         codigo =c;
     }
     public void setDescripcion(String d){
         descripcion=d;
     }
     public void setPrecio(double p){
         precio=p;
     }
}
Considere el siguiente diseño de una GUI y programe la acción del botón Nuevo




private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) {
       // crea un objeto nuevo de la clase Producto
        Producto nuevo = new Producto();

// lee los valores de la GUI y los coloca como atributos del nuevo objeto
        nuevo.setCodigo(leeCodigo());
        nuevo.setDescripcion(leeDescripcion());
        nuevo.setPrecio(leePrecio());

        // muestra la información del nuevo objeto
         lista(nuevo);
}
// métodos que      leen los datos de la GUI
private String      leeCodigo(){return txtCodigo.getText();}
private String      leeDescripcion(){return txtDescripcion.getText();}
private double      leePrecio(){return Double.parseDouble(txtPrecio.getText());}

// método que muestra la información de un objeto de la clase Producto
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

private void lista(Producto p){
        imprime("Codigot:"+p.getCodigo());
        imprime("Descripciont:"+p.getDescripcion());
        imprime("Preciot:"+p.getPrecio());
}

// método que muestra una cadena en el objeto de salida de la GUI
private void imprime(String s){
        txtSalida.append(s+"n");
}


Ejemplo 2

Diseñe una clase de nombre Persona con los siguientes atributos privados: nombres
(cadena), apellidos (cadena), edad(entero), peso(real) y con los métodos get/set.
Considere un constructor implícito.

Considere el siguiente diseño de una GUI y programe la acción del botón Nuevo




Ejemplo 3

Diseñe una clase de nombre TV con los siguientes atributos privados: serie (cadena),
marca (entero), tamaño en pulgadas(entero), precio (real) y con los métodos get/set,
con un método adicional que devuelve el precio en soles dado el tipo de cambio como
parámetro, y con un método adicional que retorne el nombre de la marca. Considere
las siguientes marcas: Sony, LG, Samsung, Panasonic, otro. Considere un constructor
implícito.

Considere el siguiente diseño de una GUI y programe la acción del botón Nuevo
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA




Ejemplo 4

Diseñe una clase de nombre Fecha con los siguientes atributos privados: dia(entero),
mes(entero), año(entero) y con los métodos get/set. Considere un constructor
implícito.

Diseñe otra clase de nombre DNI con los siguientes atributos privados:
numero(cadena), dueño(Persona), fecha de emisión (Fecha), fecha de
caducidad(Fecha) y con los métodos get/set. Considere un constructor implícito.

Considere el siguiente diseño de una GUI y programe la acción del botón Nuevo.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA


                                                                           SEMANA 02
                                      ENCAPSULAMIENTO

   Constructores, niveles de acceso, métodos get/set, palabra reservada this.
                            Creación de objetos desde una GUI.

Constructores

Un constructor es un componente de una clase, a través de la cual se puede inicializar
los atributos de un objeto creado. Cuando una clase no tiene constructor explícito, se
considera un constructor implícito por defecto con un bloque de código vacío.

Una clase puede tener varios constructores. Sin embargo, deben diferenciarse por la
cantidad y/o tipo de parámetros. Cuando se crea un objeto, se invoca
automáticamente al constructor que corresponda a los parámetros dados. Si no
encuentra un constructor adecuado, se produce un error.

Niveles de acceso

Existen 3 niveles de acceso a los componentes de una clase: prívate, protected,
public. El acceso prívate permite la implementación de la característica del
encapsulamiento, el acceso protected facilita la implementación de la característica
de la herencia y el acceso public permite el acceso a la funcionalidad de la clase
desde cualquier objeto. Los atributos de una clase deben ser de acceso prívate o
protected, nunca public. Un constructor siempre debe ser de acceso public. Los
métodos pueden ser de cualquier nivel de acceso, dependiendo de la apertura a la
funcionalidad de la clase.



     Nivel           de En            la Desde un objeto   Desde      clase    hija
     acceso             clase                              (herencia)

     Prívate                     SI                 NO               NO

     Protected                   SI                 NO                SI

     public                      SI                  SI               SI



Métodos get/set

Los métodos get son aquellos que permiten acceder a los atributos desde un objeto.
Los métodos set son aquellos que permiten modificar el contenido de los atributos
desde un objeto.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

Estos métodos se han estandarizado, por eso se les conoce como los métodos
get/set. Incluso, los entornos de programación modernos, como NetBeans, generan la
escritura del código correspondiente.

Palabra reservada this

La palabra reservada this se utiliza para diferenciar el nombre del atributo con el
nombre del parámetro cuando éstos coinciden. También es utilizada para referirse a la
ventana gráfica vigente y activa. Por ejemplo:

        this.codigo = codigo;
        JOptionPane.showMessageDialog(this,” mensaje de texto”);


Ejemplo 1

Diseñe una clase de nombre Producto con los siguientes atributos privados: código
(cadena), descripción (cadena), precio (real); con un constructor y con los métodos
públicos get/set.

public class Producto {
    // atributos privados
    private String codigo, descripcion;
    private double precio;

    // constructor
    public Producto(String codigo, String descripcion, double precio){
        this.codigo=codigo;
        this.descripcion=descripcion;
        this.precio=precio;
    }
    // métodos get-set generados por NetBeans
    public String getCodigo() {
        return codigo;
    }
    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }
    public String getDescripcion() {
        return descripcion;
    }
    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }
    public double getPrecio() {
        return precio;
    }
    public void setPrecio(double precio) {
        this.precio = precio;
    }
}// fin de la clase
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

Observe y analice el desarrollo del constructor y el uso de la palabra reservada this.

Considere el siguiente diseño y programe la acción del botón Nuevo.




private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) {
       Producto nuevo = new Producto(leeCodigo(),leeDescripcion(),leePrecio());
        lista(nuevo);
    }
Qué datos se pasan al constructor del objeto creado?. Observe y responda.


Ejemplo 2

Diseñe una clase de nombre Persona con los siguientes atributos privados: nombres
(cadena), apellidos (cadena), edad(entero), peso(real); con un constructor y con los
métodos get/set.

Observe y analice el desarrollo del constructor y el uso de la palabra reservada this.

Considere el siguiente diseño y programe la acción del botón Nuevo.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

Ejemplo 3

Diseñe una clase de nombre TV con los siguientes atributos privados: serie (cadena),
marca (entero), tamaño en pulgadas(entero), precio (real); con un constructor, con los
métodos get/set, con un método adicional que devuelve el precio en soles dado el tipo
de cambio como parámetro, y con un método adicional que retorne el nombre de la
marca. Considere las siguientes marcas: Sony, LG, Samsung, Panasonic, otro.

Escriba los métodos adicionales solicitados.

Observe y analice el desarrollo del constructor y el uso de la palabra reservada this.

Considere el siguiente diseño para programar la acción del botón Nuevo




Ejemplo 4

Diseñe una clase de nombre Fecha con los siguientes atributos privados: dia(entero),
mes(entero), año(entero), con un constructor y con los métodos get/set.

Diseñe una clase de nombre DNI con los siguientes atributos privados:
numero(cadena), dueño(Persona), fecha de emisión (Fecha), fecha de
caducidad(Fecha), con un constructor y con los métodos get/set. Considere la
existencia de la clase Persona desarrollado en la sesión anterior.

Considere el siguiente diseño de GUI para programar la acción del botón Nuevo.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA




Ejemplo 5

Diseñe una clase de nombre Punto con los siguientes atributos privados: x (entero), y
(entero), con un constructor y con los métodos get/set.

Diseñe una clase de nombre Triangulo con los siguientes atributos privados:
a(Punto), b(Punto), c(Punto), con un constructor y con los métodos get/set además
de los métodos de cálculo para los lados del triángulo, para el perímetro del triángulo y
para el área del triángulo.

Considere el diseño de una GUI para programar la acción del botón nuevo.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA


                                                                        SEMANA 03
                                      ENCAPSULAMIENTO

            Clases administradoras con arreglos. Palabra reservada final

Una clase administradora es aquella que tiene todo lo necesario para administrar
información de cualquier tipo, considerando los atributos y funcionalidad necesarios
para ello.

Una clase administradora con arreglos utiliza como atributos: el arreglo, el contador, el
tamaño.

En el constructor de la clase administradora se dimensiona el arreglo y se inicializa el
contador.

Parte de su funcionalidad está orientada al mantenimiento de información que
involucra los siguientes procesos: agregar, eliminar, buscar, reemplazar, obtener.

Los procesos adicionales que formen parte de su funcionalidad dependerá del alcance
que quieran darle a la clase, por ejemplo sumar todos los valores, encontrar el
promedio, el mayor valor, el menor valor, etc.

Ejemplo 1:

Diseñe una clase administradora de valores enteros en un arreglo, que permita
realizar los procesos que se indican en la siguiente interface gráfica de usuario:




Diseñe una clase de nombre ArregloDeEnteros con los siguientes atributos privados:
arreglo de enteros, contador de enteros en el arreglo (entero), tamaño(entero) de valor
fijo 30.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

public class ArregloDeEnteros {
    // atributos privados
    private int a[];    // arreglo de enteros
    private int n;      // numero de enteros en el arreglo
    private final int tamaño = 30; // tamaño de valor fijo

     // constructor
     public ArregloDeEnteros(){
         a = new int[tamaño];
         n = 0;
     }
}
Considere los métodos get/set de todos los atributos, excepto del atributo tamaño que
sólo debe tener método get pero no set porque es un valor fijo. Luego, escriba los
métodos de administración del arreglo.
public class ArregloDeEnteros {
    // atributos privados
    private int a[];    // arreglo de enteros
    private int n;      // numero de enteros en el arreglo
    private final int tamaño = 30; // tamaño de valor fijo

     // constructor
     public ArregloDeEnteros(){
         a = new int[tamaño];
         n = 0;
     }
     // métodos get-set
     public int[] getA() {
         return a;
     }
     public void setA(int[] a) {
         this.a = a;
     }
     public int getN() {
         return n;
     }
     public void setN(int n) {
         this.n = n;
     }
     public int getTamaño() {
         return tamaño;
     }

     // métodos de administración
     public void agrega(int num){
         if(n<tamaño){
             a[n] = num;
             n++;
         }
     }
     public void elimina(int p){
       for(int i=p ; i<n-1; i++)
             a[i] = a[i+1];
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

        n--;
     }
     public int busca(int num){
         for(int i=0; i<n; i++){
             if(a[i]==num)
                 return i;
         }
         return -1;
     }
     public int getNum(int i){
         return a[i];
     }
     public void setNum(int num, int p){
        a[p] = num;
     }
     public int sumaTodo(){
         int suma=0;
         for(int i=0; i<n; i++){
             suma += a[i];
         }
         return suma;
     }
     public double promedio(){
         return sumaTodo()/n;
     }
     public int elMayor(){
         int m=a[0];
         for(int i=0; i<n; i++){
             if(a[i]>m)
                 m=a[i];
         }
         return m;
     }
     public int elMenor(){
         int m=a[0];
         for(int i=0; i<n; i++){
             if(a[i]<m)
                 m=a[i];
         }
         return m;

     }
}
En la clase gestora PanelPrincipal declare como atributo un objeto de la clase
ArregloDeEnteros y en el constructor cree éste objeto para que pueda ser utilizado
en la programación de todos los botones.

public class PanelPrincipal extends javax.swing.JPanel {
    private ArregloDeEnteros ae;

     public PanelPrincipal() {
         initComponents();
         ae = new ArregloDeEnteros();
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

     }


Vamos a programar la acción del botón Nuevo:

     private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) {
         int num = leeNumero();
         int p=ae.busca(num);
         if(p!=-1)
             mensaje("Error: El número ingresado ya existe");
         else{
             ae.agrega(num);
             lista();
         }
     }
     public void mensaje(String s){
         JOptionPane.showMessageDialog(this, s);
     }
     public void lista(){
         borra();
         for(int i=0; i<ae.getN(); i++){
             imprime("a["+i+"]t:"+ae.getNum(i));
         }
     }
Observe que en la programación del botón Nuevo se evita la repetición del número
ingresado.
Vamos a programar la acción del botón Lista:

     private void btnListaActionPerformed(java.awt.event.ActionEvent evt) {
         lista();
     }
Vamos a programar la acción del botón Elimina:
     private void btnEliminaActionPerformed(java.awt.event.ActionEvent evt) {
         int num = leeNumero();
         int p=ae.busca(num);
         if(p==-1)
             mensaje("Error: El número ingresado NO existe");
         else{
             ae.elimina(p);
             lista();
         }
     }
Vamos a programar la acción del botón Reporte:
     private void btnReporteActionPerformed(java.awt.event.ActionEvent evt) {
         lista();
         imprime("El menor valor est: "+ae.elMenor());
         imprime("El valor promedio est: "+ae.promedio());
         imprime("El mayor valor est: "+ae.elMayor());
     }
Vamos a programar la acción del botón Reinicia:
     private void btnReiniciaActionPerformed(java.awt.event.ActionEvent evt) {
         ae.setN(0);
          mensaje(“El arreglo está vacío.”);
     }
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

Ejemplo 2:

Diseñe una clase administradora de valores reales en un arreglo, que permita realizar
los procesos que se indican en la siguiente interface gráfica de usuario:




Diseñe una clase de nombre ArregloDeReales con los siguientes atributos privados:
arreglo de valores reales, cantidad de números guardados en el arreglo (entero),
tamaño dinámico(entero), con un constructor y con los métodos get/set.

public class ArregloDeReales {
    // atributos
    private double a[];    // arreglo de reales
    private int n;      // numero de reales en el arreglo
    private int tamaño; // tamaño de valor dinámico

     // constructor
     public ArregloDeReales(int tamaño){
         a = new double[tamaño];
         n = 0;
         this.tamaño=tamaño;
     }
}
Considere los métodos get-set necesarios.
Escriba los métodos de administración tomando como referencia la clase
ArregloDeEnteros del ejercicio anterior.

Declare un objeto de la clase ArregloDeReales como atributo de la clase gestora
PanelPrincipal y en el constructor cree éste objeto para que pueda ser utilizado por
todos los botones.

Programe la acción de cada uno de los botones.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

Ejemplo 3:

Diseñe una clase administradora de cadenas en un arreglo, que permita realizar los
procesos que se indican en una interface gráfica de usuario similar a la del ejercicio
anterior.

Diseñe una clase de nombre ArregloDeCadenas con los siguientes atributos
privados: arreglo de valores de tipo cadena, cantidad de cadenas guardadas en el
arreglo (entero), tamaño dinámico(entero), con un constructor y con los métodos
get/set.

Escriba los métodos de administración tomando como referencia la clase
ArregloDeEnteros.

Declare un objeto de la clase ArregloDeCadenas como atributo de la clase gestora
PanelPrincipal y en el constructor cree éste objeto para que pueda ser utilizado por
todos los botones.

Programe la acción de cada uno de los botones.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA


                                                             SEMANA 04
                                           EVALUACION
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA


                                                                      SEMANA 05
                                      ENCAPSULAMIENTO

                     Clases administradoras con arreglos de objetos

Estas clases son similares a las clases administradoras que vimos en la semana
anterior, con la diferencia que ahora éstas clases tendrán uno o más arreglos cuyo tipo
de dato sea una clase. A éstos arreglos se les conoce como arreglos de objetos
porque en cada casillero ya no habrá un dato sino una referencia a un objeto con sus
propios atributos.

Sintaxis general para declarar un arreglo de objetos:

        Clase[] variable;

Ó

        Clase variable[];

Ejemplos:

        Producto[] a; // arreglo de objetos de tipo Producto
        Persona[] b; // arreglo de objetos de tipo Persona


Ejemplo 1:
Diseñe una clase administradora con soporte para un arreglo de objetos considerando
la siguiente GUI:




Considere la clase Producto desarrollada anteriormente que tiene los siguientes
atributos y constructor:

         public class Producto {
             // atributos privados
             private String codigo, descripcion;
             private double precio;

              // constructor
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

              public Producto(String codigo, String descripcion, double precio){
                  this.codigo=codigo;
                  this.descripcion=descripcion;
                  this.precio=precio;
              }
         }
Se asume la existencia de los métodos get-set.
Diseñe una nueva clase administradora de nombre ArregloProductos, que tenga
como atributos privados un arreglo de objetos y un contador de objetos que se
guardan en el arreglo. Considere un tamaño fijo de 50 para el arreglo. Considere
dentro de la funcionalidad de la clase los métodos necesarios de administración del
arreglo de objetos para: agregar un nuevo objeto, recuperar, actualizar, buscar,
eliminar.

         public class ArregloProductos {
             // atributos
             private Producto[] a;   // arreglo de objetos
             private int n;          // contador de objetos
             private final int tamaño=50; // tamaño fijo, constante
             // constructor
             public ArregloProductos(){
                 a = new Producto[tamaño];
                 n=0;
             }
Escribimos los métodos adicionales de administración del arreglo de objetos:
             // métodos de administración
             public void agrega(Producto p){     // agrega un nuevo objeto
                if(n<tamaño){
                  a[n] = p;
                  n++;
                }
             }
             public Producto getProducto(int i){ // obtiene un objeto
                  return a[i];
             }
             public void actualiza(Producto p, int i){ // reemplaza un objeto
                  a[i] = p;
             }
             public int busca(String codigo){
                // busca y retorna la posición de un objeto, a través de su
         codigo
                  for(int i=0; i<n; i++){
                      if(getProducto(i).getCodigo().equals(codigo))
                          return i;
                  }
                  return -1; // no lo encuentra
             }
             public void elimina(int p){ // elimina un objeto de la posición
         indicada
                  for(int i=p; i<n-1; i++){
                      a[i] = a[i+1];
                  }
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

                   n--;
               }
             public double mayorPrecio(){    // retorna el mayor precio
                   double m=a[0].getPrecio();
                   for(int i=1; i<n; i++){
                        if(getProducto(i).getPrecio()>m)
                            m =getProducto(i).getPrecio();
                   }
                   return m;
               }
               public double menorPrecio(){ // retorna el menor precio
                   double m=a[0].getPrecio();
                   for(int i=1; i<n; i++){
                        if(getProducto(i).getPrecio()<m)
                            m =getProducto(i).getPrecio();
                   }
                   return m;
               }
               public double precioPromedio(){      // retorna el precio promedio
                   double s=0;
                   for(int i=1; i<n; i++){
                        s +=getProducto(i).getPrecio();
                   }
                   return s/n;
               }
         }


Declare y cree el objeto ap de la clase ArregloProductos:

                 ArregloProductos ap = new ArregloProductos();


Programe la acción de cada botón considerando lo siguiente:

En el botón Nuevo, crea un objeto de la clase Producto, lo guarda en el arreglo de
objetos y muestra un listado de todos los objetos. Evita la duplicidad de códigos.

En el botón Busca, ubica el objeto que tiene el código ingresado y muestra su
información. En caso que no lo encuentre muestra un mensaje de error en una
ventana.

En el botón Modifica, actualiza la información de objeto que tiene el código ingresado
y muestra un listado de todos los objetos.

En el botón Elimina, elimina el objeto que tiene el código ingresado y muestra un
listado de todos los objetos.

En el botón Lista, muestra un listado de todos los objetos.

En el botón Reporte, muestra la siguiente información: precio más alto, precio
promedio, precio más bajo.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

En el botón Borrar borra la información del área de texto, de las cajas de texto y
enfoca el ingreso en la caja de texto del código.

Ejemplo 2:

Diseñe una clase administradora con soporte para un arreglo de objetos considerando
la siguiente GUI:




Considere la clase Persona desarrollada anteriormente, con los siguientes atributos y
constructor:

         public class Persona {
             // atributos privados
             private String dni, nombres, apellidos;
             private int edad;
             private double peso;

             // constructor
             public Persona(String dni, String nombres, String apellidos, int
         edad, double peso){
                this.dni=dni;
                 this.nombres=nombres;
                 this.apellidos=apellidos;
                 this.edad=edad;
                 this.peso=peso;
             }
         }
Diseñe una nueva clase administradora de nombre ArregloPersonas, que tenga
como atributos privados un arreglo de objetos y un contador de objetos que se
guardan en el arreglo. Considere un tamaño fijo de 50 para el arreglo. Considere
dentro de la funcionalidad de la clase los métodos necesarios de administración del
arreglo de objetos para: agregar un nuevo objeto, recuperar, actualizar, buscar,
eliminar.
Escriba los métodos adicionales de administración del arreglo de objetos.

Declare y cree el objeto ap de la clase ArregloPersonas.

Programe la acción de cada botón considerando lo siguiente:
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

En el botón Nuevo, crea un objeto de la clase Persona, lo guarda en el arreglo de
objetos y muestra un listado de todos los objetos. Evita la duplicidad de DNI.

En el botón Busca, ubica el objeto que tiene el DNI ingresado y muestra su
información. En caso que no lo encuentre muestra un mensaje de error en una
ventana.

En el botón Modifica, actualiza la información de objeto que tiene el DNI ingresado y
muestra un listado de todos los objetos.

En el botón Elimina, elimina el objeto que tiene el DNI ingresado y muestra un listado
de todos los objetos.

En el botón Lista, muestra un listado de todos los objetos.

En el botón Reporte, muestra la siguiente información: mayor edad, edad promedio,
menor edad, mayor peso, peso promedio, menor peso.

En el botón Borrar borra la información del área de texto, de las cajas de texto y
enfoca el ingreso en la caja de texto del dni.



Ejemplo 3:

Diseñe una clase administradora con soporte para un arreglo de objetos considerando
la siguiente GUI:




Considere la clase TV desarrollada anteriormente. Diseñe una nueva clase de nombre
ArregloTV, que tenga como atributos privados un arreglo de objetos y un contador de
objetos que se guardan en el arreglo. Considere un tamaño fijo de 50 para el arreglo.
Considere dentro de la funcionalidad de la clase los métodos necesarios de
administración del arreglo de objetos para: agregar un nuevo objeto, recuperar,
actualizar, buscar, eliminar.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

Declare y cree el objeto at de la clase ArregloTV.

Programe la acción de cada botón considerando lo siguiente:

En el botón Nuevo, crea un objeto de la clase TV, lo guarda en el arreglo de objetos y
muestra un listado de todos los objetos. Evita la duplicidad de serie.

En el botón Busca, ubica el objeto que tiene la serie ingresada y muestra su
información. En caso que no lo encuentre muestra un mensaje de error en una
ventana.

En el botón Modifica, actualiza la información de objeto que tiene la serie ingresada y
muestra un listado de todos los objetos.

En el botón Elimina, elimina el objeto que tiene la serie ingresada y muestra un listado
de todos los objetos.

En el botón Lista, muestra un listado de todos los objetos.

En el botón Reporte, muestra la siguiente información: mayor precio, precio promedio,
menor precio. Todos los precios en soles y dólares.

En el botón Borrar borra la información del área de texto, de las cajas de texto y
enfoca el ingreso en la caja de texto de la serie.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA


                                                                              SEMANA 06
                                      ENCAPSULAMIENTO

       Clases administradoras con arreglo de objetos utilizando plantillas:

                                           clase ArrayList

ArrayList es una clase que administra un arreglo dinámico de cualquier objeto. No
tiene restricciones de capacidad. Su tamaño se ajusta en forma dinámica utilizando
eficientemente la memoria del computador.

                 Tiene un Constructor por defecto que define un tamaño inicial de 10. Va
                 creciendo de 10 en 10.

                 Tiene un constructor explícito donde recibe como parámetro el tamaño
                 inicial del arreglo que usted quiera establecer.

                 Los elementos dentro de un ArrayList son Objetos de cualquier tipo.
                 Par un uso adecuado se recomienda particularizarlo al objeto que se
                 quiera administrar.

                 La clase ArrayList forma parte del paquete java.util

La funcionalidad de uso frecuente de la clase ArrayList es la siguiente:

                Método                                   Interpretación

         int size()                Retorna el tamaño actual: numero de objetos guardados.

         void add(obj)             Añade un objeto al final del arreglo, incrementando su
                                   tamaño actual en 1.

         Object get(i)             Devuelve el objeto almacenado a la posición i en el
                                   arreglo. i tiene que ser un entero entre 0 y size()-1.

         void set(index, obj)      reemplaza el objeto de la posición index por el objeto obj.

         Object                    Elimina el objeto a la posición index (index entre 0 y
         remove(index)             size()-1). Devuelve el objeto eliminado. Los objetos
                                   después de este objeto se trasladan a una posición
                                   anterior. El tamaño del ArrayList disminuye en 1.

         int indexOf(obj)          Busca el objeto obj dentro del arreglo, y si lo encuentra,
                                   devuelve la posición donde lo ha encontrado. Si no,
                                   devuelve -1.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

Ejemplo 1

Modifique el contenido de la clase ArregloProductos, que tenga como atributo
privado un objeto de la clase ArrayList donde se guardarán los objetos.

         import java.util.ArrayList;
         public class ArregloProductos {
             // atributos
             private ArrayList <Producto> a ;   // particulariza a objetos de
         tipo Producto
             // constructor
             public ArregloProductos(){
                 a = new ArrayList<Producto>();
             }
             public int getN() {// retorna el numero de objetos guardados
                 return a.size();
             }
             // métodos de administración
             public void agrega(Producto p){    // guarda un Nuevo producto
                 a.add(p);
             }
             public Producto getProducto(int i){ // obtiene un producto de la
         posición i
                 return a.get(i);
             }
             public void actualiza(Producto p, int i){// reemplaza un producto
                 a.set(i, p);
             }
         // retorna la posición de un producto según su código.
             public int busca(String codigo){
                 for(int i=0; i<getN(); i++){
                     if(getProducto(i).getCodigo().equals(codigo))
                          return i;
                 }
                 return -1; // no lo encontró
             }

              public void elimina(int p){// elimina el producto de la posición p
                 a.remove(p);
              }
              public double mayorPrecio(){// retorna el mayor precio
                  double m=a.get(0).getPrecio();
                  for(int i=1; i<getN(); i++){
                      if(getProducto(i).getPrecio()>m)
                          m =getProducto(i).getPrecio();
                  }
                  return m;
              }
              public double menorPrecio(){// retorna el menor precio
                  double m=a.get(0).getPrecio();
                  for(int i=1; i<getN(); i++){
                      if(getProducto(i).getPrecio()<m)
                          m =getProducto(i).getPrecio();
                  }
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

                   return m;
              }
         }
Como puede observar, el uso de una clase plantilla como ArrayList simplifica y facilita
muchísimo la administración de los arreglos de objetos. Por ejemplo ya no debemos
preocuparnos por el tamaño del arreglo.
La programación de los botones en la clase que tiene el diseño de la GUI, no cambia.



Ejemplo 2

Modifique el contenido de la clase ArregloPersonas, que tenga como atributo privado
un objeto de la clase ArrayList donde se guardarán los objetos.

Desarrolle los siguientes métodos adicionales en la clase administradora:

    a) Un método que retorne el peso promedio de todas las personas
    b) Un método que retorne la cantidad de personas cuyo peso se encuentra en un
       rango dado como parámetros
    c) Un método que modifique el peso de todas las personas cuyo peso es mayor a
       80, incrementándolo en 2 kilos.


Ejemplo 3

Modifique el contenido de la clase ArregloTV, que tenga como atributo privado un
objeto de la clase ArrayList donde se guardarán los objetos.

Desarrolle los siguientes métodos adicionales en la clase administradora:

    a) Un método que retorne la cantidad de televisores que pertenecen a una marca
       específica dada como parámetro.
    b) Un método que retorne el precio promedio de los televisores de una marca
       específica dada como parámetro.
    c) Un método que modifique el precio de todos los televisores incrementándolo en
       un porcentaje dado como parámetro.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA


                                                             SEMANA 07
                                           EVALUACION
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA




                                                             SEMANA 08




                               EVALUACION INTEGRAL
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA


                                                                           SEMANA 09
                                             HERENCIA


                         Jerarquía de Clases, extends, super
La Herencia es una de las características más importantes y beneficiosas para el
enfoque de programación orientado a objetos. En resumen se trata de “utilizar lo que
ya está hecho” para agregarle y/o cambiarle funcionalidad, nunca quitarle. Esto en la
vida real tiene mucho sentido. Por ejemplo, Existiendo el televisor en blanco y negro
(clase Padre) fabricaron el televisor a color (clase Hija) aprovechando todo lo bueno
del televisor en blanco y negro ya implementado como cambio de canales,
administración del volumen, mecanismo de encendido/apagado. Al televisor a color le
agregaron más funcionalidad como: soportar audio, video, cable. Otro ejemplo:
Existiendo el televisor a color (clase Padre) fabricaron el televisor digital (clase Hija) al
que le cambiaron y agregaron funcionalidad para el soporte de la tecnología digital.

En programación sucede lo mismo, por ejemplo: Existiendo una clase Fecha (clase
Padre) cuya funcionalidad soporta un formato de presentación DD/MM/AA , se puede
construir una nueva clase FechaM (clase Hija) cuya funcionalidad soporte más
formatos de presentación como DD/NOMBRE DEL MES/AAAA, AA/MM/DD, etc.

A la clase ya existente se le conoce como clase Padre ó clase Base ó clase
Ascendiente o Super clase. En cambio a la nueva clase que hereda se le conoce como
clase Hija ó clase Derivada ó clase Descendiente o Subclase.

Cuando uno va a desarrollar por primera vez una clase y piensa que con el tiempo se
podría utilizar como clase Padre, entonces el nivel de acceso a sus atributos deja de
ser prívate y se debe considerar como protected ya que sigue permitiendo el
encapsulamiento pero además dispone su acceso directo de todas sus clases
descendientes. En cambio, cuando la clase que se va a heredar ya existe con un nivel
de acceso prívate para sus atributos, entonces la clase hija tiene que utilizar la
funcionalidad pública de acceso a sus atributos.

La palabra reservada que implementa la herencia es extends.

Si la clase Padre no tiene un constructor explícito, entonces la clase Hija no está
obligada a tenerlo. Sin embargo, cuando la clase Padre sí tiene un constructor
explícito, entonces la clase Hija sí está obligada a tener su constructor desde donde
debe invocar al constructor de la clase Padre utilizando la palabra reservada super.

La clase Hija puede tener métodos con el mismo nombre que algún método de la clase
Padre. Para diferenciar su invocación al método de la clase Padre se le antepone la
palabra reservada super.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

Ejemplo 1

Considere la existencia de la clase TV desarrollada anteriormente y diseñe una nueva
clase hija de nombre TVH, aplicando herencia, considerando los siguientes atributos
protegidos adicionales: origen(entero), tecnología(entero). Considere para el campo
origen: nacional, americano, japonés, koreano, chino, otro. Considere para el campo
tecnología: Tradicional, LCD, Plasma, Digital. Considere métodos adicionales para que
retornen el nombre del origen y el nombre de la tecnología.

La nueva clase hija debe ser utilizada para el proceso de la siguiente GUI:




Diseño de la clase hija:

public class TVH extends TV {
    // atributos protegidos
    protected int origen, tecnologia;
    // constructor
    public TVH(String serie, int marca, int tamaño, double precio,
                int origen, int tecnologia){
       // invocación al constructor de la clase Padre
       super(serie, marca, tamaño, precio);
       // inicializa sus propios atributos
       this.origen = origen;
       this.tecnologia=tecnologia;
    }

        // métodos get-set
     public int getOrigen() {
         return origen;
     }
     public void setOrigen(int origen) {
         this.origen = origen;
     }
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

    public int getTecnologia() {
        return tecnologia;
    }
    public void setTecnologia(int tecnologia) {
        this.tecnologia = tecnologia;
    }
      // metodos adicionales
    public String nombreOrigen(){
        switch(origen){
            case 1: return "Nacional";
            case 2: return "Americano";
            case 3: return "Japonés";
            case 4: return "Koreano";
            case 5: return "Chino";
            default: return "Otro";
        }
    }
    public String nombreTecnologia(){
        switch(tecnologia){
            case 1: return "Tradicional";
            case 2: return "LCD";
            case 3: return "Plasma";
            default: return "Digital";
        }
    }
}// fin de la clase hija


La nueva clase hija tendrá acceso a todo lo public y protected de la clase padre. Sin
embargo, no tendrá acceso a ningún elemento private.
La nueva clase hija tiene sus atributos con nivel de acceso protected porque estamos
previniendo que ésta sea heredada por otras clases.

Observe y analice la aplicación de Herencia: extends, super

Programamos la acción del botón Nuevo:

private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) {
    TVH nuevo = new TVH(leeSerie(),leeMarca(),leeTamaño(),leePrecio(),
                        leeOrigen(), leeTecnologia());
        lista(nuevo);
    }
    private void lista(TVH t){
       imprime("Datos de la clase Padre-------------");
       imprime("Nro. Seriet:"+t.getSerie());
       imprime("Marcat:"+t.nombreMarca());
       imprime("Tamañot:"+t.getTamaño());
       imprime("Precio us$t:"+t.getPrecio());
       imprime("Precio S/.t:"+t.precioSoles(2.85));
       imprime("Datos de la clase Hija--------------");
       imprime("Origent:"+t.nombreOrigen());
       imprime("Tecnologiat:"+t.nombreTecnologia());
       imprime("----------------------------------");
    }
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

Observe e identifique los datos que se utilizan al momento de crear el objeto.
Observe y verifique la compatibilidad entre la invocación del método lista() y su
desarrollo.

Repase el desarrollo de los métodos de lectura de los datos de la GUI y también el
método imprime().

Ejemplo 2

Considere la existencia de una clase base de nombre Persona ya desarrollada
anteriormente y diseñe una nueva clase hija de nombre PersonaH, aplicando
herencia, con los siguientes atributos protegidos adicionales: dni (cadena),
email(cadena), foto(cadena).

La nueva clase hija debe ser utilizada para el proceso de la siguiente GUI:




Diseño de la clase hija:

public class PersonaH extends Persona {
    // atributos protegidos
    protected String dni, email, foto;
        // constructor
    public PersonaH(String nombres, String apellidos, int edad, double peso,
                    String dni, String email, String foto){
        super(nombres,apellidos,edad,peso);
        this.dni=dni;
        this.email =email;
        this.foto =foto;
    }
Complete los métodos get-set. Observe y analice la aplicación de Herencia.
Programe la acción del botón Nuevo
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

Ejemplo 3

Diseñe una clase padre de nombre PuntoP cuyos atributos sean las coordenadas x,y
de su ubicación en el plano. Considere un constructor con parámetros, la funcionalidad
de acceso a sus atributos y un método adicional que retorne la distancia desde su
ubicación hasta el punto de origen. Luego, diseñe una clase hija de nombre PuntoE
que herede a la clase PuntoP y considere un atributo adicional para la coordenada z
de su ubicación en el espacio. Considere un constructor con parámetros, la
funcionalidad de acceso a su atributo y un método adicional que retorne la distancia
desde su ubicación hasta el punto de origen. Considere una clase de GUI donde utilice
objetos de ambas clases para mostrar su información.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA


                                                                    SEMANA 10
                                             HERENCIA


                                             Sobrecarga

El concepto de sobrecarga va orientado a que un método puede repetirse con el
mismo nombre pero con la condición de que se diferencien por los parámetros: en
número y/o en cantidad.

Por ejemplo, si existiera un método que suma dos números enteros que recibe como
parámetros, tendría la siguiente declaración:

                 public int suma(int a, int b)

Ahora, si quisiéramos sumar dos números reales, no tenemos porqué cambiar el
nombre al método, porque su tarea va a ser la misma: sumar. Entonces aplicamos
sobrecarga para declararlo así:

                 public double suma(double a, double b)

Nuevamente, si ahora quisiéramos sumar 3 números enteros, aplicamos sobrecarga
así:

                 public int suma(int a, int b, int c)

Este concepto de sobrecarga también es aplicable en los constructores de las clases.

La ventaja de éste concepto de sobrecarga es que flexibiliza la funcionalidad de
las clases, ofreciendo varias alternativas de uso de una misma actividad: los
métodos y los constructores.



Ejemplo 1

Considere la existencia de una clase de nombre TVH desarrollada anteriormente.
Diseñe una nueva clase administradora de nombre ArregloTVH. Considere métodos
adicionales sobrecargados para flexibilizar el uso de la clase administradora.
         public class ArregloTVH {

                  // atributos protegidos
              protected ArrayList<TVH> a;

              // constructor
              public ArregloTVH(){
                a = new ArrayList<TVH>();
              }
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

             // métodos sobrecargados para agregar
             public void agrega(TVH t){
               a.add(t);
             }
             public void agrega(String serie, int marca, int tamaño, double
         precio,
                                int origen, int tecnologia){
               a.add(new TVH(serie, marca,tamaño,precio,origen,tecnologia));
             }
         // métodos sobrecargados para obtener
             public TVH getTVH(int i){
                 return a.get(i);
             }
             public TVH getTVH(){ return a.get(0); }
         // métodos no sobrecargados
             public int getN(){ return a.size();}
             public TVH busca(String serie){
                 for(int i=0; i<getN(); i++){
                     if(getTVH(i).getSerie().equals(serie))
                         return getTVH(i);
                 }
                 return null;
             }
         // métodos sobrecargados para eliminar
            public void elimina(int i){
                 a.remove(i);
             }
             public void elimina(String serie){
                 if(busca(serie)!=null)
                     a.remove(busca(serie));
             }
             public void elimina(TVH t){
                 a.remove(t);
             }
         }


         Considere siguiente GUI




         Declare y cree un objeto de la clase ArregloTVH
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

         Programe la acción de los botones utilizando la funcionalidad sobrecargada.



Ejemplo 2:

Considere la existencia de una clase de nombre PersonaH desarrollada
anteriormente, en el proyecto p09e02 y diseñe una nueva clase administradora de
nombre ArregloPersonasH. Considere métodos adicionales sobrecargados para
flexibilizar el uso de la clase administradora.


Considere el siguiente diseño de GUI




Programe la acción de los botones utilizando la funcionalidad sobrecargada.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA


                                                             SEMANA 11
                                           EVALUACION
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA


                                                                           SEMANA 12
                                             HERENCIA


                                Herencia con archivos de texto.

Hasta ahora, la clase ArrayList nos ha dado 2 ventajas inobjetables: tamaño ilimitado
y funcionalidad que reducen nuestro código. Sin embargo, todo lo que se guarda en el
objeto ArrayList permanece en memoria sólo mientras se esté ejecutando el
programa, si lo ejecutamos nuevamente, tendremos que ingresar todos los datos
nuevamente!.

Afortunadamente éste problema se resuelve utilizando archivos de texto para guardar
permanentemente los datos en el disco.

Tendremos que rediseñan nuestras clases para poder guardar la información en un
archivo?. La respuesta es NO. Entonces cómo hacemos?, La respuesta es: aplicando
HERENCIA. Si, vamos a tomar como clase padre a una clase administradora,
heredamos toda su funcionalidad y a la clase hija le agregamos la funcionalidad que
permita grabar en el archivo y leer desde el archivo.

Antes de aplicar dicha herencia, debemos reconocer las clases ya existentes que nos
van a facilitar operar en un archivo según el proceso que queramos.

Para leer los datos del archivo hacia el objeto ArrayList utilizaremos las siguientes
clases: FileReader, BufferedReader, StringTokenizer.

                             ArrayList

 Archivo de texto
                                                                   Lee una línea del archivo
                                                                   Descompone los datos
                                                                    individuales
                                                                   Crea nuevo objeto
                                                                   Lo guarda en el objeto
                                                                    ArrayList
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

Para grabar los datos en el archivo desde el objeto ArrayList utilizaremos las
siguientes clases: FileWriter, PrintWriter.




                             ArrayList

 Archivo de texto
                                                             Obtiene un objeto del
                                                              ArrayList
                                                             Concatena los datos en una
                                                              cadena
                                                             Lo guarda en el archivo




Ejemplo 1

Considere la existencia de una clase administradora de nombre ArregloTVH
desarrollada anteriormente. Aplique herencia para que en la clase hija se consideren
métodos para leer y para grabar en un archivo de texto.


         public class ArchivoTVH extends ArregloTVH{
                 // atributos protegidos
             protected String nombre;

              // constructor
              public ArchivoTVH(String nombre){
                super();
                this.nombre=nombre;
                lee();
              }
              // métodos que operan un archivo de texto
              public void lee(){
                try{
                       FileReader fr = new FileReader(nombre);
                       BufferedReader br = new BufferedReader(fr);
                       String linea=br.readLine();
                       while(linea != null){
                              StringTokenizer st = new StringTokenizer(linea,"/");
                              String serie=st.nextToken();
                              int marca=Integer.parseInt(st.nextToken());
                              int tamaño=Integer.parseInt(st.nextToken());
                              double precio=Double.parseDouble(st.nextToken());
                              int origen=Integer.parseInt(st.nextToken());
                              int tecnologia=Integer.parseInt(st.nextToken());
                              agrega(serie,marca,tamaño,precio,origen,tecnologia);
                              linea= br.readLine();
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

                          }
                          br.close();
              }catch(Exception ex){ }

         }
         public void graba(){
               try{
                      FileWriter fw = new FileWriter(nombre);
                      PrintWriter pw= new PrintWriter(fw);
                      for(int i=0; i<getN(); i++){
                             TVH t =getTVH(i);
                             pw.println(t.getSerie()+"/"+
                                         t.getMarca()+"/"+
                                         t.getTamaño()+"/"+
                                         t.getPrecio()+"/"+
                                         t.getOrigen()+"/"+
                                         t.getTecnologia());
                      }
                      pw.close();
         }catch(Exception ex){}
         }
         }// fin de la clase
Considere el mismo diseño de GUI




Declare y cree un objeto de la clase ArchivoTVH en la clase de la GUI

La grabación de datos debe hacerse en cada botón que lo requiera.

Programe la acción de los botones.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

Ejemplo 2

Considere la existencia de una clase administradora de nombre ArregloPersonasH
desarrollada anteriormente. Aplique herencia para que en la clase hija se consideren
métodos para leer y para grabar en un archivo de texto.
Considere el mismo diseño de GUI




Declare y cree un objeto de la clase ArchivoTVH en la clase de la GUI

La grabación de datos debe hacerse en cada botón que lo requiera.

Programe la acción de los botones.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA


                                                                      SEMANA 13
                                         POLIMORFISMO
                                 Clases Abstractas. Casting

Polimorfismo

Es una de las características fundamentales para cualquier lenguaje orientado a
Objetos, La derivación de su significado: Poli = Multiple, morfismo= Formas , implica
que Objetos de la misma clase pueden tomar diversas formas de comportamiento.




El poder manipular un Objeto como si éste fuera de un tipo genérico otorga mayor
flexibilidad al momento de programar con Objetos. Observe el siguiente fragmento de
código:

           Figura a = new Circulo();
            Figura b = new Triangulo();



Los objetos a y b siendo de la misma clase Figura, se comportan como clases
diferentes: Circulo y Triángulo.

Clases Abstractas.
Son clases Padre donde se consideran métodos que aún no se conoce su desarrollo.
Recién se conocerá en alguna clase Hija. A éstos métodos se les conoce como
métodos abstractos y utilizan la palabra reservada abstract para su identificación.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

Cuando una Clase Padre contiene por lo menos un método abstracto se le conoce
como Clase Abstracta y también debe estar precedía por la palabra reservada
abstract.

Estas clases pueden tener además métodos no abstractos que invoquen a métodos
abstractos si lo necesitan para definir un comportamiento. Sin embargo, no se puede
instanciar objetos invocando al constructor de la clase base abstracta.

Las clases Hija deben desarrollar todos los métodos abstractos de la clase Padre.
Además, la clase Hija puede redefinir cualquier método de la clase Padre, con el
mismo nombre. Incluso pueden utilizar la palabra reservada super para referirse a
cualquier método del mismo nombre que esté definido en la clase Padre.

En el funcionamiento del polimorfismo se puede identificar el concepto de “enlace
tardío” que consiste en que recién se conocerá el método a ejecutar en el momento de
la ejecución, más no en la compilación.

Uso de "Casting"

El término "Casting" viene de la palabra "Cast" que significa Molde, por lo que el
termino literal es Hacer un Molde. En Polimorfismo se lleva a cabo este proceso de
"Casting" implícitamente, una Guitarra se coloca en el molde de un Instrumento, un
Triangulo en el molde de una Figura. Sin embargo, en ciertas ocasiones se requiere
realizar un tipo de "Casting" que no es considerado seguro en términos
computacionales.

Anteriormente se mencionó que el "Casting" llevado a cabo con Polimorfismo es
implícito, esto se debe a que no se requiere de sintaxis especial, simplemente se
convierte una Guitarra a un Instrumento. Sin embargo, para llevar una transformación
en sentido opuesto se requiere de sintaxis adicional para mantener la seguridad de
transformación; analicemos: mientras se puede asegurar que un Triangulo es una
Figura ("Up-Casting"), una Figura no necesariamente es un Triangulo, claro está que
lo puede ser, pero en Java se requiere definir explícitamente esta operación ("Down-
Casting").
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

Ejemplo 1

Diseñe una clase abstracta de nombre Figura que tenga un atributo protegido para el nombre
de la figura, métodos get-set, métodos abstractos para el area() y el perimetro() y un método no
abstracto que retorne la información correspondiente al nombre, area y perímetro de cualquier
figura.

Luego diseñe una clase hija de nombre Circulo que herede a la clase Figura que tenga un
atributo par a el radio, constructor , métodos get-set y desarrollo de los métodos abstractos de
la clase padre.

También diseñe una clase hija de nombre Cuadrado que herede a la clase Figura que tenga
un atributo para el lado, constructor, métodos get-set, y desarrollo de los métodos abstractos
de la clase padre.

Finalmente, diseñe una clase de nombre PanelPrincipal con la interface necesaria para crear
obejtos de diferente figura.

Diseño de la clase abstracta Figura:
public abstract class Figura{
       protected String nombre;
      public Figura(String nombre){
            this.nombre=nombre;
      }
       public abstract double area();
       public abstract double perimetro();
       public String info(){
              return "Figurat: "+nombre+"n"+
                    "Areat: "+ area()+"n"+
                    "Perímetrot: "+perimetro();
        }
}
Diseño de la clase Circulo:
public class Circulo extends Figura{
       protected double radio;
       public Circulo(double radio){
              super("Circulo");
              this.radio = radio;
        }
       public double area(){ return Math.PI * radio * radio;}
       public double perimetro(){ return 2 * Math.PI * radio;}
}
Diseño de la clase Cuadrado
public class Cuadrado extends Figura{
       protected double lado;
       public Cuadrado(double lado){
              super("Cuadrado");
              this.lado = lado;
        }
       public double area(){ return lado * lado;}
       public double perimetro(){ return 4*lado;}
}
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

Programación del botón Nuevo Circulo:{
       Figura a = new Circulo(leeRadio());

        lista(a);

}

Programación del botón Nuevo Cuadrado:{

      Figura b = new Cuadrado(leeLado());

        lista(b);

}

public void lista(Figura f){

        imprime(f.info());

}

Observe el parámetro del método lista() y compruebe la compatibilidad entre la
invocación del método y su desarrollo.

Ejemplo 2

Diseñe una clase abstracta de nombre Empleado que tenga atributos protegidos para el
nombre, apellidos, dni, métodos get-set, métodos abstractos para ingresos(), bonificaciones(),
descuentos(), un método no abstracto que retorne el sueldoNeto() y otro método no abstracto
que retorne la información correspondiente al nombre, apellidos, dni, ingresos, bonificaciones,
descuentos, sueldo neto de cualquier empleado.

Luego, diseñe una clase hija de nombre EmpleadoVendedor que tenga atributos para monto
vendido y porcentaje de comisión, constructor, métodos get-set, desarrollo de métodos
abstractos.

Luego, diseñe una clase hija de nombre EmpleadoPermanente que tenga atributos para
sueldo basico y afiliación (afp ó snp), constructor, métodos get-set, desarrollo de métodos
abstractos.

Finalmente, diseñe una clase de nombre PanelPrincipal con la interface necesaria para crear
objetos de diferente tipo de empleado.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA


                                                                          SEMANA 14
                                         POLIMORFISMO

                          Arreglo de Objetos Polimórficos
Estos arreglos se caracterizan porque soportan cualquier objeto de las clases
descendientes de una jerarquía de clases, teniendo como clase Padre a una clase
abstracta.

Ejemplo 1

Considere la existencia de la clase abstracta de nombre Figura, las clases hijas Cuadrado y
Circulo.

Diseñe una clase administradora de nombre ArregloFiguras que permita la administración de
objetos de tipo Cuadrado y/o Circulo a la vez, utilizando un objeto de la clase ArrayList.


public class ArregloFiguras{
       protected ArrayList <Figura> a;

         public ArregloFiguras(){
                a = new ArrayList<Figura>();
        }
         // métodos de administración
         public void agrega(Figura f){
                a.add(f);
         }
         public Figura getFigura(int i){
                Return a.get(i);
         }
         public int getN(){ return a.size();}
         public void elimina(int i){
                a.remove(i);
         }
         //... complete métodos adicionales
}

Diseñe una clase de interfaz de nombre PanelPrincipal donde cree un objeto de la clase
ArregloFiguras, como atributo de la clase.


protected ArregloFiguras af = new ArregloFiguras();
Programación del botón Nuevo Circulo:{
       Figura a = new Circulo(leeRadio());
       lista(a);
       af.agrega(a); // agrega un objeto Circulo
}

Programación del botón Nuevo Cuadrado:{
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

      Figura b = new Cuadrado(leeLado());
        lista(b);
        af.agrega(b); // agrega un objeto Cuadrado
}
public void lista(Figura f){
       imprime(f.info());
}
Programación del botón Lista:{
       for(int i=0; i<af.getN(); i++){
              Figura f=af.getFigura(i);
              if (f instanceof Circulo)
                     imprime(“Circulo: “+f.info());
              else
                     imprime(“Cuadrado: “+f.info());

        }
}

La palabra reservada instanceof permite identificar el tipo personalizado de un objeto genérico.
Esto permite darle un nombre diferente antes de mostrar su información que es un método
común.

Ejemplo 2

Diseñe una clase abstracta de nombre Empleado que tenga atributos protegidos para el
nombre, apellidos, dni, métodos get-set, métodos abstractos para ingresos(), bonificaciones(),
descuentos(), un método no abstracto que retorne el sueldoNeto() y otro método no abstracto
que retorne la información correspondiente al nombre, apellidos, dni, ingresos, bonificaciones,
descuentos, sueldo neto de cualquier empleado.

Luego, diseñe una clase hija de nombre EmpleadoVendedor que tenga atributos para monto
vendido y porcentaje de comisión, constructor, métodos get-set, desarrollo de métodos
abstractos.

Luego, diseñe una clase hija de nombre EmpleadoPermanente que tenga atributos para
sueldo basico y afiliación (afp ó snp), constructor, métodos get-set, desarrollo de métodos
abstractos.

Luego, diseñe una clase administradora de nombre ArregloEmpleados que tenga como
atributo un objeto de la clase ArrayList . Considere los métodos de administración necesarios
para guardar objetos polimórficos de cualquiera de las clases hijas.

Finalmente, diseñe una clase de nombre PanelPrincipal con la interface necesaria para crear
objetos de diferente tipo de empleado y administrarlos en un objeto de la clase
ArregloEmpleados.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA




Ejemplo 3

Aplique herencia en el ejemplo1 y desarrolle la clase ArchivoFiguras que permita grabar la
información de las figuras en un archivo de texto.



Ejemplo 4

Aplique herencia en el ejemplo2 y desarrolle la clase ArchivoEmpleados que permita grabar la
información de los empleados en un archivo de texto.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA


                                                             SEMANA 15
                                           EVALUACION
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA


                                                             SEMANA 16




                            EVALUACION INTEGRAL
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA


                                                                           SEMANA 01
                                  GUIA DE LABORATORIO 1

    Entorno de desarrollo visual. Diseño de GUI. Distribuciones.
Ejercicio 1

Cree un proyecto nuevo de nombre P01E01. Cree un paquete nuevo de nombre
p01e01. Diseñe una clase de nombre Producto con los siguientes atributos privados:
código (cadena), descripción (cadena), precio (real) y con los métodos públicos
get/set. Diseñe la GUI en un Panel de nombre PanelPrincipal para el ingreso de los
datos con el siguiente diseño:




Cada vez que hace clic en el botón Nuevo debe crear un objeto de la clase Producto
y mostrar la información de sus atributos. Cada vez que hace clic en el botón Borrar
debe borrar la información del área de texto, de las cajas de texto y enfocar el ingreso
en la caja de texto del código.



                                          PanelPrincipal con distribución BorderLayout.

                                          En el norte colocamos otro panel (jPanel1) con
                                          distribución BoxLayout donde colocamos las
                                          etiquetas y las cajas de texto.

                                          En el sur colocamos otro panel (jPanel2) con
                                          distribución FlowLayout donde colocamos los
                                          botones.

                                          En el centro colocamos un área de texto con su
                                          propiedad editable desmarcada.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

Observe la distribución y nombres de los objetos.

Damos doble clic en el botón Nuevo para programar su acción:
         private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) {
                 Producto nuevo = new Producto();
                 nuevo.setCodigo(leeCodigo());
                 nuevo.setDescripcion(leeDescripcion());
                 nuevo.setPrecio(leePrecio());
                 lista(nuevo);
         }

        private String leeCodigo(){return txtCodigo.getText();}
        private String leeDescripcion(){return txtDescripcion.getText();}
        private double leePrecio(){return Double.parseDouble(txtPrecio.getText());}

         private void lista(Producto p){
                 imprime("Codigot:"+p.getCodigo());
                 imprime("Descripciont:"+p.getDescripcion());
                 imprime("Preciot:"+p.getPrecio());
         }

         private void imprime(String s){
                 txtSalida.append(s+"n");
         }
Regresamos al diseño y hacemos doble clic en el botón Borrar para programar su
acción:
         private void btnBorrarActionPerformed(java.awt.event.ActionEvent evt) {
                 txtSalida.setText("");
                 txtCodigo.setText("");
                 txtDescripcion.setText("");
                 txtPrecio.setText("");
                 txtCodigo.requestFocus();
         }
Desarrolle la clase de aplicación de nombre Principal en un JFrame. Coloque
distribución BorderLayout, vaya a la ficha Source y escriba lo que está en negrita:
         public class Principal extends javax.swing.JFrame {

             public Principal() {
                 initComponents();
                 add(new PanelPrincipal());
                 setSize(600,200);
             }
Ejecute su aplicación.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

Ejercicio 2

Cree un proyecto nuevo de nombre P01E02. Cree un paquete nuevo de nombre
p01e02. Diseñe una clase de nombre Persona con los siguientes atributos privados:
nombres (cadena), apellidos (cadena), edad(entero), peso(real) y con los métodos
get/set. Diseñe la GUI en un Panel de nombre PanelPrincipal para el ingreso de los
datos con el siguiente diseño:




Cada vez que hace clic en el botón Nuevo debe crear un objeto de la clase Persona y
mostrar la información de sus atributos. Cada vez que hace clic en el botón Borrar
debe borrar la información del área de texto, de las cajas de texto y enfocar el ingreso
en la caja de texto de nombres.



                                                   PanelPrincipal        con        distribución
                                                   BorderLayout.

                                                   En el norte colocamos otro panel (jPanel1)
                                                   con    distribución   BoxLayout        donde
                                                   colocamos las etiquetas y las cajas de texto.



                                                   En el sur colocamos otro panel (jPanel2)
                                                   con   distribución   FlowLayout   donde
                                                   colocamos los botones.



                                                   En el centro colocamos un área de texto con
                                                   su propiedad editable desmarcada.



         Observe la distribución y los nombres de los objetos.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

Doble clic en el botón Nuevo para programar su acción. (Revise la programación de
éste botón en el ejercicio anterior)

Regresa al diseño y doble clic en el botón Borrar para programar su acción. (Revise la
programación de éste botón en el ejercicio anterior)

Desarrolle la clase de aplicación de nombre Principal en un JFrame. Coloque
distribución BorderLayout, vaya a la ficha Source y escriba lo que está en negrita:
         public class Principal extends javax.swing.JFrame {
             public Principal() {
                 initComponents();
                 add(new PanelPrincipal());
                 setSize(600,200);
             }


Ejecute su aplicación.




Ejercicio 3

Cree un proyecto nuevo de nombre P01E03. Cree un paquete nuevo de nombre
p01e03. Diseñe una clase de nombre TV con los siguientes atributos privados: serie
(cadena), marca (entero), tamaño en pulgadas(entero), precio (real) y con los métodos
get/set, con un método adicional que devuelve el precio en soles dado el tipo de
cambio como parámetro, y con un método adicional que retorne el nombre de la
marca. Considere las siguientes marcas: Sony, LG, Samsung, Panasonic, otro. Diseñe
la GUI en un Panel de nombre PanelPrincipal para el ingreso de los datos con el
siguiente diseño:
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA




Cada vez que hace clic en el botón Nuevo debe crear un objeto de la clase TV y
mostrar la información de sus atributos además de su precio en soles considerando un
tipo de cambio actual. Cada vez que hace clic en el botón Borrar debe borrar la
información del área de texto, de las cajas de texto y enfocar el ingreso en la caja de
texto de serie.

                                       PanelPrincipal con distribución BorderLayout.

                                       En el norte colocamos otro panel (jPanel1) con
                                       distribución BoxLayout donde colocamos las cajas de
                                       texto y el comboBox. Utilice la propiedad Border para
                                       colocar título en las cajas de texto y utilice la
                                       propiedad model para llenar el comboBox.

                                       En el sur colocamos otro panel (jPanel2) con
                                       distribución FlowLayout donde colocamos los
                                       botones.

                                       En el centro colocamos un área de texto con su
                                       propiedad editable desmarcada.



Observe la distribución y los nombres de los objetos.

Doble clic en el botón Nuevo para programar su acción:
             private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) {
                 TV nuevo = new TV();
                 nuevo.setSerie(leeSerie());
                 nuevo.setMarca(leeMarca());
                 nuevo.setTamaño(leeTamaño());
                 nuevo.setPrecio(leePrecio());
                 lista(nuevo);
             }
             private String leeSerie(){return txtSerie.getText();}
             private int leeMarca(){return cboMarca.getSelectedIndex();}
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

             private int leeTamaño(){return Integer.parseInt(txtTamaño.getText());}
             private double leePrecio(){return Double.parseDouble(txtPrecio.getText());}

             private void lista(TV t){
                 imprime("Nro. Seriet:"+t.getSerie());
                 imprime("Marcat:"+t.nombreMarca());
                 imprime("Tamañot:"+t.getTamaño());
                 imprime("Precio us$t:"+t.getPrecio());
                 imprime("Precio S/.t:"+t.precioSoles(2.85));
                 imprime("----------------------------------");
             }

             private void imprime(String s){
                 txtSalida.append(s+"n");
             }
Regrese al diseño y doble clic en el botón Borrar para programar su acción:
             private void btnBorrarActionPerformed(java.awt.event.ActionEvent evt) {
                 txtSalida.setText("");
                 txtSerie.setText("");
                 cboMarca.setSelectedIndex(0);
                 txtTamaño.setText("");
                 txtPrecio.setText("");
                 txtSerie.requestFocus();
             }
Desarrolle la clase de aplicación de nombre Principal en un JFrame. Coloque
distribución BorderLayout, vaya a la ficha Source y escriba lo que está en negrita:
         public class Principal extends javax.swing.JFrame {
             public Principal() {
                 initComponents();
                 add(new PanelPrincipal());
                 setSize(600,300);
             }


Ejecute su aplicación.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

Ejercicio 4

Cree un proyecto nuevo de nombre P01E04. Cree un paquete nuevo de nombre
p01e04. Diseñe una clase de nombre Fecha con los siguientes atributos privados:
dia(entero), mes(entero), año(entero) y con los métodos get/set. Diseñe una clase de
nombre DNI con los siguientes atributos privados: numero(cadena), dueño(Persona),
fecha de emisión (Fecha), fecha de caducidad(Fecha) y con los métodos get/set.
Diseñe la GUI en un Panel de nombre PanelPrincipal para el ingreso de los datos de
un DNI. Cada vez que hace clic en el botón Nuevo debe crear un objeto de la clase
DNI y mostrar la información de sus atributos. Desarrolle la clase de aplicación de
nombre Principal en un JFrame. Ejecute su aplicación.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA


                                                                  SEMANA 02
                                  GUIA DE LABORATORIO 2

            Creación de objetos desde una GUI. Constructores,
                                       encapsulamiento
Ejercicio 1

Cree un proyecto nuevo de nombre P02E01. Cree un paquete nuevo de nombre
p02e01. Diseñe una clase de nombre Producto con los siguientes atributos privados:
código (cadena), descripción (cadena), precio (real); con un constructor y con los
métodos públicos get/set.


Clic derecho en el paquete creado, elegimos New Java Class y escribimos el nombre
Producto y escribimos lo siguiente:




Ahora, vamos a utilizar NetBeans para que genere, automáticamente, los métodos
get/set. Clic derecho en la clase creada, elegimos Refactor, Encapsulate Fields y
nos aparece la siguiente ventana donde seleccionamos todo ( Select All)
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA




En Javadoc elegimos none para evitar los comentarios que genera NetBeans y por
último hacemos clic en el botón Refactor. Nuestra clase queda así:
         public class Producto {
             // atributos privados
             private String codigo, descripcion;
             private double precio;

             // constructor
             public Producto(String codigo, String descripcion, double precio){
                 this.codigo=codigo;
                 this.descripcion=descripcion;
                 this.precio=precio;
             }

             public String getCodigo() {
                 return codigo;
             }
             public void setCodigo(String codigo) {
                 this.codigo = codigo;
             }
             public String getDescripcion() {
                 return descripcion;
             }
             public void setDescripcion(String descripcion) {
                 this.descripcion = descripcion;
             }
             public double getPrecio() {
                 return precio;
             }
             public void setPrecio(double precio) {
                 this.precio = precio;
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

             }

         }
Observe y analice el desarrollo del constructor y el uso de la palabra reservada this.
Diseñe la GUI en un Panel de nombre PanelPrincipal para el ingreso de los datos con
el siguiente diseño:




Cada vez que hace clic en el botón Nuevo debe crear un objeto de la clase Producto
y mostrar la información de sus atributos. Cada vez que hace clic en el botón Borrar
debe borrar la información del área de texto, de las cajas de texto y enfocar el ingreso
en la caja de texto del código.

Puede copiar y pegar el diseño del proyecto P0101 del laboratorio anterior o hacer
nuevamente el diseño con la siguiente referencia:

PanelPrincipal con distribución BorderLayout.

En el norte colocamos otro panel (jPanel1) con distribución BoxLayout donde
colocamos las etiquetas y las cajas de texto.

En el sur colocamos otro panel (jPanel2) con distribución FlowLayout donde
colocamos los botones.

En el centro colocamos un área de texto con su propiedad editable desmarcada.

Doble clic en el botón Nuevo para programar su acción:
             private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) {
                 Producto nuevo = new Producto(leeCodigo(),leeDescripcion(),leePrecio());
                 lista(nuevo);
             }

             private String leeCodigo(){return txtCodigo.getText();}
             private String leeDescripcion(){return txtDescripcion.getText();}
             private double leePrecio(){return Double.parseDouble(txtPrecio.getText());}

             private void lista(Producto p){
                 imprime("Codigot:"+p.getCodigo());
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

                  imprime("Descripciont:"+p.getDescripcion());
                  imprime("Preciot:"+p.getPrecio());
             }

             private void imprime(String s){
                 txtSalida.append(s+"n");
             }


Observe y analice la llamada al constructor desarrollado.

Regresamos al diseño y hacemos doble clic en el botón Borrar para programar su
acción:
             private void btnBorrarActionPerformed(java.awt.event.ActionEvent evt) {
                 txtSalida.setText("");
                 txtCodigo.setText("");
                 txtDescripcion.setText("");
                 txtPrecio.setText("");
                 txtCodigo.requestFocus();
             }
Desarrolle la clase de aplicación de nombre Principal en un JFrame. Coloque
distribución BorderLayout, vaya a la ficha Source y escriba lo que está en negrita:
         public class Principal extends javax.swing.JFrame {
             public Principal() {
                 initComponents();
                 add(new PanelPrincipal());
                 setSize(600,200);
         }
Ejecute su aplicación.




También puede copiar y pegar la clase Principal desde el proyecto P0101 del
laboratorio anterior.

Identifique el constructor de las clases Principal y PanelPrincipal.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

Ejercicio 2

Cree un proyecto nuevo de nombre P02E02. Cree un paquete nuevo de nombre
p02e02. Diseñe una clase de nombre Persona con los siguientes atributos privados:
nombres (cadena), apellidos (cadena), edad(entero), peso(real); con un constructor y
con los métodos get/set.
Clic derecho en el paquete creado, elegimos New Java Class y escribimos el nombre
Persona y escribimos lo siguiente:




Ahora, vamos a utilizar NetBeans para que genere, automáticamente, los métodos
get/set. Clic derecho en la clase creada, elegimos Refactor, Encapsulate Fields y
nos aparece la siguiente ventana donde seleccionamos todo ( Select All)
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

En Javadoc elegimos none para evitar los comentarios que genera NetBeans y por
último hacemos clic en el botón Refactor. Los métodos generados son:
             public String getNombres() {
                 return nombres;
             }
             public void setNombres(String nombres) {
                 this.nombres = nombres;
             }
             public String getApellidos() {
                 return apellidos;
             }
             public void setApellidos(String apellidos) {
                 this.apellidos = apellidos;
             }
             public int getEdad() {
                 return edad;
             }
             public void setEdad(int edad) {
                 this.edad = edad;
             }
             public double getPeso() {
                 return peso;
             }
             public void setPeso(double peso) {
                 this.peso = peso;
             }
Observe y analice el desarrollo del constructor y el uso de la palabra reservada this.
Diseñe la GUI en un Panel de nombre PanelPrincipal para el ingreso de los datos con
el siguiente diseño:




Cada vez que hace clic en el botón Nuevo debe crear un objeto de la clase Persona y
mostrar la información de sus atributos. Cada vez que hace clic en el botón Borrar
debe borrar la información del área de texto, de las cajas de texto y enfocar el ingreso
en la caja de texto de nombres.

Puede copiar y pegar el diseño del proyecto P0102 del laboratorio anterior o hacer
nuevamente el diseño con la siguiente referencia:

PanelPrincipal con distribución BorderLayout.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

En el norte colocamos otro panel (jPanel1) con distribución BoxLayout donde
colocamos las etiquetas y las cajas de texto.

En el sur colocamos otro panel (jPanel2) con distribución FlowLayout donde
colocamos los botones.

En el centro colocamos un área de texto con su propiedad editable desmarcada.

Doble clic en el botón Nuevo para programar su acción. (Revise la programación de
éste botón en el ejercicio anterior)

Regresa al diseño y doble clic en el botón Borrar para programar su acción. (Revise la
programación de éste botón en el ejercicio anterior)

Desarrolle la clase de aplicación de nombre Principal en un JFrame. Coloque
distribución BorderLayout, vaya a la ficha Source y escriba lo que está en negrita:
         public class Principal extends javax.swing.JFrame {
             public Principal() {
                 initComponents();
                 add(new PanelPrincipal());
                 setSize(600,200);
             }
También puede copiar y pegar la clase Principal desde el proyecto P0102 del laboratorio
anterior. Esta clase es la misma, no tiene cambios.
Identifique el constructor de las clases Principal y PanelPrincipal.

Ejecute su aplicación.
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

Ejercicio 3

Cree un proyecto nuevo de nombre P02E03. Cree un paquete nuevo de nombre
p02e03. Diseñe una clase de nombre TV con los siguientes atributos privados: serie
(cadena), marca (entero), tamaño en pulgadas(entero), precio (real); con un
constructor, con los métodos get/set, con un método adicional que devuelve el precio
en soles dado el tipo de cambio como parámetro, y con un método adicional que
retorne el nombre de la marca. Considere las siguientes marcas: Sony, LG, Samsung,
Panasonic, otro.
Clic derecho en el paquete creado, elegimos New Java Class y escribimos el nombre
TV y escribimos lo siguiente:




Ahora, utilcer NetBeans para que genere, automáticamente, los métodos get/set. Clic
derecho en la clase creada, elegimos Refactor, Encapsulate Fields y nos aparece la
siguiente ventana donde seleccionamos todo ( Select All).

Antes de la última llave de cierre escribimos los métodos adicionales solicitados:
               // metodos adicionales
             public double precioSoles(double tc){
                 return precio*tc;
             }
             public String nombreMarca(){
                 switch(marca){
                     case 1: return "Sony";
                     case 2: return "LG";
                     case 3: return "Samsung";
                     case 4: return "Panasonic";
                     default: return "Otro";
                 }
ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA
DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA

             }
         }// última llave de cierre de la clase


Observe y analice el desarrollo del constructor y el uso de la palabra reservada this.

Diseñe la GUI en un Panel de nombre PanelPrincipal para el ingreso de los datos con
el siguiente diseño:




Cada vez que hace clic en el botón Nuevo debe crear un objeto de la clase TV y
mostrar la información de sus atributos además de su precio en soles considerando un
tipo de cambio actual. Cada vez que hace clic en el botón Borrar debe borrar la
información del área de texto, de las cajas de texto y enfocar el ingreso en la caja de
texto de serie.

Puede copiar y pegar el diseño del proyecto P0103 del laboratorio anterior o hacer
nuevamente el diseño con la siguiente referencia:

PanelPrincipal con distribución BorderLayout.

En el norte colocamos otro panel (jPanel1) con distribución BoxLayout donde
colocamos las cajas de texto y el comboBox. Utilice la propiedad Border para colocar
título en las cajas de texto y utilice la propiedad model para llenar el comboBox.

En el sur colocamos otro panel (jPanel2) con distribución FlowLayout donde
colocamos los botones.

En el centro colocamos un área de texto con su propiedad editable desmarcada.

Doble clic en el botón Nuevo para programar su acción:
             private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) {
                 TV nuevo = new TV(leeSerie(),leeMarca(),leeTamaño(),leePrecio());
                 lista(nuevo);
             }
             private String leeSerie(){return txtSerie.getText();}
             private int leeMarca(){return cboMarca.getSelectedIndex();}
             private int leeTamaño(){return Integer.parseInt(txtTamaño.getText());}
             private double leePrecio(){return Double.parseDouble(txtPrecio.getText());}
             private void lista(TV t){
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez
Modulo Algorítmica III - Julio Vasquez

Más contenido relacionado

La actualidad más candente

Ejercicios resueltos de java
Ejercicios resueltos de javaEjercicios resueltos de java
Ejercicios resueltos de javaFaral TF
 
Ejercicios resueltos en el Laboratorio de estructuras struct registros
Ejercicios resueltos en el Laboratorio de estructuras struct registrosEjercicios resueltos en el Laboratorio de estructuras struct registros
Ejercicios resueltos en el Laboratorio de estructuras struct registrosrasave
 
Ordenamiento burbuja
Ordenamiento burbuja Ordenamiento burbuja
Ordenamiento burbuja luis cedeño
 
Estructura de datos : Cola
Estructura de datos : ColaEstructura de datos : Cola
Estructura de datos : ColaEmerson Garay
 
Bibliotecas o libreria de c++
Bibliotecas o libreria de c++Bibliotecas o libreria de c++
Bibliotecas o libreria de c++Idalia Tristan
 
Fundamentos de programación en scilab
Fundamentos de programación en scilabFundamentos de programación en scilab
Fundamentos de programación en scilabGabriel Romero
 
Fundamentos de Programación - Unidad V: Modularidad
Fundamentos de Programación - Unidad V: ModularidadFundamentos de Programación - Unidad V: Modularidad
Fundamentos de Programación - Unidad V: ModularidadJosé Antonio Sandoval Acosta
 
Ejercicios resueltos de punteros 12a15
Ejercicios resueltos de punteros 12a15Ejercicios resueltos de punteros 12a15
Ejercicios resueltos de punteros 12a15rasave
 
Programacion orientada a objetos - unidad 3 herencia
Programacion orientada a objetos - unidad 3 herenciaProgramacion orientada a objetos - unidad 3 herencia
Programacion orientada a objetos - unidad 3 herenciaJosé Antonio Sandoval Acosta
 
Modulo 1: Análisis Matemático de la Optimización
Modulo 1: Análisis Matemático de la OptimizaciónModulo 1: Análisis Matemático de la Optimización
Modulo 1: Análisis Matemático de la OptimizaciónHoracio Santander
 
Taller: Prueba Unitaria con JUnit en NetBeans
Taller: Prueba Unitaria con JUnit en NetBeansTaller: Prueba Unitaria con JUnit en NetBeans
Taller: Prueba Unitaria con JUnit en NetBeansEmerson Garay
 
INSTANCIAS Y CONSTRUCTORES EN JAVA
INSTANCIAS Y CONSTRUCTORES EN JAVAINSTANCIAS Y CONSTRUCTORES EN JAVA
INSTANCIAS Y CONSTRUCTORES EN JAVAmellcv
 
Constructores en Java
Constructores en JavaConstructores en Java
Constructores en JavaUCE
 

La actualidad más candente (20)

Programa de Pila Estática
Programa de Pila EstáticaPrograma de Pila Estática
Programa de Pila Estática
 
Ejercicios resueltos de java
Ejercicios resueltos de javaEjercicios resueltos de java
Ejercicios resueltos de java
 
Estructuras en c++
Estructuras en c++Estructuras en c++
Estructuras en c++
 
Ejercicios resueltos en el Laboratorio de estructuras struct registros
Ejercicios resueltos en el Laboratorio de estructuras struct registrosEjercicios resueltos en el Laboratorio de estructuras struct registros
Ejercicios resueltos en el Laboratorio de estructuras struct registros
 
Ordenamiento burbuja
Ordenamiento burbuja Ordenamiento burbuja
Ordenamiento burbuja
 
Clases y objetos en Java
Clases y objetos en JavaClases y objetos en Java
Clases y objetos en Java
 
Estructura de datos : Cola
Estructura de datos : ColaEstructura de datos : Cola
Estructura de datos : Cola
 
Ficheros C++
Ficheros C++Ficheros C++
Ficheros C++
 
Bibliotecas o libreria de c++
Bibliotecas o libreria de c++Bibliotecas o libreria de c++
Bibliotecas o libreria de c++
 
Fundamentos de programación en scilab
Fundamentos de programación en scilabFundamentos de programación en scilab
Fundamentos de programación en scilab
 
Fundamentos de Programación - Unidad V: Modularidad
Fundamentos de Programación - Unidad V: ModularidadFundamentos de Programación - Unidad V: Modularidad
Fundamentos de Programación - Unidad V: Modularidad
 
Ejercicios resueltos de punteros 12a15
Ejercicios resueltos de punteros 12a15Ejercicios resueltos de punteros 12a15
Ejercicios resueltos de punteros 12a15
 
Programacion orientada a objetos - unidad 3 herencia
Programacion orientada a objetos - unidad 3 herenciaProgramacion orientada a objetos - unidad 3 herencia
Programacion orientada a objetos - unidad 3 herencia
 
Unidad 5 VARIABLES Y MÉTODOS ESTÁTICOS
Unidad 5 VARIABLES Y MÉTODOS ESTÁTICOSUnidad 5 VARIABLES Y MÉTODOS ESTÁTICOS
Unidad 5 VARIABLES Y MÉTODOS ESTÁTICOS
 
Modulo 1: Análisis Matemático de la Optimización
Modulo 1: Análisis Matemático de la OptimizaciónModulo 1: Análisis Matemático de la Optimización
Modulo 1: Análisis Matemático de la Optimización
 
Constructors and Destructors
Constructors and DestructorsConstructors and Destructors
Constructors and Destructors
 
Taller: Prueba Unitaria con JUnit en NetBeans
Taller: Prueba Unitaria con JUnit en NetBeansTaller: Prueba Unitaria con JUnit en NetBeans
Taller: Prueba Unitaria con JUnit en NetBeans
 
INSTANCIAS Y CONSTRUCTORES EN JAVA
INSTANCIAS Y CONSTRUCTORES EN JAVAINSTANCIAS Y CONSTRUCTORES EN JAVA
INSTANCIAS Y CONSTRUCTORES EN JAVA
 
Constructores en Java
Constructores en JavaConstructores en Java
Constructores en Java
 
LibreríAs De Java
LibreríAs De JavaLibreríAs De Java
LibreríAs De Java
 

Destacado (12)

8 02
8 028 02
8 02
 
Diagrama de Classe
Diagrama de ClasseDiagrama de Classe
Diagrama de Classe
 
Projeto de sistemas com UML - Parte 2
Projeto de sistemas com UML - Parte 2Projeto de sistemas com UML - Parte 2
Projeto de sistemas com UML - Parte 2
 
Aula 03 - Introdução aos Diagramas de Atividade
Aula 03 - Introdução aos Diagramas de AtividadeAula 03 - Introdução aos Diagramas de Atividade
Aula 03 - Introdução aos Diagramas de Atividade
 
Aula7 diagrama classes
Aula7 diagrama classesAula7 diagrama classes
Aula7 diagrama classes
 
Aula 7 diagramas_classes2
Aula 7 diagramas_classes2Aula 7 diagramas_classes2
Aula 7 diagramas_classes2
 
Diagrama de classes
Diagrama de classesDiagrama de classes
Diagrama de classes
 
Banco de Dados
Banco de DadosBanco de Dados
Banco de Dados
 
Diagrama de Atividades - UML
Diagrama de Atividades - UMLDiagrama de Atividades - UML
Diagrama de Atividades - UML
 
Aula diagrama de atividade 3º periodo uniao
Aula diagrama de atividade 3º periodo uniaoAula diagrama de atividade 3º periodo uniao
Aula diagrama de atividade 3º periodo uniao
 
Sesion 1 sistemas
Sesion 1 sistemasSesion 1 sistemas
Sesion 1 sistemas
 
Aula diagrama de classes
Aula diagrama de classesAula diagrama de classes
Aula diagrama de classes
 

Similar a Modulo Algorítmica III - Julio Vasquez

Propiedades De La Poo
Propiedades De La PooPropiedades De La Poo
Propiedades De La Pooda4
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetosjent46
 
Programación orientada a objetos con c++
Programación orientada a objetos con c++Programación orientada a objetos con c++
Programación orientada a objetos con c++Karime Hernández
 
Proyecto en android completado
Proyecto en android completadoProyecto en android completado
Proyecto en android completadoKai Exo
 
Programación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaProgramación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaAngel Vázquez Patiño
 
Framework .NET 3.5 07 Programación orientada a objetos
Framework .NET 3.5 07 Programación orientada a objetosFramework .NET 3.5 07 Programación orientada a objetos
Framework .NET 3.5 07 Programación orientada a objetosAntonio Palomares Sender
 
Clasesabstractaseinterfacesalexandraperez 121220190613-phpapp02
Clasesabstractaseinterfacesalexandraperez 121220190613-phpapp02Clasesabstractaseinterfacesalexandraperez 121220190613-phpapp02
Clasesabstractaseinterfacesalexandraperez 121220190613-phpapp02Kositha Jimhiz G
 
Memch clases lep ii
Memch   clases lep iiMemch   clases lep ii
Memch clases lep iidani Safres
 
Programación Orientada a Objetos - Unidad 2: clases y objetos
Programación Orientada a Objetos - Unidad 2: clases y objetosProgramación Orientada a Objetos - Unidad 2: clases y objetos
Programación Orientada a Objetos - Unidad 2: clases y objetosJosé Antonio Sandoval Acosta
 
Net1 oop vbnet
Net1 oop vbnetNet1 oop vbnet
Net1 oop vbnetjhordy2000
 
Clases abstractas e interfaces (AlexandraPerez)
Clases abstractas e interfaces (AlexandraPerez)Clases abstractas e interfaces (AlexandraPerez)
Clases abstractas e interfaces (AlexandraPerez)Alexandra Pérez
 
Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos en Java - Parte I 2015Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos en Java - Parte I 2015Renny Batista
 
Java2-Clases.ppt
Java2-Clases.pptJava2-Clases.ppt
Java2-Clases.ppterosslo
 
Poo 2009 u2_introd_a_la_poo_2
Poo 2009 u2_introd_a_la_poo_2Poo 2009 u2_introd_a_la_poo_2
Poo 2009 u2_introd_a_la_poo_2Axel
 
Programación orientada a objetos con c++ prev
Programación orientada a objetos con c++ prevProgramación orientada a objetos con c++ prev
Programación orientada a objetos con c++ prevjtk1
 

Similar a Modulo Algorítmica III - Julio Vasquez (20)

Propiedades De La Poo
Propiedades De La PooPropiedades De La Poo
Propiedades De La Poo
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetos
 
Programación orientada a objetos con c++
Programación orientada a objetos con c++Programación orientada a objetos con c++
Programación orientada a objetos con c++
 
Proyecto en android completado
Proyecto en android completadoProyecto en android completado
Proyecto en android completado
 
La Clase
La ClaseLa Clase
La Clase
 
Programación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaProgramación 3: Clases y objetos en Java
Programación 3: Clases y objetos en Java
 
Clase 2 poo java
Clase 2 poo javaClase 2 poo java
Clase 2 poo java
 
Framework .NET 3.5 07 Programación orientada a objetos
Framework .NET 3.5 07 Programación orientada a objetosFramework .NET 3.5 07 Programación orientada a objetos
Framework .NET 3.5 07 Programación orientada a objetos
 
Clase 2 Poo
Clase 2 PooClase 2 Poo
Clase 2 Poo
 
Clasesabstractaseinterfacesalexandraperez 121220190613-phpapp02
Clasesabstractaseinterfacesalexandraperez 121220190613-phpapp02Clasesabstractaseinterfacesalexandraperez 121220190613-phpapp02
Clasesabstractaseinterfacesalexandraperez 121220190613-phpapp02
 
Memch clases lep ii
Memch   clases lep iiMemch   clases lep ii
Memch clases lep ii
 
Conceptos basicos POO
Conceptos basicos POOConceptos basicos POO
Conceptos basicos POO
 
Programación Orientada a Objetos - Unidad 2: clases y objetos
Programación Orientada a Objetos - Unidad 2: clases y objetosProgramación Orientada a Objetos - Unidad 2: clases y objetos
Programación Orientada a Objetos - Unidad 2: clases y objetos
 
Net1 oop vbnet
Net1 oop vbnetNet1 oop vbnet
Net1 oop vbnet
 
Clases abstractas e interfaces (AlexandraPerez)
Clases abstractas e interfaces (AlexandraPerez)Clases abstractas e interfaces (AlexandraPerez)
Clases abstractas e interfaces (AlexandraPerez)
 
Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos en Java - Parte I 2015Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos en Java - Parte I 2015
 
Java2-Clases.ppt
Java2-Clases.pptJava2-Clases.ppt
Java2-Clases.ppt
 
Java2-Clases.ppt
Java2-Clases.pptJava2-Clases.ppt
Java2-Clases.ppt
 
Poo 2009 u2_introd_a_la_poo_2
Poo 2009 u2_introd_a_la_poo_2Poo 2009 u2_introd_a_la_poo_2
Poo 2009 u2_introd_a_la_poo_2
 
Programación orientada a objetos con c++ prev
Programación orientada a objetos con c++ prevProgramación orientada a objetos con c++ prev
Programación orientada a objetos con c++ prev
 

Modulo Algorítmica III - Julio Vasquez

  • 1. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA CONTENIDO 1. Diagrama de unidades de aprendizaje 2. Encapsulamiento 3. Herencia 4. Polimorfismo 5. Guías de laboratorio
  • 2. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA DIAGRAMA DE UNIDADES DE APRENDIZAJE ENCAPSULAMIENTO HERENCIA POLIMORFISMO
  • 3. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA SEMANA 01 ENCAPSULAMIENTO Programación orientada a objetos, diseño de clases y creación de objetos. Programación orientada a objetos La programación orientada a objetos es un nuevo enfoque de programación ya aceptado universalmente por la comunidad de programadores. Esta aceptación se sustenta en los múltiples beneficios que trae y los resume en sus siguientes características principales: Abstracción, a través de la cual definimos y establecemos el contenido de una clase. Encapsulamiento, a través de la cual establecemos los niveles de acceso a los componentes de una clase, siendo el acceso privado obligatorio para todos los atributos de la clase. Herencia, a través de la cual se puede extender o agregar y/o modificar o reutilizar la funcionalidad de una clase existente, llamada padre, en otra clase llamada hija para evitar la redundancia en el código ya desarrollado. Esta característica resume la frase “aprovecha lo que ya está hecho”. Polimorfismo, a través de la cual se puede programar lo genérico de algún proceso sin saber el detalle de cómo se va a llevar a cabo. Por ejemplo, podemos programar la secuencia genérica de un proceso de cálculo sin saber aún la forma del cálculo que se hará. Esta característica se orienta a la construcción de plantillas de uso general para que, a través de la herencia esas plantillas se puedan particularizar. Diseño de clases Una clase, en la práctica es un nuevo tipo de dato particularizado que se compone de: nombre, atributos, constructores y métodos. Los atributos representan los datos y/o características de la clase, los constructores permiten crear objetos de la clase y los métodos representan la funcionalidad de la clase que será utilizada por los objetos. Nombre Atributos Constructores Métodos
  • 4. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA Generalmente los atributos son de acceso privado y los métodos son de acceso público. Los contructores tienen el mismo nombre de la clase. Cuando una clase no tiene un constructor explícito, se debe considerar uno implícito, por defecto vacío. Sintaxis general: public class Nombre{ // atributos privados // constructores públicos // métodos de acceso y modificación públicos y/o privados } Creación de objetos Un objeto, en la práctica es una variable cuyo tipo de dato es una clase. Cuando el objeto es creado, obtiene una copia de los atributos de la clase para uso exclusivo de dicho objeto. Por ésta razón, todos los objetos de una clase tendrán los mismos atributos pero cada uno con valores diferentes. Sintaxis general: Clase objeto; // declaración del objeto Objeto = new Clase(); // creación del objeto, invoca al constructor Asignación de objetos Cuando un objeto es asignado a otro, éste guarda la dirección de memoria del objeto existente. Luego, el acceso a los datos puede hacerse por cualquiera de los objetos. Sintaxis general: Clase a, b; // declaración de 2 objetos a = new Clase(); // crea un objeto con sus propios datos/atributos b = a; // asignación del objeto a en el objeto b. Luego, tanto a como b pueden utilizar la misma funcionalidad de la clase y referirse a los mismos datos creados para el objeto a.
  • 5. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA Ejemplo 1 Diseñe una clase de nombre Producto con los siguientes atributos privados: código (cadena), descripción (cadena), precio (real) y con los métodos públicos get/set. Considere un constructor implícito. public class Producto { // atributos privados prívate String codigo, descripcion; prívate double precio; // métodos get public String getCodigo(){return codigo;} public String getDescripcion(){return descripcion;} public double getPrecio(){ return precio;} // métodos set public void setCodigo(String c){ codigo =c; } public void setDescripcion(String d){ descripcion=d; } public void setPrecio(double p){ precio=p; } } Considere el siguiente diseño de una GUI y programe la acción del botón Nuevo private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) { // crea un objeto nuevo de la clase Producto Producto nuevo = new Producto(); // lee los valores de la GUI y los coloca como atributos del nuevo objeto nuevo.setCodigo(leeCodigo()); nuevo.setDescripcion(leeDescripcion()); nuevo.setPrecio(leePrecio()); // muestra la información del nuevo objeto lista(nuevo); } // métodos que leen los datos de la GUI private String leeCodigo(){return txtCodigo.getText();} private String leeDescripcion(){return txtDescripcion.getText();} private double leePrecio(){return Double.parseDouble(txtPrecio.getText());} // método que muestra la información de un objeto de la clase Producto
  • 6. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA private void lista(Producto p){ imprime("Codigot:"+p.getCodigo()); imprime("Descripciont:"+p.getDescripcion()); imprime("Preciot:"+p.getPrecio()); } // método que muestra una cadena en el objeto de salida de la GUI private void imprime(String s){ txtSalida.append(s+"n"); } Ejemplo 2 Diseñe una clase de nombre Persona con los siguientes atributos privados: nombres (cadena), apellidos (cadena), edad(entero), peso(real) y con los métodos get/set. Considere un constructor implícito. Considere el siguiente diseño de una GUI y programe la acción del botón Nuevo Ejemplo 3 Diseñe una clase de nombre TV con los siguientes atributos privados: serie (cadena), marca (entero), tamaño en pulgadas(entero), precio (real) y con los métodos get/set, con un método adicional que devuelve el precio en soles dado el tipo de cambio como parámetro, y con un método adicional que retorne el nombre de la marca. Considere las siguientes marcas: Sony, LG, Samsung, Panasonic, otro. Considere un constructor implícito. Considere el siguiente diseño de una GUI y programe la acción del botón Nuevo
  • 7. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA Ejemplo 4 Diseñe una clase de nombre Fecha con los siguientes atributos privados: dia(entero), mes(entero), año(entero) y con los métodos get/set. Considere un constructor implícito. Diseñe otra clase de nombre DNI con los siguientes atributos privados: numero(cadena), dueño(Persona), fecha de emisión (Fecha), fecha de caducidad(Fecha) y con los métodos get/set. Considere un constructor implícito. Considere el siguiente diseño de una GUI y programe la acción del botón Nuevo.
  • 8. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA SEMANA 02 ENCAPSULAMIENTO Constructores, niveles de acceso, métodos get/set, palabra reservada this. Creación de objetos desde una GUI. Constructores Un constructor es un componente de una clase, a través de la cual se puede inicializar los atributos de un objeto creado. Cuando una clase no tiene constructor explícito, se considera un constructor implícito por defecto con un bloque de código vacío. Una clase puede tener varios constructores. Sin embargo, deben diferenciarse por la cantidad y/o tipo de parámetros. Cuando se crea un objeto, se invoca automáticamente al constructor que corresponda a los parámetros dados. Si no encuentra un constructor adecuado, se produce un error. Niveles de acceso Existen 3 niveles de acceso a los componentes de una clase: prívate, protected, public. El acceso prívate permite la implementación de la característica del encapsulamiento, el acceso protected facilita la implementación de la característica de la herencia y el acceso public permite el acceso a la funcionalidad de la clase desde cualquier objeto. Los atributos de una clase deben ser de acceso prívate o protected, nunca public. Un constructor siempre debe ser de acceso public. Los métodos pueden ser de cualquier nivel de acceso, dependiendo de la apertura a la funcionalidad de la clase. Nivel de En la Desde un objeto Desde clase hija acceso clase (herencia) Prívate SI NO NO Protected SI NO SI public SI SI SI Métodos get/set Los métodos get son aquellos que permiten acceder a los atributos desde un objeto. Los métodos set son aquellos que permiten modificar el contenido de los atributos desde un objeto.
  • 9. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA Estos métodos se han estandarizado, por eso se les conoce como los métodos get/set. Incluso, los entornos de programación modernos, como NetBeans, generan la escritura del código correspondiente. Palabra reservada this La palabra reservada this se utiliza para diferenciar el nombre del atributo con el nombre del parámetro cuando éstos coinciden. También es utilizada para referirse a la ventana gráfica vigente y activa. Por ejemplo: this.codigo = codigo; JOptionPane.showMessageDialog(this,” mensaje de texto”); Ejemplo 1 Diseñe una clase de nombre Producto con los siguientes atributos privados: código (cadena), descripción (cadena), precio (real); con un constructor y con los métodos públicos get/set. public class Producto { // atributos privados private String codigo, descripcion; private double precio; // constructor public Producto(String codigo, String descripcion, double precio){ this.codigo=codigo; this.descripcion=descripcion; this.precio=precio; } // métodos get-set generados por NetBeans public String getCodigo() { return codigo; } public void setCodigo(String codigo) { this.codigo = codigo; } public String getDescripcion() { return descripcion; } public void setDescripcion(String descripcion) { this.descripcion = descripcion; } public double getPrecio() { return precio; } public void setPrecio(double precio) { this.precio = precio; } }// fin de la clase
  • 10. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA Observe y analice el desarrollo del constructor y el uso de la palabra reservada this. Considere el siguiente diseño y programe la acción del botón Nuevo. private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) { Producto nuevo = new Producto(leeCodigo(),leeDescripcion(),leePrecio()); lista(nuevo); } Qué datos se pasan al constructor del objeto creado?. Observe y responda. Ejemplo 2 Diseñe una clase de nombre Persona con los siguientes atributos privados: nombres (cadena), apellidos (cadena), edad(entero), peso(real); con un constructor y con los métodos get/set. Observe y analice el desarrollo del constructor y el uso de la palabra reservada this. Considere el siguiente diseño y programe la acción del botón Nuevo.
  • 11. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA Ejemplo 3 Diseñe una clase de nombre TV con los siguientes atributos privados: serie (cadena), marca (entero), tamaño en pulgadas(entero), precio (real); con un constructor, con los métodos get/set, con un método adicional que devuelve el precio en soles dado el tipo de cambio como parámetro, y con un método adicional que retorne el nombre de la marca. Considere las siguientes marcas: Sony, LG, Samsung, Panasonic, otro. Escriba los métodos adicionales solicitados. Observe y analice el desarrollo del constructor y el uso de la palabra reservada this. Considere el siguiente diseño para programar la acción del botón Nuevo Ejemplo 4 Diseñe una clase de nombre Fecha con los siguientes atributos privados: dia(entero), mes(entero), año(entero), con un constructor y con los métodos get/set. Diseñe una clase de nombre DNI con los siguientes atributos privados: numero(cadena), dueño(Persona), fecha de emisión (Fecha), fecha de caducidad(Fecha), con un constructor y con los métodos get/set. Considere la existencia de la clase Persona desarrollado en la sesión anterior. Considere el siguiente diseño de GUI para programar la acción del botón Nuevo.
  • 12. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA Ejemplo 5 Diseñe una clase de nombre Punto con los siguientes atributos privados: x (entero), y (entero), con un constructor y con los métodos get/set. Diseñe una clase de nombre Triangulo con los siguientes atributos privados: a(Punto), b(Punto), c(Punto), con un constructor y con los métodos get/set además de los métodos de cálculo para los lados del triángulo, para el perímetro del triángulo y para el área del triángulo. Considere el diseño de una GUI para programar la acción del botón nuevo.
  • 13. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA SEMANA 03 ENCAPSULAMIENTO Clases administradoras con arreglos. Palabra reservada final Una clase administradora es aquella que tiene todo lo necesario para administrar información de cualquier tipo, considerando los atributos y funcionalidad necesarios para ello. Una clase administradora con arreglos utiliza como atributos: el arreglo, el contador, el tamaño. En el constructor de la clase administradora se dimensiona el arreglo y se inicializa el contador. Parte de su funcionalidad está orientada al mantenimiento de información que involucra los siguientes procesos: agregar, eliminar, buscar, reemplazar, obtener. Los procesos adicionales que formen parte de su funcionalidad dependerá del alcance que quieran darle a la clase, por ejemplo sumar todos los valores, encontrar el promedio, el mayor valor, el menor valor, etc. Ejemplo 1: Diseñe una clase administradora de valores enteros en un arreglo, que permita realizar los procesos que se indican en la siguiente interface gráfica de usuario: Diseñe una clase de nombre ArregloDeEnteros con los siguientes atributos privados: arreglo de enteros, contador de enteros en el arreglo (entero), tamaño(entero) de valor fijo 30.
  • 14. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA public class ArregloDeEnteros { // atributos privados private int a[]; // arreglo de enteros private int n; // numero de enteros en el arreglo private final int tamaño = 30; // tamaño de valor fijo // constructor public ArregloDeEnteros(){ a = new int[tamaño]; n = 0; } } Considere los métodos get/set de todos los atributos, excepto del atributo tamaño que sólo debe tener método get pero no set porque es un valor fijo. Luego, escriba los métodos de administración del arreglo. public class ArregloDeEnteros { // atributos privados private int a[]; // arreglo de enteros private int n; // numero de enteros en el arreglo private final int tamaño = 30; // tamaño de valor fijo // constructor public ArregloDeEnteros(){ a = new int[tamaño]; n = 0; } // métodos get-set public int[] getA() { return a; } public void setA(int[] a) { this.a = a; } public int getN() { return n; } public void setN(int n) { this.n = n; } public int getTamaño() { return tamaño; } // métodos de administración public void agrega(int num){ if(n<tamaño){ a[n] = num; n++; } } public void elimina(int p){ for(int i=p ; i<n-1; i++) a[i] = a[i+1];
  • 15. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA n--; } public int busca(int num){ for(int i=0; i<n; i++){ if(a[i]==num) return i; } return -1; } public int getNum(int i){ return a[i]; } public void setNum(int num, int p){ a[p] = num; } public int sumaTodo(){ int suma=0; for(int i=0; i<n; i++){ suma += a[i]; } return suma; } public double promedio(){ return sumaTodo()/n; } public int elMayor(){ int m=a[0]; for(int i=0; i<n; i++){ if(a[i]>m) m=a[i]; } return m; } public int elMenor(){ int m=a[0]; for(int i=0; i<n; i++){ if(a[i]<m) m=a[i]; } return m; } } En la clase gestora PanelPrincipal declare como atributo un objeto de la clase ArregloDeEnteros y en el constructor cree éste objeto para que pueda ser utilizado en la programación de todos los botones. public class PanelPrincipal extends javax.swing.JPanel { private ArregloDeEnteros ae; public PanelPrincipal() { initComponents(); ae = new ArregloDeEnteros();
  • 16. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA } Vamos a programar la acción del botón Nuevo: private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) { int num = leeNumero(); int p=ae.busca(num); if(p!=-1) mensaje("Error: El número ingresado ya existe"); else{ ae.agrega(num); lista(); } } public void mensaje(String s){ JOptionPane.showMessageDialog(this, s); } public void lista(){ borra(); for(int i=0; i<ae.getN(); i++){ imprime("a["+i+"]t:"+ae.getNum(i)); } } Observe que en la programación del botón Nuevo se evita la repetición del número ingresado. Vamos a programar la acción del botón Lista: private void btnListaActionPerformed(java.awt.event.ActionEvent evt) { lista(); } Vamos a programar la acción del botón Elimina: private void btnEliminaActionPerformed(java.awt.event.ActionEvent evt) { int num = leeNumero(); int p=ae.busca(num); if(p==-1) mensaje("Error: El número ingresado NO existe"); else{ ae.elimina(p); lista(); } } Vamos a programar la acción del botón Reporte: private void btnReporteActionPerformed(java.awt.event.ActionEvent evt) { lista(); imprime("El menor valor est: "+ae.elMenor()); imprime("El valor promedio est: "+ae.promedio()); imprime("El mayor valor est: "+ae.elMayor()); } Vamos a programar la acción del botón Reinicia: private void btnReiniciaActionPerformed(java.awt.event.ActionEvent evt) { ae.setN(0); mensaje(“El arreglo está vacío.”); }
  • 17. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA Ejemplo 2: Diseñe una clase administradora de valores reales en un arreglo, que permita realizar los procesos que se indican en la siguiente interface gráfica de usuario: Diseñe una clase de nombre ArregloDeReales con los siguientes atributos privados: arreglo de valores reales, cantidad de números guardados en el arreglo (entero), tamaño dinámico(entero), con un constructor y con los métodos get/set. public class ArregloDeReales { // atributos private double a[]; // arreglo de reales private int n; // numero de reales en el arreglo private int tamaño; // tamaño de valor dinámico // constructor public ArregloDeReales(int tamaño){ a = new double[tamaño]; n = 0; this.tamaño=tamaño; } } Considere los métodos get-set necesarios. Escriba los métodos de administración tomando como referencia la clase ArregloDeEnteros del ejercicio anterior. Declare un objeto de la clase ArregloDeReales como atributo de la clase gestora PanelPrincipal y en el constructor cree éste objeto para que pueda ser utilizado por todos los botones. Programe la acción de cada uno de los botones.
  • 18. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA Ejemplo 3: Diseñe una clase administradora de cadenas en un arreglo, que permita realizar los procesos que se indican en una interface gráfica de usuario similar a la del ejercicio anterior. Diseñe una clase de nombre ArregloDeCadenas con los siguientes atributos privados: arreglo de valores de tipo cadena, cantidad de cadenas guardadas en el arreglo (entero), tamaño dinámico(entero), con un constructor y con los métodos get/set. Escriba los métodos de administración tomando como referencia la clase ArregloDeEnteros. Declare un objeto de la clase ArregloDeCadenas como atributo de la clase gestora PanelPrincipal y en el constructor cree éste objeto para que pueda ser utilizado por todos los botones. Programe la acción de cada uno de los botones.
  • 19. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA SEMANA 04 EVALUACION
  • 20. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA SEMANA 05 ENCAPSULAMIENTO Clases administradoras con arreglos de objetos Estas clases son similares a las clases administradoras que vimos en la semana anterior, con la diferencia que ahora éstas clases tendrán uno o más arreglos cuyo tipo de dato sea una clase. A éstos arreglos se les conoce como arreglos de objetos porque en cada casillero ya no habrá un dato sino una referencia a un objeto con sus propios atributos. Sintaxis general para declarar un arreglo de objetos: Clase[] variable; Ó Clase variable[]; Ejemplos: Producto[] a; // arreglo de objetos de tipo Producto Persona[] b; // arreglo de objetos de tipo Persona Ejemplo 1: Diseñe una clase administradora con soporte para un arreglo de objetos considerando la siguiente GUI: Considere la clase Producto desarrollada anteriormente que tiene los siguientes atributos y constructor: public class Producto { // atributos privados private String codigo, descripcion; private double precio; // constructor
  • 21. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA public Producto(String codigo, String descripcion, double precio){ this.codigo=codigo; this.descripcion=descripcion; this.precio=precio; } } Se asume la existencia de los métodos get-set. Diseñe una nueva clase administradora de nombre ArregloProductos, que tenga como atributos privados un arreglo de objetos y un contador de objetos que se guardan en el arreglo. Considere un tamaño fijo de 50 para el arreglo. Considere dentro de la funcionalidad de la clase los métodos necesarios de administración del arreglo de objetos para: agregar un nuevo objeto, recuperar, actualizar, buscar, eliminar. public class ArregloProductos { // atributos private Producto[] a; // arreglo de objetos private int n; // contador de objetos private final int tamaño=50; // tamaño fijo, constante // constructor public ArregloProductos(){ a = new Producto[tamaño]; n=0; } Escribimos los métodos adicionales de administración del arreglo de objetos: // métodos de administración public void agrega(Producto p){ // agrega un nuevo objeto if(n<tamaño){ a[n] = p; n++; } } public Producto getProducto(int i){ // obtiene un objeto return a[i]; } public void actualiza(Producto p, int i){ // reemplaza un objeto a[i] = p; } public int busca(String codigo){ // busca y retorna la posición de un objeto, a través de su codigo for(int i=0; i<n; i++){ if(getProducto(i).getCodigo().equals(codigo)) return i; } return -1; // no lo encuentra } public void elimina(int p){ // elimina un objeto de la posición indicada for(int i=p; i<n-1; i++){ a[i] = a[i+1]; }
  • 22. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA n--; } public double mayorPrecio(){ // retorna el mayor precio double m=a[0].getPrecio(); for(int i=1; i<n; i++){ if(getProducto(i).getPrecio()>m) m =getProducto(i).getPrecio(); } return m; } public double menorPrecio(){ // retorna el menor precio double m=a[0].getPrecio(); for(int i=1; i<n; i++){ if(getProducto(i).getPrecio()<m) m =getProducto(i).getPrecio(); } return m; } public double precioPromedio(){ // retorna el precio promedio double s=0; for(int i=1; i<n; i++){ s +=getProducto(i).getPrecio(); } return s/n; } } Declare y cree el objeto ap de la clase ArregloProductos: ArregloProductos ap = new ArregloProductos(); Programe la acción de cada botón considerando lo siguiente: En el botón Nuevo, crea un objeto de la clase Producto, lo guarda en el arreglo de objetos y muestra un listado de todos los objetos. Evita la duplicidad de códigos. En el botón Busca, ubica el objeto que tiene el código ingresado y muestra su información. En caso que no lo encuentre muestra un mensaje de error en una ventana. En el botón Modifica, actualiza la información de objeto que tiene el código ingresado y muestra un listado de todos los objetos. En el botón Elimina, elimina el objeto que tiene el código ingresado y muestra un listado de todos los objetos. En el botón Lista, muestra un listado de todos los objetos. En el botón Reporte, muestra la siguiente información: precio más alto, precio promedio, precio más bajo.
  • 23. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA En el botón Borrar borra la información del área de texto, de las cajas de texto y enfoca el ingreso en la caja de texto del código. Ejemplo 2: Diseñe una clase administradora con soporte para un arreglo de objetos considerando la siguiente GUI: Considere la clase Persona desarrollada anteriormente, con los siguientes atributos y constructor: public class Persona { // atributos privados private String dni, nombres, apellidos; private int edad; private double peso; // constructor public Persona(String dni, String nombres, String apellidos, int edad, double peso){ this.dni=dni; this.nombres=nombres; this.apellidos=apellidos; this.edad=edad; this.peso=peso; } } Diseñe una nueva clase administradora de nombre ArregloPersonas, que tenga como atributos privados un arreglo de objetos y un contador de objetos que se guardan en el arreglo. Considere un tamaño fijo de 50 para el arreglo. Considere dentro de la funcionalidad de la clase los métodos necesarios de administración del arreglo de objetos para: agregar un nuevo objeto, recuperar, actualizar, buscar, eliminar. Escriba los métodos adicionales de administración del arreglo de objetos. Declare y cree el objeto ap de la clase ArregloPersonas. Programe la acción de cada botón considerando lo siguiente:
  • 24. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA En el botón Nuevo, crea un objeto de la clase Persona, lo guarda en el arreglo de objetos y muestra un listado de todos los objetos. Evita la duplicidad de DNI. En el botón Busca, ubica el objeto que tiene el DNI ingresado y muestra su información. En caso que no lo encuentre muestra un mensaje de error en una ventana. En el botón Modifica, actualiza la información de objeto que tiene el DNI ingresado y muestra un listado de todos los objetos. En el botón Elimina, elimina el objeto que tiene el DNI ingresado y muestra un listado de todos los objetos. En el botón Lista, muestra un listado de todos los objetos. En el botón Reporte, muestra la siguiente información: mayor edad, edad promedio, menor edad, mayor peso, peso promedio, menor peso. En el botón Borrar borra la información del área de texto, de las cajas de texto y enfoca el ingreso en la caja de texto del dni. Ejemplo 3: Diseñe una clase administradora con soporte para un arreglo de objetos considerando la siguiente GUI: Considere la clase TV desarrollada anteriormente. Diseñe una nueva clase de nombre ArregloTV, que tenga como atributos privados un arreglo de objetos y un contador de objetos que se guardan en el arreglo. Considere un tamaño fijo de 50 para el arreglo. Considere dentro de la funcionalidad de la clase los métodos necesarios de administración del arreglo de objetos para: agregar un nuevo objeto, recuperar, actualizar, buscar, eliminar.
  • 25. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA Declare y cree el objeto at de la clase ArregloTV. Programe la acción de cada botón considerando lo siguiente: En el botón Nuevo, crea un objeto de la clase TV, lo guarda en el arreglo de objetos y muestra un listado de todos los objetos. Evita la duplicidad de serie. En el botón Busca, ubica el objeto que tiene la serie ingresada y muestra su información. En caso que no lo encuentre muestra un mensaje de error en una ventana. En el botón Modifica, actualiza la información de objeto que tiene la serie ingresada y muestra un listado de todos los objetos. En el botón Elimina, elimina el objeto que tiene la serie ingresada y muestra un listado de todos los objetos. En el botón Lista, muestra un listado de todos los objetos. En el botón Reporte, muestra la siguiente información: mayor precio, precio promedio, menor precio. Todos los precios en soles y dólares. En el botón Borrar borra la información del área de texto, de las cajas de texto y enfoca el ingreso en la caja de texto de la serie.
  • 26. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA SEMANA 06 ENCAPSULAMIENTO Clases administradoras con arreglo de objetos utilizando plantillas: clase ArrayList ArrayList es una clase que administra un arreglo dinámico de cualquier objeto. No tiene restricciones de capacidad. Su tamaño se ajusta en forma dinámica utilizando eficientemente la memoria del computador. Tiene un Constructor por defecto que define un tamaño inicial de 10. Va creciendo de 10 en 10. Tiene un constructor explícito donde recibe como parámetro el tamaño inicial del arreglo que usted quiera establecer. Los elementos dentro de un ArrayList son Objetos de cualquier tipo. Par un uso adecuado se recomienda particularizarlo al objeto que se quiera administrar. La clase ArrayList forma parte del paquete java.util La funcionalidad de uso frecuente de la clase ArrayList es la siguiente: Método Interpretación int size() Retorna el tamaño actual: numero de objetos guardados. void add(obj) Añade un objeto al final del arreglo, incrementando su tamaño actual en 1. Object get(i) Devuelve el objeto almacenado a la posición i en el arreglo. i tiene que ser un entero entre 0 y size()-1. void set(index, obj) reemplaza el objeto de la posición index por el objeto obj. Object Elimina el objeto a la posición index (index entre 0 y remove(index) size()-1). Devuelve el objeto eliminado. Los objetos después de este objeto se trasladan a una posición anterior. El tamaño del ArrayList disminuye en 1. int indexOf(obj) Busca el objeto obj dentro del arreglo, y si lo encuentra, devuelve la posición donde lo ha encontrado. Si no, devuelve -1.
  • 27. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA Ejemplo 1 Modifique el contenido de la clase ArregloProductos, que tenga como atributo privado un objeto de la clase ArrayList donde se guardarán los objetos. import java.util.ArrayList; public class ArregloProductos { // atributos private ArrayList <Producto> a ; // particulariza a objetos de tipo Producto // constructor public ArregloProductos(){ a = new ArrayList<Producto>(); } public int getN() {// retorna el numero de objetos guardados return a.size(); } // métodos de administración public void agrega(Producto p){ // guarda un Nuevo producto a.add(p); } public Producto getProducto(int i){ // obtiene un producto de la posición i return a.get(i); } public void actualiza(Producto p, int i){// reemplaza un producto a.set(i, p); } // retorna la posición de un producto según su código. public int busca(String codigo){ for(int i=0; i<getN(); i++){ if(getProducto(i).getCodigo().equals(codigo)) return i; } return -1; // no lo encontró } public void elimina(int p){// elimina el producto de la posición p a.remove(p); } public double mayorPrecio(){// retorna el mayor precio double m=a.get(0).getPrecio(); for(int i=1; i<getN(); i++){ if(getProducto(i).getPrecio()>m) m =getProducto(i).getPrecio(); } return m; } public double menorPrecio(){// retorna el menor precio double m=a.get(0).getPrecio(); for(int i=1; i<getN(); i++){ if(getProducto(i).getPrecio()<m) m =getProducto(i).getPrecio(); }
  • 28. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA return m; } } Como puede observar, el uso de una clase plantilla como ArrayList simplifica y facilita muchísimo la administración de los arreglos de objetos. Por ejemplo ya no debemos preocuparnos por el tamaño del arreglo. La programación de los botones en la clase que tiene el diseño de la GUI, no cambia. Ejemplo 2 Modifique el contenido de la clase ArregloPersonas, que tenga como atributo privado un objeto de la clase ArrayList donde se guardarán los objetos. Desarrolle los siguientes métodos adicionales en la clase administradora: a) Un método que retorne el peso promedio de todas las personas b) Un método que retorne la cantidad de personas cuyo peso se encuentra en un rango dado como parámetros c) Un método que modifique el peso de todas las personas cuyo peso es mayor a 80, incrementándolo en 2 kilos. Ejemplo 3 Modifique el contenido de la clase ArregloTV, que tenga como atributo privado un objeto de la clase ArrayList donde se guardarán los objetos. Desarrolle los siguientes métodos adicionales en la clase administradora: a) Un método que retorne la cantidad de televisores que pertenecen a una marca específica dada como parámetro. b) Un método que retorne el precio promedio de los televisores de una marca específica dada como parámetro. c) Un método que modifique el precio de todos los televisores incrementándolo en un porcentaje dado como parámetro.
  • 29. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA SEMANA 07 EVALUACION
  • 30. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA SEMANA 08 EVALUACION INTEGRAL
  • 31. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA SEMANA 09 HERENCIA Jerarquía de Clases, extends, super La Herencia es una de las características más importantes y beneficiosas para el enfoque de programación orientado a objetos. En resumen se trata de “utilizar lo que ya está hecho” para agregarle y/o cambiarle funcionalidad, nunca quitarle. Esto en la vida real tiene mucho sentido. Por ejemplo, Existiendo el televisor en blanco y negro (clase Padre) fabricaron el televisor a color (clase Hija) aprovechando todo lo bueno del televisor en blanco y negro ya implementado como cambio de canales, administración del volumen, mecanismo de encendido/apagado. Al televisor a color le agregaron más funcionalidad como: soportar audio, video, cable. Otro ejemplo: Existiendo el televisor a color (clase Padre) fabricaron el televisor digital (clase Hija) al que le cambiaron y agregaron funcionalidad para el soporte de la tecnología digital. En programación sucede lo mismo, por ejemplo: Existiendo una clase Fecha (clase Padre) cuya funcionalidad soporta un formato de presentación DD/MM/AA , se puede construir una nueva clase FechaM (clase Hija) cuya funcionalidad soporte más formatos de presentación como DD/NOMBRE DEL MES/AAAA, AA/MM/DD, etc. A la clase ya existente se le conoce como clase Padre ó clase Base ó clase Ascendiente o Super clase. En cambio a la nueva clase que hereda se le conoce como clase Hija ó clase Derivada ó clase Descendiente o Subclase. Cuando uno va a desarrollar por primera vez una clase y piensa que con el tiempo se podría utilizar como clase Padre, entonces el nivel de acceso a sus atributos deja de ser prívate y se debe considerar como protected ya que sigue permitiendo el encapsulamiento pero además dispone su acceso directo de todas sus clases descendientes. En cambio, cuando la clase que se va a heredar ya existe con un nivel de acceso prívate para sus atributos, entonces la clase hija tiene que utilizar la funcionalidad pública de acceso a sus atributos. La palabra reservada que implementa la herencia es extends. Si la clase Padre no tiene un constructor explícito, entonces la clase Hija no está obligada a tenerlo. Sin embargo, cuando la clase Padre sí tiene un constructor explícito, entonces la clase Hija sí está obligada a tener su constructor desde donde debe invocar al constructor de la clase Padre utilizando la palabra reservada super. La clase Hija puede tener métodos con el mismo nombre que algún método de la clase Padre. Para diferenciar su invocación al método de la clase Padre se le antepone la palabra reservada super.
  • 32. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA Ejemplo 1 Considere la existencia de la clase TV desarrollada anteriormente y diseñe una nueva clase hija de nombre TVH, aplicando herencia, considerando los siguientes atributos protegidos adicionales: origen(entero), tecnología(entero). Considere para el campo origen: nacional, americano, japonés, koreano, chino, otro. Considere para el campo tecnología: Tradicional, LCD, Plasma, Digital. Considere métodos adicionales para que retornen el nombre del origen y el nombre de la tecnología. La nueva clase hija debe ser utilizada para el proceso de la siguiente GUI: Diseño de la clase hija: public class TVH extends TV { // atributos protegidos protected int origen, tecnologia; // constructor public TVH(String serie, int marca, int tamaño, double precio, int origen, int tecnologia){ // invocación al constructor de la clase Padre super(serie, marca, tamaño, precio); // inicializa sus propios atributos this.origen = origen; this.tecnologia=tecnologia; } // métodos get-set public int getOrigen() { return origen; } public void setOrigen(int origen) { this.origen = origen; }
  • 33. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA public int getTecnologia() { return tecnologia; } public void setTecnologia(int tecnologia) { this.tecnologia = tecnologia; } // metodos adicionales public String nombreOrigen(){ switch(origen){ case 1: return "Nacional"; case 2: return "Americano"; case 3: return "Japonés"; case 4: return "Koreano"; case 5: return "Chino"; default: return "Otro"; } } public String nombreTecnologia(){ switch(tecnologia){ case 1: return "Tradicional"; case 2: return "LCD"; case 3: return "Plasma"; default: return "Digital"; } } }// fin de la clase hija La nueva clase hija tendrá acceso a todo lo public y protected de la clase padre. Sin embargo, no tendrá acceso a ningún elemento private. La nueva clase hija tiene sus atributos con nivel de acceso protected porque estamos previniendo que ésta sea heredada por otras clases. Observe y analice la aplicación de Herencia: extends, super Programamos la acción del botón Nuevo: private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) { TVH nuevo = new TVH(leeSerie(),leeMarca(),leeTamaño(),leePrecio(), leeOrigen(), leeTecnologia()); lista(nuevo); } private void lista(TVH t){ imprime("Datos de la clase Padre-------------"); imprime("Nro. Seriet:"+t.getSerie()); imprime("Marcat:"+t.nombreMarca()); imprime("Tamañot:"+t.getTamaño()); imprime("Precio us$t:"+t.getPrecio()); imprime("Precio S/.t:"+t.precioSoles(2.85)); imprime("Datos de la clase Hija--------------"); imprime("Origent:"+t.nombreOrigen()); imprime("Tecnologiat:"+t.nombreTecnologia()); imprime("----------------------------------"); }
  • 34. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA Observe e identifique los datos que se utilizan al momento de crear el objeto. Observe y verifique la compatibilidad entre la invocación del método lista() y su desarrollo. Repase el desarrollo de los métodos de lectura de los datos de la GUI y también el método imprime(). Ejemplo 2 Considere la existencia de una clase base de nombre Persona ya desarrollada anteriormente y diseñe una nueva clase hija de nombre PersonaH, aplicando herencia, con los siguientes atributos protegidos adicionales: dni (cadena), email(cadena), foto(cadena). La nueva clase hija debe ser utilizada para el proceso de la siguiente GUI: Diseño de la clase hija: public class PersonaH extends Persona { // atributos protegidos protected String dni, email, foto; // constructor public PersonaH(String nombres, String apellidos, int edad, double peso, String dni, String email, String foto){ super(nombres,apellidos,edad,peso); this.dni=dni; this.email =email; this.foto =foto; } Complete los métodos get-set. Observe y analice la aplicación de Herencia. Programe la acción del botón Nuevo
  • 35. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA Ejemplo 3 Diseñe una clase padre de nombre PuntoP cuyos atributos sean las coordenadas x,y de su ubicación en el plano. Considere un constructor con parámetros, la funcionalidad de acceso a sus atributos y un método adicional que retorne la distancia desde su ubicación hasta el punto de origen. Luego, diseñe una clase hija de nombre PuntoE que herede a la clase PuntoP y considere un atributo adicional para la coordenada z de su ubicación en el espacio. Considere un constructor con parámetros, la funcionalidad de acceso a su atributo y un método adicional que retorne la distancia desde su ubicación hasta el punto de origen. Considere una clase de GUI donde utilice objetos de ambas clases para mostrar su información.
  • 36. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA SEMANA 10 HERENCIA Sobrecarga El concepto de sobrecarga va orientado a que un método puede repetirse con el mismo nombre pero con la condición de que se diferencien por los parámetros: en número y/o en cantidad. Por ejemplo, si existiera un método que suma dos números enteros que recibe como parámetros, tendría la siguiente declaración: public int suma(int a, int b) Ahora, si quisiéramos sumar dos números reales, no tenemos porqué cambiar el nombre al método, porque su tarea va a ser la misma: sumar. Entonces aplicamos sobrecarga para declararlo así: public double suma(double a, double b) Nuevamente, si ahora quisiéramos sumar 3 números enteros, aplicamos sobrecarga así: public int suma(int a, int b, int c) Este concepto de sobrecarga también es aplicable en los constructores de las clases. La ventaja de éste concepto de sobrecarga es que flexibiliza la funcionalidad de las clases, ofreciendo varias alternativas de uso de una misma actividad: los métodos y los constructores. Ejemplo 1 Considere la existencia de una clase de nombre TVH desarrollada anteriormente. Diseñe una nueva clase administradora de nombre ArregloTVH. Considere métodos adicionales sobrecargados para flexibilizar el uso de la clase administradora. public class ArregloTVH { // atributos protegidos protected ArrayList<TVH> a; // constructor public ArregloTVH(){ a = new ArrayList<TVH>(); }
  • 37. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA // métodos sobrecargados para agregar public void agrega(TVH t){ a.add(t); } public void agrega(String serie, int marca, int tamaño, double precio, int origen, int tecnologia){ a.add(new TVH(serie, marca,tamaño,precio,origen,tecnologia)); } // métodos sobrecargados para obtener public TVH getTVH(int i){ return a.get(i); } public TVH getTVH(){ return a.get(0); } // métodos no sobrecargados public int getN(){ return a.size();} public TVH busca(String serie){ for(int i=0; i<getN(); i++){ if(getTVH(i).getSerie().equals(serie)) return getTVH(i); } return null; } // métodos sobrecargados para eliminar public void elimina(int i){ a.remove(i); } public void elimina(String serie){ if(busca(serie)!=null) a.remove(busca(serie)); } public void elimina(TVH t){ a.remove(t); } } Considere siguiente GUI Declare y cree un objeto de la clase ArregloTVH
  • 38. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA Programe la acción de los botones utilizando la funcionalidad sobrecargada. Ejemplo 2: Considere la existencia de una clase de nombre PersonaH desarrollada anteriormente, en el proyecto p09e02 y diseñe una nueva clase administradora de nombre ArregloPersonasH. Considere métodos adicionales sobrecargados para flexibilizar el uso de la clase administradora. Considere el siguiente diseño de GUI Programe la acción de los botones utilizando la funcionalidad sobrecargada.
  • 39. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA SEMANA 11 EVALUACION
  • 40. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA SEMANA 12 HERENCIA Herencia con archivos de texto. Hasta ahora, la clase ArrayList nos ha dado 2 ventajas inobjetables: tamaño ilimitado y funcionalidad que reducen nuestro código. Sin embargo, todo lo que se guarda en el objeto ArrayList permanece en memoria sólo mientras se esté ejecutando el programa, si lo ejecutamos nuevamente, tendremos que ingresar todos los datos nuevamente!. Afortunadamente éste problema se resuelve utilizando archivos de texto para guardar permanentemente los datos en el disco. Tendremos que rediseñan nuestras clases para poder guardar la información en un archivo?. La respuesta es NO. Entonces cómo hacemos?, La respuesta es: aplicando HERENCIA. Si, vamos a tomar como clase padre a una clase administradora, heredamos toda su funcionalidad y a la clase hija le agregamos la funcionalidad que permita grabar en el archivo y leer desde el archivo. Antes de aplicar dicha herencia, debemos reconocer las clases ya existentes que nos van a facilitar operar en un archivo según el proceso que queramos. Para leer los datos del archivo hacia el objeto ArrayList utilizaremos las siguientes clases: FileReader, BufferedReader, StringTokenizer. ArrayList Archivo de texto  Lee una línea del archivo  Descompone los datos individuales  Crea nuevo objeto  Lo guarda en el objeto ArrayList
  • 41. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA Para grabar los datos en el archivo desde el objeto ArrayList utilizaremos las siguientes clases: FileWriter, PrintWriter. ArrayList Archivo de texto  Obtiene un objeto del ArrayList  Concatena los datos en una cadena  Lo guarda en el archivo Ejemplo 1 Considere la existencia de una clase administradora de nombre ArregloTVH desarrollada anteriormente. Aplique herencia para que en la clase hija se consideren métodos para leer y para grabar en un archivo de texto. public class ArchivoTVH extends ArregloTVH{ // atributos protegidos protected String nombre; // constructor public ArchivoTVH(String nombre){ super(); this.nombre=nombre; lee(); } // métodos que operan un archivo de texto public void lee(){ try{ FileReader fr = new FileReader(nombre); BufferedReader br = new BufferedReader(fr); String linea=br.readLine(); while(linea != null){ StringTokenizer st = new StringTokenizer(linea,"/"); String serie=st.nextToken(); int marca=Integer.parseInt(st.nextToken()); int tamaño=Integer.parseInt(st.nextToken()); double precio=Double.parseDouble(st.nextToken()); int origen=Integer.parseInt(st.nextToken()); int tecnologia=Integer.parseInt(st.nextToken()); agrega(serie,marca,tamaño,precio,origen,tecnologia); linea= br.readLine();
  • 42. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA } br.close(); }catch(Exception ex){ } } public void graba(){ try{ FileWriter fw = new FileWriter(nombre); PrintWriter pw= new PrintWriter(fw); for(int i=0; i<getN(); i++){ TVH t =getTVH(i); pw.println(t.getSerie()+"/"+ t.getMarca()+"/"+ t.getTamaño()+"/"+ t.getPrecio()+"/"+ t.getOrigen()+"/"+ t.getTecnologia()); } pw.close(); }catch(Exception ex){} } }// fin de la clase Considere el mismo diseño de GUI Declare y cree un objeto de la clase ArchivoTVH en la clase de la GUI La grabación de datos debe hacerse en cada botón que lo requiera. Programe la acción de los botones.
  • 43. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA Ejemplo 2 Considere la existencia de una clase administradora de nombre ArregloPersonasH desarrollada anteriormente. Aplique herencia para que en la clase hija se consideren métodos para leer y para grabar en un archivo de texto. Considere el mismo diseño de GUI Declare y cree un objeto de la clase ArchivoTVH en la clase de la GUI La grabación de datos debe hacerse en cada botón que lo requiera. Programe la acción de los botones.
  • 44. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA SEMANA 13 POLIMORFISMO Clases Abstractas. Casting Polimorfismo Es una de las características fundamentales para cualquier lenguaje orientado a Objetos, La derivación de su significado: Poli = Multiple, morfismo= Formas , implica que Objetos de la misma clase pueden tomar diversas formas de comportamiento. El poder manipular un Objeto como si éste fuera de un tipo genérico otorga mayor flexibilidad al momento de programar con Objetos. Observe el siguiente fragmento de código: Figura a = new Circulo(); Figura b = new Triangulo(); Los objetos a y b siendo de la misma clase Figura, se comportan como clases diferentes: Circulo y Triángulo. Clases Abstractas. Son clases Padre donde se consideran métodos que aún no se conoce su desarrollo. Recién se conocerá en alguna clase Hija. A éstos métodos se les conoce como métodos abstractos y utilizan la palabra reservada abstract para su identificación.
  • 45. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA Cuando una Clase Padre contiene por lo menos un método abstracto se le conoce como Clase Abstracta y también debe estar precedía por la palabra reservada abstract. Estas clases pueden tener además métodos no abstractos que invoquen a métodos abstractos si lo necesitan para definir un comportamiento. Sin embargo, no se puede instanciar objetos invocando al constructor de la clase base abstracta. Las clases Hija deben desarrollar todos los métodos abstractos de la clase Padre. Además, la clase Hija puede redefinir cualquier método de la clase Padre, con el mismo nombre. Incluso pueden utilizar la palabra reservada super para referirse a cualquier método del mismo nombre que esté definido en la clase Padre. En el funcionamiento del polimorfismo se puede identificar el concepto de “enlace tardío” que consiste en que recién se conocerá el método a ejecutar en el momento de la ejecución, más no en la compilación. Uso de "Casting" El término "Casting" viene de la palabra "Cast" que significa Molde, por lo que el termino literal es Hacer un Molde. En Polimorfismo se lleva a cabo este proceso de "Casting" implícitamente, una Guitarra se coloca en el molde de un Instrumento, un Triangulo en el molde de una Figura. Sin embargo, en ciertas ocasiones se requiere realizar un tipo de "Casting" que no es considerado seguro en términos computacionales. Anteriormente se mencionó que el "Casting" llevado a cabo con Polimorfismo es implícito, esto se debe a que no se requiere de sintaxis especial, simplemente se convierte una Guitarra a un Instrumento. Sin embargo, para llevar una transformación en sentido opuesto se requiere de sintaxis adicional para mantener la seguridad de transformación; analicemos: mientras se puede asegurar que un Triangulo es una Figura ("Up-Casting"), una Figura no necesariamente es un Triangulo, claro está que lo puede ser, pero en Java se requiere definir explícitamente esta operación ("Down- Casting").
  • 46. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA Ejemplo 1 Diseñe una clase abstracta de nombre Figura que tenga un atributo protegido para el nombre de la figura, métodos get-set, métodos abstractos para el area() y el perimetro() y un método no abstracto que retorne la información correspondiente al nombre, area y perímetro de cualquier figura. Luego diseñe una clase hija de nombre Circulo que herede a la clase Figura que tenga un atributo par a el radio, constructor , métodos get-set y desarrollo de los métodos abstractos de la clase padre. También diseñe una clase hija de nombre Cuadrado que herede a la clase Figura que tenga un atributo para el lado, constructor, métodos get-set, y desarrollo de los métodos abstractos de la clase padre. Finalmente, diseñe una clase de nombre PanelPrincipal con la interface necesaria para crear obejtos de diferente figura. Diseño de la clase abstracta Figura: public abstract class Figura{ protected String nombre; public Figura(String nombre){ this.nombre=nombre; } public abstract double area(); public abstract double perimetro(); public String info(){ return "Figurat: "+nombre+"n"+ "Areat: "+ area()+"n"+ "Perímetrot: "+perimetro(); } } Diseño de la clase Circulo: public class Circulo extends Figura{ protected double radio; public Circulo(double radio){ super("Circulo"); this.radio = radio; } public double area(){ return Math.PI * radio * radio;} public double perimetro(){ return 2 * Math.PI * radio;} } Diseño de la clase Cuadrado public class Cuadrado extends Figura{ protected double lado; public Cuadrado(double lado){ super("Cuadrado"); this.lado = lado; } public double area(){ return lado * lado;} public double perimetro(){ return 4*lado;} }
  • 47. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA Programación del botón Nuevo Circulo:{ Figura a = new Circulo(leeRadio()); lista(a); } Programación del botón Nuevo Cuadrado:{ Figura b = new Cuadrado(leeLado()); lista(b); } public void lista(Figura f){ imprime(f.info()); } Observe el parámetro del método lista() y compruebe la compatibilidad entre la invocación del método y su desarrollo. Ejemplo 2 Diseñe una clase abstracta de nombre Empleado que tenga atributos protegidos para el nombre, apellidos, dni, métodos get-set, métodos abstractos para ingresos(), bonificaciones(), descuentos(), un método no abstracto que retorne el sueldoNeto() y otro método no abstracto que retorne la información correspondiente al nombre, apellidos, dni, ingresos, bonificaciones, descuentos, sueldo neto de cualquier empleado. Luego, diseñe una clase hija de nombre EmpleadoVendedor que tenga atributos para monto vendido y porcentaje de comisión, constructor, métodos get-set, desarrollo de métodos abstractos. Luego, diseñe una clase hija de nombre EmpleadoPermanente que tenga atributos para sueldo basico y afiliación (afp ó snp), constructor, métodos get-set, desarrollo de métodos abstractos. Finalmente, diseñe una clase de nombre PanelPrincipal con la interface necesaria para crear objetos de diferente tipo de empleado.
  • 48. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA SEMANA 14 POLIMORFISMO Arreglo de Objetos Polimórficos Estos arreglos se caracterizan porque soportan cualquier objeto de las clases descendientes de una jerarquía de clases, teniendo como clase Padre a una clase abstracta. Ejemplo 1 Considere la existencia de la clase abstracta de nombre Figura, las clases hijas Cuadrado y Circulo. Diseñe una clase administradora de nombre ArregloFiguras que permita la administración de objetos de tipo Cuadrado y/o Circulo a la vez, utilizando un objeto de la clase ArrayList. public class ArregloFiguras{ protected ArrayList <Figura> a; public ArregloFiguras(){ a = new ArrayList<Figura>(); } // métodos de administración public void agrega(Figura f){ a.add(f); } public Figura getFigura(int i){ Return a.get(i); } public int getN(){ return a.size();} public void elimina(int i){ a.remove(i); } //... complete métodos adicionales } Diseñe una clase de interfaz de nombre PanelPrincipal donde cree un objeto de la clase ArregloFiguras, como atributo de la clase. protected ArregloFiguras af = new ArregloFiguras(); Programación del botón Nuevo Circulo:{ Figura a = new Circulo(leeRadio()); lista(a); af.agrega(a); // agrega un objeto Circulo } Programación del botón Nuevo Cuadrado:{
  • 49. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA Figura b = new Cuadrado(leeLado()); lista(b); af.agrega(b); // agrega un objeto Cuadrado } public void lista(Figura f){ imprime(f.info()); } Programación del botón Lista:{ for(int i=0; i<af.getN(); i++){ Figura f=af.getFigura(i); if (f instanceof Circulo) imprime(“Circulo: “+f.info()); else imprime(“Cuadrado: “+f.info()); } } La palabra reservada instanceof permite identificar el tipo personalizado de un objeto genérico. Esto permite darle un nombre diferente antes de mostrar su información que es un método común. Ejemplo 2 Diseñe una clase abstracta de nombre Empleado que tenga atributos protegidos para el nombre, apellidos, dni, métodos get-set, métodos abstractos para ingresos(), bonificaciones(), descuentos(), un método no abstracto que retorne el sueldoNeto() y otro método no abstracto que retorne la información correspondiente al nombre, apellidos, dni, ingresos, bonificaciones, descuentos, sueldo neto de cualquier empleado. Luego, diseñe una clase hija de nombre EmpleadoVendedor que tenga atributos para monto vendido y porcentaje de comisión, constructor, métodos get-set, desarrollo de métodos abstractos. Luego, diseñe una clase hija de nombre EmpleadoPermanente que tenga atributos para sueldo basico y afiliación (afp ó snp), constructor, métodos get-set, desarrollo de métodos abstractos. Luego, diseñe una clase administradora de nombre ArregloEmpleados que tenga como atributo un objeto de la clase ArrayList . Considere los métodos de administración necesarios para guardar objetos polimórficos de cualquiera de las clases hijas. Finalmente, diseñe una clase de nombre PanelPrincipal con la interface necesaria para crear objetos de diferente tipo de empleado y administrarlos en un objeto de la clase ArregloEmpleados.
  • 50. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA Ejemplo 3 Aplique herencia en el ejemplo1 y desarrolle la clase ArchivoFiguras que permita grabar la información de las figuras en un archivo de texto. Ejemplo 4 Aplique herencia en el ejemplo2 y desarrolle la clase ArchivoEmpleados que permita grabar la información de los empleados en un archivo de texto.
  • 51. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA SEMANA 15 EVALUACION
  • 52. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA SEMANA 16 EVALUACION INTEGRAL
  • 53. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA SEMANA 01 GUIA DE LABORATORIO 1 Entorno de desarrollo visual. Diseño de GUI. Distribuciones. Ejercicio 1 Cree un proyecto nuevo de nombre P01E01. Cree un paquete nuevo de nombre p01e01. Diseñe una clase de nombre Producto con los siguientes atributos privados: código (cadena), descripción (cadena), precio (real) y con los métodos públicos get/set. Diseñe la GUI en un Panel de nombre PanelPrincipal para el ingreso de los datos con el siguiente diseño: Cada vez que hace clic en el botón Nuevo debe crear un objeto de la clase Producto y mostrar la información de sus atributos. Cada vez que hace clic en el botón Borrar debe borrar la información del área de texto, de las cajas de texto y enfocar el ingreso en la caja de texto del código. PanelPrincipal con distribución BorderLayout. En el norte colocamos otro panel (jPanel1) con distribución BoxLayout donde colocamos las etiquetas y las cajas de texto. En el sur colocamos otro panel (jPanel2) con distribución FlowLayout donde colocamos los botones. En el centro colocamos un área de texto con su propiedad editable desmarcada.
  • 54. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA Observe la distribución y nombres de los objetos. Damos doble clic en el botón Nuevo para programar su acción: private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) { Producto nuevo = new Producto(); nuevo.setCodigo(leeCodigo()); nuevo.setDescripcion(leeDescripcion()); nuevo.setPrecio(leePrecio()); lista(nuevo); } private String leeCodigo(){return txtCodigo.getText();} private String leeDescripcion(){return txtDescripcion.getText();} private double leePrecio(){return Double.parseDouble(txtPrecio.getText());} private void lista(Producto p){ imprime("Codigot:"+p.getCodigo()); imprime("Descripciont:"+p.getDescripcion()); imprime("Preciot:"+p.getPrecio()); } private void imprime(String s){ txtSalida.append(s+"n"); } Regresamos al diseño y hacemos doble clic en el botón Borrar para programar su acción: private void btnBorrarActionPerformed(java.awt.event.ActionEvent evt) { txtSalida.setText(""); txtCodigo.setText(""); txtDescripcion.setText(""); txtPrecio.setText(""); txtCodigo.requestFocus(); } Desarrolle la clase de aplicación de nombre Principal en un JFrame. Coloque distribución BorderLayout, vaya a la ficha Source y escriba lo que está en negrita: public class Principal extends javax.swing.JFrame { public Principal() { initComponents(); add(new PanelPrincipal()); setSize(600,200); } Ejecute su aplicación.
  • 55. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA Ejercicio 2 Cree un proyecto nuevo de nombre P01E02. Cree un paquete nuevo de nombre p01e02. Diseñe una clase de nombre Persona con los siguientes atributos privados: nombres (cadena), apellidos (cadena), edad(entero), peso(real) y con los métodos get/set. Diseñe la GUI en un Panel de nombre PanelPrincipal para el ingreso de los datos con el siguiente diseño: Cada vez que hace clic en el botón Nuevo debe crear un objeto de la clase Persona y mostrar la información de sus atributos. Cada vez que hace clic en el botón Borrar debe borrar la información del área de texto, de las cajas de texto y enfocar el ingreso en la caja de texto de nombres. PanelPrincipal con distribución BorderLayout. En el norte colocamos otro panel (jPanel1) con distribución BoxLayout donde colocamos las etiquetas y las cajas de texto. En el sur colocamos otro panel (jPanel2) con distribución FlowLayout donde colocamos los botones. En el centro colocamos un área de texto con su propiedad editable desmarcada. Observe la distribución y los nombres de los objetos.
  • 56. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA Doble clic en el botón Nuevo para programar su acción. (Revise la programación de éste botón en el ejercicio anterior) Regresa al diseño y doble clic en el botón Borrar para programar su acción. (Revise la programación de éste botón en el ejercicio anterior) Desarrolle la clase de aplicación de nombre Principal en un JFrame. Coloque distribución BorderLayout, vaya a la ficha Source y escriba lo que está en negrita: public class Principal extends javax.swing.JFrame { public Principal() { initComponents(); add(new PanelPrincipal()); setSize(600,200); } Ejecute su aplicación. Ejercicio 3 Cree un proyecto nuevo de nombre P01E03. Cree un paquete nuevo de nombre p01e03. Diseñe una clase de nombre TV con los siguientes atributos privados: serie (cadena), marca (entero), tamaño en pulgadas(entero), precio (real) y con los métodos get/set, con un método adicional que devuelve el precio en soles dado el tipo de cambio como parámetro, y con un método adicional que retorne el nombre de la marca. Considere las siguientes marcas: Sony, LG, Samsung, Panasonic, otro. Diseñe la GUI en un Panel de nombre PanelPrincipal para el ingreso de los datos con el siguiente diseño:
  • 57. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA Cada vez que hace clic en el botón Nuevo debe crear un objeto de la clase TV y mostrar la información de sus atributos además de su precio en soles considerando un tipo de cambio actual. Cada vez que hace clic en el botón Borrar debe borrar la información del área de texto, de las cajas de texto y enfocar el ingreso en la caja de texto de serie. PanelPrincipal con distribución BorderLayout. En el norte colocamos otro panel (jPanel1) con distribución BoxLayout donde colocamos las cajas de texto y el comboBox. Utilice la propiedad Border para colocar título en las cajas de texto y utilice la propiedad model para llenar el comboBox. En el sur colocamos otro panel (jPanel2) con distribución FlowLayout donde colocamos los botones. En el centro colocamos un área de texto con su propiedad editable desmarcada. Observe la distribución y los nombres de los objetos. Doble clic en el botón Nuevo para programar su acción: private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) { TV nuevo = new TV(); nuevo.setSerie(leeSerie()); nuevo.setMarca(leeMarca()); nuevo.setTamaño(leeTamaño()); nuevo.setPrecio(leePrecio()); lista(nuevo); } private String leeSerie(){return txtSerie.getText();} private int leeMarca(){return cboMarca.getSelectedIndex();}
  • 58. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA private int leeTamaño(){return Integer.parseInt(txtTamaño.getText());} private double leePrecio(){return Double.parseDouble(txtPrecio.getText());} private void lista(TV t){ imprime("Nro. Seriet:"+t.getSerie()); imprime("Marcat:"+t.nombreMarca()); imprime("Tamañot:"+t.getTamaño()); imprime("Precio us$t:"+t.getPrecio()); imprime("Precio S/.t:"+t.precioSoles(2.85)); imprime("----------------------------------"); } private void imprime(String s){ txtSalida.append(s+"n"); } Regrese al diseño y doble clic en el botón Borrar para programar su acción: private void btnBorrarActionPerformed(java.awt.event.ActionEvent evt) { txtSalida.setText(""); txtSerie.setText(""); cboMarca.setSelectedIndex(0); txtTamaño.setText(""); txtPrecio.setText(""); txtSerie.requestFocus(); } Desarrolle la clase de aplicación de nombre Principal en un JFrame. Coloque distribución BorderLayout, vaya a la ficha Source y escriba lo que está en negrita: public class Principal extends javax.swing.JFrame { public Principal() { initComponents(); add(new PanelPrincipal()); setSize(600,300); } Ejecute su aplicación.
  • 59. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA Ejercicio 4 Cree un proyecto nuevo de nombre P01E04. Cree un paquete nuevo de nombre p01e04. Diseñe una clase de nombre Fecha con los siguientes atributos privados: dia(entero), mes(entero), año(entero) y con los métodos get/set. Diseñe una clase de nombre DNI con los siguientes atributos privados: numero(cadena), dueño(Persona), fecha de emisión (Fecha), fecha de caducidad(Fecha) y con los métodos get/set. Diseñe la GUI en un Panel de nombre PanelPrincipal para el ingreso de los datos de un DNI. Cada vez que hace clic en el botón Nuevo debe crear un objeto de la clase DNI y mostrar la información de sus atributos. Desarrolle la clase de aplicación de nombre Principal en un JFrame. Ejecute su aplicación.
  • 60. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA SEMANA 02 GUIA DE LABORATORIO 2 Creación de objetos desde una GUI. Constructores, encapsulamiento Ejercicio 1 Cree un proyecto nuevo de nombre P02E01. Cree un paquete nuevo de nombre p02e01. Diseñe una clase de nombre Producto con los siguientes atributos privados: código (cadena), descripción (cadena), precio (real); con un constructor y con los métodos públicos get/set. Clic derecho en el paquete creado, elegimos New Java Class y escribimos el nombre Producto y escribimos lo siguiente: Ahora, vamos a utilizar NetBeans para que genere, automáticamente, los métodos get/set. Clic derecho en la clase creada, elegimos Refactor, Encapsulate Fields y nos aparece la siguiente ventana donde seleccionamos todo ( Select All)
  • 61. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA En Javadoc elegimos none para evitar los comentarios que genera NetBeans y por último hacemos clic en el botón Refactor. Nuestra clase queda así: public class Producto { // atributos privados private String codigo, descripcion; private double precio; // constructor public Producto(String codigo, String descripcion, double precio){ this.codigo=codigo; this.descripcion=descripcion; this.precio=precio; } public String getCodigo() { return codigo; } public void setCodigo(String codigo) { this.codigo = codigo; } public String getDescripcion() { return descripcion; } public void setDescripcion(String descripcion) { this.descripcion = descripcion; } public double getPrecio() { return precio; } public void setPrecio(double precio) { this.precio = precio;
  • 62. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA } } Observe y analice el desarrollo del constructor y el uso de la palabra reservada this. Diseñe la GUI en un Panel de nombre PanelPrincipal para el ingreso de los datos con el siguiente diseño: Cada vez que hace clic en el botón Nuevo debe crear un objeto de la clase Producto y mostrar la información de sus atributos. Cada vez que hace clic en el botón Borrar debe borrar la información del área de texto, de las cajas de texto y enfocar el ingreso en la caja de texto del código. Puede copiar y pegar el diseño del proyecto P0101 del laboratorio anterior o hacer nuevamente el diseño con la siguiente referencia: PanelPrincipal con distribución BorderLayout. En el norte colocamos otro panel (jPanel1) con distribución BoxLayout donde colocamos las etiquetas y las cajas de texto. En el sur colocamos otro panel (jPanel2) con distribución FlowLayout donde colocamos los botones. En el centro colocamos un área de texto con su propiedad editable desmarcada. Doble clic en el botón Nuevo para programar su acción: private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) { Producto nuevo = new Producto(leeCodigo(),leeDescripcion(),leePrecio()); lista(nuevo); } private String leeCodigo(){return txtCodigo.getText();} private String leeDescripcion(){return txtDescripcion.getText();} private double leePrecio(){return Double.parseDouble(txtPrecio.getText());} private void lista(Producto p){ imprime("Codigot:"+p.getCodigo());
  • 63. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA imprime("Descripciont:"+p.getDescripcion()); imprime("Preciot:"+p.getPrecio()); } private void imprime(String s){ txtSalida.append(s+"n"); } Observe y analice la llamada al constructor desarrollado. Regresamos al diseño y hacemos doble clic en el botón Borrar para programar su acción: private void btnBorrarActionPerformed(java.awt.event.ActionEvent evt) { txtSalida.setText(""); txtCodigo.setText(""); txtDescripcion.setText(""); txtPrecio.setText(""); txtCodigo.requestFocus(); } Desarrolle la clase de aplicación de nombre Principal en un JFrame. Coloque distribución BorderLayout, vaya a la ficha Source y escriba lo que está en negrita: public class Principal extends javax.swing.JFrame { public Principal() { initComponents(); add(new PanelPrincipal()); setSize(600,200); } Ejecute su aplicación. También puede copiar y pegar la clase Principal desde el proyecto P0101 del laboratorio anterior. Identifique el constructor de las clases Principal y PanelPrincipal.
  • 64. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA Ejercicio 2 Cree un proyecto nuevo de nombre P02E02. Cree un paquete nuevo de nombre p02e02. Diseñe una clase de nombre Persona con los siguientes atributos privados: nombres (cadena), apellidos (cadena), edad(entero), peso(real); con un constructor y con los métodos get/set. Clic derecho en el paquete creado, elegimos New Java Class y escribimos el nombre Persona y escribimos lo siguiente: Ahora, vamos a utilizar NetBeans para que genere, automáticamente, los métodos get/set. Clic derecho en la clase creada, elegimos Refactor, Encapsulate Fields y nos aparece la siguiente ventana donde seleccionamos todo ( Select All)
  • 65. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA En Javadoc elegimos none para evitar los comentarios que genera NetBeans y por último hacemos clic en el botón Refactor. Los métodos generados son: public String getNombres() { return nombres; } public void setNombres(String nombres) { this.nombres = nombres; } public String getApellidos() { return apellidos; } public void setApellidos(String apellidos) { this.apellidos = apellidos; } public int getEdad() { return edad; } public void setEdad(int edad) { this.edad = edad; } public double getPeso() { return peso; } public void setPeso(double peso) { this.peso = peso; } Observe y analice el desarrollo del constructor y el uso de la palabra reservada this. Diseñe la GUI en un Panel de nombre PanelPrincipal para el ingreso de los datos con el siguiente diseño: Cada vez que hace clic en el botón Nuevo debe crear un objeto de la clase Persona y mostrar la información de sus atributos. Cada vez que hace clic en el botón Borrar debe borrar la información del área de texto, de las cajas de texto y enfocar el ingreso en la caja de texto de nombres. Puede copiar y pegar el diseño del proyecto P0102 del laboratorio anterior o hacer nuevamente el diseño con la siguiente referencia: PanelPrincipal con distribución BorderLayout.
  • 66. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA En el norte colocamos otro panel (jPanel1) con distribución BoxLayout donde colocamos las etiquetas y las cajas de texto. En el sur colocamos otro panel (jPanel2) con distribución FlowLayout donde colocamos los botones. En el centro colocamos un área de texto con su propiedad editable desmarcada. Doble clic en el botón Nuevo para programar su acción. (Revise la programación de éste botón en el ejercicio anterior) Regresa al diseño y doble clic en el botón Borrar para programar su acción. (Revise la programación de éste botón en el ejercicio anterior) Desarrolle la clase de aplicación de nombre Principal en un JFrame. Coloque distribución BorderLayout, vaya a la ficha Source y escriba lo que está en negrita: public class Principal extends javax.swing.JFrame { public Principal() { initComponents(); add(new PanelPrincipal()); setSize(600,200); } También puede copiar y pegar la clase Principal desde el proyecto P0102 del laboratorio anterior. Esta clase es la misma, no tiene cambios. Identifique el constructor de las clases Principal y PanelPrincipal. Ejecute su aplicación.
  • 67. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA Ejercicio 3 Cree un proyecto nuevo de nombre P02E03. Cree un paquete nuevo de nombre p02e03. Diseñe una clase de nombre TV con los siguientes atributos privados: serie (cadena), marca (entero), tamaño en pulgadas(entero), precio (real); con un constructor, con los métodos get/set, con un método adicional que devuelve el precio en soles dado el tipo de cambio como parámetro, y con un método adicional que retorne el nombre de la marca. Considere las siguientes marcas: Sony, LG, Samsung, Panasonic, otro. Clic derecho en el paquete creado, elegimos New Java Class y escribimos el nombre TV y escribimos lo siguiente: Ahora, utilcer NetBeans para que genere, automáticamente, los métodos get/set. Clic derecho en la clase creada, elegimos Refactor, Encapsulate Fields y nos aparece la siguiente ventana donde seleccionamos todo ( Select All). Antes de la última llave de cierre escribimos los métodos adicionales solicitados: // metodos adicionales public double precioSoles(double tc){ return precio*tc; } public String nombreMarca(){ switch(marca){ case 1: return "Sony"; case 2: return "LG"; case 3: return "Samsung"; case 4: return "Panasonic"; default: return "Otro"; }
  • 68. ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA } }// última llave de cierre de la clase Observe y analice el desarrollo del constructor y el uso de la palabra reservada this. Diseñe la GUI en un Panel de nombre PanelPrincipal para el ingreso de los datos con el siguiente diseño: Cada vez que hace clic en el botón Nuevo debe crear un objeto de la clase TV y mostrar la información de sus atributos además de su precio en soles considerando un tipo de cambio actual. Cada vez que hace clic en el botón Borrar debe borrar la información del área de texto, de las cajas de texto y enfocar el ingreso en la caja de texto de serie. Puede copiar y pegar el diseño del proyecto P0103 del laboratorio anterior o hacer nuevamente el diseño con la siguiente referencia: PanelPrincipal con distribución BorderLayout. En el norte colocamos otro panel (jPanel1) con distribución BoxLayout donde colocamos las cajas de texto y el comboBox. Utilice la propiedad Border para colocar título en las cajas de texto y utilice la propiedad model para llenar el comboBox. En el sur colocamos otro panel (jPanel2) con distribución FlowLayout donde colocamos los botones. En el centro colocamos un área de texto con su propiedad editable desmarcada. Doble clic en el botón Nuevo para programar su acción: private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) { TV nuevo = new TV(leeSerie(),leeMarca(),leeTamaño(),leePrecio()); lista(nuevo); } private String leeSerie(){return txtSerie.getText();} private int leeMarca(){return cboMarca.getSelectedIndex();} private int leeTamaño(){return Integer.parseInt(txtTamaño.getText());} private double leePrecio(){return Double.parseDouble(txtPrecio.getText());} private void lista(TV t){