Está en la página 1de 114

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. Guas 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
Programacin orientada a objetos, diseo de clases y creacin de objetos.
Programacin orientada a objetos La programacin orientada a objetos es un nuevo enfoque de programacin ya aceptado universalmente por la comunidad de programadores. Esta aceptacin se sustenta en los mltiples beneficios que trae y los resume en sus siguientes caractersticas principales: Abstraccin, a travs de la cual definimos y establecemos el contenido de una clase. Encapsulamiento, a travs 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 travs 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 cdigo ya desarrollado. Esta caracterstica resume la frase aprovecha lo que ya est hecho. Polimorfismo, a travs de la cual se puede programar lo genrico de algn proceso sin saber el detalle de cmo se va a llevar a cabo. Por ejemplo, podemos programar la secuencia genrica de un proceso de clculo sin saber an la forma del clculo que se har. Esta caracterstica se orienta a la construccin de plantillas de uso general para que, a travs de la herencia esas plantillas se puedan particularizar. Diseo de clases Una clase, en la prctica es un nuevo tipo de dato particularizado que se compone de: nombre, atributos, constructores y mtodos. Los atributos representan los datos y/o caractersticas de la clase, los constructores permiten crear objetos de la clase y los mtodos representan la funcionalidad de la clase que ser utilizada por los objetos. Nombre Atributos Constructores

Mtodos

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

Generalmente los atributos son de acceso privado y los mtodos son de acceso pblico. Los contructores tienen el mismo nombre de la clase. Cuando una clase no tiene un constructor explcito, se debe considerar uno implcito, por defecto vaco.

Sintaxis general: public class Nombre{ // atributos privados // constructores pblicos // mtodos de acceso y modificacin pblicos y/o privados } Creacin de objetos Un objeto, en la prctica 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 razn, todos los objetos de una clase tendrn los mismos atributos pero cada uno con valores diferentes. Sintaxis general: Clase objeto; Objeto = new Clase(); Asignacin de objetos Cuando un objeto es asignado a otro, ste guarda la direccin de memoria del objeto existente. Luego, el acceso a los datos puede hacerse por cualquiera de los objetos. Sintaxis general: Clase a, b; a = new Clase(); b = a; // declaracin de 2 objetos // crea un objeto con sus propios datos/atributos // asignacin del objeto a en el objeto b. // declaracin del objeto // creacin del objeto, invoca al constructor

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 Disee una clase de nombre Producto con los siguientes atributos privados: cdigo (cadena), descripcin (cadena), precio (real) y con los mtodos pblicos get/set. Considere un constructor implcito.
public class Producto { // atributos privados prvate String codigo, descripcion; prvate double precio; // mtodos get public String getCodigo(){return codigo;} public String getDescripcion(){return descripcion;} public double getPrecio(){ return precio;} // mtodos 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 diseo de una GUI y programe la accin del botn 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 informacin del nuevo objeto lista(nuevo); } // mtodos que private String private String private double leen los datos de la GUI leeCodigo(){return txtCodigo.getText();} leeDescripcion(){return txtDescripcion.getText();} leePrecio(){return Double.parseDouble(txtPrecio.getText());}

// mtodo que muestra la informacin 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("Codigo\t:"+p.getCodigo()); imprime("Descripcion\t:"+p.getDescripcion()); imprime("Precio\t:"+p.getPrecio()); } // mtodo que muestra una cadena en el objeto de salida de la GUI private void imprime(String s){ txtSalida.append(s+"\n"); }

Ejemplo 2 Disee una clase de nombre Persona con los siguientes atributos privados: nombres (cadena), apellidos (cadena), edad(entero), peso(real) y con los mtodos get/set. Considere un constructor implcito. Considere el siguiente diseo de una GUI y programe la accin del botn Nuevo

Ejemplo 3 Disee una clase de nombre TV con los siguientes atributos privados: serie (cadena), marca (entero), tamao en pulgadas(entero), precio (real) y con los mtodos get/set, con un mtodo adicional que devuelve el precio en soles dado el tipo de cambio como parmetro, y con un mtodo adicional que retorne el nombre de la marca. Considere las siguientes marcas: Sony, LG, Samsung, Panasonic, otro. Considere un constructor implcito. Considere el siguiente diseo de una GUI y programe la accin del botn Nuevo

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

Ejemplo 4 Disee una clase de nombre Fecha con los siguientes atributos privados: dia(entero), mes(entero), ao(entero) y con los mtodos get/set. Considere un constructor implcito. Disee otra clase de nombre DNI con los siguientes atributos privados: numero(cadena), dueo(Persona), fecha de emisin (Fecha), fecha de caducidad(Fecha) y con los mtodos get/set. Considere un constructor implcito. Considere el siguiente diseo de una GUI y programe la accin del botn Nuevo.

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

SEMANA 02
ENCAPSULAMIENTO
Constructores, niveles de acceso, mtodos get/set, palabra reservada this. Creacin de objetos desde una GUI. Constructores
Un constructor es un componente de una clase, a travs de la cual se puede inicializar los atributos de un objeto creado. Cuando una clase no tiene constructor explcito, se considera un constructor implcito por defecto con un bloque de cdigo vaco. Una clase puede tener varios constructores. Sin embargo, deben diferenciarse por la cantidad y/o tipo de parmetros. Cuando se crea un objeto, se invoca automticamente al constructor que corresponda a los parmetros 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: prvate, protected, public. El acceso prvate permite la implementacin de la caracterstica del encapsulamiento, el acceso protected facilita la implementacin de la caracterstica 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 prvate o protected, nunca public. Un constructor siempre debe ser de acceso public. Los mtodos pueden ser de cualquier nivel de acceso, dependiendo de la apertura a la funcionalidad de la clase.

Nivel acceso Prvate Protected public

de En clase SI SI SI

la Desde un objeto

Desde clase (herencia) NO SI SI

hija

NO NO SI

Mtodos get/set Los mtodos get son aquellos que permiten acceder a los atributos desde un objeto. Los mtodos 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 mtodos se han estandarizado, por eso se les conoce como los mtodos get/set. Incluso, los entornos de programacin modernos, como NetBeans, generan la escritura del cdigo correspondiente. Palabra reservada this La palabra reservada this se utiliza para diferenciar el nombre del atributo con el nombre del parmetro cuando stos coinciden. Tambin es utilizada para referirse a la ventana grfica vigente y activa. Por ejemplo:
this.codigo = codigo; JOptionPane.showMessageDialog(this, mensaje de texto);

Ejemplo 1 Disee una clase de nombre Producto con los siguientes atributos privados: cdigo (cadena), descripcin (cadena), precio (real); con un constructor y con los mtodos pblicos 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; } // mtodos 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 diseo y programe la accin del botn 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 Disee una clase de nombre Persona con los siguientes atributos privados: nombres (cadena), apellidos (cadena), edad(entero), peso(real); con un constructor y con los mtodos get/set. Observe y analice el desarrollo del constructor y el uso de la palabra reservada this. Considere el siguiente diseo y programe la accin del botn Nuevo.

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

Ejemplo 3 Disee una clase de nombre TV con los siguientes atributos privados: serie (cadena), marca (entero), tamao en pulgadas(entero), precio (real); con un constructor, con los mtodos get/set, con un mtodo adicional que devuelve el precio en soles dado el tipo de cambio como parmetro, y con un mtodo adicional que retorne el nombre de la marca. Considere las siguientes marcas: Sony, LG, Samsung, Panasonic, otro. Escriba los mtodos adicionales solicitados. Observe y analice el desarrollo del constructor y el uso de la palabra reservada this. Considere el siguiente diseo para programar la accin del botn Nuevo

Ejemplo 4 Disee una clase de nombre Fecha con los siguientes atributos privados: dia(entero), mes(entero), ao(entero), con un constructor y con los mtodos get/set. Disee una clase de nombre DNI con los siguientes atributos privados: numero(cadena), dueo(Persona), fecha de emisin (Fecha), fecha de caducidad(Fecha), con un constructor y con los mtodos get/set. Considere la existencia de la clase Persona desarrollado en la sesin anterior. Considere el siguiente diseo de GUI para programar la accin del botn Nuevo.

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

Ejemplo 5 Disee una clase de nombre Punto con los siguientes atributos privados: x (entero), y (entero), con un constructor y con los mtodos get/set. Disee una clase de nombre Triangulo con los siguientes atributos privados: a(Punto), b(Punto), c(Punto), con un constructor y con los mtodos get/set adems de los mtodos de clculo para los lados del tringulo, para el permetro del tringulo y para el rea del tringulo. Considere el diseo de una GUI para programar la accin del botn 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 informacin de cualquier tipo, considerando los atributos y funcionalidad necesarios para ello. Una clase administradora con arreglos utiliza como atributos: el arreglo, el contador, el tamao. 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 informacin 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: Disee una clase administradora de valores enteros en un arreglo, que permita realizar los procesos que se indican en la siguiente interface grfica de usuario:

Disee una clase de nombre ArregloDeEnteros con los siguientes atributos privados: arreglo de enteros, contador de enteros en el arreglo (entero), tamao(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 tamao = 30; // tamao de valor fijo // constructor public ArregloDeEnteros(){ a = new int[tamao]; n = 0; } }

Considere los mtodos get/set de todos los atributos, excepto del atributo tamao que slo debe tener mtodo get pero no set porque es un valor fijo. Luego, escriba los mtodos de administracin 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 tamao = 30; // tamao de valor fijo // constructor public ArregloDeEnteros(){ a = new int[tamao]; n = 0; } // mtodos 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 getTamao() { return tamao; } // mtodos de administracin public void agrega(int num){ if(n<tamao){ 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 programacin 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 accin del botn Nuevo:


private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) { int num = leeNumero(); int p=ae.busca(num); if(p!=-1) mensaje("Error: El nmero 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 programacin del botn Nuevo se evita la repeticin del nmero ingresado. Vamos a programar la accin del botn Lista:
private void btnListaActionPerformed(java.awt.event.ActionEvent evt) { lista(); }

Vamos a programar la accin del botn Elimina:


private void btnEliminaActionPerformed(java.awt.event.ActionEvent evt) { int num = leeNumero(); int p=ae.busca(num); if(p==-1) mensaje("Error: El nmero ingresado NO existe"); else{ ae.elimina(p); lista(); } }

Vamos a programar la accin del botn Reporte:


private void btnReporteActionPerformed(java.awt.event.ActionEvent evt) { lista(); imprime("El menor valor es\t: "+ae.elMenor()); imprime("El valor promedio es\t: "+ae.promedio()); imprime("El mayor valor es\t: "+ae.elMayor()); }

Vamos a programar la accin del botn Reinicia:


private void btnReiniciaActionPerformed(java.awt.event.ActionEvent evt) { ae.setN(0); mensaje(El arreglo est vaco.); }

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

Ejemplo 2: Disee una clase administradora de valores reales en un arreglo, que permita realizar los procesos que se indican en la siguiente interface grfica de usuario:

Disee una clase de nombre ArregloDeReales con los siguientes atributos privados: arreglo de valores reales, cantidad de nmeros guardados en el arreglo (entero), tamao dinmico(entero), con un constructor y con los mtodos get/set.
public class ArregloDeReales { // atributos private double a[]; // arreglo de reales private int n; // numero de reales en el arreglo private int tamao; // tamao de valor dinmico // constructor public ArregloDeReales(int tamao){ a = new double[tamao]; n = 0; this.tamao=tamao; } }

Considere los mtodos get-set necesarios. Escriba los mtodos de administracin 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 accin de cada uno de los botones.

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

Ejemplo 3: Disee una clase administradora de cadenas en un arreglo, que permita realizar los procesos que se indican en una interface grfica de usuario similar a la del ejercicio anterior. Disee una clase de nombre ArregloDeCadenas con los siguientes atributos privados: arreglo de valores de tipo cadena, cantidad de cadenas guardadas en el arreglo (entero), tamao dinmico(entero), con un constructor y con los mtodos get/set. Escriba los mtodos de administracin 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 accin 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 tendrn uno o ms 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: Disee 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 mtodos get-set. Disee 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 tamao fijo de 50 para el arreglo. Considere dentro de la funcionalidad de la clase los mtodos necesarios de administracin 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 tamao=50; // tamao fijo, constante // constructor public ArregloProductos(){ a = new Producto[tamao]; n=0; }

Escribimos los mtodos adicionales de administracin del arreglo de objetos:


// mtodos de administracin public void agrega(Producto p){ // agrega un nuevo objeto if(n<tamao){ 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 posicin de un objeto, a travs 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 posicin 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 accin de cada botn considerando lo siguiente: En el botn 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 cdigos. En el botn Busca, ubica el objeto que tiene el cdigo ingresado y muestra su informacin. En caso que no lo encuentre muestra un mensaje de error en una ventana. En el botn Modifica, actualiza la informacin de objeto que tiene el cdigo ingresado y muestra un listado de todos los objetos. En el botn Elimina, elimina el objeto que tiene el cdigo ingresado y muestra un listado de todos los objetos. En el botn Lista, muestra un listado de todos los objetos. En el botn Reporte, muestra la siguiente informacin: precio ms alto, precio promedio, precio ms bajo.

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

En el botn Borrar borra la informacin del rea de texto, de las cajas de texto y enfoca el ingreso en la caja de texto del cdigo. Ejemplo 2: Disee 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; } }

Disee 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 tamao fijo de 50 para el arreglo. Considere dentro de la funcionalidad de la clase los mtodos necesarios de administracin del arreglo de objetos para: agregar un nuevo objeto, recuperar, actualizar, buscar, eliminar. Escriba los mtodos adicionales de administracin del arreglo de objetos. Declare y cree el objeto ap de la clase ArregloPersonas. Programe la accin de cada botn considerando lo siguiente:

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

En el botn 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 botn Busca, ubica el objeto que tiene el DNI ingresado y muestra su informacin. En caso que no lo encuentre muestra un mensaje de error en una ventana. En el botn Modifica, actualiza la informacin de objeto que tiene el DNI ingresado y muestra un listado de todos los objetos. En el botn Elimina, elimina el objeto que tiene el DNI ingresado y muestra un listado de todos los objetos. En el botn Lista, muestra un listado de todos los objetos. En el botn Reporte, muestra la siguiente informacin: mayor edad, edad promedio, menor edad, mayor peso, peso promedio, menor peso. En el botn Borrar borra la informacin del rea de texto, de las cajas de texto y enfoca el ingreso en la caja de texto del dni.

Ejemplo 3: Disee una clase administradora con soporte para un arreglo de objetos considerando la siguiente GUI:

Considere la clase TV desarrollada anteriormente. Disee 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 tamao fijo de 50 para el arreglo. Considere dentro de la funcionalidad de la clase los mtodos necesarios de administracin 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 accin de cada botn considerando lo siguiente: En el botn 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 botn Busca, ubica el objeto que tiene la serie ingresada y muestra su informacin. En caso que no lo encuentre muestra un mensaje de error en una ventana. En el botn Modifica, actualiza la informacin de objeto que tiene la serie ingresada y muestra un listado de todos los objetos. En el botn Elimina, elimina el objeto que tiene la serie ingresada y muestra un listado de todos los objetos. En el botn Lista, muestra un listado de todos los objetos. En el botn Reporte, muestra la siguiente informacin: mayor precio, precio promedio, menor precio. Todos los precios en soles y dlares. En el botn Borrar borra la informacin 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 dinmico de cualquier objeto. No tiene restricciones de capacidad. Su tamao se ajusta en forma dinmica utilizando eficientemente la memoria del computador. Tiene un Constructor por defecto que define un tamao inicial de 10. Va creciendo de 10 en 10. Tiene un constructor explcito donde recibe como parmetro el tamao 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: Mtodo int size() void add(obj) Interpretacin Retorna el tamao actual: numero de objetos guardados. Aade un objeto al final del arreglo, incrementando su tamao actual en 1. Devuelve el objeto almacenado a la posicin i en el arreglo. i tiene que ser un entero entre 0 y size()-1. reemplaza el objeto de la posicin index por el objeto obj. Elimina el objeto a la posicin index (index entre 0 y size()-1). Devuelve el objeto eliminado. Los objetos despus de este objeto se trasladan a una posicin anterior. El tamao del ArrayList disminuye en 1. Busca el objeto obj dentro del arreglo, y si lo encuentra, devuelve la posicin donde lo ha encontrado. Si no, devuelve -1.

Object get(i)

void set(index, obj) Object remove(index)

int indexOf(obj)

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 guardarn 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(); } // mtodos de administracin public void agrega(Producto p){ // guarda un Nuevo producto a.add(p); } public Producto getProducto(int i){ // obtiene un producto de la posicin i return a.get(i); } public void actualiza(Producto p, int i){// reemplaza un producto a.set(i, p); } // retorna la posicin de un producto segn su cdigo. 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 posicin 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 muchsimo la administracin de los arreglos de objetos. Por ejemplo ya no debemos preocuparnos por el tamao del arreglo. La programacin de los botones en la clase que tiene el diseo 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 guardarn los objetos. Desarrolle los siguientes mtodos adicionales en la clase administradora: a) Un mtodo que retorne el peso promedio de todas las personas b) Un mtodo que retorne la cantidad de personas cuyo peso se encuentra en un rango dado como parmetros c) Un mtodo que modifique el peso de todas las personas cuyo peso es mayor a 80, incrementndolo 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 guardarn los objetos. Desarrolle los siguientes mtodos adicionales en la clase administradora: a) Un mtodo que retorne la cantidad de televisores que pertenecen a una marca especfica dada como parmetro. b) Un mtodo que retorne el precio promedio de los televisores de una marca especfica dada como parmetro. c) Un mtodo que modifique el precio de todos los televisores incrementndolo en un porcentaje dado como parmetro.

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 Jerarqua de Clases, extends, super
La Herencia es una de las caractersticas ms importantes y beneficiosas para el enfoque de programacin 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, administracin del volumen, mecanismo de encendido/apagado. Al televisor a color le agregaron ms 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 tecnologa digital. En programacin sucede lo mismo, por ejemplo: Existiendo una clase Fecha (clase Padre) cuya funcionalidad soporta un formato de presentacin DD/MM/AA , se puede construir una nueva clase FechaM (clase Hija) cuya funcionalidad soporte ms formatos de presentacin 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 podra utilizar como clase Padre, entonces el nivel de acceso a sus atributos deja de ser prvate y se debe considerar como protected ya que sigue permitiendo el encapsulamiento pero adems 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 prvate para sus atributos, entonces la clase hija tiene que utilizar la funcionalidad pblica de acceso a sus atributos. La palabra reservada que implementa la herencia es extends. Si la clase Padre no tiene un constructor explcito, entonces la clase Hija no est obligada a tenerlo. Sin embargo, cuando la clase Padre s tiene un constructor explcito, 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 mtodos con el mismo nombre que algn mtodo de la clase Padre. Para diferenciar su invocacin al mtodo 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 disee una nueva clase hija de nombre TVH, aplicando herencia, considerando los siguientes atributos protegidos adicionales: origen(entero), tecnologa(entero). Considere para el campo origen: nacional, americano, japons, koreano, chino, otro. Considere para el campo tecnologa: Tradicional, LCD, Plasma, Digital. Considere mtodos adicionales para que retornen el nombre del origen y el nombre de la tecnologa. La nueva clase hija debe ser utilizada para el proceso de la siguiente GUI:

Diseo de la clase hija:


public class TVH extends TV { // atributos protegidos protected int origen, tecnologia; // constructor public TVH(String serie, int marca, int tamao, double precio, int origen, int tecnologia){ // invocacin al constructor de la clase Padre super(serie, marca, tamao, precio); // inicializa sus propios atributos this.origen = origen; this.tecnologia=tecnologia; } // mtodos 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 "Japons"; 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 ningn 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 aplicacin de Herencia: extends, super Programamos la accin del botn Nuevo:
private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) { TVH nuevo = new TVH(leeSerie(),leeMarca(),leeTamao(),leePrecio(), leeOrigen(), leeTecnologia()); lista(nuevo); } private void lista(TVH t){ imprime("Datos de la clase Padre-------------"); imprime("Nro. Serie\t:"+t.getSerie()); imprime("Marca\t:"+t.nombreMarca()); imprime("Tamao\t:"+t.getTamao()); imprime("Precio us$\t:"+t.getPrecio()); imprime("Precio S/.\t:"+t.precioSoles(2.85)); imprime("Datos de la clase Hija--------------"); imprime("Origen\t:"+t.nombreOrigen()); imprime("Tecnologia\t:"+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 invocacin del mtodo lista() y su desarrollo. Repase el desarrollo de los mtodos de lectura de los datos de la GUI y tambin el mtodo imprime(). Ejemplo 2 Considere la existencia de una clase base de nombre Persona ya desarrollada anteriormente y disee 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:

Diseo 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 mtodos get-set. Observe y analice la aplicacin de Herencia. Programe la accin del botn Nuevo

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

Ejemplo 3 Disee una clase padre de nombre PuntoP cuyos atributos sean las coordenadas x,y de su ubicacin en el plano. Considere un constructor con parmetros, la funcionalidad de acceso a sus atributos y un mtodo adicional que retorne la distancia desde su ubicacin hasta el punto de origen. Luego, disee una clase hija de nombre PuntoE que herede a la clase PuntoP y considere un atributo adicional para la coordenada z de su ubicacin en el espacio. Considere un constructor con parmetros, la funcionalidad de acceso a su atributo y un mtodo adicional que retorne la distancia desde su ubicacin hasta el punto de origen. Considere una clase de GUI donde utilice objetos de ambas clases para mostrar su informacin.

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 mtodo puede repetirse con el mismo nombre pero con la condicin de que se diferencien por los parmetros: en nmero y/o en cantidad. Por ejemplo, si existiera un mtodo que suma dos nmeros enteros que recibe como parmetros, tendra la siguiente declaracin: public int suma(int a, int b) Ahora, si quisiramos sumar dos nmeros reales, no tenemos porqu cambiar el nombre al mtodo, 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 quisiramos sumar 3 nmeros enteros, aplicamos sobrecarga as: public int suma(int a, int b, int c) Este concepto de sobrecarga tambin 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 mtodos y los constructores.

Ejemplo 1 Considere la existencia de una clase de nombre TVH desarrollada anteriormente. Disee una nueva clase administradora de nombre ArregloTVH. Considere mtodos 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

// mtodos sobrecargados para agregar public void agrega(TVH t){ a.add(t); } public void agrega(String serie, int marca, int tamao, double precio, int origen, int tecnologia){ a.add(new TVH(serie, marca,tamao,precio,origen,tecnologia)); } // mtodos sobrecargados para obtener public TVH getTVH(int i){ return a.get(i); } public TVH getTVH(){ return a.get(0); } // mtodos 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; } // mtodos 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 accin 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 disee una nueva clase administradora de nombre ArregloPersonasH. Considere mtodos adicionales sobrecargados para flexibilizar el uso de la clase administradora.

Considere el siguiente diseo de GUI

Programe la accin 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: tamao ilimitado y funcionalidad que reducen nuestro cdigo. Sin embargo, todo lo que se guarda en el objeto ArrayList permanece en memoria slo 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 redisean nuestras clases para poder guardar la informacin en un archivo?. La respuesta es NO. Entonces cmo 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 segn 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 lnea 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 mtodos 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(); } // mtodos 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 tamao=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,tamao,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.getTamao()+"/"+ t.getPrecio()+"/"+ t.getOrigen()+"/"+ t.getTecnologia()); } pw.close(); }catch(Exception ex){} } }// fin de la clase

Considere el mismo diseo de GUI

Declare y cree un objeto de la clase ArchivoTVH en la clase de la GUI La grabacin de datos debe hacerse en cada botn que lo requiera. Programe la accin 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 mtodos para leer y para grabar en un archivo de texto. Considere el mismo diseo de GUI

Declare y cree un objeto de la clase ArchivoTVH en la clase de la GUI La grabacin de datos debe hacerse en cada botn que lo requiera. Programe la accin 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 caractersticas fundamentales para cualquier lenguaje orientado a Objetos, La derivacin 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 genrico otorga mayor flexibilidad al momento de programar con Objetos. Observe el siguiente fragmento de cdigo:
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 Tringulo.
Clases Abstractas.

Son clases Padre donde se consideran mtodos que an no se conoce su desarrollo. Recin se conocer en alguna clase Hija. A stos mtodos se les conoce como mtodos abstractos y utilizan la palabra reservada abstract para su identificacin.

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

Cuando una Clase Padre contiene por lo menos un mtodo abstracto se le conoce como Clase Abstracta y tambin debe estar preceda por la palabra reservada abstract. Estas clases pueden tener adems mtodos no abstractos que invoquen a mtodos 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 mtodos abstractos de la clase Padre. Adems, la clase Hija puede redefinir cualquier mtodo de la clase Padre, con el mismo nombre. Incluso pueden utilizar la palabra reservada super para referirse a cualquier mtodo del mismo nombre que est definido en la clase Padre. En el funcionamiento del polimorfismo se puede identificar el concepto de enlace tardo que consiste en que recin se conocer el mtodo a ejecutar en el momento de la ejecucin, ms no en la compilacin.
Uso de "Casting"

El trmino "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" implcitamente, 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 trminos computacionales. Anteriormente se mencion que el "Casting" llevado a cabo con Polimorfismo es implcito, esto se debe a que no se requiere de sintaxis especial, simplemente se convierte una Guitarra a un Instrumento. Sin embargo, para llevar una transformacin en sentido opuesto se requiere de sintaxis adicional para mantener la seguridad de transformacin; 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 explcitamente esta operacin ("DownCasting").

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

Ejemplo 1 Disee una clase abstracta de nombre Figura que tenga un atributo protegido para el nombre de la figura, mtodos get-set, mtodos abstractos para el area() y el perimetro() y un mtodo no abstracto que retorne la informacin correspondiente al nombre, area y permetro de cualquier figura. Luego disee una clase hija de nombre Circulo que herede a la clase Figura que tenga un atributo par a el radio, constructor , mtodos get-set y desarrollo de los mtodos abstractos de la clase padre. Tambin disee una clase hija de nombre Cuadrado que herede a la clase Figura que tenga un atributo para el lado, constructor, mtodos get-set, y desarrollo de los mtodos abstractos de la clase padre. Finalmente, disee una clase de nombre PanelPrincipal con la interface necesaria para crear obejtos de diferente figura. Diseo 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 "Figura\t: "+nombre+"\n"+ "Area\t: "+ area()+"\n"+ "Permetro\t: "+perimetro(); } }

Diseo 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;} }

Diseo 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

Programacin del botn Nuevo Circulo:{ Figura a = new Circulo(leeRadio()); lista(a); } Programacin del botn Nuevo Cuadrado:{ Figura b = new Cuadrado(leeLado()); lista(b); } public void lista(Figura f){ imprime(f.info()); }

Observe el parmetro del mtodo lista() y compruebe la compatibilidad entre la invocacin del mtodo y su desarrollo.
Ejemplo 2 Disee una clase abstracta de nombre Empleado que tenga atributos protegidos para el nombre, apellidos, dni, mtodos get-set, mtodos abstractos para ingresos(), bonificaciones(), descuentos(), un mtodo no abstracto que retorne el sueldoNeto() y otro mtodo no abstracto que retorne la informacin correspondiente al nombre, apellidos, dni, ingresos, bonificaciones, descuentos, sueldo neto de cualquier empleado. Luego, disee una clase hija de nombre EmpleadoVendedor que tenga atributos para monto vendido y porcentaje de comisin, constructor, mtodos get-set, desarrollo de mtodos abstractos. Luego, disee una clase hija de nombre EmpleadoPermanente que tenga atributos para sueldo basico y afiliacin (afp snp), constructor, mtodos get-set, desarrollo de mtodos abstractos. Finalmente, disee 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 Polimrficos
Estos arreglos se caracterizan porque soportan cualquier objeto de las clases descendientes de una jerarqua 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. Disee una clase administradora de nombre ArregloFiguras que permita la administracin 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>(); } // mtodos de administracin 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 mtodos adicionales }

Disee 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(); Programacin del botn Nuevo Circulo:{ Figura a = new Circulo(leeRadio()); lista(a); af.agrega(a); // agrega un objeto Circulo } Programacin del botn 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()); } Programacin del botn 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 genrico. Esto permite darle un nombre diferente antes de mostrar su informacin que es un mtodo comn. Ejemplo 2 Disee una clase abstracta de nombre Empleado que tenga atributos protegidos para el nombre, apellidos, dni, mtodos get-set, mtodos abstractos para ingresos(), bonificaciones(), descuentos(), un mtodo no abstracto que retorne el sueldoNeto() y otro mtodo no abstracto que retorne la informacin correspondiente al nombre, apellidos, dni, ingresos, bonificaciones, descuentos, sueldo neto de cualquier empleado. Luego, disee una clase hija de nombre EmpleadoVendedor que tenga atributos para monto vendido y porcentaje de comisin, constructor, mtodos get-set, desarrollo de mtodos abstractos. Luego, disee una clase hija de nombre EmpleadoPermanente que tenga atributos para sueldo basico y afiliacin (afp snp), constructor, mtodos get-set, desarrollo de mtodos abstractos. Luego, disee una clase administradora de nombre ArregloEmpleados que tenga como atributo un objeto de la clase ArrayList . Considere los mtodos de administracin necesarios para guardar objetos polimrficos de cualquiera de las clases hijas. Finalmente, disee 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 informacin de las figuras en un archivo de texto.

Ejemplo 4 Aplique herencia en el ejemplo2 y desarrolle la clase ArchivoEmpleados que permita grabar la informacin 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. Diseo de GUI. Distribuciones.
Ejercicio 1 Cree un proyecto nuevo de nombre P01E01. Cree un paquete nuevo de nombre p01e01. Disee una clase de nombre Producto con los siguientes atributos privados: cdigo (cadena), descripcin (cadena), precio (real) y con los mtodos pblicos get/set. Disee la GUI en un Panel de nombre PanelPrincipal para el ingreso de los datos con el siguiente diseo:

Cada vez que hace clic en el botn Nuevo debe crear un objeto de la clase Producto y mostrar la informacin de sus atributos. Cada vez que hace clic en el botn Borrar debe borrar la informacin del rea de texto, de las cajas de texto y enfocar el ingreso en la caja de texto del cdigo.

PanelPrincipal con distribucin BorderLayout. En el norte colocamos otro panel (jPanel1) con distribucin BoxLayout donde colocamos las etiquetas y las cajas de texto. En el sur colocamos otro panel (jPanel2) con distribucin 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 distribucin y nombres de los objetos. Damos doble clic en el botn Nuevo para programar su accin:
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("Codigo\t:"+p.getCodigo()); imprime("Descripcion\t:"+p.getDescripcion()); imprime("Precio\t:"+p.getPrecio()); } private void imprime(String s){ txtSalida.append(s+"\n"); }

Regresamos al diseo y hacemos doble clic en el botn Borrar para programar su accin:
private void btnBorrarActionPerformed(java.awt.event.ActionEvent evt) { txtSalida.setText(""); txtCodigo.setText(""); txtDescripcion.setText(""); txtPrecio.setText(""); txtCodigo.requestFocus(); }

Desarrolle la clase de aplicacin de nombre Principal en un JFrame. Coloque distribucin 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 aplicacin.

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. Disee una clase de nombre Persona con los siguientes atributos privados: nombres (cadena), apellidos (cadena), edad(entero), peso(real) y con los mtodos get/set. Disee la GUI en un Panel de nombre PanelPrincipal para el ingreso de los datos con el siguiente diseo:

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

PanelPrincipal BorderLayout.

con

distribucin

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

En el sur colocamos otro panel (jPanel2) con distribucin FlowLayout donde colocamos los botones.

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

Observe la distribucin 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 botn Nuevo para programar su accin. (Revise la programacin de ste botn en el ejercicio anterior) Regresa al diseo y doble clic en el botn Borrar para programar su accin. (Revise la programacin de ste botn en el ejercicio anterior) Desarrolle la clase de aplicacin de nombre Principal en un JFrame. Coloque distribucin 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 aplicacin.

Ejercicio 3 Cree un proyecto nuevo de nombre P01E03. Cree un paquete nuevo de nombre p01e03. Disee una clase de nombre TV con los siguientes atributos privados: serie (cadena), marca (entero), tamao en pulgadas(entero), precio (real) y con los mtodos get/set, con un mtodo adicional que devuelve el precio en soles dado el tipo de cambio como parmetro, y con un mtodo adicional que retorne el nombre de la marca. Considere las siguientes marcas: Sony, LG, Samsung, Panasonic, otro. Disee la GUI en un Panel de nombre PanelPrincipal para el ingreso de los datos con el siguiente diseo:

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

Cada vez que hace clic en el botn Nuevo debe crear un objeto de la clase TV y mostrar la informacin de sus atributos adems de su precio en soles considerando un tipo de cambio actual. Cada vez que hace clic en el botn Borrar debe borrar la informacin del rea de texto, de las cajas de texto y enfocar el ingreso en la caja de texto de serie. PanelPrincipal con distribucin BorderLayout. En el norte colocamos otro panel (jPanel1) con distribucin BoxLayout donde colocamos las cajas de texto y el comboBox. Utilice la propiedad Border para colocar ttulo en las cajas de texto y utilice la propiedad model para llenar el comboBox. En el sur colocamos otro panel (jPanel2) con distribucin FlowLayout donde colocamos los botones. En el centro colocamos un rea de texto con su propiedad editable desmarcada.

Observe la distribucin y los nombres de los objetos. Doble clic en el botn Nuevo para programar su accin:
private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) { TV nuevo = new TV(); nuevo.setSerie(leeSerie()); nuevo.setMarca(leeMarca()); nuevo.setTamao(leeTamao()); 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 leeTamao(){return Integer.parseInt(txtTamao.getText());} private double leePrecio(){return Double.parseDouble(txtPrecio.getText());} private void lista(TV t){ imprime("Nro. Serie\t:"+t.getSerie()); imprime("Marca\t:"+t.nombreMarca()); imprime("Tamao\t:"+t.getTamao()); 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 diseo y doble clic en el botn Borrar para programar su accin:


private void btnBorrarActionPerformed(java.awt.event.ActionEvent evt) { txtSalida.setText(""); txtSerie.setText(""); cboMarca.setSelectedIndex(0); txtTamao.setText(""); txtPrecio.setText(""); txtSerie.requestFocus(); }

Desarrolle la clase de aplicacin de nombre Principal en un JFrame. Coloque distribucin 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 aplicacin.

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. Disee una clase de nombre Fecha con los siguientes atributos privados: dia(entero), mes(entero), ao(entero) y con los mtodos get/set. Disee una clase de nombre DNI con los siguientes atributos privados: numero(cadena), dueo(Persona), fecha de emisin (Fecha), fecha de caducidad(Fecha) y con los mtodos get/set. Disee la GUI en un Panel de nombre PanelPrincipal para el ingreso de los datos de un DNI. Cada vez que hace clic en el botn Nuevo debe crear un objeto de la clase DNI y mostrar la informacin de sus atributos. Desarrolle la clase de aplicacin de nombre Principal en un JFrame. Ejecute su aplicacin.

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

SEMANA 02
GUIA DE LABORATORIO 2 Creacin de objetos desde una GUI. Constructores, encapsulamiento
Ejercicio 1 Cree un proyecto nuevo de nombre P02E01. Cree un paquete nuevo de nombre p02e01. Disee una clase de nombre Producto con los siguientes atributos privados: cdigo (cadena), descripcin (cadena), precio (real); con un constructor y con los mtodos pblicos 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, automticamente, los mtodos 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 botn 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. Disee la GUI en un Panel de nombre PanelPrincipal para el ingreso de los datos con el siguiente diseo:

Cada vez que hace clic en el botn Nuevo debe crear un objeto de la clase Producto y mostrar la informacin de sus atributos. Cada vez que hace clic en el botn Borrar debe borrar la informacin del rea de texto, de las cajas de texto y enfocar el ingreso en la caja de texto del cdigo. Puede copiar y pegar el diseo del proyecto P0101 del laboratorio anterior o hacer nuevamente el diseo con la siguiente referencia: PanelPrincipal con distribucin BorderLayout. En el norte colocamos otro panel (jPanel1) con distribucin BoxLayout donde colocamos las etiquetas y las cajas de texto. En el sur colocamos otro panel (jPanel2) con distribucin FlowLayout donde colocamos los botones. En el centro colocamos un rea de texto con su propiedad editable desmarcada. Doble clic en el botn Nuevo para programar su accin:
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("Codigo\t:"+p.getCodigo());

ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA imprime("Descripcion\t:"+p.getDescripcion()); imprime("Precio\t:"+p.getPrecio()); } private void imprime(String s){ txtSalida.append(s+"\n"); }

Observe y analice la llamada al constructor desarrollado. Regresamos al diseo y hacemos doble clic en el botn Borrar para programar su accin:
private void btnBorrarActionPerformed(java.awt.event.ActionEvent evt) { txtSalida.setText(""); txtCodigo.setText(""); txtDescripcion.setText(""); txtPrecio.setText(""); txtCodigo.requestFocus(); }

Desarrolle la clase de aplicacin de nombre Principal en un JFrame. Coloque distribucin 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 aplicacin.

Tambin 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. Disee una clase de nombre Persona con los siguientes atributos privados: nombres (cadena), apellidos (cadena), edad(entero), peso(real); con un constructor y con los mtodos 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, automticamente, los mtodos 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 botn Refactor. Los mtodos 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. Disee la GUI en un Panel de nombre PanelPrincipal para el ingreso de los datos con el siguiente diseo:

Cada vez que hace clic en el botn Nuevo debe crear un objeto de la clase Persona y mostrar la informacin de sus atributos. Cada vez que hace clic en el botn Borrar debe borrar la informacin 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 diseo del proyecto P0102 del laboratorio anterior o hacer nuevamente el diseo con la siguiente referencia: PanelPrincipal con distribucin BorderLayout.

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

En el norte colocamos otro panel (jPanel1) con distribucin BoxLayout donde colocamos las etiquetas y las cajas de texto. En el sur colocamos otro panel (jPanel2) con distribucin FlowLayout donde colocamos los botones. En el centro colocamos un rea de texto con su propiedad editable desmarcada. Doble clic en el botn Nuevo para programar su accin. (Revise la programacin de ste botn en el ejercicio anterior) Regresa al diseo y doble clic en el botn Borrar para programar su accin. (Revise la programacin de ste botn en el ejercicio anterior) Desarrolle la clase de aplicacin de nombre Principal en un JFrame. Coloque distribucin 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); }

Tambin 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 aplicacin.

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. Disee una clase de nombre TV con los siguientes atributos privados: serie (cadena), marca (entero), tamao en pulgadas(entero), precio (real); con un constructor, con los mtodos get/set, con un mtodo adicional que devuelve el precio en soles dado el tipo de cambio como parmetro, y con un mtodo 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, automticamente, los mtodos 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 mtodos 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. Disee la GUI en un Panel de nombre PanelPrincipal para el ingreso de los datos con el siguiente diseo:

Cada vez que hace clic en el botn Nuevo debe crear un objeto de la clase TV y mostrar la informacin de sus atributos adems de su precio en soles considerando un tipo de cambio actual. Cada vez que hace clic en el botn Borrar debe borrar la informacin 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 diseo del proyecto P0103 del laboratorio anterior o hacer nuevamente el diseo con la siguiente referencia: PanelPrincipal con distribucin BorderLayout. En el norte colocamos otro panel (jPanel1) con distribucin BoxLayout donde colocamos las cajas de texto y el comboBox. Utilice la propiedad Border para colocar ttulo en las cajas de texto y utilice la propiedad model para llenar el comboBox. En el sur colocamos otro panel (jPanel2) con distribucin FlowLayout donde colocamos los botones. En el centro colocamos un rea de texto con su propiedad editable desmarcada. Doble clic en el botn Nuevo para programar su accin:
private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) { TV nuevo = new TV(leeSerie(),leeMarca(),leeTamao(),leePrecio()); lista(nuevo); } private String leeSerie(){return txtSerie.getText();} private int leeMarca(){return cboMarca.getSelectedIndex();} private int leeTamao(){return Integer.parseInt(txtTamao.getText());} private double leePrecio(){return Double.parseDouble(txtPrecio.getText());} private void lista(TV t){

ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA imprime("Nro. Serie\t:"+t.getSerie()); imprime("Marca\t:"+t.nombreMarca()); imprime("Tamao\t:"+t.getTamao()); imprime("Precio us$\t:"+t.getPrecio()); imprime("Precio S/.\t:"+t.precioSoles(2.85)); imprime("----------------------------------"); } private void imprime(String s){ txtSalida.append(s+"\n"); }

Observe y analice la llamada al constructor desarrollado. Regrese al diseo y doble clic en el botn Borrar para programar su accin:
private void btnBorrarActionPerformed(java.awt.event.ActionEvent evt) { txtSalida.setText(""); txtSerie.setText(""); cboMarca.setSelectedIndex(0); txtTamao.setText(""); txtPrecio.setText(""); txtSerie.requestFocus(); }

Desarrolle la clase de aplicacin de nombre Principal en un JFrame. Coloque distribucin 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 aplicacin.

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

Ejercicio 4 Cree un proyecto nuevo de nombre P02E04. Cree un paquete nuevo de nombre p02e04. Disee una clase de nombre Fecha con los siguientes atributos privados: dia(entero), mes(entero), ao(entero), con un constructor y con los mtodos get/set. Disee una clase de nombre DNI con los siguientes atributos privados: numero(cadena), dueo(Persona), fecha de emisin (Fecha), fecha de caducidad(Fecha), con un constructor y con los mtodos get/set.

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

Ahora, vamos a utilizar NetBeans para que genere, automticamente, los mtodos get/set. Clic derecho en la clase creada, elegimos Refactor, Encapsulate Fields. Ahora, copiamos (Copy) la clase Persona del proyecto P02E02 y lo pegamos en ste paquete p02e04 con la opcin Paste, Refactor Copy. Ahora, clic derecho en el paquete creado, elegimos New Java Class y escribimos el nombre DNI y escribimos lo siguiente:
public class DNI { // atributos privados private String numero; private Persona dueo; private Fecha emision, caducidad; // constructor public DNI(String numero, Persona dueo, Fecha emision, Fecha caducidad){ this.numero = numero; this.dueo = dueo; this.emision= emision; this.caducidad=caducidad; }

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

Ahora, vamos a utilizar NetBeans para que genere, automticamente, los mtodos get/set. Clic derecho en la clase DNI, elegimos Refactor, Encapsulate Fields. Verifique la generacin de los mtodos get-set. Disee la GUI en un Panel de nombre PanelPrincipal para el ingreso de los datos de un DNI.

Cada vez que hace clic en el botn Nuevo debe crear un objeto de la clase DNI y mostrar la informacin de sus atributos. Doble clic en el botn Nuevo para programar su accin:
private void btNuevoActionPerformed(java.awt.event.ActionEvent evt) { DNI nuevo = new DNI(leeNumero(), new Persona(leeNombres(), leeApellidos(), leeEdad(), leePeso()), new Fecha(leeDiaEmision(), leeMesEmision(), leeAoEmision()), new Fecha(leeDiaCaducidad(), leeMesCaducidad(), leeAoCaducidad()) ); lista(nuevo); } private String leeNumero(){ return txtNumeroDNI.getText();} private String leeNombres(){return txtNombres.getText();} private String leeApellidos(){ return txtApellidos.getText();} private int leeEdad(){ return Integer.parseInt(txtEdad.getText());} private double leePeso(){ return Double.parseDouble(txtPeso.getText());} private int leeDiaEmision(){ return Integer.parseInt(txtDiaEmision.getText());} private int leeMesEmision(){ return cboMesEmision.getSelectedIndex();} private int leeAoEmision(){ return Integer.parseInt(txtAoEmision.getText());} private int leeDiaCaducidad(){ return Integer.parseInt(txtDiaCaducidad.getText());}

ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA private int leeMesCaducidad(){ return cboMesCaducidad.getSelectedIndex();} private int leeAoCaducidad(){ return Integer.parseInt(txtAoCaducidad.getText());} private void lista(DNI dni){ imprime("Numero DNI\t\t: "+dni.getNumero()); imprime("Nombres\t\t: "+dni.getDueo().getNombres()); imprime("Apellidos\t\t: "+dni.getDueo().getApellidos()); imprime("Edad\t\t: "+dni.getDueo().getEdad()); imprime("Peso\t\t: "+dni.getDueo().getPeso()); imprime("Fecha Emision\t\t: "+dni.getEmision().getDia()+"/"+ dni.getEmision().getMes()+"/"+ dni.getEmision().getAo()); imprime("Fecha Caducidad\t: "+dni.getCaducidad().getDia()+"/"+ dni.getCaducidad().getMes()+"/"+ dni.getCaducidad().getAo()); imprime("--------------------------------------------------"); } private void imprime(String s){ txtSalida.append(s+"\n"); }

Desarrolle la clase de aplicacin de nombre Principal en un JFrame. Ejecute su aplicacin.

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

Ejercicio 5 Cree un proyecto nuevo de nombre P02E05. Cree un paquete nuevo de nombre p02e05. Disee una clase de nombre Punto con los siguientes atributos privados: x (entero), y (entero), con un constructor y con los mtodos get/set. Disee una clase de nombre Triangulo con los siguientes atributos privados: a(Punto), b(Punto), c(Punto), con un constructor y con los mtodos get/set adems de los mtodos de clculo para los lados del tringulo, para el permetro del tringulo y para el rea del tringulo. Disee la GUI en un Panel de nombre PanelPrincipal para el ingreso de los datos de un tringulo. Cada vez que hace clic en el botn Nuevo debe crear un objeto de la clase Triangulo y mostrar la informacin de sus atributos y de clculo. Desarrolle la clase de aplicacin de nombre Principal en un JFrame. Ejecute su aplicacin.

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

SEMANA 03
GUIA DE LABORATORIO 3 Clases administradoras con arreglos.
Ejercicio 1 Cree un proyecto nuevo de nombre P03E01. Cree un paquete nuevo de nombre p03e01. Disee una clase de nombre ArregloDeEnteros con los siguientes atributos privados: arreglo de enteros, numero de enteros en el arreglo (entero), tamao de valor fijo 30.

Clic derecho en el paquete creado, elegimos New Java Class y escribimos el nombre ArregloDeEnteros y escribimos lo siguiente:
public class ArregloDeEnteros { // atributos private int a[]; // arreglo de enteros private int n; // numero de enteros en el arreglo private final int tamao = 30; // tamao de valor fijo // constructor public ArregloDeEnteros(){ a = new int[tamao]; n = 0; } }

Ahora, vamos a utilizar NetBeans para que genere, automticamente, los mtodos get/set con excepcin del tamao que es un atributo de valor fijo. Ahora vamos a escribir en la misma clase, los mtodos que permitan la administracin del arreglo de enteros. Finalmente, nuestra clase quedara as:
public class ArregloDeEnteros { // atributos private int a[]; // arreglo de enteros private int n; // numero de enteros en el arreglo private final int tamao = 30; // tamao de valor fijo // constructor public ArregloDeEnteros(){ a = new int[tamao]; n = 0; } public int[] getA() { return a; } public void setA(int[] a) { this.a = a; } public int getN() { return n; }

ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA public void setN(int n) { this.n = n; } public int getTamao() { return tamao; } // mtodos de administracin public void agrega(int num){ if(n<tamao){ a[n] = num; n++; } } public void elimina(int p){ for(int i=p ; i<n-1; i++) a[i] = a[i+1]; 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 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; } }

Disee la clase gestora en un Panel de nombre PanelPrincipal para el ingreso de los datos:

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

Cada vez que hace clic en el botn Nuevo debe verificar que el nmero ingresado no exista para agregarlo al arreglo y muestre una lista del contenido del arreglo. Cada vez que se hace clic en el botn Lista debe mostrar la informacin del arreglo. Cada vez que hace clic en el botn Elimina debe verificar que el nmero ingresado exista para eliminarlo del arreglo y muestre una lista del contenido del arreglo. Cada vez que se hace clic en el botn Reporte debe mostrar los valores menor, promedio, mayor encontrados en el arreglo. Cada vez que se haga clic en el botn Reinicia debe hacer que el arreglo est vaco. Vamos al diseo: PanelPrincipal con distribucin BorderLayout. En el norte colocamos otro panel (jPanel1) con distribucin BoxLayout donde colocamos la etiqueta y los botones. En el centro colocamos un rea de texto con su propiedad editable desmarcada. Coloque nombres de objetos adecuados. Vamos a la ficha Source para escribir lo que est en negrita:
public class PanelPrincipal extends javax.swing.JPanel { private ArregloDeEnteros ae; /** Creates new form PanelPrincipal */ public PanelPrincipal() { initComponents(); ae = new ArregloDeEnteros(); }

Regresamos al diseo y hacemos doble clic en el botn Nuevo para programar su accin:
private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) { int num = leeNumero(); int p=ae.busca(num); if(p!=-1)

ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA mensaje("Error: El nmero ingresado ya existe"); else{ ae.agrega(num); lista(); } } public int leeNumero(){ return Integer.parseInt(txtNumero.getText()); } 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)); } } public void borra(){ txtNumero.setText(""); txtSalida.setText(""); txtNumero.requestFocus(); } public void imprime(String s){ txtSalida.append(s+"\n"); }

Observe que en la programacin del botn Nuevo se evita la repeticin del nmero ingresado.

Regresamos al diseo y hacemos doble clic en el botn Lista para programar su accin:
private void btnListaActionPerformed(java.awt.event.ActionEvent evt) { lista(); }

Regresamos al diseo y hacemos doble clic en el botn Elimina para programar su accin:
private void btnEliminaActionPerformed(java.awt.event.ActionEvent evt) { int num = leeNumero(); int p=ae.busca(num); if(p==-1) mensaje("Error: El nmero ingresado NO existe"); else{ ae.elimina(p); lista(); } }

Regresamos al diseo y hacemos doble clic en el botn Reporte para programar su accin:
private void btnReporteActionPerformed(java.awt.event.ActionEvent evt) { lista(); imprime("El menor valor es\t: "+ae.elMenor()); imprime("El valor promedio es\t: "+ae.promedio()); imprime("El mayor valor es\t: "+ae.elMayor()); }

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

Regresamos al diseo y hacemos doble clic en el botn Reinicia para programar su accin:
private void btnReiniciaActionPerformed(java.awt.event.ActionEvent evt) { ae.setN(0); mensaje("El arreglo esta vaco."); }

Desarrolle la clase de aplicacin de nombre Principal en un JFrame. Coloque distribucin BorderLayout, vaya a la ficha Source y coloque el PanelPrincipal escribiendo en el constructor lo siguiente:
add(new PanelPrincipal()); setSize(600,250);

Ejecute su aplicacin.

Ejercicio 2 Cree un proyecto nuevo de nombre P03E02. Cree un paquete nuevo de nombre p03e02. Disee una clase de nombre ArregloDeReales con los siguientes atributos privados: arreglo de valores reales, cantidad de nmeros guardados en el arreglo (entero), tamao dinmico(entero), con un constructor y con los mtodos get/set.

Clic derecho en el paquete creado, elegimos New Java Class y escribimos el nombre ArregloDeReales y escribimos lo siguiente:
public class ArregloDeReales { // atributos private double a[]; // arreglo de reales private int n; // numero de reales en el arreglo private int tamao; // tamao de valor dinmico // constructor public ArregloDeReales(int tamao){ a = new double[tamao]; n = 0; this.tamao=tamao; }

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

Ahora, vamos a utilizar NetBeans para que genere, automticamente, los mtodos get/set de todos los atributos. Escribimos los mtodos de administracin tomando como referencia la clase ArregloDeEnteros del ejercicio anterior. Copie la clase gestora PanelPrincipal del proyecto P03E01 y pguelo en ste paquete. Haga los cambios necesarios. Vamos a la ficha Source para escribir lo que est en negrita:
public class PanelPrincipal extends javax.swing.JPanel { private ArregloDeReales ar; /** Creates new form PanelPrincipal */ public PanelPrincipal() { initComponents(); ar = new ArregloDeReales(); }

Regresamos al diseo y hacemos doble clic en el botn Nuevo para programar su accin:

Programe la accin de los botones tomando como referencia el ejercicio anterior. Copie la clase Principal del problema anterior y pguelo en ste paquete. Ejecute su aplicacin.

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

Ejercicio 3 Disee una clase administradora de nombre ArregloDeCadenas con los siguientes atributos privados: arreglo de valores de tipo cadena, cantidad de cadenas guardadas en el arreglo (entero), tamao dinmico(entero), con un constructor y con los mtodos get/set.

Ahora, utilice NetBeans para que genere, automticamente los mtodos get/set. Escriba los mtodos de administracin tomando como referencia la clase ArregloDeEnteros. Copie la clase gestora PanelPrincipal del ejercicio anterior y pguelo en ste paquete. Haga los cambios necesarios. Declare un objeto de la clase ArregloDeCadenas como atributo de la clase PanelPrincipal y en el constructor cree ste objeto para que pueda ser utilizado por todos los botones. Programe la accin de cada botn. Copie la clase de aplicacin Principal del ejercicio anterior y pguelo en ste paquete. Ejecute su aplicacin.

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
GUIA DE LABORATORIO 5 Clases administradoras con arreglos de objetos
Ejercicio 1 Cree un proyecto nuevo de nombre P05E01. Cree un paquete nuevo de nombre p05e01. Copie y pegue en el paquete creado, desde el proyecto P02E01 la clase Producto que tiene los siguientes atributos y constructor:

Disee una nueva clase 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 tamao fijo de 50 para el arreglo. Considere dentro de la funcionalidad de la clase los mtodos necesarios de administracin del arreglo de objetos para: agregar un nuevo objeto, recuperar, actualizar, buscar, eliminar. Clic derecho en el paquete p05e01, seleccionamos New Class, le damos el nombre ArregloProductos y escribimos sus atributos y constructor:
public class ArregloProductos { // atributos private Producto a[]; // arreglo de objetos private int n; // contador de objetos private final int tamao=50; // constructor public ArregloProductos(){ a = new Producto[tamao]; n=0; }

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

Con la ayuda de NetBeans, generamos los mtodos get-set para sus atributos, excepto el tamao. Antes de la ltima llave de cierre escribimos los mtodos adicionales de administracin del arreglo de objetos:
// mtodos de administracin public void agrega(Producto p){ // agrega un nuevo objeto if(n<tamao){ a[n] = p; n++; } } public Producto getProducto(int i){ // recupera un objeto return a[i]; } public void actualiza(Producto p, int i){ // actualize un objeto a[i] = p; } public int busca(String codigo){ // busca y retorna la posicin de un objeto, a travs 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 posicin indicada for(int i=p; i<n-1; i++){ a[i] = a[i+1]; } n--; } public double mayorPrecio(){ 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(){ 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(){ double s=0; for(int i=1; i<n; i++){ s +=getProducto(i).getPrecio(); } return s/n; } }

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

Disee una nueva clase gestora tipo Panel de nombre PanelPrincipal con la interface grfica de usuario necesaria para gestionar, sobre el arreglo de objetos, los procesos considerados en el siguiente diseo:

Vaya a la ficha Source para escribir lo que est en negrita:


public class PanelPrincipal extends javax.swing.JPanel { // atributo ArregloProductos ap; public PanelPrincipal() { initComponents(); ap = new ArregloProductos(); }

Regrese al diseo y con doble clic en cada botn programe su accin considerando lo siguiente: En el botn 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 cdigos. En el botn Busca, ubica el objeto que tiene el cdigo ingresado y muestra su informacin. En caso que no lo encuentre muestra un mensaje de error en una ventana. En el botn Modifica, actualiza la informacin de objeto que tiene el cdigo ingresado y muestra un listado de todos los objetos. En el botn Elimina, elimina el objeto que tiene el cdigo ingresado y muestra un listado de todos los objetos. En el botn Lista, muestra un listado de todos los objetos. En el botn Reporte, muestra la siguiente informacin: precio ms alto, precio promedio, precio ms bajo. En el botn Borrar borra la informacin del rea de texto, de las cajas de texto y enfoca el ingreso en la caja de texto del cdigo. Copie la clase de aplicacin de nombre Principal y pguelo en ste paquete.

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

Ejecute su aplicacin.

Ejercicio 2 Cree un proyecto nuevo de nombre P05E02. Cree un paquete nuevo de nombre p05e02. Disee una nueva clase Persona con los siguientes atributos y constructor:

Con ayuda de NetBeans, genere los mtodos get-set para todos sus atributos. Disee 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 tamao fijo de 50 para el arreglo. Considere dentro de la funcionalidad de la clase los mtodos necesarios de administracin del

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

arreglo de objetos para: agregar un nuevo objeto, recuperar, actualizar, buscar, eliminar. Disee una nueva clase gestora tipo Panel de nombre PanelPrincipal con la interface grfica de usuario necesaria para gestionar, sobre el arreglo de objetos, los procesos considerados en el siguiente diseo:

Vaya a la ficha Source para declarar y crear el objeto de tipo ArregloPersonas Regrese al diseo y con doble clic en cada botn programe su accin considerando lo siguiente: En el botn 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 botn Busca, ubica el objeto que tiene el DNI ingresado y muestra su informacin. En caso que no lo encuentre muestra un mensaje de error en una ventana. En el botn Modifica, actualiza la informacin de objeto que tiene el DNI ingresado y muestra un listado de todos los objetos. En el botn Elimina, elimina el objeto que tiene el DNI ingresado y muestra un listado de todos los objetos. En el botn Lista, muestra un listado de todos los objetos. En el botn Reporte, muestra la siguiente informacin: mayor edad, edad promedio, menor edad, mayor peso, peso promedio, menor peso. En el botn Borrar borra la informacin del rea de texto, de las cajas de texto y enfoca el ingreso en la caja de texto del dni. Copie la clase Principal del ejercicio anterior y pguelo en ste paquete. Ejecute su aplicacin.

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

Ejercicio 3 Cree un proyecto nuevo de nombre P05E03. Cree un paquete nuevo de nombre p05e03. Copie y pegue en el paquete creado, desde el proyecto P02E03 la clase TV. Disee una nueva clase administradora 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 tamao fijo de 50 para el arreglo. Considere dentro de la funcionalidad de la clase los mtodos necesarios de administracin del arreglo de objetos para: agregar un nuevo objeto, recuperar, actualizar, buscar, eliminar. Disee una nueva clase gestora tipo Panel de nombre PanelPrincipal con la interface grfica de usuario necesaria para gestionar, sobre el arreglo de objetos, los procesos considerados en el siguiente diseo:

Vaya a la ficha Source para declarar y crear el objeto de tipo Arreglo TV Regrese al diseo y con doble clic en cada botn programe su accin considerando lo siguiente: En el botn 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.

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

En el botn Busca, ubica el objeto que tiene la serie ingresada y muestra su informacin. En caso que no lo encuentre muestra un mensaje de error en una ventana. En el botn Modifica, actualiza la informacin de objeto que tiene la serie ingresada y muestra un listado de todos los objetos. En el botn Elimina, elimina el objeto que tiene la serie ingresada y muestra un listado de todos los objetos. En el botn Lista, muestra un listado de todos los objetos. En el botn Reporte, muestra la siguiente informacin: mayor precio, precio promedio, menor precio. Todos los precios en soles y dlares. En el botn Borrar borra la informacin del rea de texto, de las cajas de texto y enfoca el ingreso en la caja de texto de la serie. Copie la clase Principal del ejercicio anterior y pguelo en ste paquete. Ejecute su aplicacin.

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

SEMANA 06
GUIA DE LABORATORIO 6 Clases administradoras con arreglo de objetos utilizando plantillas: clase ArrayList
Ejercicio 1 Cree un proyecto nuevo de nombre P06E01. Cree un paquete nuevo de nombre p06e01. Copie y pegue en el paquete creado, desde el proyecto P05E01 las clases ArregloProductos, PanelPrincipal, Principal, Producto.

Modifique el contenido de la clase ArregloProductos, que tenga como atributo privado un objeto de la clase ArrayList donde se guardarn los objetos. Haga doble clic en la clase ArregloProductos para hacer los cambios correspondientes:
import java.util.ArrayList; public class ArregloProductos { // atributos private ArrayList <Producto> a ; // constructor public ArregloProductos(){ a = new ArrayList()<Producto>; } public int getN() { return a.size(); } // mtodos de administracin public void agrega(Producto p){ a.add(p); } public Producto getProducto(int i){ return a.get(i); } public void actualiza(Producto p, int i){ a.set(i, p); } public int busca(String codigo){ for(int i=0; i<getN(); i++){ if(getProducto(i).getCodigo().equals(codigo)) return i; } return -1; } public void elimina(int p){ a.remove(p); } public double mayorPrecio(){ 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; } public double menorPrecio(){ 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 precioPromedio(){ double s=0; for(int i=1; i<getN(); i++){ s +=getProducto(i).getPrecio(); } return s/getN(); } // mtodo get generado con ayuda de NetBeans public ArrayList<Producto> getA() { return a; } }

Las clases PanelPrincipal y Principal quedan igual, sin cambios. Ejecute su aplicacin.

Como puede observar, el uso de una clase plantilla como ArrayList simplifica y facilita la administracin de los arreglos de objetos. Por ejemplo ya no debemos preocuparnos por el tamao del arreglo ya que sta va aumentando dinmicamente de 10 en 10.

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

Ejercicio 2 Cree un proyecto nuevo de nombre P06E02. Cree un paquete nuevo de nombre p06e02. Copie y pegue en el paquete creado, desde el proyecto P05E02 las clases ArregloPersonas, PanelPrincipal, Principal, Persona.

Modifique el contenido de la clase ArregloPersonas, que tenga como atributo privado un objeto de la clase ArrayList donde se guardarn los objetos. Haga doble clic en la clase ArregloPersonas para hacer los cambios correspondientes. Las clases PanelPrincipal y Principal quedan igual, sin cambios. Ejecute su aplicacin.

Ejercicio 3 Cree un proyecto nuevo de nombre P06E03. Cree un paquete nuevo de nombre p06e03. Copie y pegue en el paquete creado, desde el proyecto P05E03 las clases ArregloTV, PanelPrincipal, Principal, TV. Modifique el contenido de la clase ArregloTV, que tenga como atributo privado un objeto de la clase ArrayList donde se guardarn los objetos. Haga doble clic en la clase ArregloTV para hacer los cambios correspondientes. Las clases PanelPrincipal y Principal quedan igual, sin cambios. Ejecute su aplicacin.

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
GUIA DE LABORATORIO 9 Herencia. Jerarqua de Clases. super
Ejercicio 1 Cree un proyecto nuevo de nombre P09E01. Cree un paquete nuevo de nombre p09e01. Considere la existencia de la clase TV desarrollada anteriormente en el proyecto P02E03 y disee una nueva clase hija de nombre TVH, aplicando herencia, considerando los siguientes atributos privados adicionales: origen(entero), tecnologa(entero). Considere para el campo origen: nacional, americano, japons, koreano, chino, otro. Considere para el campo tecnologa: Tradicional, LCD, Plasma, Digital. Considere mtodos adicionales para que retornen el nombre del origen y de la tecnologa.

Copie todo el contenido del paquete p02e03 y pguelo en el paquete creado p09e01. Clic derecho en el paquete creado, elegimos New Java Class y escribimos el nombre TVH y escribimos lo siguiente:

Ahora, con ayuda de NetBeans genere automticamente, los mtodos get/set y antes de la ltima llave de cierre escriba los mtodos adicionales que se indican.
// metodos adicionales public String nombreOrigen(){ switch(origen){ case 1: return "Nacional";

ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA case 2: return "Americano"; case 3: return "Japons"; 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"; } } }// ultima llave de cierre de la clase

Observe y analice la aplicacin de Herencia. Modifique el diseo de la GUI en el panel de nombre PanelPrincipal para el ingreso de los datos, agregue 2 comboBox para el origen y la tecnologa. No olvide cambiar los nombres de variable para stos nuevos objetos.

Cada vez que hace clic en el botn Nuevo cree un objeto de la clase TVH y muestre la informacin de sus atributos adems de su precio en soles considerando un tipo de cambio actual. Cada vez que hace clic en el botn Borrar debe borrar la informacin del rea de texto, de las cajas de texto, volver a la primera opcon de los comboBox y enfocar el ingreso en la caja de texto de serie. Doble clic en el botn Nuevo para programar su accin:
private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) { TVH nuevo = new TVH(leeSerie(),leeMarca(),leeTamao(),leePrecio(), leeOrigen(), leeTecnologia()); lista(nuevo); } private String leeSerie(){return txtSerie.getText();} private int leeMarca(){return cboMarca.getSelectedIndex();} private int leeTamao(){return Integer.parseInt(txtTamao.getText());}

ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA private double leePrecio(){return Double.parseDouble(txtPrecio.getText());} private int leeOrigen(){return cboOrigen.getSelectedIndex();} private int leeTecnologia(){return cboTecnologia.getSelectedIndex();} private void lista(TVH t){ imprime("Datos de la clase Padre-------------"); imprime("Nro. Serie\t:"+t.getSerie()); imprime("Marca\t:"+t.nombreMarca()); imprime("Tamao\t:"+t.getTamao()); imprime("Precio us$\t:"+t.getPrecio()); imprime("Precio S/.\t:"+t.precioSoles(2.85)); imprime("Datos de la clase Hija--------------"); imprime("Origen\t:"+t.nombreOrigen()); imprime("Tecnologia\t:"+t.nombreTecnologia()); imprime("----------------------------------"); } private void imprime(String s){ txtSalida.append(s+"\n"); }

La nueva clase hija tendr acceso a todo lo pblico de la clase padre. Complete la programacin del botn Borrar. Ejecute su aplicacin.

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

Ejercicio 2 Cree un proyecto nuevo de nombre P09E02. Cree un paquete nuevo de nombre p09e02. Considere la existencia de una clase base de nombre Persona ya desarrollada anteriormente en el proyecto P02E02 y disee una nueva clase hija de nombre PersonaH, aplicando herencia, con los siguientes atributos privados adicionales: dni (cadena), email(cadena), foto(cadena).

Prepare una carpeta de nombre fotos dentro de la carpeta src, donde debe tener las fotos de las personas en formato jpg. Copie todo el contenido del paquete p02e02 y pguelo en el paquete creado p07e02. Clic derecho en el paquete creado, elegimos New Java Class y escribimos el nombre PersonaH y escribimos lo siguiente:

Con ayuda de NetBeans, generamos los mtodos get-set Observe y analice la aplicacin de Herencia. Modifique el diseo la GUI en el panel de nombre PanelPrincipal para el ingreso de los datos. Agregue 3 cajas de texto para los nuevos datos y una etiqueta para la imagen de la foto. No olvide cambiar los nombres de variable para stos nuevos objetos.

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

Cada vez que hace clic en el botn Nuevo debe crear un objeto de la clase PersonaH y mostrar la informacin de sus atributos. Cada vez que hace clic en el botn Borrar debe borrar la informacin del rea de texto, de las cajas de texto y enfocar el ingreso en la caja de texto de nombres. Doble clic en el botn Nuevo para programar su accin.
private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) { PersonaH nuevo = new PersonaH(leeNombres(), leeApellidos(), leeEdad(), leePeso(), leeDNI(), leeEmail(), leeFoto()); lista(nuevo); } private void lista(PersonaH p){ imprime("Nombres\t:"+p.getNombres()); imprime("Apellidos\t:"+p.getApellidos()); imprime("Edad\t:"+p.getEdad()); imprime("Peso\t:"+p.getPeso()); imprime("-----datos del hijo"); imprime("DNI\t:"+p.getDni()); imprime("Email\t:"+p.getEmail()); imprime("Foto\t:"+p.getFoto()); lblImagen.setIcon(new ImageIcon(getClass().getResource("/fotos/"+p.getFoto()))); }

Regrese al diseo y doble clic en el botn Borrar para programar su accin.


private void btnBorrarActionPerformed(java.awt.event.ActionEvent evt) { txtSalida.setText(""); txtNombres.setText(""); txtApellidos.setText(""); txtEdad.setText(""); txtPeso.setText(""); txtNombres.requestFocus(); lblImagen.setIcon(null); }

Ejecute su aplicacin:

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

Ejercicio 3 Disee una clase padre de nombre PuntoP cuyos atributos sean las coordenadas x,y de su ubicacin en el plano. Considere un constructor con parmetros, la funcionalidad de acceso a sus atributos y un mtodo adicional que retorne la distancia desde su ubicacin hasta el punto de origen. Luego, disee una clase hija de nombre PuntoE que herede a la clase PuntoP y considere un atributo adicional para la coordenada z de su ubicacin en el espacio. Considere un constructor con parmetros, la funcionalidad de acceso a su atributo y un mtodo adicional que retorne la distancia desde su ubicacin hasta el punto de origen. Considere una clase de GUI donde utilice objetos de ambas clases para mostrar su informacin.

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

SEMANA 10
GUIA DE LABORATORIO 10 Herencia. Sobrecarga.
Ejercicio 1 Cree un proyecto nuevo de nombre P10E01. Cree un paquete nuevo de nombre p10e01. Considere la existencia de una clase de nombre TVH desarrollada anteriormente, en el proyecto p09e01 y disee una nueva clase administradora de nombre ArregloTVH. Considere mtodos adicionales sobrecargados para flexibilizar el uso de la clase administradora.

Clic derecho en el paquete creado, elegimos New Java Class y escribimos el nombre ArregloTVH y escribimos lo siguiente:
public class ArregloTVH { // atributos protegidos protected ArrayList<TVH> a; // constructor public ArregloTVH(){ a = new ArrayList(); } // mtodos sobrecargados public void agrega(TVH t){ a.add(t); } public void agrega(String serie, int marca, int tamao, double precio, int origen, int tecnologia){ a.add(new TVH(serie, marca,tamao,precio,origen,tecnologia)); } public TVH getTVH(int i){ return a.get(i); } public TVH getTVH(){ return a.get(0);} 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; } void elimina(int i){ a.remove(i); } void elimina(String serie){ if(busca(serie)!=null) a.remove(busca(serie)); } void elimina(TVH t){

ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA a.remove(t); } }

Copie las clases PanelPrincipal, TV, TVH, Principal del proyecto P09E01 Modifique el diseo de la clase PanelPrincipal para el mantenimiento:

Programe la accin de los botones y Ejecute su aplicacin.

Ejercicio 2 Cree un proyecto nuevo de nombre P10E02. Cree un paquete nuevo de nombre p10e02. Considere la existencia de una clase de nombre PersonaH desarrollada anteriormente, en el proyecto p09e02 y disee una nueva clase administradora de nombre ArregloPersonasH. Considere mtodos adicionales sobrecargados para flexibilizar el uso de la clase administradora.

Clic derecho en el paquete creado, elegimos New Java Class y escribimos el nombre ArregloPersonasH y escribimos lo siguiente:
public class ArregloPersonasH { // atributos protegidos protected ArrayList<PersonaH> a; // constructor public ArregloPersonasH(){ a = new ArrayList(); } // mtodos sobrecargados public void agrega(PersonaH p){ a.add(p); } public void agrega(String nombres, String apellidos, int edad, double peso, String dni, String email, String foto){ a.add(new PersonaH(nombres,apellidos,edad,peso,dni,email,foto)); } public int getN(){ return a.size();} public PersonaH getPersonaH(int i){ return a.get(i); }

ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA public PersonaH getPersonaH(){ return a.get(0);} PersonaH busca(String dni){ for(int i=0; i<getN(); i++){ if(getPersonaH(i).getDni().equals(dni)) return getPersonaH(i); } return null; } void elimina(int i){ a.remove(i); } void elimina(String dni){ if(busca(dni)!=null) a.remove(busca(dni)); } void elimina(PersonaH ph){ a.remove(ph); } }

Copie las clases PanelPrincipal, Persona, PersonaH, Principal del proyecto P09E02 Modifique el diseo de la clase PanelPrincipal para el mantenimiento:

Programe la accin de los botones y Ejecute su aplicacin.

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
GUIA DE LABORATORIO 12 Herencia con archivos de texto
Ejercicio 1

Cree un proyecto nuevo de nombre P12E01. Cree un paquete nuevo de nombre p12e01. Considere la existencia de las siguientes clases: TV, TVH, ArregloTVH, PanelPrincipal, Principal desarrolladas en el proyecto P10E01.

Clic derecho en el paquete creado, elegimos New Java Class y escribimos el nombre ArchivoTVH y escribimos lo siguiente:
public class ArchivoTVH extends ArregloTVH{ // atributos protegidos protected String nombre; // constructor public ArchivoTVH(String nombre){ super(); this.nombre=nombre; lee(); } // mtodos 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 tamao=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,tamao,precio,origen,tecnologia); linea= br.readLine(); } 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.getTamao()+"/"+

ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA t.getPrecio()+"/"+ t.getOrigen()+"/"+ t.getTecnologia()); } pw.close(); }catch(Exception ex){} } }// fin de la clase

Considere el mismo diseo de la clase PanelPrincipal para el mantenimiento:

Programe la accin de los botones y Ejecute su aplicacin. Cierre el programa y vuelva a ejecutar para verificar la permanencia de los datos.

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

Ejercicio 2 Cree un proyecto nuevo de nombre P12E02. Cree un paquete nuevo de nombre p12e02. Considere la existencia de las siguientes clases: Persona, PersonaH, ArregloPersonasH, PanelPrincipal, Principal desarrolladas anteriormente, en el proyecto p10e02 y disee una nueva clase hija administradora de nombre ArchivoPersonasH.

Considere el diseo de la clase PanelPrincipal para el mantenimiento:

Programe la accin de los botones y Ejecute su aplicacin. Cierre el programa y vuelva a ejecutar para verificar la permanencia de los datos.

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

SEMANA 13
GUIA DE LABORATORIO 13 Polimorfismo. Clases Abstractas. Custing. Arreglos Polimrficos
Ejercicio 1: Nuevo proyecto de nombre P13E01, nuevo paquete de nombre p13e01. Clic derecho en el paquete creado, elegimos New Java Class, escribimos el nombre Figura y lo siguiente:

Nuevamente, clic derecho en el paquete creado, elegimos New Java Class, escribimos el nombre Circulo y lo siguiente:
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;} }

Nuevamente, clic derecho en el paquete creado, elegimos New Java Class, escribimos el nombre Cuadrado y lo siguiente:

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

Ahora, clic derecho en el paquete creado, elegimos New JPanel Form, escribimos el nombre PanelPrincipal y hacemos el siguiente diseo:

Doble clic en el botn Nuevo Circulo para programar su accin:


private void btnNuevoCirculoActionPerformed(java.awt.event.ActionEvent evt) { Figura a = new Circulo(leeRadio()); lista(a); }

Doble clic en el botn Nuevo Cuadrado para programar su accin:


private void btnNuevoCuadradoActionPerformed(java.awt.event.ActionEvent evt) { Figura b = new Cuadrado(leeLado());

ALGORITMICA III
FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA lista(b); } public void lista(Figura f){ imprime(f.info()); }

Desarrolle los mtodos de lectura y el mtodo imprime. Luego, clic derecho en el paquete creado, elegimos New JFrame Form, escribimos el nombre Principal, le ponemos distribucin BorderLayout, vamos a la ficha source y escribimos en el constructor lo siguiente:
add(new PanelPrincipal()); setSize(500,300);

Ya puede ejecutar su aplicacin

Ejercicio 2: Nuevo proyecto de nombre P13E02. Nuevo paquete de nombre p13e02. Clic derecho en el paquete creado, elegimos New Java Class de nombre Empleado donde escribimos su contenido. Luego, clic derecho en el paquete creado, elegimos New Java Class de nombre EmpleadoVendedor donde escribimos su contenido. Luego, clic derecho en el paquete creado, elegimos New Java Class de nombre EmpleadoPermanente donde escribimos su contenido. Luego, clic derecho en el paquete creado, elegimos New JPanel Form de nombre PanelPrincipal con la interface necesaria para crear objetos de diferente tipo de empleado. Finalmente, clic derecho en el paquete creado, elegimos New JFrame Form de nombre Principal donde colocamos nuestro PanelPrincipal y ejecutamos nuestro proyecto.

Ejercicio 3: Nuevo proyecto de nombre P13E03. Nuevo paquete de nombre p13e03. Copie el contenido del paquete p13e01 en ste paquete creado. Disee una clase administradora de nombre ArregloFiguras donde se guarde la informacin de diferentes figuras en un ArrayList (arreglo polimrfico). Luego, en la interfaz modifique y agregue botones para gestionar el mantenimiento de la informacin del ArrayList.

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

Ejercicio 4: Nuevo proyecto de nombre P13E04. Nuevo paquete de nombre p13e04. Copie el contenido del paquete p13e02 en ste paquete creado. Disee una clase administradora de nombre ArregloEmpleados donde se guarde la informacin de diferentes empleados en un ArrayList. Luego, en la interfaz modifique y agregue botones para gestionar el mantenimiento de la informacin del ArrayList.

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

SEMANA 14
ASESORIA EN TRABAJO DE INVESTIGACION

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

REFORZAMIENTO DEL ULTIMO TEMA

SEMANA 17

EVALUACION INTEGRAL

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

También podría gustarte