Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
PROGRAMACIÓN IV
PROYECTO #3
Jerarquía y Herencia
ESTUDIANTES
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
Tarea a realizar
3
I – Fase:
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:
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
<http://www.cica.es/formacion/JavaTut/Cap1/abstr.html> [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.
<http://es.wikipedia.org/wiki/Encapsulaci%C3%B3n_(programaci%C3%B3n_orie
ntada_a_objetos)> [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:
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:
Comentario:
Se comentan también aspectos relacionados con Internet, como son las bibliotecas de
Sockets y las famosas applets de Java.
Fuente:
http://profesores.elo.utfsm.cl/~agv/elo329/1s04/lectures/JavaInheritance.ppt [consulta:
11 Nov 2207]
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:
Comentario:
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).
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
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.
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() {}
}
10
void dibujar() {
System.out.println("Circulo.dibujar()");
}
void borrar() {
System.out.println("Circulo.borrar()");
}
}
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.
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();
numcue
nomb
ced,
void consulta()
dir
void realizar()
dep
void cuenta();
13
Jerarquía y Herencia
DESCRIPCIÓN DE LAS
CLASES
void cuenta();este
String numcue, método mediante random
nos da al azar un numero de
String nomb, cuenta para ser guardado
class NumeroCuenta String ced, posteriormente en un archivo
con dicho número como
String dir, nombre y captura los datos
del archivo.
String dep;
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
class Deposito transacción de retiro.
import java.io.*;
***************************************************************************************************
*********
/*Clase principal que contiene el menú con las opciones que el usuario podra
realizar;
. 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{
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();
JOptionPane.showMessageDialog(null,"*****fin del
programa*****");
}
break;
}
}while(opc!=5);
}
}
***************************************************************************************************
*********
import java.io.*;
import javax.swing.*;
void cuenta(){
try {
FileWriter arch2 = new FileWriter(s+".txt"); //nombre del archivo, que a vez es
igual al
número de cuenta
in2.close();
}
catch (Exception e)
{
System.err.println("***Error al crear el archivo...\n" +e);
}
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.*;
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";
}
//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
String result = dts + "\n" + "5.NUEVO DEPOSITO: " + dep + "\n" + "6.NUEVO
SALDO: "+aa;
try {
bw.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);
}
}
/....................................................................................................................../
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 {
String linea;
String dts=" ";
while(((linea=in.readLine())!= null)&&(!linea.startsWith("6. SALDO:")))
{
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" );
}
catch (Exception e)
{
System.err.println("**NO SE PUEDE ENCONTRAR LA CUENTA
ESPECIFICADA**\n" +e);
}
}
/....................................................................................................................../
try {
String linea;
String dts=" ";
while(((linea=in.readLine())!= null))
{
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);
}
}
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
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.
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.
Se muestra otra vez el menú y elegimos la opción 3, para hacer un retiro a la cuenta
ya creada.
En esta pantalla nos salen los datos del cliente, dueño de la cuenta.
BIBLIOGRAFÍAS / WEBGRAFIAS
http://www.javahispano.org/tutorials.item.action?id=25
http://cmap.ihmc.us/
o Tutorial UML
http://www.dcc.uchile.cl/~psalinas/uml/introduccion.html
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