Trabajo Escrito Herencia

  • Uploaded by: Euris Morales
  • 0
  • 0
  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Trabajo Escrito Herencia as PDF for free.

More details

  • Words: 2,693
  • Pages: 25
UNIVERSIDAD NACIONAL CENTRO REGIONAL UNIVERSITARIO DE VERAGUAS FAC. DE INFORMÁTICA ELECTRÓNICA Y COMUNICACIÓN LICENCIATURA DE INGENIERÍA EN INFORMÁTICA PROGRAMACIÓN III

LABORATORIO HERENCIA FACILITADOR DIEGO SANTIMATEO ESTUDIANTES EURIS MORALES 9-726-1057 SEGUNDO SEMESTRE

FECHA DE ENTREGA NOVIEMBRE 2008

INTRODUCCIÓN El lenguaje Java permite el empleo de la herencia, característica que permite definir una clase tomando como base a otra clase ya existente. Esto es una de las bases de la reutilización de código, en lugar de copiar y pegar. La herencia se considera como un concepto fundamental en la programación orientada a objetos ya que esta puede hacer relaciones con otras clases de manera jerárquica. A continuación observara el funcionamiento de una clase y una subclase la forma en que se accede y el funcionamiento del polimorfismo.

CONTENIDO 1. Objetivos del laboratorio 2. Planteamiento del problema 3. Interfaz grafica 3.1 Archivo Original 3.2 Archivo para saldos 3.3 Archivo para depositos 3.4 Archivo para retiros 3.5 Errores 4. Archivos de texto 4.1 Archivo de datos originales 4.2 Archivo de transacciones Actualizadas 4.3 Archivo de depositos Actualizados 4.4 Archivo de retiros Actualizados 5. Esquema de funcionamiento del programa 6. UML 7. Tablas 7.1 Declaración de objetos y métodos de las clases 8. Código Fuente 9. Conclusión

OBJETIVOS

Objetivos generales:

 Comprender el

lenguaje java para llevar a cabo la programación orientada a

objetos.

Objetivos específicos:

 Comprender el manejo del concepto de Herencia y Polimorfismo.  Realizar una aplicación que pueda procesar datos de un archivo y actualizarlos en

distintos archivos de acuerdo con el tipo de cuenta especificado.

HERENCIA 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. Este es un trabajo voluntario e individual Entrega Presentar la estructura del programa (UML) con la respectiva documentación de las clases, variables de instancias y comportamiento, el código fuente y evidencia de la ejecución, con suficientes pruebas.

Los interesados sustentarán el viernes 21 de noviembre y entregarán el informe impreso.

INTERFAZ GRAFICA

Archivo Original

Interfaz grafica donde se muestra como el usuario debe introducir el nombre del archivo que se va a procesar (archivo ya confeccionado). Para este caso el nombre que tiene este archivo es datos y su extension es txt porque es un archivo de texto. Archivo para saldos

Interfaz grafica donde se muestra como el usuario debe introducir el nombre del primer archivo o el archivo que va a contener los saldos de cada una de las cuentas . Para este caso el nombre que se utilizo fue saldos, pero a diferencia del archivo de lectura este (nombre de archivo) se puede cambiar a criterio del usuario con la extension txt. Archivo para depositos

Interfaz grafica donde se muestra como el usuario debe introducir el nombre del archivo que va a contener los depositos de cada una de las cuentas . Para este caso el nombre que se utilizo fue depositos , pero a diferencia del archivo de lectura este tambien se puede cambiar a criterio del usuario .Al igual que los demas archivos este debe tener la extension txt.

Archivo para retiros

Interfaz grafica donde se muestra como el usuario debe introducir el nombre del archivo que va a contener los retiros de cada una de las cuentas . Para este caso el nombre que se utilizo fue retiros , pero a diferencia del archivo de lectura este tambien se puede cambiar a criterio del usuario. Al igual que los demas archivos este debe tener la extension txt. Errores

Interfaz grafica donde se muestra al usuario cuando introduce datos incorrectos como el nombre del archivo original o la falta de la extension del archivo

ARCHIVOS DE TEXTO Archivo de datos originales

En este archivo se muestra los datos que se van a procesar(actualizarlos en otros archivos ) Archivo de transacciones Actualizadas

En este archivo se muestra los saldos actualizados para cada cuenta En la cuenta 99999 está la suma de los saldos de las cuentas

Archivo de depósitos actualizados

Este archivo muestra la suma de los depósitos. Hay dos cuentas que tienen depósitos 0.0 porque no hubo depósitos

Archivo de retiros actualizados

En este archivo se muestran los retiros actualizados pero solo los retiros que se puedan efectuar (si el saldo es mayor que los retiros) En el número de cuenta 99999 se muestra la suma de todos los retiros efectuados en cada cuenta

Esquema de funcionamiento del programa

1 Clase principal

4 Clase subclase

2 Clase lectura

3 Clase Todo Flujo



Clase principal: Controla la ejecución del programa



Clase Todo flujo: Clase que modela el flujo para archivo de texto.



Clase subclase: Clase que procesa el archivo que contiene los datos y crea los archivos para escribir los datos actualizados.



Clase Lectura: Clase de entrada y salida de datos

Nota: La clase lectura solo regresa o devuelve datos a la clase principal solo cuando entran datos al programa (nombres de los archivos) cuando la subclase invoca a la clase lectura es solo para la salida.

UML

class Principal

Atributos datos arch_lectura arch_saldo arch_depositos flujo llamar Métodos

class subclase extends TodoFlujo Atributos suma_saldos suma_depositos sum_tranc_final sum_ret_fin suma_retiros sum_dep_fin line aux dinero Métodos split() lecarchivo

class Lectura Atributos Información k Métodos error() nombre() salida() escribir() split() length

class TodoFlujo Atributos Isr In w name Métodos TodoFlujo() TodoFlujo() TodoFlujo()

Clase Principal Esta clase es la que se encarga de manejar del funcionamiento del programa Tabla que muestra los objetos que se utilizaron el programa Tipo Objeto Utilidad String arch_lectura Objeto que recibe (retorno de la clase de entrada y salida) el nombre del archivo que se va a procesar String arch_saldo Objeto que recibe el nombre del archivo que va a contener los saldos actualizados String arch_depositos Se encarga de recibir el nombre del archivo que va a contener los depósitos actualizados String arch_retiros Objeto que recibe el nombre del archivo que va a contener los retiros actualizados subclase flujo Objeto que se encarga de invocar a métodos que se encuentran en la clase subclase Nota: En la clase principal no se utilizo ningún método solo se accede a ellos

Clase Lectura Clase de entrada y salida de datos Tabla que muestra los objetos que se utilizaron el programa Tipo Objeto Utilidad String información Objeto que almacena el nombre de los archivos Int k Objeto que contiene el tipo de cuenta , este determina en que archivo se deben escribir los datos finales String datos Objeto que contiene los datos finales que se van a escribir en los archivos Tabla que muestra los Métodos que se utilizaron el programa Método Utilidad error() Método que despliega un mensaje de error cuando se introducen nombres de archivos incorrectamente nombre() Método donde se introduce el nombre del archivo que se va a procesar salida() Método donde se introducen los nombres de los archivos de salida escribir() Método donde se escribe en los tres nuevos archivos los datos finales de cada transacción

Clase Todo flujo En esta clase es en donde se prepara el archivo de lectura para su posterior utilización. Tabla que muestra los Métodos que se utilizaron el programa Métodos Utilidad TodoFlujo

modela el flujo para archivo de texto

Clase Subclase En esta clase es en donde se crea los tres archivos donde estarán los datos actualizados y se procesara el archivo original Tabla que contiene los objetos que se utilizaron y su funcionamiento Tipo objeto utilidad Double suma_saldos Se encarga de almacenar la suma de cada uno de los saldos de cada cuenta Double

suma_retiros

Objeto que almacena la suma los retiros de cada cuenta

Double

suma_depositos

Se encarga de almacenar la suma de los depósitos de cada cuenta

Double

sum_tranc_final

Objeto que almacena la suma total de las cuentas esta suma estará en otra cuenta (9999)

Double

sum_ret_fin

Se encarga de almacenar la suma total de los retiros este estará en otra cuenta (9999)

Double

sum_dep_fin

Objeto que almacena la suma total de los retiros está suma estará en la cuenta 9999

Int

tip_cuent

Objeto que contiene el tipo de cuenta ya sea un saldo anterior un deposito o un retiro (0,1,2)

int

dinero

Objeto que contiene el saldo o dinero que se encuentra en cada tipo de cuenta

String

cuenta

Objeto que almacena el numero de cuenta para todos los que existen en el archivo original

String

tra_fin

Se utilizo para almacenar los saldos finales y demás datos que corresponden al archivo de los saldos actualizados

String

dep_fin

String

ret_fin

Objeto que almacena los depósitos finales que se van a escribir en el archivo de depósitos finales Se encarga de almacenar los retiros que se van a escribir en el archivo de los retiros actualizados

Clase subclase Tabla que muestra los métodos utilizados en esta clase y su funcionamiento Objeto

Utilidad

lecarchivo

En este método es donde se procesa el archivo original y donde se crea los tres nuevos archivos

split()

Método que corta cadenas de caracteres de acuerdo con la opción que el programador le asigne

readLine()

efectúa la lectura de la cadena

CÓDIGO FUENTE DEL PROGRAMA CLASE PRINCIPAL //clase que controla toda la ejecucion del programa import java.lang.String.*; import javax.swing.*; import java.io.*; import javax.swing.JOptionPane; public class Principal{

//clase principal

public static void main(String args[])throws IOException { try{ Lectura datos= new Lectura(); String arch_lectura=datos.nombre();//invocación del método donde el usuario introduce nombre del archivo de lectura String arch_saldo = datos.salida();//invocación del método donde el usuario introduce el nombre de //archivo de escritura String arch_depositos = datos.salida();//Invocación del método donde se introduce el nombre del segundo archivo de escritura String arch_retiros = datos.salida();//Invocacion del metodo donde se introduce el nombre del tercer archivo de escritura

subclase flujo=new subclase(arch_lectura); subclase llamar=new subclase(); flujo.lecarchivo(arch_saldo,arch_depositos,arch_retiros);//método de lectura del archivo } //fin del try catch(Exception texto) //excepción cuando el dato introducido es incorrecto

{ Lectura datos9= new Lectura(); //clase de entradas y salidas de datos datos9.error();//metodo que se invoca para enviar un mensaje de error }//fin del catch }//fin del main

} //fin de la clase

CLASE LECTURA

//clase que captura la entrada y salida de datos al programa import javax.swing.JOptionPane; import java.io.*; import java.util.*; public class

Lectura//clase de entrada y salida de datos

{

/////metodo que despliega error al introducir datos equivocados//////////// public void

error()

{ JOptionPane.showMessageDialog(null,"Error de captura","Informacion No Valida",JOptionPane.ERROR_MESSAGE);

} ///////Metodo Donde se introduce el nombre del archivo txt////////

public

String nombre()

{ String informacion= JOptionPane.showInputDialog(null,"Introduzca el Nombre del archivo de lectura",JOptionPane.QUESTION_MESSAGE); return(informacion); } //////metodo donde se introduce el nombre de los archivos que se van a crear public

String salida()

{ String informacion= JOptionPane.showInputDialog(null,"Introduzca el Nombre de archivo de escritura ",JOptionPane.QUESTION_MESSAGE); return(informacion); } public void escribir(PrintWriter dat,String datos,int k)//metodo para escribir en los archivos { if(k==0){dat.println("

"+" ");

dat.println("Archivo de transacciones actualizadas ");dat.println(" "+" "); dat.println("...................................................." ); dat.println(" Cuenta"+"

"+"Tip De Cuenta"+"

"+" Saldos");

dat.println("...................................................." ); dat.println("

");}

else{ if(k==1){dat.println("

");

dat.println("Archivo de depositos actualizados ");

");dat.println("

dat.println("...................................................." ); dat.println(" Cuenta"+"

"+"Tip De Cuenta"+"

"+" depositos");

dat.println("...................................................." ); dat.println(" else

");}

{dat.println("

");

dat.println("Archivo de retiros actualizadoss ");

");dat.println("

dat.println("...................................................." ); dat.println(" Cuenta"+"

"+"Tip De Cuenta"+"

"+" Retiros");

dat.println("...................................................." ); dat.println(" ");}}

String[] imprimir=datos.split(","); for(int i=0;i
CLASE SUBCLASE //clase donde se procesa el archivo de escritura y se crean los nuevos archivos //donde se actualizan las cuentas de acuerdo al saldo, depositos y retiros. import java.io.*; import javax.swing.*; import java.net.*; public class subclase extends TodoFlujo{ public subclase()throws IOException{} public subclase(String arch)throws IOException{//modela el flujo para archivo de texto super(arch); } public void lecarchivo(String saldo,String depositos,String retiros)throws Exception { String cuenta="xxx";String tra_fin="";String dep_fin=""; String ret_fin="";

PrintWriter sald = new PrintWriter(saldo);//se crea el arrchivo donde se almacenaran las trasnsacciones actualizadas PrintWriter dep = new PrintWriter(depositos);//se crea el archivo donde se almacenaran los depositos PrintWriter ret = new PrintWriter(retiros);//se crea el archivo para guardar los retiros ya actualizados

try{ Double suma_saldos = 0.0; Double suma_retiros=0.0; Double suma_depositos=0.0;Double sum_tranc_final=0.0;Double sum_ret_fin=0.0;Double sum_dep_fin=0.0; Double dinero=0.0;//declaracion de los objetos a utilizar

int aux=1; String line=""; while ((line = this.in.readLine()) != null) { String[] datos = line.split("

");//se corta los datos del archivo

int tip_cuent=Integer.parseInt(datos[1]);//se transforma a entero el tipo de transaccion(0,1,2) dinero =Double.parseDouble(datos[2]);//se trasforma el dinero a double de cada cuenta

if(tip_cuent==0) {

//si el tipo de cuenta es 0 entonces

if(suma_saldos!=0.0) { sum_tranc_final=sum_tranc_final+suma_saldos;//se suman los saldos de las cuentas sum_ret_fin=sum_ret_fin+suma_retiros;//se suman los retiros de las cuentas l sum_dep_fin=sum_dep_fin+suma_depositos;//se suman los depósitos de las cuentas

tra_fin = tra_fin +" "+cuenta+" "+"0"+" "+suma_saldos+",";//se almacenan los datos finales de los saldos dep_fin = dep_fin +" "+cuenta+" "+"1"+" "+suma_depositos+",";//se almacenan los datos finales de los depósitos ret_fin = ret_fin +" "+cuenta+" "+"2"+" "+suma_retiros+",";//se almacenan los datos finales de los retiros suma_retiros=0.0;//se inicializa la suma de los retiros suma_depositos=0.0;//se inicializa la suma de los depósitos } cuenta=datos[0];//se almacena el numero de cuenta suma_saldos=dinero;//se almacena el dinero que hay en cada cuenta

} //fin de la condicion

if(tip_cuent==1)//si el tipo de cuenta es 1 entonces {suma_saldos= suma_saldos + dinero;//se suman los saldos y suma_depositos= suma_depositos+dinero;}//se suman los depositos

else{ if((tip_cuent==2)&&(suma_saldos>dinero))//si el tipo de cuenta es 2 entonces {

suma_saldos =suma_saldos

- dinero;//se resta los retiros al saldo y

suma_retiros=suma_retiros+dinero;//se suman los retiros } }

}//fin del while tra_fin = tra_fin +" "+cuenta+" "+"0"+" "+suma_saldos+",";//se almacenan los datos finales de los saldos para la ultima cuenta dep_fin = dep_fin +" "+cuenta+" "+"1"+" "+suma_depositos+",";//se almacenan los datos finales de los depositos para la ultima cuenta ret_fin = ret_fin +" "+cuenta+" "+"2"+" "+suma_retiros+",";//se almacenan los datos finales de los retiros para la ultima cuenta //se suman los saldos depsositos y retiros para la ultima cuenta sum_tranc_final=sum_tranc_final+ suma_saldos; sum_ret_fin=sum_ret_fin+suma_retiros; sum_dep_fin=sum_dep_fin+suma_depositos; //se almacena el ultimo tipo de cuenta con la suma de los saldos, retiros y depossitos

tra_fin =tra_fin+" "+"999999"+" sum_tranc_final+","; dep_fin= dep_fin+" "+"999999"+" sum_dep_fin+","; ret_fin= ret_fin+" "+"999999"+" sum_ret_fin+",";

"+"3"+" "+"3"+" "+"3"+"

" + " + " +

Lectura dato= new Lectura(); dato.escribir(sald,tra_fin,0);//se invoca el metodo de salida para el primer archivo (saldos) dato.escribir(dep,dep_fin,1);//se invoca el metodo de salida para el segundo archivo (depositos) dato.escribir(ret,ret_fin,2);//se invoca el metodo de salida para el tercer archivo (retiros) in.close();//cierre del archivo de lectura (archivo original) sald.close();//cierre del archivo de escritura (saldos) dep.close();//cierre del archivo de escritura (depósitos) ret.close();//cierre del archivo de escritura (retiros) }

catch ( IOException e ){} finally {

// cuando termina el try se realize finally

} //se retorna la materia buscada

}//fin de la lectura de archivo }

CLASE TODO FLUJO import java.io.*; import javax.swing.*; import java.net.*; public class TodoFlujo{

public BufferedReader in; private InputStreamReader isr; public TodoFlujo(String Name)throws IOException{//modela el flujo para archivo de texto FileReader arch1 = new FileReader(Name); this.in = new BufferedReader(arch1); } public TodoFlujo()throws IOException{// lectura estadar //teclado this.isr=new InputStreamReader(System.in); this.in = new BufferedReader(isr); } //sobrecargamos el contructor public TodoFlujo(int w,String Name)throws IOException{//url URL rutaservi=new URL(Name); 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); }//el "Objeto" que utilize este metodo puede leer con el metodo readLine() //recordemos que el metodo readLine() pertenece a la clase BufferedReader }//Fin de la clase

CONCLUSIÓN

En java, como ya vimos la herencia se especifica agregando la cláusula extends después del nombre de la clase. En la cláusula extends se indicara el nombre de la clase base de la cuál queremos heredar. En este lenguaje al heredar de una clase padre, heredaremos los métodos como los atributos, mientras que los constructores son utilizados, pero estos no son heredados

Related Documents

Trabajo Escrito Herencia
November 2019 22
Trabajo Escrito
April 2020 14
Trabajo Escrito
April 2020 11
Trabajo Escrito
June 2020 10
Trabajo Escrito
November 2019 38

More Documents from "Rommel David Guevara Martinez"

Trabajo Escrito Herencia
November 2019 22
Informe Lab3
October 2019 17
May 2020 8
Diogo.docx
May 2020 12
May 2020 10