Lab Herencia

30
UNIVERSIDAD DE PANAMÁ CENTRO REGIONAL UNIVERSITARIO DE VERAGUAS FACULTAD DE INFORMÁTICA ELECTRÓNICA Y COMUNICACIÓN INF.222 PROGRAMACIÓN ORIENTADA A OBJETOS PROYECTO #4 “HERENCIA” PROFESOR DIEGO SANTIMATEO ESTUDIANTE MARÍA GONZALEZ 2-721-522 II AÑO II SEMESTRE 2008 1

Transcript of Lab Herencia

Page 1: Lab Herencia

UNIVERSIDAD DE PANAMÁ

CENTRO REGIONAL UNIVERSITARIO DE VERAGUAS

FACULTAD DE INFORMÁTICA ELECTRÓNICA Y COMUNICACIÓN

INF.222

PROGRAMACIÓN ORIENTADA A OBJETOS

PROYECTO #4

“HERENCIA”

PROFESOR

DIEGO SANTIMATEO

ESTUDIANTE

MARÍA GONZALEZ 2-721-522

II AÑO

II SEMESTRE

2008

1

Page 2: Lab Herencia

INTRODUCIÓNEl objetivo de este laboratorio es la utilización de Herencia aplicando Polimorfismo.

Herencia, es un concepto fundamental en la programación orientada a objetos, permite relacionar

las clases de manera jerárquica.

En este laboratorio también se utiliza el concepto de encapsulación, para lograr un mejor manejo de

los métodos de cada clase.

Los invito a que lean este informe para que vean la aplicación del concepto de herencia aplicando

encapsulación.

2

Page 3: Lab Herencia

TABLA DE CONTENIDO

1) Enunciado del Problema

2) Jerarquía

3) UML

4) Documentación de las Clases

5) Documentación de los Métodos de cada Clase

6) Códigos Fuentes

7) Archivos que contiene las cuentas de los Clientes

7.1) Cuentas Bancarias

7.2) Cuentas

8) Resultados de la ejecución para las Cuentas Bancarias

9) Resultados de la ejecución para el archivo Cuentas

10) Conclusión

3

Page 4: Lab Herencia

ENUNCIADO DEL PROBLEMA

En la carpeta solución de parciales de Synergia encontrará la Clase TodoFlujo que

encapsula la configuración de streams para teclado, archivo y URL. En este laboratorio usted

debe crear una subclase de TodoFlujo que aplique polimorfismo y que permita leer un archivo

de texto que contiene transacciones de cuentas de ahorro con los siguientes campos; número de

cuenta, tipo de transacción y un valor que corresponde al dinero de la transacción . Si el tipo es

cero, se trata del saldo anterior de la cuenta, si es uno, corresponde a un depósito y si es dos, la

transacción es un retiro. El archivo está ordenado por número de cuenta y tipo de transacción,

cada transacción se encuentra en una línea diferente. La subclase debe crear un nuevo archivo

con los saldos actualizados, otro con los depósitos y otro con los retiros. En cada archivo el

último registro debe tener tipo tres (3) con número de cuenta 9999 y el valor será la suma de

todos los valores de las transacciones contenidas en él.

4

Page 5: Lab Herencia

JERARQUIA

Clase Principal

5

Clase Captura

Clase Archivo

Clase TodoFlujo

Page 6: Lab Herencia

UML

CLASE TODO FLUJO

public BufferedReader inprivate InputStreamReader isr

public BufferedReader lee()

CLASE CAPTURA

public String Leer()private String Mensajes()public String Valor()

CLASE PRINCIPAL

Esta es la clase donde se hace el llamado de las otras clases.

6

CLASE ARCHIVO

LeerArch(String dat)

Page 7: Lab Herencia

DOCUMENTACIÓN DE LAS CLASESCLASES FUNCIÓN

CLASE PRINCIPAL En esta clase es donde se encuentra el main, es

decir que esta clase es el padre de las demás

clases, por consiguiente encontraremos el

llamado de los métodos necesarios para la

realización del programa y cumplir con el

objetivo del laboratorio.

CLASE CAPTURA Esta clase se encarga de capturar los nombres de

los archivos tanto el archivo que se desea

trabajar y los nuevos archivos que se van a crear.

CLASE TODOFLUJO Para esta clase encontraremos métodos para la

realización del programa; un constructor que me

permite preparar mediante el BufferReader un

archivo para lectura y relacionado a esté un

método que me retorna la variable que contiene

el contenido del archivo listo para ser leído.

Otro del los métodos es el que me crea los

archivos para escritura que esta relacionado con

otro método que permite escribir en los

respectivos archivos los datos correspondiente a

cada archivo y cerrarlos.

SUBCLASE ARCHIVO Esta clase es subclase de TodoFlujo y por lo

tanto puede acceder a los métodos y

constructores de la clase TodoFlujo, a esto le

llamaremos polimorfismo.

Aquí se encontrará, aplicando polimorfismo, la

utilización de métodos y constructores de la

clase TodoFlujo, también se encontrará un

método que realiza las operaciones necesarias

para llevar a cabo el objetivo de este laboratorio.

7

Page 8: Lab Herencia

DOCUMENTACIÓN DE LOS MÉTODOS PARA CADA CLASE

CLASE PRINCIPAL

METODOS FUNCIONAMIENTOEsta clase no contiene métodos Sin embargo aquí se encuentra el llamado de los

métodos de otras clases para la ejecución del

programa.

CLASE CAPTURAMETODO FUNCIONAMIENTO

Leer() Es donde se captura el nombre del archivo en la

cual se va a trabajar y luego lo retorna

Mensajes() En este método se captura los nombres del los

nuevos archivos que se desean crear y retorna

dichos nombres, este método es privado.

Valor() Es un método publico, la operación que realiza

este método es mediante un split separar los

nombres del archivo para luego retornarlo a la

clase padre para que este lo envié a la clase que

necesita estos datos.

8

Page 9: Lab Herencia

CLASE TODOFLUJO

METODOS FUNCIONAMIENTOlee() Este método es publico y retorna la variable que

contiene el archivo para ser leído por el usuario.

ArchEscritura(String n) Es un método privado, su trabajo es crear los

nuevos archivos para escritura y retorna el

archivo creado.

EscribirArch(String d,String linea) Tiene dos parámetros que es el nombre del

archivo y sus respectivos datos.

Su trabajo es mediante el llamado del método

anterior, escribir los datos en los archivos y

cerrarlos dichos archivos.

SUBCLASE ARCHIVOMETODOS FUNCIONAMIENTO

LeerArch(String dat) Este es el método que realiza las operaciones

necesarias para lograr el objetivo del laboratorio.

En este método se utiliza el polimorfismo, es

decir que se utiliza los métodos de la clase

TodoFlujo para la escritura de los datos en los

archivos correspondientes.

9

Page 10: Lab Herencia

CODIGOS FUENTESPara el desarrollo de este proyecto se utilizó cuatro clases usando herencia, polimorfismo y

encapsulación. A continuación se presenta los códigos respectivos.

CÓDIGO DE LA CLASE PRINCIPAL

import javax.swing.*;class Principal{ public static void main(String[] args) { String dat,mensaje=""; int i=0; Captura datos= new Captura(); dat=datos.Leer();

try {

mensaje=datos.Valor();Archivo nom=new Archivo(dat);

nom.LeerArch(mensaje);

}catch(Exception e){

}

}//fin main

}//fin principal

1

Page 11: Lab Herencia

CÓDIGO DE LA CLASE CAPTURA

import javax.swing.*;/*CLASE QUE CAPTURA DATOS */class Captura{

public String Leer(){

String nombre=JOptionPane.showInputDialog("ESCRIBE EL NOMBRE DEL ARCHIVO ");

return(nombre);}//fin Leer

private String Mensajes()/*Construye el mensaje para indicar al usuario el nombre de los archivos que el usuario debe introducir*/{

String entrada="";

entrada+="Indoque el nombre del archivo para guardar los saldos actualizados"+";";

entrada+="Indique el nombre del archivo para guardar los depositos actualizados"+";";

entrada+="Indique el nombre del archivo para guardar los retiros actualizados";

return(entrada);}//fin mensaje

public String Valor() /*METODO PARA SEPARAR EL NOMBRE DE LOS ARCHIVOS*/{

String mensaje="",n="";int i=0;mensaje=Mensajes();

String men[]=mensaje.split(";"); while(i<men.length) {

n+= JOptionPane.showInputDialog(null,men[i])+":"; i++;

}return(n);

11

Page 12: Lab Herencia

}//fin valor}//fin Captura

CÓDIGO DE LA CLASE TODOFLUJOimport java.io.*;import javax.swing.*;import java.net.*;import java.lang.String;

public class TodoFlujo{

public BufferedReader in;private InputStreamReader isr;

public TodoFlujo(String nombre)throws IOException{//modela el flujo para archivo de texto

FileReader arch1 = new FileReader(nombre);this.in = new BufferedReader(arch1);

}

public TodoFlujo()throws IOException{// lectura estadar //tecladothis.isr=new InputStreamReader(System.in);this.in = new BufferedReader(isr);

} //sobrecargamos el contructor

public TodoFlujo(int w,String nombre)throws IOException{//url

URL rutaservi=new URL(nombre);URLConnection pag=rutaservi.openConnection();InputStream is=pag.getInputStream();this.isr=new InputStreamReader(is);this.in = new BufferedReader(isr);

}

public BufferedReader lee() throws IOException{//la lectura se hace fuera de la clase

return(in);}

//METODO QUE CREA ARCHIVOS PARA ESCRITURA private PrintWriter ArchEscritura(String n)throws IOException{

1

Page 13: Lab Herencia

PrintWriter Escribir=new PrintWriter(n); return(Escribir);

}

//METODO QUE GRAVA LOS DATOS EN EL ARCHIVO Y CIERRA EL ARCHIVO public void EscribirArch(String d ,String linea)throws IOException { PrintWriter arch=ArchEscritura(d); String[] lon=linea.split(";");//SEPARA LA TRANSACION DE CADA CUENTA for(int i=0;i<lon.length;i++) arch.println(lon[i]); arch.close(); }}//Fin de la clase maneja Fichero

1

Page 14: Lab Herencia

CÓDIGO DE LA SUBCLASE ARCHIVO

/*ESTE PROGRAMA LEE UN ARCHIVO DE TEXTO QUE CONTIENE TRANSACCIONES

ESTAS TRANSACCIONES SON: SALDO ANTERIOR DE LA CUENTA,DEPÓSITOS DE LA CUENTA Y RETIROS

POR CADA TIPO DE TRANSACION CREA UN NUEVO ARCHIVO CON SUS VALORES */import java.lang.String;import java.io.*;import java.io.*;

class Archivo extends TodoFlujo{

public Archivo() throws IOException{ }//fin constructor

public Archivo(String nombre)throws IOException {

super(nombre); //invoca al constructor de la clase TodoFlujo}//fin

//METODO QUE LEE UN ARCHIVO PARA REALIZAR LAS OPERACIONES

public void LeerArch(String dat)throws IOException { //delcaracion de las variables String codigo=" ",sal="",reti="",depo="";

String line = ""; Double saldos=0.00,valor=0.00;

Double dep=0.00,ret=0.00,sal_act=0.00,dep_tot=0.00,ret_tot=0.00;

String cat[]=dat.split(":");//separa los nombres de los archivos try {

while ((line = super.lee().readLine()) != null)//lee cada linea del archivo {

String [] se= line.split(" ");//separa los datos de la linea

1

Page 15: Lab Herencia

valor=Double.parseDouble(se[2]);

if(se[1].equals("0"))//verifica transacion del saldo anterior { if(saldos!=0.00) {

sal_act+=saldos;//variable

dep_tot+=dep;//

ret_tot+=ret;

sal+=codigo+" "+"0"+" "+saldos+";";

depo+=codigo+" "+"1"+" "+dep+";";

reti+=codigo+" "+"2"+" "+ret+";";

dep=0.00; ret=0.00; }//fin del if

codigo=se[0]; /* */ saldos=valor;

}//fin del if que verifiva el tipo de transacion "0"

if(se[1].equals("1"))//verifica transacion de retiro {

dep+=valor;

saldos+=valor;

}//fin if de retiro

else if((se[1].equals("2"))&&(saldos>valor))//verifica transacion de deposito {

ret+=valor;

saldos=saldos-valor;}

}//fin wihile

1

Page 16: Lab Herencia

sal_act+=saldos; sal+=codigo+" "+"0"+" "+saldos+";"+"9999"+" "+"3"+" "+sal_act;

dep_tot+=dep; depo+=codigo+" "+"1"+" "+dep+";"+"9999"+" "+"3"+" "+dep_tot;

ret_tot+=ret; reti+=codigo+" "+"2"+" "+ret+";"+"9999"+" "+"3"+" "+ret_tot;

super.EscribirArch(cat[0],sal); super.EscribirArch(cat[1],depo); super.EscribirArch(cat[2],reti); // invoca al metodo de la clase TodoFlujo

in.close(); }//fin del trycatch(Exception e){ }//fin catch

}//fin LeerArch

}//fin Archivo

1

Page 17: Lab Herencia

ARCHIVOS QUE CONTIENE CUENTAS DEL CLIENTE CON SUS TIPOS DE TRANSACCIONES Y SALDOS.

CUENTAS BANCARIAS

CUENTAS

1

Page 18: Lab Herencia

RESULTADO DE LA EJECUCIÓN DEL PROGRAMA PARA EL ARCHIVO CUENTAS BANCARIAS.

Escribimos el nombre del archivo que se desea trabajar.

Escribimos el nombre del archivo para los saldos actualizados.

Escribimos el nombre del archivo para los depósitos actualizados.

Se escribe el nombre del archivo para los retiros actualizados.

1

Page 19: Lab Herencia

LOS NUEVOS ARCHIVOS CREADOS

Archivo para los saldos actualizados de cada cuenta

Archivo para los depósitos actualizados de cada cuenta

1

Page 20: Lab Herencia

Archivos para los retiros actualizados para cada cuenta

2

Page 21: Lab Herencia

RESULTADO DE LA EJECUCIÓN DEL PROGRAMA PARA EL ARCHIVO CUENTAS.

En esta pantalla gráfica se muestra el nombre del archivo que se desea trabajar.

Esta pantalla gráfica se introduce el nombre del archivo para los saldos actualizados.

Se escribe el nombre del archivo para los depósitos actualizados.

Con esta pantalla gráfica se escribe el nombre del archivo para los retiros

2

Page 22: Lab Herencia

actualizados

LOS NUEVOS ARCHIVOS CREADOS PARA EL ARCHIVOCUENTAS

Archivo de saldos actualizados

Archivos de depósitos actualizados

2

Page 23: Lab Herencia

Archivo de retiros actualizados

2

Page 24: Lab Herencia

CONCLUSIÓN

Herencia es otro de los conceptos que tiene la programación orientada a objeto

(POO), en este trabajo también se utilizó otros conceptos de la POO para que el

programa se realizara de una mejor manera.

El manejo de herencia es una operación un poco complicada hay que tener mucho

cuidado al momento del llamado en la clase principal.

Espero que este trabajo le haya ayudado de mucho para entender un poco de

herencia.

2