Académique Documents
Professionnel Documents
Culture Documents
TRABAJO
INF 222
TEMA
JERARQUÍA Y HERENCIA EN JAVA
PROFESOR
DIEGO SANTIMATEO
ESTUDIANTE
FECHA DE ENTREGA
Introducción
Comentarios
Una de las primeras fuentes consultadas fue el manual de java publicado por la
escuela de ingeniería de la Universidad de Navarra en España, es un manual
completo que resalta las características y conceptos del lenguaje en Java así
como la programación OOP.
Para ellos la Herencia permite la creación de nuevas clases a partir de clases
ya existentes, ayudando así a reutilizar el código que ya se ha implementado
en otra ocasión heredando métodos y variables.
Resaltan que en Java a diferencia de otros lenguajes orientados a objetos, una
clase solo puede derivar de una única clase con lo cual es posible realizar
herencias múltiples. Sin embargo es posible simular la herencia múltiple en
base a interfaces.
Por su parte la jerarquía de clases en Java es la relación de herencia entre
clases: como la información de los distintos paquetes de las librerías en Java.
Con respecto a la clase abstracta señalan que es una clase de la cual no se
pueden crear objetos su utilidad es permitir que otras clases deriven de ella.
El polimorfismo tiene que ver con la llamada a un método y el código que se
efectivamente se asocia con dicha llamada. Esto permite al programador
separar las cosas que cambian de las que no cambian, de esta manera hace
más fácil la ampliación, el mantenimiento y reutilización de los programas.
Al igual que C++, Java permite métodos sobrecargados, es decir métodos
distintos con el mismo nombre pero que se diferencian por el tipo de
argumento.
Wikipedia, (http://es.wikipedia.org/wiki/Herencia_(programaci%C3%B3n_orientada_a_objetos) la
enciclopedia libre.htm señala que la herencia es un mecanismo de la
programación orientado a objetos por medio de la cual la clase puede extender
su funcionalidad. Tiene como función proveer el polimorfismo.
También señala las tipos de herencias: la herencia simple es decir solo tiene
un padre y la herencia múltiple el objeto puede obtener las características de
uno o más padres (no soportada en Java). Aunque muchos lenguajes no han
decido admitir la herencia múltiple por la coincidencia en los nombres.
Además resalta que las clases que están por debajo de la jerarquía se
conocen como subclases.
Por ser Tutoriales en pdf que facilitan la investigación y la búsqueda de la
información ya que muchos de ellos se elaboran en referencia a temas
específicos como ejemplo Herencia por lo general son bien completas y bien
estructuradas.
Poo.pdf de Miguel Ángel Abián (http://javahispano.org) esta es la segunda parte del
manual Orientación a Objetos, ya que la primera parte la utilizamos en clase
como material de estudio y apoyo. Esta fue una fuente de gran ayuda ya que
Miguel Abián utiliza una metodología interesante, maneja diversidad de
conceptos y fuentes bibliografícas permitiéndonos resolver nuestras
inquietudes en este caso en la jerarquía del lenguaje Java con mayor facilidad.
Con esto resalto algunas fuentes de información que me han ayudado en gran
medida a la compresión y aplicación de los temas que exigía esta experiencia.
La programación en Java requiere mucho análisis y conocimiento porque
enfoca los problemas desde una perspectiva real exigiendo mayor entrega
pero a la vez facilitando al programador las aplicaciones de Software.
Extends: palabra reservada del lenguaje java, indica que una clase hereda de
otra.
Polimorfismo: permite separa las cosas que cambian de las que no cambian,
podemos referenciar un objeto de una subclase mediante una referencia
declarada como una de sus superclases. El polimorfismo tiene que ver con la
relación que se establece entre la llamada a un método y el código que se
asocia con dicha llamada.
Subclase: clase hija que hereda los atributos de la superclase. Por eso se
implementa mediante la herencia.
Super y this: son dos palabras claves de Java. Super referencia al objeto
actual pero apuntando al padre. Se utiliza para acceder desde un objeto a
atributos y métodos (incluye constructores) del padre.
• Sobrecarga de Constructores:
String nombre;
int edad;
String direccion;
String getNombre()
{
return nombre;
}
edad = (int)ed;
}
int getEdad()
{
return edad;
}
String getDireccion ()
{
return direccion;
}
}
/* Aquí muestro la segunda parte de la Clase Cliente
donde hago sobrecarga nuevamente de constructores. */
fat1.setEdad(50);
fat2.setEdad(30.45f);
prog.imprimeCliente(fat1);
prog.imprimeCliente (fat2);
/*Compildor:Eclipse SDK.
Autor: Fátima Álvarez G
Cédula: 9-722-549
En este ejemplo sencillo muestro la Sobrecarga de métodos en Java
creo 3 métodos pero dos con el mismo nombre (f_nombre) pero cambian
en los parámetros que le asigne a cada uno esto indicara a cual método estoy
llamando en determinado momento */
import javax.swing.*;
public class animal {
System.out.println (nombre);
objeto.nace ();
objeto.f_edad ();
}
}
Creo la clase mamífero, a la que le agrego datos como el número de patas del
animal o el color del pelaje, y luego derivamos de esta clase las clases Caballo
y Toro (ya que ambos son mamíferos), a las que no hace falta agregar que
poseen patas o que tienen pelajes, porque ya lo hemos hecho en la clase base,
mamífero.
Además podemos agregarles otros datos o funciones a los que ya nos brinda la
clase base (ampliándola, llevándola a una situación más particular) como, por
ejemplo, la cantidad de relinchos o bramidos (según cada caso).
/*Compildor:Eclipse SDK.
Autor:Fátima Álvarez G
Cédula:9-722-549
Ejemplo de Herencia: Este es main aquí invoco la clase Caballo y Toro que
heredan de la clase mamífero sus características */
public class PrograCarrera {
public static void main(String [] args) {
Caballo zeus = new Caballo("Zeus");
Toro luna= new Toro ("Ese Toro enamorado de la Luna");
zeus.imprimirPatas (); /*Está en la clase mamífero*/
luna.imprimirPatas ();
}
}
/*En este segmento muestro la Clase Mamífero que es la SuperClase, de ella
heredan la clase perro y gato la condición de mamíferos.*/
public class Mamifero {
• Ejemplo de Polimorfismo:
Es un programa parecido al anterior tiene una clase (conjunto de objetos con
características en común), pueda tener diferentes comportamientos aunque
este es uno muy sencillo.
void metodoDinamico() {
}
}
referencia.metodoAbstracto();
referencia.metodoConcreto();
}
}
• Super Clase
En este sencillo ejemplo se muestra una clase padre o Superclase que hereda
a su clase hija o subclase el detalle es que la subclase no puede ser pública
}
}
class claseHija extends ClasePadre //no puede ser publica
{
public void imprimir()
{
super.imprimir(); //referencia al objeto actual pero apuntando al padre con ella podemos
acceder los métodos provenientes del padre//.
System.out.println("Método del Hijo");
}
Incluye también un clase que me permite con solo marcar las fecha actual y
código del producto, si el producto expiro de lo contrario me indicara cuanto
tiempo le falta por hacerlo.
Esta opción es de mucha importancia por que de esta manera se podrá sacar
del medio productos que no estén en condiciones para el consumo humano, o
advertir cuales productos tendremos que compran muy pronto.
CapturaImprime
+capturaInventario() : string(idl)
+condicion() : string
+Consulta(int modo)() : string(idl)
*
+escribirarchivo(String[] articulo, String nombrearch)() : void
+instancias(String[] mercancia,int modo)() : Inventario
en
Esta es la Fátima
clase main +articulos : string(idl)
donde se hace +en : CapturaImprime 1
la invocación +sa : Reorden
de los +sa1 : Orden
+mercancia : Inventario
métodos. +sa2 : TiempoVencimiento
1
1 1
sa2
sa1
sa
TiempoVencimient
*
+tiempoexpiracion(Inventario dat)() : void
**
La clase TiempoVencimient
Inventario cuenta con el método que permite
#codigo : string = null con solo introducir la fecha actual
#existencia : string = null
#orden : string = null y el código de producto o
#reorden : string = null
#precio : string = null
medicamento el tiempo de
#expiracion : string = null expiración o cuanto le falta el
producto para que pueda ser del
consumo humano.
Reorden
Orden
La superclase Inventario, tiene dos clase hijas que heredan: las clase Reorden
y Orden estas leen el archivo y determinan la cantidad de producto disponible
para el mercado y además la cantidad limite que debe haber de mismo
producto.
Toda la información de la Orden y Reorden se escribirá en un nuevo archivo
para que el Inventarista o Farmacéutico tenga Acceso a la información del
estado del producto que poseen.
Código Fuente
//Main aloja los constructores y objetos que nos permitirá llamar a las clases de
Tiempo de vencimiento, orden, reorden e inventario.
import java.io.*;
import javax.swing.*;
class Fátima {
public static void main(String[] args) throws IOException{
String cod = null,ex = null, ord = null, reord = null, prec = null, exp = null;
CapturaImprime en = new CapturaImprime();
Reorden sa = new Reorden(cod,ex,ord,reord,prec,exp);
Orden sa1 = new Orden(cod,ex,ord,reord,prec,exp);
Inventario[] mercancia = new Inventario[100];
String[] articulos = new String[100];
int i = 0;
String cond = "S";
String c1 = "S";
try{
}
catch(IOException err){
JOptionPane.showMessageDialog(null,""+err.toString());
}
}
La clase Captura Imprime hace el típico trabajo de captar los datos que son
referenciados desde main, además cuenta con dos métodos.
}
public void imprimirenpantalla(String[] imp) //imprime datos en cosola
{
int i = 0;
while(imp[i] != null)
{
System.out.println(imp[i]);
i = i + 1;
}
}
try
{
if(modo == 0)
{
articulos[i] = entrada.readLine();
while(articulos[i]!=null)
{
i = i + 1;
articulos[i] = entrada.readLine();
}
}
else //realiza búsquedas
{
articulos[0] = JOptionPane.showInputDialog(null,"Indique el código"); //artículos[0] clave
articulos[1] = entrada.readLine(); //artículos[1] línea leída
aux = articulos[1];
if(articulos[0]==null)
aux =".. ..";
a1 = new StringTokenizer(aux," "); //artículos[2] código en línea
articulos[2] = a1.nextToken();
try
{
f_escritura = new FileOutputStream(nombrearch,false);
if(modo == 0)
while(mercancia[i] != null) //arreglo de objetos
{
StringTokenizer dat = new StringTokenizer(mercancia[i]," ");
codigo = dat.nextToken();
existencia = dat.nextToken();
orden = dat.nextToken();
reorden = dat.nextToken();
precio = dat.nextToken();
expiracion = dat.nextToken();
objetos[i] = new Inventario(codigo,existencia,orden,reorden,precio,expiracion);
i = i + 1;
}
else //Solo un objeto
{
precio = dat.nextToken();
expiracion = dat.nextToken();
objetos[0] = new Inventario(codigo,existencia,orden,reorden,precio,expiracion);
}
return(objetos);
}
public Inventario(String cod, String ex, String ord, String reord, String prec, String exp)
{
this.codigo = cod;
this.existencia = ex;
this.orden = ord;
this.reorden = reord;
this.precio = prec;
this.expiracion = exp;
}
}
class Reorden extends Inventario //Productos que hay que comprar
{
public Reorden(String cod, String ex, String ord, String reord, String prec, String exp)
{
super(cod, ex, ord, reord, prec, exp);
}
public String[] dividir(Inventario[] a1, String[] mercancia)
{
int c1 = 0,b1 = 0,m = -1;
String[] reorden1=new String[100];
int i=0;
while(mercancia[i] != null)
{
c1 = Integer.parseInt(a1[i].reorden);
b1 = Integer.parseInt(a1[i].existencia);
if(b1 <= c1)
{
m = m + 1;
reorden1[m] = mercancia[i];
}
i = i + 1;
}
return(reorden1);
}
}
class Orden extends Inventario{ //Productos que estan en orden
public Orden(String cod, String ex, String ord, String reord, String prec, String exp) {
super(cod, ex, ord, reord, prec, exp);
}
public String[] dividir(Inventario[] a1, String[] mercancia)
{
int c1 = 0,b1 = 0,m = -1;
String[] orden1=new String[100];
int i=0;
while(mercancia[i] != null)
{
c1 = Integer.parseInt(a1[i].reorden);
b1 = Integer.parseInt(a1[i].existencia);
if(b1 <= c1)
{
m = m + 1;
orden1[m] = mercancia[i];
}
i = i + 1;
}
return(orden1);
}
import java.util.StringTokenizer;
import javax.swing.JOptionPane;
String b1;
Conclusión