UNIVERSIDAD DE PANAMÁ CENTRO REGIONAL UNIVERSITARIO DE VERAGUAS FACULTAD DE INFORMÁTICA, ELECTRÓNICA Y COMUNICACIÓN LICENCIATURA EN INFORMÁTICA PARA LA GESTIÓN EDUCATIVA Y EMPRESARIAL
PROGRAMACIÓN IV
PROYECTO #3 Jerarquía y Herencia ESTUDIANTES Montes Diomedes 9-723-640 Rodríguez Misael 8-406-874
PROFESOR: Diego Santimateo Fecha de entrega 13-11-2007
INTRODUCCIÓN
1
En este proyecto nos centraremos en la Jerarquía y Herencia en POO, con la finalidad de utilizar estos conceptos en la construcción de un programa, la cual haga más fácil o confiable la implementación de este, donde ponemos en practica la utilización de recursos como los diagramas UML, dándonos una facilidad más practica para el logro de este proyecto. A medida que vamos desarrollándolo, podemos decir que son como pasos que se dan para el logro del mismo, teniendo siempre en cuenta que hay que poner en función los conocimientos adquiridos a lo largo de este curso. Y en base a este tema vemos que la Jerarquía y Herencia en POO, nos facilita o nos brinda múltiples facilidades que implementándolas en un programa nos hace una función mucha más clara y sencilla. Al culminar este proyecto se amplio mucho más los conceptos e ideas que manteníamos, todo esto por el motivo de que existen muchas referencias sobre el tema.
2
Objetivo
OBJETIVO GENERAL Analizar los conceptos involucrados con la Jerarquía en Java.
Tarea a realizar
Este laboratorio consiste en analizar los conceptos involucrados con la Jerarquía en Java, para ello el o la estudiante debe tomar como punto de partida de su investigación los siguientes temas: Jerarquía, Interfaz, Herencia, Clase Abstracta, Super Clase, Polimorfismo y Sobrecarga. En una primera fase se deben establecer por lo menos diez fuentes de información y comentarlas, así como presentarlas en un formato reconocido internacionalmente o estándar (http://www.ub.es/biblio/citae-e.htm ). Posteriormente se concretará un glosario de términos debidamente definidos, destacando la interpretación que el o la estudiante concibe de los mismos. Seguidamente se procederá a ejemplificar cada concepto bajo un dominio conocido o previamente experimentado. No olvide explicar su ejemplo. Finalmente
se
presentará
una
aplicación
(ejecutable)
debidamente
documentada, seleccionada por el o la estudiante donde se hace uso de los conceptos analizados, para la solución de un problema científico o de la realidad nacional o institucional. Cada estudiante debe presentar una propuesta de su aplicación apoyada en especificaciones UML. 3
I – Fase: Fuentes de información y comentarios: Fuente: 1. Ángel Franco García. Programación en Lenguaje Java, la herencia y el polimorfismo. [en línea]. Universidad del País Vasco (España). Fecha de creación Enero de 2000. Ultima Actualización, diciembre de 2001. [Consulta: 6 Nov. 2007]. Comentario: Brinda descripciones y conceptos respecto a la Programación Orientada a Objetos, principalmente de; Herencia, Jerarquía de Clases, interfaces. de igual manera especifica y brinda ejemplos sobre su utilidad y aplicación. Fuente: 2. Agustín Froufe. Conceptos Básicos de Java, Herencia [en línea]. Fecha de creación (no especifica).Ultima Actualización: 1 de Enero de 1997 [Consulta:6 Nov. 2007]. Comentario: Aquí nos da el concepto de Herencia, donde nos habla sobre los objetos en base a los ya existentes, y de la clave extends, que podemos usar para generar una subclase, también nos muestra ejemplos de cómo se utiliza este concepto en un programa. Todo lo que contenga la clase es heredada por la subclase, y esta puede tener sus propios métodos y variables. Fuente: 3. Agustín Froufe. Conceptos Básicos de Java, Clases Abstractas [en línea]. Fecha de creación (no especifica).Ultima Actualización: 1 de Enero de 1997 [Consulta: 6 Nov. 2007]. Comentario: En esta dirección nos explica como se puede declarar clases para solo saber que hacen, sin la necesidad de que estas tengan que usar métodos. Por lo que cada persona que las use puede definirlo con carácter propio pero ser usado por otros más. Cuando una clase contiene un método abstracto tiene que declararse abstracta. No obstante, no todos los métodos de una clase abstracta tienen que ser abstractos.
4
Fuente: 4. Agustín Froufe. Conceptos Básicos de Java, Interfases [en línea]. Fecha de creación (no especifica).Ultima Actualización: 1 de Enero de 1997 http://www.cica.es/formacion/JavaTut/Cap4/interf.html[Consulta:8 Nov. 2007]. Comentario: Esta nos habla acerca de que la interface es la parte que hace interactuar el programa con quien lo implementa, y es una parte importante de la aplicación, donde al no usar uno simple puede que no obtengamos el máximo del provecho deseado por él. Aquí nos muestra elementos fáciles para construir interfaces más eficientes.
Fuente: 5. Wikipedia Org. Encapsulación [en línea]. Esta página fue modificada por última vez el 19:49, 27 oct 2007. [Consulta:8 Nov. 2007]. Comentario: Nos dice como denominar “encapsulación”, que sería ocultar el estado, o los datos de algún objeto, que solo se modifique por las operaciones de él mismo. Donde cada uno de ellos no se concreta con el exterior, dando como opción que nadie que tenga derecho a modificarlo lo haga. Fuente: 6. Autor Sun (Ciudad Real, España). Programación en Castellano, Subclases [en línea]. Traductor; Juan Antonio Palos (Ozito). Fecha de creación 1999. [Consulta 8 de nov. 2007.] Comentario: Aquí nos habla sobre como crear subclases de una superclase, que vendría siendo como la de la Herencia, siendo este un tutorial el cual no habla de ancestros que son directos, o sea, que llevan un modelo especifico de secuencia invariable, ya que, si existiera un error habría que verificar ese árbol genealógico, por decirlo así. Aquí nos da una Regla que para nosotros es importante: Una subclase hereda todas las variables miembros de su superclase que puedan ser accesibles desde la subclase (a menos que la variable miembro esté oculta en la subclase).
5
Fuente: 7. Arnold y Gosling,.6. Herencia, Guía de Iniciación al Lenguaje JAVA, VERSIÓN 2.0 - Octubre de 1999, Ultima actualización 1997. http://pisuerga.inf.ubu.es/lsi/Invest/Java/Tuto/Index.htm [consulta 11 Nov. 2007] Comentario: Este trabajo corresponde a una guía que sirva de iniciación a la programación en el lenguaje Java. En él se tratan los diversos aspectos básicos que comprenden el aprendizaje de un lenguaje de programación, así como una breve noción de la Programación Orientada al Objeto en la que Java se basa. Así mismo se incluyen comparativas con otros lenguajes de programación (especial hincapié en C++), y se tratan con un poco más de profundidad bibliotecas gráficas como AWT y Swing. Se comentan también aspectos relacionados con Internet, como son las bibliotecas de Sockets y las famosas applets de Java.
Fuente: 8. Agustín J. González, Herencia en Java, Diseño y Programación Orientados a Objetos, [en línea]. Fecha de creación (no especifica).Ultima Actualización: (no especifica). http://profesores.elo.utfsm.cl/~agv/elo329/1s04/lectures/JavaInheritance.ppt 11 Nov 2207]
[consulta:
Comentario: Esta página se muestra en formato de power point, donde nos orienta en la creación de clases tomando como referencia en otras, dándonos la opción de utilizar los mismos métodos, como el crearles nuevos, también nos da ciertos sinónimos para la superclase como lo son clase padre o clase base y que las nuevas podrían ser subclases o clases hijas o derivadas. Como también nos habla del polimorfismo, con un leve ejemplo; en otro habla sobre la sobrecarga.
6
Fuente: 9. Andrés Montano Pellegrini., Extendiendo el Comportamiento de las Clases: Herencia en Java , [en línea]. Fecha de creación 2006, Ultima actualización( no especificada). http://www.gaugeus.com/ramblings/2006/11/25/extendiendo-el-comportamiento-de-lasclases-herencia-en-java-inheritance-in-java > [consulta: 11 Nov 2007]. Comentario: Esta página nos describe la habilidad de utilizar una clase ya implementada y agregarle comportamiento y estado a esta. Así, la nueva clase seria una extensión de la clase original. Ha esto se le llama herencia, que es nuestro tema en este proyecto. Tambien nos muestra conceptos sobre polimorfismo, clases, métodos los cuales son utilizables e importantes dentro de cualquier programa. Fuente: 10. Autor Desconocido, FUNDAMENTOS DE INFORMÁTICA, Introducción a Java (II),[en línea]. Fecha de creación (no especifica).Ultima Actualización: (no especifica). http://members.tripod.com/tutorial_bh.mx/obj_y_clases.html > [consulta 11 Nov 2007] Comentario: En esta página nos habla también sobre el tema a investigar, pero lo que más llamó nuestra atención fue la parte que nos describe la herencia en datos privados, donde nos manifiesta que si la clase madre posee métodos private las subclases de ella no pueden acceder a estos métodos porque solo le pertenecen a ella, o sea, que no es heredable, Pero si se puede acceder desde la subclase a un método de la clase madre que usa ese dato.
7
GLOSARIO DE TÉRMINOS
1. INTERFAZ: Los métodos abstractos son útiles cuando se quiere que cada implementación de la clase parezca y funcione igual, pero necesita que se cree una nueva clase para utilizar los métodos abstractos. Los interfaces proporcionan un mecanismo para abstraer los métodos a un nivel superior. Un interfase contiene una colección de métodos que se implementan en otro lugar. Los métodos de una clase son public, static y final. La principal diferencia entre interface y abstract es que un interface proporciona un mecanismo de encapsulación de los protocolos de los métodos sin forzar al usuario a utilizar la herencia 2. JERARQUÍA: La jerarquía consiste en la relación resultante que se da entre una superclase y una subclase a esto se le llama jerarquía. 3. HERENCIA: es uno de los conceptos más cruciales en la POO. La herencia básicamente consiste en que una clase puede heredar sus variables y métodos a varias subclases (la clase que hereda es llamada superclase o clase padre). Esto significa que una subclase, aparte de los atributos y métodos propios, tiene incorporados los atributos y métodos heredados de la superclase. De esta manera se crea una jerarquía de herencia. 4. CLASE ABSTRACTA: es una clase de la que no se puede crear objetos. La utilidad de estas clases esta en que otras clases hereden de ésta, por lo que con ello se consigue que se reutilice el código. Para declarar una clase como abstracta utilizamos la palabra clave abstract. Un clase abstracta es una descripción incompleta de algo. Un conjunto de operaciones y atributos que por sí solos no describen nada. 5. SÚPER CLASE: Clase que esta siendo extendida. Es el nombre que reciba la clase padre de donde los métodos y variables. 6. POLIMORFISMO: Se da cuando varios objetos de distintas clases pueden recibir el mismo mensaje y ser capaces de responderlo. 7. SOBRECARGA: consiste en poder tener varios métodos o constructores con el mismo nombre dentro de una misma clase y que no hagan las mismas cosas. 8. ENCAPSULACIÓN: es el término de orientación a objetos que describe la vinculación de unas operaciones y estado a un objeto particular. La encapsulación está íntimamente relacionada con ocultar la información, definiendo qué partes de un objeto son visibles y qué partes están ocultas. 9. THIS: palabra clave que hace referencia a los miembros de la propia clase.
8
10.SUPER: palabra clave que se usa si se necesita llamar al método padre dentro de una clase que ha reemplazado ese método. Super permite acceder, desde la subclase, a los métodos y las variables de la superclase. 11.SUBCLASES: Las subclases se distinguen por las siguientes características: Heredan aquellas variables miembros declaradas como public o protected Heredan aquellas variables miembros declaradas sin especificador de acceso (normalmente conocidas como "Amigas") siempre que la subclase esté en el mismo paquete que la clase No hereda las variables miembros de la superclase si la subclase declara una variable miembro que utiliza el mismo nombre. La variable miembro de la subclase se dice que oculta a la variable miembro de la superclase. No hereda las variables miembro private. Ocultar Variables Miembro. Como se mencionó en la sección anterior, las variables miembros definidas en la subclase ocultan las variables miembro que tienen el mismo nombre en la superclase. Como esta característica del lenguaje Java es poderosa y conveniente, puede ser una fuente de errores: ocultar una variable miembro puede hacerse deliberadamente o por accidente. Entonces, cuando nombres tus variables miembro se cuidadoso y oculta sólo las variables miembro que realmente deseas ocultar. Una característica interesante de las variables miembro en Java es que una clase puede acceder a una variable miembro oculta a través de su superclase. Considere este pareja de superclase y subclase.
9
Ejemplificación de conceptos bajo un dominio conocido o previamente experimentado:
CLASE ABSTRACTA El dominio es un Restaurante. La clase Cocinero es la superclase Abstracta y contiene el método imprimir el cual es abstracto. La clase mesero hereda de la clase y se hace uso de el método imprimir mediante el llamado del objeto de la clase Mesero. import javax.swing.*; import java.text.*; class Restaurante //Clase Principal { public static void main(String args[]){ //Creación del objeto mesero Mesero objeto = new Mesero(); objeto.imprimir(); } } abstract class Cocinero { //clase Abstracta public abstract void imprimir(); }//fin de la clase class Mesero extends Cocinero {// la clase mesero es una extensión de la clase cocinero public void imprimir(){ //metodo que despliega el menú System.out.println("Digame Joven que Desea"); System.out.println("Tenemos Comida Corriente"); System.out.println("Sancocho"); System.out.println("Arroz con camarones"); } } // Ejemplo de Polimorfismo. import java.io.*; import javax.swing.*; import java.lang.String.*; class Forma { void dibujar() {} void borrar() {} } class Circulo extends Forma { 10
void dibujar() { System.out.println("Circulo.dibujar()"); } void borrar() { System.out.println("Circulo.borrar()"); } } class Cuadrado extends Forma { void dibujar() { System.out.println("Cuadrado.dibujar()"); } void borrar() { System.out.println("Cuadrado.borrar()"); } } class Triangulo extends Forma { void dibujar() { System.out.println("Triangulo.dibujar()"); } void borrar() { System.out.println("Triangulo.borrar()"); } } public class Formas { public static Forma formaAleatoria() { switch((int)(Math.random() * 3)) { default: case 0: return new Circulo(); case 1: return new Cuadrado(); case 2: return new Triangulo(); } } public static void main(String[] args) { Forma[] s = new Forma[9]; // Rellenar el array con varias formas: for(int i = 0; i < s.length; i++) s[i] = formaAleatoria(); // llamar a los método para ver el polimorfismo: for(int i = 0; i < s.length; i++) s[i].dibujar(); } }
11
Comentario: El concepto en este ejemplo nos describe lo que podemos decir es que utiliza el mismo método void dibujar en distintas clases, y nos muestra las diferentes salidas que da este programa en las clases Forma y Formas.
DESCRIPCIÓN DEL DOMINIO
El desarrollo de nuestra aplicación simula un Sistema Bancario que realiza las transacciones básicas que un cliente de un banco efectuá, el sistema permite a través de un menú realizar al usuario ; 1. Abrir una cuenta don de el cliente deberá realizar un depósito inmediato, se le asignara un numero de cuenta generado aleatoriamente, con el cual podrá realizar transacciones posteriormente. El numero de cuenta será a la vez el nombre del archivo donde se almacenara la información del cliente (numero de cuenta, nombre, cédula, dirección). 2. Realizar un deposito a una cuenta ya existente, se le solicitará que ingrese el numero de cuenta para realizar esta transacción, se verificará la existencia de la cuenta dependiendo existe el archivo con el nombre de la cuenta (si la cuenta existe). Se registrara el deposito y se actualizará el saldo en el mismo archivo o cuenta. 3. Realizar un retiro a una cuenta ya existente, se le solicitará que ingrese el numero de cuenta para realizar esta transacción, se verificará la existencia de la cuenta dependiendo existe el archivo con el nombre de la cuenta (si la cuenta existe). Se registrara el retiro y se actualizará el saldo en el mismo archivo o cuenta. 4. ver estado de la cuenta, se le solicita el numero de cuenta para verificar la existencia de la cuenta dependiendo existe el archivo con el nombre de la cuenta (si la cuenta existe). A continuación se muestra los detalles de la cuenta.
12
Diagrama UML de clases, atributos y métodos. GestionBancaria
Main();
abstract class Abstr
abstract class Abstr2
abstract void realizar(); abstract void realizar(String abrir);
abstract void cuenta();
abstract void consulta();
class Deposito
class NumeroCuenta numcue nomb
void consulta() void realizar()
ced, dir dep void cuenta();
13
Jerarquía y Herencia DESCRIPCIÓN DE LAS CLASES Clase
Atributos
Comportamiento Main(): contiene el menú con la opciones a que el cliente desea realizar
Principal2
abstract void realizar(); método abstracto que de la clase Depósito
abstract class Abstr
abstract void realizar(String abrir); método abstracto clase Depósito abstract void consulta(); Este método abstracto de la clase Depósito abstract void cuenta(); Método abstracto del clase NumeroCuenta
abstract class Abstr2
String numcue, String nomb, class NumeroCuenta
String ced, String dir, String dep;
Diomedes Montes J, Misael Rodríguez
void cuenta();este método mediante random nos da al azar un numero de cuenta para ser guardado posteriormente en un archivo con dicho número como nombre y captura los datos del archivo.
Jerarquía y Herencia
void realizar(): este método abre el archivo de la cuenta y realiza la transacción de deposito. void realizar(String abrir): este método abre el archivo de la cuenta y realiza la transacción de retiro.
class Deposito
Hay sobrecarga de métodos que se applica dependiendo de la opcion ingrasada en el menu principal (depostito_retiro) void consulta() Este método nos abre el archivo de la cuenta y lo muestra con su respectivo saldo actual. CODIGO FUENTE DE LA APLICACIÓN /* Clase abstracta que contiene las interfases o métodos abstractos */ import java.io.*; abstract class Abstr { abstract void realizar(); // interfaz o métodos abstractos abstract void realizar(String abrir); abstract void consulta(); } *************************************************************************************************** ********* /* Clase abstracta que contiene las interfases o métodos abstractos */ import java.io.*; abstract class Abstr2 { abstract void cuenta(); }
// interfaz o método abstracto
*************************************************************************************************** ********* /*Clase principal que contiene el menú con las opciones que el usuario podra realizar;
Diomedes Montes J, Misael Rodríguez
Jerarquía y Herencia . Abrir una Cuenta, Realizar Depósito, Realizar Retiro, Ver estado de cuenta, Salir del Sistema, dentro de las opciones se invocan a los metodos que cumplen cada funcion antes mencionadas */ import javax.swing.*; import java.text.*; import java.lang.*; class GestionBancaria { public static void main(String[] args) { String opcion; int opc=0; int cta=0; do{ opcion=JOptionPane.showInputDialog(null," SISTEMA DE GESTIÓN BANCARIA\n"+" MENU\n"+"**********Seleccione una Opcion**********\n"+"1. Abrir una Nueva Cuenta\n"+"2. Realizar Depósito a una Cuenta\n"+"3. Realizar Retiro de una Cuenta\n"+"4. Ver estado de una Cuenta\n"+"5. Salir del Sistema\n"); opc=Integer.parseInt(opcion); switch (opc) { case 1: { NumeroCuenta objeto=new NumeroCuenta(); //inicializa constructor objeto.cuenta(); //invoca al metodo que crea una cuenta } break; case 2: { Deposito objeto1=new Deposito(); //inicializa constructor objeto1.realizar(); //invoca al método que realiza un déposito a una cuenta } break; case 3: { String abr = JOptionPane.showInputDialog(null, "INDIQUE EL NUMERO DE CUENTA:"); Deposito objeto2=new Deposito();//inicializa constructor objeto2.realizar(abr); //invoca al método que realiza un retiro de una cuenta, Ademas hay sobrecraga de métodos } break; case 4: { Deposito objeto3=new Deposito();
Diomedes Montes J, Misael Rodríguez
Jerarquía y Herencia objeto3.consulta(); //invoca al método que muestra el estado actual de la cuenta } break; case 5: { JOptionPane.showMessageDialog(null,"*****fin del programa*****"); } break; } }while(opc!=5); } } *************************************************************************************************** ********* /* la SubClase NumeroCuenta extendida de la clase abstracta (Abstr2) creará una nueva cuenta, la cual asignará al cliente un número de cuenta,así mismo la clase crea un archivo para guardar los datos del cliente; este nombre del archivo es igual al número de la cuenta. para crear una cuenta el cliente deberá realizar un déposito inmediato*/ import java.io.*; import javax.swing.*; class NumeroCuenta extends Abstr2{ //subclase NumeroCuenta private String numcue, nomb,ced,dir,dep; public NumeroCuenta() //constructor { } void cuenta(){ int numeroCuenta = (int) (Math.random()*100000+100);// funcion que genera un numero aletario para el numero de cuenta String s = String.valueOf(numeroCuenta); // metodo que convierte el numero a String para nombre de archivo. try { FileWriter arch2 = new FileWriter(s+".txt"); //nombre del archivo, que a vez es igual al número de cuenta BufferedWriter in2 = new BufferedWriter(arch2); PrintWriter salida = new PrintWriter(in2);
Diomedes Montes J, Misael Rodríguez
Jerarquía y Herencia
//se guardan los datos del cliente el el archivo salida.println("1. NUMERO DE CUENTA: "+s); nomb = JOptionPane.showInputDialog(null, "Escriba el nombre del cliente:"); salida.println("2. NOMBRE: "+nomb); ced = JOptionPane.showInputDialog(null, "Escriba la cédula:"); salida.println("3. CEDULA: "+ced); dir = JOptionPane.showInputDialog(null, "Direccion del cliente:"); salida.println("4. DIRECCION: "+dir); dep = JOptionPane.showInputDialog(null, "Ahora realice su deposito:"); salida.println("5. DEPOSITO: "+dep); salida.println("6. SALDO: "+dep); in2.close(); } catch (Exception e) { System.err.println("***Error al crear el archivo...\n" +e); } JOptionPane.showMessageDialog(null,"SE HA ABIERTO LA CUENTA\n\n "+"El Numero de Cuenta es: "+ s); return; } }
*************************************************************************************************** *********
/*SubClase extendida de la clase abstracta (Abstr) que permite realizar; un deposito a una cuenta, un retiro a una cuenta, ver estado de una cuenta. para realizar estos trámites se le solicitará al cliente el numero de cuenta, a partir de este numero se busca el archivo que contiene los datos de la cuenta; ya que ambos son los mismos, se aprecia una sobrecarga de métodos en "realizar" */ import java.io.*; import javax.swing.*; class Deposito extends Abstr // subclase Deposito { public Deposito() //constructor de la clase { }
Diomedes Montes J, Misael Rodríguez
Jerarquía y Herencia
void realizar(){ saldo
//método que realizará un deposito a una cuenta, y actualizara su
String abrir = JOptionPane.showInputDialog(null, "INDIQUE EL NUMERO DE CUENTA:"); try { FileReader arch1 = new FileReader(abrir); //se lee el archivo o cuenta BufferedReader in = new BufferedReader(arch1); String linea; String dts=" "; while(((linea=in.readLine())!= null)&&(!linea.startsWith("6. SALDO:"))) //busca el saldo de la cuenta { dts +=linea + "\n"; } String[] var = linea.split(": "); System.out.println(var[1]); int aa=Integer.parseInt(var[1]); //nuevo déposito String dep = JOptionPane.showInputDialog(null, "Ahora realice su deposito:"); int dep2=Integer.parseInt(dep); aa = aa + dep2;
//incrementa el saldo de la cuenta
FileWriter fw = new FileWriter (abrir); // se escriben todos datos en archivo actual BufferedWriter bw = new BufferedWriter (fw); PrintWriter pasaArch = new PrintWriter (bw); String result = dts + "\n" + "5.NUEVO DEPOSITO: " + dep + "\n" + "6.NUEVO SALDO: "+aa; pasaArch.println(result); //se escriben los datos de la transaccion en el archivo (nuevo deposito, saldo actual) try { bw.close(); //cierre del archivo original } catch ( IOException e ) { System.err.println( "El archivo no se pudo cerrar correctamente" ); } }
Diomedes Montes J, Misael Rodríguez
Jerarquía y Herencia catch (Exception e) { System.err.println("**NO SE PUEDE ENCONTRAR LA CUENTA ESPECIFICADA**\n" + e); } } /....................................................................................................................../ void realizar(String abrir){ //metodo que realiza un retiro a una cuenta y actualiza el saldo //hay sobrecarga de métodos este recibe parametros, el anterio no try { FileReader arch1 = new FileReader(abrir); //lee el archivo, cuenta BufferedReader in = new BufferedReader(arch1); String linea; String dts=" "; while(((linea=in.readLine())!= null)&&(!linea.startsWith("6. SALDO:"))) { dts +=linea + "\n"; } String[] var = linea.split(": "); System.out.println(var[1]); int aa=Integer.parseInt(var[1]); String dep = JOptionPane.showInputDialog(null, "Ahora realice su Retiro:");//nuevo retiro int dep2=Integer.parseInt(dep); aa = aa - dep2; //decrementa el saldo de la cuenta FileWriter fw = new FileWriter (abrir); BufferedWriter bw = new BufferedWriter (fw); PrintWriter pasaArch = new PrintWriter (bw); String result = dts + "\n" + "5.NUEVO DEPOSITO: " + dep + "\n" + "6.NUEVO SALDO: "+aa; pasaArch.println(result); try { bw.close(); //cierre del archivo original } catch ( IOException e ) { System.err.println( "El archivo no se pudo cerrar correctamente" ); } }
Diomedes Montes J, Misael Rodríguez
Jerarquía y Herencia catch (Exception e) { System.err.println("**NO SE PUEDE ENCONTRAR LA CUENTA ESPECIFICADA**\n" +e); } } /....................................................................................................................../ void consulta(){ //método que mostrara al cliente el estado actual de la cuenta String abrir = JOptionPane.showInputDialog(null, "INDIQUE EL NUMERO DE CUENTA:"); try { FileReader arch1 = new FileReader(abrir); //lee el archivo BufferedReader in = new BufferedReader(arch1); String linea; String dts=" "; while(((linea=in.readLine())!= null)) { System.out.println(linea);
//muestra los datos de la
cuenta } try { in.close(); //cierre del archivo original } catch ( IOException e ) { System.err.println( "El archivo no se pudo cerrar correctamente" ); } } catch (Exception e) { System.err.println("**NO SE PUEDE ENCONTRAR LA CUENTA ESPECIFICADA**\n" +e); } } }
Diomedes Montes J, Misael Rodríguez
Jerarquía y Herencia Reflexión grupal final: Nuestro grupo esta conformado por : Rodríguez Misael Montes Diomedes Este grupo ha trabajado rigurosamente en este proyecto, donde hemos consultado todas las fuentes de información suministradas por el profesor y otras que por motivo de investigación se han visitado en la primera fase de este. Al elegir este programa basado en las transacciones de una cuenta, donde se crea un número al azar y posteriormente este número queda como el nombre del archivo creado, y por la opción de menú el usuario elije la transacción a realizar, tanto como también la consulta de dicha cuenta u otra creada anteriormente. Y por ser un programa agradable en su estructura para nosotros podemos agregar que ha sido de mucha experiencia en lo que a POO se refiere. Conocimientos adquiridos individuales: Misael Rodríguez: Por la estructura que conlleva este proyecto implantada por el profesor, que hace que se investiguen muchos temas o conceptos en Jerarquía y Herencia en POO, para mí ha sido buena metodología, claro que debe ser efectuada con responsabilidad, ya que, vendría siendo de auto-aprendizaje, por lo que puedo decir que he recibido nuevos conceptos o ideas de cómo trabajan estos en java y poco a poco, con la realización de este curso ir poniéndolos en practica, que personalmente es lo más eficiente para captarlos. Diomedes Montes: A medida que vamos avanzando en POO, como en este proyecto se basa en Jerarquía y Herencia, voy analizando y uniendo todos los otros conocimientos de los proyectos y laboratorios anteriores, y voy comprendiendo como java nos sirve como herramienta al crear programas que hacen que ciertos problemas
Diomedes Montes J, Misael Rodríguez
Jerarquía y Herencia sean más sencillos de resolver, y de esta manera adquirir nuevos conocimientos. CAPTURA DE PANTALLA DE LA APLICACIÓN
Esta es la pantalla que se muestra al ejecutar el programa, mostrándonos el menú inicial, donde hemos elegido la opción 1 para abrir una cuenta.
Aquí nos solicita el nombre del cliente.
Aquí nos solicita la cedula del cliente.
Diomedes Montes J, Misael Rodríguez
Jerarquía y Herencia
Aquí nos solicita la dirección del cliente.
Esta pantalla solicita la cantidad inicial de la cuenta a crear por el cliente.
Esta pantalla no muestra el mensaje de que se ha creado o abierto una cuenta y nos muestra también el número de esta, que se creo en forma aleatoria.
Diomedes Montes J, Misael Rodríguez
Jerarquía y Herencia
Aquí le mostramos que al crearse la cuenta que en este caso es la # 40420, la misma aparece en la carpeta donde se trabaja y tiene por nombre el mismo número, donde aparecen todos los datos solicitados anteriormente.
Posterior a esto nuevamente nos sale el menú y elegimos la opción 2, y para realizar un deposito.
Diomedes Montes J, Misael Rodríguez
Jerarquía y Herencia
Esta pantalla se muestra después de elegida la opción 2, y nos pide el número de la cuenta con la que queremos trabajar, pero tenemos que agregarle “ .txt”, por el motivo de que dicha cuenta es guardada como un archivo.
Esta pantalla nos solicita la cantidad a depositar en dicha cuenta.
Se muestra otra vez el menú y elegimos la opción 3, para hacer un retiro a la cuenta ya creada.
Diomedes Montes J, Misael Rodríguez
Jerarquía y Herencia
Nos solicita el número de la cuenta nuevamente para realizar el retiro.
Nos solicita la cantidad que se va ha retirar de la cuenta.
En la opción 4, hacemos una consulta de la cuenta que elegimos.
Diomedes Montes J, Misael Rodríguez
Jerarquía y Herencia
En esta pantalla nos salen los datos del cliente, dueño de la cuenta.
Al elegir la opción 5, damos finalización al programa.
Diomedes Montes J, Misael Rodríguez
Jerarquía y Herencia
Esta pantalla se muestra cuando se introdujo un número de cuenta inexistente, siendo esto una de las exepciones.
Diomedes Montes J, Misael Rodríguez
Jerarquía y Herencia BIBLIOGRAFÍAS / WEBGRAFIAS o Documento pdf. Miguel Angel Abian. Análisis OO. http://www.javahispano.org/tutorials.item.action?id=25 o Herramienta para diseño de mapa conceptual http://cmap.ihmc.us/ o Tutorial UML http://www.dcc.uchile.cl/~psalinas/uml/introduccion.html o Formato reconocido internacionalmente o estándar http://www.ub.es/biblio/citae-e.htm o http://www.javahispano.org/cursotext.viewer.action?file=basico o http://es.wikipedia.org/wiki/Herencia_(programaci%C3%B3n_orientada _a_objetos) o http://www.dcc.uchile.cl/~lmateu/Java/Apuntes/index.htm o http://www.arrakis.es/~abelp/ApuntesJava/Herencia.htm o http://www.it.uc3m.es/tsirda/practicas/P13/enunciado.html o http://www.itapizaco.edu.mx/paginas/JavaTut/froufe/introduccion/indice.html o http://www.sc.ehu.es/sbweb/fisica/cursoJava/fundamentos/herencia/he rencia1.htm o http://pisuerga.inf.ubu.es/lsi/Invest/Java/Tuto/II_6.htm
Diomedes Montes J, Misael Rodríguez