modulo algorítmica iii - julio vasquez

114
ALGORITMICA III FACULTAD DE CIENCIAS E INGENIERIA DPTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMATICA CONTENIDO 1. Diagrama de unidades de aprendizaje 2. Encapsulamiento 3. Herencia 4. Polimorfismo 5. Guías de laboratorio

Upload: luis-cesar-rojas-chavez

Post on 12-Jul-2015

350 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: 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

Page 2: Modulo Algorítmica III - Julio Vasquez

ALGORITMICA III

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

DIAGRAMA DE UNIDADES DE APRENDIZAJE

ENCAPSULAMIENTO HERENCIA

POLIMORFISMO

Page 3: Modulo Algorítmica III - Julio Vasquez

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

Page 4: Modulo Algorítmica III - Julio Vasquez

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.

Page 5: Modulo Algorítmica III - Julio Vasquez

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

Page 6: Modulo Algorítmica III - Julio Vasquez

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

Page 7: Modulo Algorítmica III - Julio Vasquez

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.

Page 8: Modulo Algorítmica III - Julio Vasquez

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.

Page 9: Modulo Algorítmica III - Julio Vasquez

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

Page 10: Modulo Algorítmica III - Julio Vasquez

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.

Page 11: Modulo Algorítmica III - Julio Vasquez

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.

Page 12: Modulo Algorítmica III - Julio Vasquez

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.

Page 13: Modulo Algorítmica III - Julio Vasquez

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.

Page 14: Modulo Algorítmica III - Julio Vasquez

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];

Page 15: Modulo Algorítmica III - Julio Vasquez

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();

Page 16: Modulo Algorítmica III - Julio Vasquez

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.”);

}

Page 17: Modulo Algorítmica III - Julio Vasquez

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.

Page 18: Modulo Algorítmica III - Julio Vasquez

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.

Page 19: Modulo Algorítmica III - Julio Vasquez

ALGORITMICA III

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

SEMANA 04

EVALUACION

Page 20: Modulo Algorítmica III - Julio Vasquez

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

Page 21: Modulo Algorítmica III - Julio Vasquez

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];

}

Page 22: Modulo Algorítmica III - Julio Vasquez

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.

Page 23: Modulo Algorítmica III - Julio Vasquez

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:

Page 24: Modulo Algorítmica III - Julio Vasquez

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.

Page 25: Modulo Algorítmica III - Julio Vasquez

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.

Page 26: Modulo Algorítmica III - Julio Vasquez

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.

Page 27: Modulo Algorítmica III - Julio Vasquez

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();

}

Page 28: Modulo Algorítmica III - Julio Vasquez

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.

Page 29: Modulo Algorítmica III - Julio Vasquez

ALGORITMICA III

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

SEMANA 07

EVALUACION

Page 30: Modulo Algorítmica III - Julio Vasquez

ALGORITMICA III

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

SEMANA 08

EVALUACION INTEGRAL

Page 31: Modulo Algorítmica III - Julio Vasquez

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.

Page 32: Modulo Algorítmica III - Julio Vasquez

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;

}

Page 33: Modulo Algorítmica III - Julio Vasquez

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("----------------------------------");

}

Page 34: Modulo Algorítmica III - Julio Vasquez

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

Page 35: Modulo Algorítmica III - Julio Vasquez

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.

Page 36: Modulo Algorítmica III - Julio Vasquez

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>();

}

Page 37: Modulo Algorítmica III - Julio Vasquez

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

Page 38: Modulo Algorítmica III - Julio Vasquez

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.

Page 39: Modulo Algorítmica III - Julio Vasquez

ALGORITMICA III

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

SEMANA 11

EVALUACION

Page 40: Modulo Algorítmica III - Julio Vasquez

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

Page 41: Modulo Algorítmica III - Julio Vasquez

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

Page 42: Modulo Algorítmica III - Julio Vasquez

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.

Page 43: Modulo Algorítmica III - Julio Vasquez

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.

Page 44: Modulo Algorítmica III - Julio Vasquez

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.

Page 45: Modulo Algorítmica III - Julio Vasquez

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").

Page 46: Modulo Algorítmica III - Julio Vasquez

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

}

Page 47: Modulo Algorítmica III - Julio Vasquez

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.

Page 48: Modulo Algorítmica III - Julio Vasquez

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:{

Page 49: Modulo Algorítmica III - Julio Vasquez

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.

Page 50: Modulo Algorítmica III - Julio Vasquez

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.

Page 51: Modulo Algorítmica III - Julio Vasquez

ALGORITMICA III

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

SEMANA 15

EVALUACION

Page 52: Modulo Algorítmica III - Julio Vasquez

ALGORITMICA III

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

SEMANA 16

EVALUACION INTEGRAL

Page 53: Modulo Algorítmica III - Julio Vasquez

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.

Page 54: Modulo Algorítmica III - Julio Vasquez

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.

Page 55: Modulo Algorítmica III - Julio Vasquez

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.

Page 56: Modulo Algorítmica III - Julio Vasquez

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:

Page 57: Modulo Algorítmica III - Julio Vasquez

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();}

Page 58: Modulo Algorítmica III - Julio Vasquez

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.

Page 59: Modulo Algorítmica III - Julio Vasquez

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.

Page 60: Modulo Algorítmica III - Julio Vasquez

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)

Page 61: Modulo Algorítmica III - Julio Vasquez

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;

Page 62: Modulo Algorítmica III - Julio Vasquez

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());

Page 63: Modulo Algorítmica III - Julio Vasquez

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.

Page 64: Modulo Algorítmica III - Julio Vasquez

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)

Page 65: Modulo Algorítmica III - Julio Vasquez

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.

Page 66: Modulo Algorítmica III - Julio Vasquez

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.

Page 67: Modulo Algorítmica III - Julio Vasquez

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";

}

Page 68: Modulo Algorítmica III - Julio Vasquez

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){

Page 69: Modulo Algorítmica III - Julio Vasquez

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.

Page 70: Modulo Algorítmica III - Julio Vasquez

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;

}

Page 71: Modulo Algorítmica III - Julio Vasquez

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());}

Page 72: Modulo Algorítmica III - Julio Vasquez

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.

Page 73: Modulo Algorítmica III - Julio Vasquez

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.

Page 74: Modulo Algorítmica III - Julio Vasquez

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;

}

Page 75: Modulo Algorítmica III - Julio Vasquez

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:

Page 76: Modulo Algorítmica III - Julio Vasquez

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)

Page 77: Modulo Algorítmica III - Julio Vasquez

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());

}

Page 78: Modulo Algorítmica III - Julio Vasquez

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;

}

Page 79: Modulo Algorítmica III - Julio Vasquez

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.

Page 80: Modulo Algorítmica III - Julio Vasquez

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.

Page 81: Modulo Algorítmica III - Julio Vasquez

ALGORITMICA III

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

SEMANA 04

EVALUACION

Page 82: Modulo Algorítmica III - Julio Vasquez

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;

}

Page 83: Modulo Algorítmica III - Julio Vasquez

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;

}

}

Page 84: Modulo Algorítmica III - Julio Vasquez

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.

Page 85: Modulo Algorítmica III - Julio Vasquez

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

Page 86: Modulo Algorítmica III - Julio Vasquez

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.

Page 87: Modulo Algorítmica III - Julio Vasquez

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.

Page 88: Modulo Algorítmica III - Julio Vasquez

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.

Page 89: Modulo Algorítmica III - Julio Vasquez

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();

Page 90: Modulo Algorítmica III - Julio Vasquez

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.

Page 91: Modulo Algorítmica III - Julio Vasquez

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.

Page 92: Modulo Algorítmica III - Julio Vasquez

ALGORITMICA III

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

SEMANA 07

EVALUACION

Page 93: Modulo Algorítmica III - Julio Vasquez

ALGORITMICA III

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

SEMANA 08

EVALUACION INTEGRAL

Page 94: Modulo Algorítmica III - Julio Vasquez

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";

Page 95: Modulo Algorítmica III - Julio Vasquez

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());}

Page 96: Modulo Algorítmica III - Julio Vasquez

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.

Page 97: Modulo Algorítmica III - Julio Vasquez

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.

Page 98: Modulo Algorítmica III - Julio Vasquez

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:

Page 99: Modulo Algorítmica III - Julio Vasquez

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.

Page 100: Modulo Algorítmica III - Julio Vasquez

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){

Page 101: Modulo Algorítmica III - Julio Vasquez

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);

}

Page 102: Modulo Algorítmica III - Julio Vasquez

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.

Page 103: Modulo Algorítmica III - Julio Vasquez

ALGORITMICA III

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

SEMANA 11

EVALUACION

Page 104: Modulo Algorítmica III - Julio Vasquez

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()+"/"+

Page 105: Modulo Algorítmica III - Julio Vasquez

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.

Page 106: Modulo Algorítmica III - Julio Vasquez

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.

Page 107: Modulo Algorítmica III - Julio Vasquez

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:

Page 108: Modulo Algorítmica III - Julio Vasquez

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());

Page 109: Modulo Algorítmica III - Julio Vasquez

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.

Page 110: Modulo Algorítmica III - Julio Vasquez

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.

Page 111: Modulo Algorítmica III - Julio Vasquez

ALGORITMICA III

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

SEMANA 14

ASESORIA EN TRABAJO DE INVESTIGACION

Page 112: Modulo Algorítmica III - Julio Vasquez

ALGORITMICA III

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

SEMANA 15

EVALUACION

Page 113: Modulo Algorítmica III - Julio Vasquez

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

Page 114: Modulo Algorítmica III - Julio Vasquez

ALGORITMICA III

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