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