UNIVERSIDAD DE PANAMÁ CENTRO REGIONAL UNIVERSITARIO DE VERAGUAS FACULTAD DE INFORMÁTICA, ELECTRONICA Y COMUNICACIÓN ESCUELA DE INGENIERÍA EN INFORMÁTICA LIC. EN INFORMÁTICA PARA GESTIÓN EDUCATIVA Y EMPRESARIAL PROGRAMACIÓN IV INF-212
TEMA: ANÁLISIS SOBRE LOS CONCEPTOS INVOLUCRADOS CON JERARQUÍA EN JAVA
INFORME DE: TRABAJO INDIVIDUAL
FACILITADOR: PROF. DIEGO SANTIMATEO
ESTUDIANTE: GABRIEL A. DÍAZ H. CED: 8-779-26
II- SEMESTRE
2006 INTRODUCCIÓN
La importancia de la Programación Orientada a Objetos (POO) es que permite que los programadores diseñen software en forma muy parecida a como perciben el mundo real, de manera que se puedan entender entre sí los programadores y los no programadores.
La
POO es el lenguaje para tratar y relacionar lo abstracto con los objetos reales. El elemento básico de la programación orientada a objetos en Java es una clase. Una clase define la forma y el comportamiento de un objeto. Cualquier concepto que desee representar en su programa en Java está encapsulado en una clase. En este informe abordaremos de manera superficial los conceptos involucrados en la jerarquía de java: jerarquía, herencia, clase abstracta, super clase, polimorfismo y sobrecarga. La herencia es la característica fundamental que distingue un lenguaje orientado a objetos, como el C++ o Java, de otro convencional como C, BASIC, etc. Java permite heredar a las clases características y conductas de una o varias clases denominadas base. Las clases que heredan de clases base se denominan derivadas, estas a su vez pueden ser clases bases para otras clases derivadas. Se establece así una clasificación jerárquica. La herencia ofrece una ventaja importante, permite la reutilización del código. Una vez que una clase ha sido depurada y probada, el código fuente de dicha clase no necesita modificarse. Su funcionalidad se puede cambiar derivando una nueva clase que herede la funcionalidad de la clase base y le añada otros comportamientos. Reutilizando el código existente, el programador ahorra tiempo y dinero, ya que solamente tiene que verificar la nueva conducta que proporciona la clase derivada. Comentó y presentó en un formato estándar 10 fuentes que suministran información sobre estos conceptos, describiendo un pequeño glosario de los términos investigados. También se ejemplifica cada concepto mediante un código con su explicación y para culminar se crea un ejecutable que involucra algunos de los conceptos analizados, representándolo en el Lenguaje de Modelamiento Unificado (UML).
CONSULTA DE FUENTES DE INFORMACIÓN Y COMENTARIOS
1- http://www.sc.ehu.es/sbweb/fisica/cursoJava/fundamentos/herencia/intro_herencia.htm
Comentario: Esta fuente comenta importante información sobre la clase base, la clase derivada, se crean clases bases cuando se da uno cuenta que diversos tipos tienen algo en común, por ejemplo un juego de ajedrez, rey, reina, caballos, torres, etc., son piezas del juego. También comenta sobre el uso de la jerarquía de clases, el polimorfismo en acción, ¿Qué es un interface?, diferencias entre un interface y una clase abstracta, los interfaces y el polimorfismo. Comenta que una interface es una colección de declaraciones de métodos (sin definirlos) y también puede incluir constantes, el papel de una interface es el de describir algunas de las características de una clase. Por ejemplo, el hecho de que una persona sea futbolista no define su personalidad completa, pero hace que tenga ciertas características que la distinguen de otras. Su tuviera que hacer una evaluación en una escala de 1 a 5, mi evaluación sería de 4, porque la información esta bien detallada y ejemplificada, sin embargo requiere un poco mas de definición. García, F. A.1998.; actualizada en Enero de 2000. Fundamentos del Lenguaje Java. En: Programación en el lenguaje Java. España. Universidad del País Vasco. [Base de Datos en línea]. Disponible desde Internet en: . [Con acceso 8-11-2006]
2- http://pisuerga.inf.ubu.es/lsi/Invest/Java/Tuto/Index.htm Comentario: Esta fuente de información comenta una breve definición de sobrecarga, herencia y superclase, presentan pequeñas líneas de código para su entendimiento. A parte de estos conceptos hace comentarios y ejemplifica puntos muy importantes que toda persona como futuro programador no debe dejar pasar, como lo son referencias al objeto, variables de instancia, el uso del operador new, la declaración de métodos, llamadas a métodos, etc., con respecto al concepto de herencia detalla un introducción y las generalidades, dentro de las generalidades muestra una imagen que nos ayuda a entender lo que es la herencia. Continuando con el contenido de esta fuente también detalla información sobre las interfaces, la declaración de la misma, su implementación, etc. también sobre los paquetes, que son, su declaración, la importancia, etc. Si tuviera que evaluar esta fuente con la escala anterior, mi evaluación sería de 3, porque presenta buena ejemplificación, pero le falta una explicación mas detallada a los ejemplos. Manzanedo del Campo, M.A.; García Peñalvo, F.J. 1998; 5 de octubre 1998.; actualizado el13 de octubre de 1999. La Herencia. Fundamentos de Java. En: Guía de Iniciación al Lenguaje Java. España. Universidad de Burgos. Cruzado Nuño, I.; [Base de Datos en línea]. Disponible desde Internet en: .Transferible vía FTP desde: y también en HTML comprimida en:. [Con acceso 8-11-2006]
3- http://www.arrakis.es/~abelp/ApuntesJava/indice.htm
Comentario: Esta fuente es para mi una de las mejores que he consultado, detalla mucha información sobre lo involucrado en programación orientada a objetos en java, pero me centrare en los conceptos investigados.
Las clases abstractas, esta fuente define bien las clases abstractas y
ejemplifica la declaración e implementación de la misma. También hace comentario sobre las referencias y objetos abstractos con ejemplos. Herencia, aunque no la define con palabras, presenta un ejemplo que omite la definición; comenta sobre la redefinición de métodos, el uso de super y la inicialización de clases derivadas. Otro concepto que esta bien definido es la Interface, ejemplifica la declaración y su uso.
Esta fuente para mi es una de las más completas, ya que ejemplifica cada
concepto y lo detalla muy bien, si tuviera que evaluarlo con la escala de 1 a 5; mi evaluación sería de 5, porque lo que detalle hace un momento. Bel Puchol, A. Octubre 2000. 26 de Enero de 2001.; actualizado el 17 de junio de 2001. El Lenguaje Java. En: Apuntes Lenguaje Java. España. Arrakis Part of the BT Group. [Base de Datos en línea]. Disponible desde Internet en: y en . [Con acceso 8-11-2006]
4- http://www.geocities.com/CollegePark/Quad/8901/cap04.htm Comentario: Esta fuente abarca algunos conceptos involucrados en la jerarquía de java, pero también define otros conceptos que no son los investigados, sin embargo son de igual importancia. Estos conceptos son variables de instancias, constructores, el método main (), etc. Con respecto a los conceptos investigados: la sobrecarga hace una breve definición y presenta un ejemplo muy entendible para un futuro programador. El concepto herencia presenta una pequeña definición y lo acompaña un ejemplo que no esta entendible, pero creo que se debe a que esta incompleto. El termino superclase se comenta en una pequeña definición no muy extensa, también con un ejemplo no entendible, pero esto se debe a que son pequeños fragmentos de códigos que deben ser unidos para lograr entenderlos. También hace un comentario sobre la palabra abstract, pero no la explica más a fondo. Al igual que las demás si tuviera que evaluarla con la escala, mi evaluación sería de 3, porque la información que suministra ayuda, sin embargo los ejemplos están incompleto en la parte del código. Geocities.; actualizado en Diciembre de 1996. Capitulo 4: Clases. En: Manual de Java. EE.UU.; Yahoo! Company. [Base de Datos en línea]. Disponible desde Internet en: . [Con acceso 8-11-2006]
5- http://pjsml.50megs.com/java/herencia1.html
Comentario: Esta fuente comenta mucha información con referencia a la programación en java, sin embargo solamente define dos conceptos involucrados en la jerarquía de java que son la herencia y las clases abstractas.
Con respecto a la herencia define conceptos y ejemplos con mucha claridad
para su mejor entendiendo. La sintaxis de los ejemplos es muy aprovechable para el investigador, de igual forma las clases abstractas son comentadas con conceptos básicos y son explicados por medio de ejemplos con su sintaxis debidamente documentada. Esta fuente es otra de las que considero que suministra información importante, que ayudara al investigador a tener conocimientos más claros de algunos de los conceptos involucrados en la jerarquía de java. Mi evaluación en la escala sería de 5 debido a que la información que suministra no es de difícil entendimiento, sin embargo considero que debería abarcar los demás conceptos que están involucrados.
Silva Mingram, P. actualizado el 6 de Marzo de 2006. Herencia. En: Programación en Java. 50MEGS Company. [Documento en línea]. Disponible desde Internet en: . Formato PDF en: . [Con acceso 8-11-2006]
6- http://www.fi-b.unam.mx/pp/profesores/carlos/java/indice.html Comentario: Esta es otra de las fuentes que para mi, esta bastante completa en lo que involucra la jerarquía de java. Hace una clara y precisa definición de los conceptos como abstracción, herencia, polimorfismo y clases abstractas. La definición de estos términos para mi es la más aceptable, en la herencia comenta sobre los dos tipos de herencia y hace énfasis en que java solo permite herencia simple. También detalla sobre la superclase y subclases por medio de una pequeña ejemplificación. Sobre polimorfismo no hace una definición tan profunda, sin embargo la explicación es comentada por medio de un ejemplo. Las clases abstractas esta definida desde otro punto de vista, sin embargo presenta un código con su sintaxis y su debida explicación de lo que son las clases abstractas. Tiene un punto con la sintaxis de herencia de clases y hace un comentario de que los constructores no son heredados por las subclases. En cuanto a la evaluación sería de 5, porque los conceptos están claramente definidos, aunque no muestre como las anteriores fuentes.
Ing. Román Zamitiz, C.A.; actualizado el 20 de Septiembre de 2006. Conceptos de la Programación Orientada a Objetos. En: Profesores / Carlos. Programación Orientada a Objetos con Java. Programación con Java. [Base de Datos en línea]. Disponible desde Internet en: . [Con acceso 8-11-2006]
7- http://jtech.dccia.ua.es/tutoriales/apuntes/sesion-introjava-apuntes.htm
Comentario: Esta fuente fue escrita por Ignacio Iborra, la información es comentada de manera clara y como se dice es tratada por encima, no muy a fondo. Define que son objetos y clases, también campos, métodos, constructores, herencia, polimorfismo y clases abstractas e interfaces.
Con
respecto a la herencia hace una pequeña definición y la complementa con un ejemplo. Del igual forma el polimorfismo es definido, sin embargo no es ejemplificado de modo que pueda ser entendido. El termino Clase abstracta esta claramente definido, pero muestra un ejemplo de interfaz y clase abstracta, describe la diferencia entre clase, clase abstracta e interfaz.
Adicionalmente describe
individualmente los componentes de un programa java: paquetes, clases, campos, métodos, constructores y otras posibilidades. La información que presenta la evaluó con 3, porque describe mas detalles de otros conceptos, que los investigados.
Iborra, I. 2004; Julio de 2004. Introducción a Java. En: sesion-introjava-apuntes.htm. Jtech.ua.es Institute. Universidad de Alicante. [Base de Datos en línea]. Disponible desde Internet en: . [Con acceso 8-11-2006]
8- http://www.cica.es/formacion/JavaTut/Intro/tabla.html
Comentario: Esta fuente es un tutorial en línea, para mi es otra de las fuentes que detalla claramente los conceptos involucrados en jerarquía de java. El concepto que emite para el término herencia se asemeja a las demás definiciones que comentan las otras fuentes, además es ejemplificado con una sintaxis del código. Con respecto a las clases abstractas esta definida mediante las sintaxis de un código, aunque el código a simple no es entendible, se hizo un comentario donde se explica punto por punto la sintaxis del código. También emite un comentario sobre las interfaces, mostrando una sintaxis de la misma para su mejor entendimiento. Mi evaluación para esta fuente es de 4, porque aunque la información que presenta es de mucha ayuda, pienso que se debiera implementar más información y ejemplificación de cada concepto.
Froufe, A. 1996; actualizado el 1 de Enero de 1997. Conceptos Básicos de Java. En: Tutorial de Java y mas. España. Centro Informático Científico de Andalucía. [Base de Datos en línea]. Disponible desde Internet en: . [Con acceso 8-11-2006]
9http://www.fdi.ucm.es/profesor/lgarmend/LPS/Tema%207%20Polimorfismo%20en%20Java .pdf
Comentario: Esta fuente está en formato PDF y describe clases abstractas e interfaces. La información que esta fuente presenta es de mucha ayuda, es explicada mediante un esquema, también con códigos que están divididos y explicados parte por parte. Además muestra un ejemplo completo de clase abstracta. Las interfaces también están claramente detalladas y ejemplificadas mediante esquemas, código con su respectiva sintaxis en java. Para mi esta fuente detalla claramente los conceptos de clase abstracta e interfaces, con respecto a la evaluación, lo evaluaría con un 5; ya que como dije estos dos conceptos están claramente detallados y ejemplificados para un mejor entendimiento, por parte de un futuro programador.
Además quiero especificar que en la dirección
http://www.fdi.ucm.es/profesor/lgarmend/LPS/, existe un archivo que describe de igual forma que el anterior, lo que es el polimorfismo mediante esquemas y códigos que son entendibles de manera sencilla y clara. Garmendia Salvador, L. 2005.; actualizado el 11 de octubre 2005. Polimorfismo en Java; Clases Abstractas e interfaces. En: /profesor/lgarmend/LPS/. España. Facultad de Informática de la Universidad Complutense de Madrid. [Base de Datos en línea]. Disponible desde Internet en: . Formato PDF. [Con acceso 8-11-2006]
10- http://www.dcc.uchile.cl/~lmateu/Java/Apuntes/subclase.htm Comentario: Esta fuente aunque no hace una definición muy precisa de subclases y herencia como las fuentes antes visitadas y comentadas, lo remedia mediante una serie de códigos con su sintaxis, que ayudan a lograr un mejor entendimiento de cada término. Dentro de los ejemplos se describe la sintaxis para diseñar clases y métodos abstractos. La información que esta fuente describe, aunque no es extensa es de mucha ayuda, porque es explicada mediante ejemplos que motivan al investigador, ya sea a hacerle alguna modificación o simplemente hacerle la ejecución para ver su funcionamiento y el resultado que emite. Con respecto a la evaluación, la mía sería de 4, porque le hace falta un poco más de teoría a las ejemplificaciones para su mejor explicación y entendimiento. B. Mateu, L.; 7 de noviembre de 1996; copia actualizada en: . Subclases y Herencia. En: Apuntes/Apuntes de Java. Chile. Universidad de Chile Departamento de Ciencias de la Computación. [Base de Datos en línea]. Disponible desde Internet en: . [Con acceso 8-11-2006]
GLOSARIO DE TERMINOS
1-Jerarquía: Es el orden de los elementos de una serie según su valor. Es la disposición de personas, animales o cosas, en orden ascendente o descendente, según criterios de clase, poder, oficio, categoría, autoridad o cualquier otro asunto que conduzca a un sistema de clasificación. En el mundo de los animales es la estructura social más frecuente, ya que establece un orden de dominación: la superioridad de un animal sobre los demás suele ser resultado de relaciones agresivas.
2-Herencia: La herencia es la propiedad que permite la creación de nuevas clases a partir de clases ya existentes. La clase derivada hereda los datos y las funciones miembro de la clase base, y puede redefinir algunas de las funciones miembro o definir otras nuevas, para ampliar la funcionalidad que ha recibido de la clase base. La herencia puede ser de dos tipos, simple si sólo es posible heredar características de una sola clase, o múltiple si se pueden heredar características de varias clases. 3-Clase Abstracta: Una clase abstracta es una clase que tiene al menos un método abstracto. Una clase que extiende a una clase abstracta debe implementar los métodos abstractos (escribir el código) o bien volverlos a declarar como abstractos, con lo que ella misma se convierte también en clase abstracta. 4-Super Clase: Se denomina Super Clase a una clase padre de cualquier subclase, una superclase puede tener cualquier número de subclases. Una clase derivada de otra se denomina subclase, mientras que la clase de la cual procede recibe el nombre de superclase. Un ejemplo seria la superclase Persona, y la subclase derivada, Hombre.
5-Polimorfismo: Se denomina polimorfismo a la capacidad que tienen objetos de diferentes clases de responder al mismo mensaje. Esto significa que puede haber muchos mensajes con el mismo nombre, en diferentes clases. Cada Clase responde al mensaje con su código propio (o método). Justamente de ahí el nombre de polimorfismo, muchas formas de responder al mismo mensaje. 6-Sobrecarga: La sobrecarga se refiere a la posibilidad de tener dos o más funciones con el mismo nombre pero funcionalidad diferente. Es decir, dos o más funciones con el mismo nombre realizan acciones diferentes. El compilador usará una u otra dependiendo de los parámetros usados. A esto se llama también sobrecarga de funciones.
EJEMPLIFICACIÓN DE CADA CONCEPTO
Jerarquía:
Explicación: El mecanismo de herencia permite definir nuevas clases partiendo de otras ya existentes. De este modo, se consiguen reflejar todos los niveles de generalización que se deseen. La orientación a objetos de Java, y en particular la característica de herencia, nos permite definir nuevas clases derivadas a partir de otra ya existente, que la especializan de alguna manera, extendiéndola. Así logramos definir una jerarquía
Herencia: public class Muestra extends Frame { Button si; Button no;
}
public Muestra () { Label comentario = new Label("Presione un botón", Label.CENTER); si = new Button("Sí"); no = new Button("No"); add("North", comentario); add("East", si); add("West", no); }
Explicación: Esta clase no está muy completa así, pero da una idea… Es una clase heredera de la clase Frame (un tipo de ventana) que tiene un par de botones y un texto. Contiene dos atributos ("si" y "no"), que son dos objetos del tipo Button, y un único método llamado Muestra (igual que la clase, por lo que es lo que se llama un constructor). Para indicar que esta clase deriva de otra, heredando sus propiedades (métodos y atributos), solo basta ver el uso de la palabra extends que se indica en el nombre de la clase. (public class Muestra extends Frame)
Clase Abstracta:
abstract class claseA { abstract void metodoAbstracto(); void metodoConcreto() { System.out.println("En el metodo concreto de claseA"); }
}
class claseB extends claseA { void metodoAbstracto(){ System.out.println("En el metodo abstracto de claseB"); }
}
Explicación: La clase abstracta “claseA” ha implementado el método concreto metodoConcreto(), pero el método “metodoAbstracto()” era abstracto y por eso ha tenido que ser redefinido en la clase hija claseB. Cualquier subclase de una clase abstract debe implementar todos los métodos abstract de la superclase o bien ser declarada también como abstract.
Super Clase: public class unFrame extends JFrame { public unFrame() { super("Ventana JFrame" ); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // resto de código
Explicación: Se declara una clase que hereda de JFrame (superclase), y en el método constructor usa super con un parámetro String. Puesto que super es JFrame, en realidad se está declarando un objeto JFrame usando uno de sus constructores, el que lleva como argumento un String que hace de título de la ventana. La línea super("Ventana JFrame") equivale a this.setTitle("Ventana JFrame").
Polimorfismo: public abstract class Animal {
}
public abstract void habla();
class Perro extends Animal{ public void habla(){ System.out.println("¡Guau!"); } } class Gato extends Animal{ public void habla(){ System.out.println("¡Miau!"); } } public class PoliApp { public static void main(String[] args) { Gato gato=new Gato(); hazleHablar(gato); } static void hazleHablar(Animal sujeto){ sujeto.habla(); } }
Explicación: Creamos una clase abstracta denominada Animal de la cual deriva las clases Gato y Perro. Ambas clases redefinen la función habla declarada abstracta en la clase base Animal. El polimorfismo nos permite pasar la referencia a un objeto de la clase Gato a una función hazleHablar que conoce al objeto por su clase base Animal. Si se pasa un objeto de la clase Gato se imprimirá ¡Miau!, si se pasa un objeto de la clase Perro se imprimirá ¡Guau!.
Sobrecarga: public class Articulo { private float precio; public void setPrecio() { precio = 3.50; } public void setPrecio(float nuevoPrecio) { precio = nuevoPrecio; }
Explicación: Aquí hemos creado un Clase Articulo con una variable privada y dos métodos con el mismo nombre. Estos métodos cuentan con diferentes argumentos. El compilador decide que método invocar comparando los argumentos. Se generara un error si los métodos solo varían en el tipo de retorno. Como la sobrecarga se refiere a la posibilidad de tener dos o más funciones con el mismo nombre pero con funcionalidad diferente.
APLICACIÓN EJECUTABLE DEL USO DE LOS CONCEPTOS
1. Clase ProductoBasico: La clase base es la clase sobre la que se basa la herencia, por lo tanto construí el primer objeto con las propiedades básicas de un PRODUCTO, como son el nombre, precio de costo y precio de venta. A partir de este objeto, voy a extender la funcionalidad mediante herencia. Solo el nombre va a ser atributo público, obligando a implementar métodos que manejen la accesibilidad a los atributos privados. class ProductoBasico { public String nombre; private int precioCosto; private int precioVenta; public ProductoBasico(String nombre , int precioCosto , int precioVenta) { this.nombre = nombre; this.precioCosto = precioCosto; this.precioVenta = precioVenta; } public void cambiarPrecioCosto(int nuevoPrecio) { precioCosto = nuevoPrecio; } public int obtenerPrecioCosto( ) { return precioCosto; } public void cambiarPrecioVenta(int nuevoPrecio) { precioVenta = nuevoPrecio; } public int obtenerPrecioVenta( ) { return precioVenta; } }
2. Clase Producto: Teniendo implementado el objeto ProductoBasico, éste me servirá como clase base para implementar la clase derivada Producto. Los métodos y atributos públicos de la clase base, son visibles desde la clase derivada, por lo tanto, desde la nueva clase Producto se puede acceder a las siguientes propiedades de la clase base ProductoBasico : public public public public public
String nombre; void cambiarPrecioCosto(int nuevoPrecio) int obtenerPrecioCosto( ) void cambiarPrecioVenta(int nuevoPrecio) int obtenerPrecioVenta( )
Consecuentemente, si la clase base es ProductoBasico y la clase derivada (que extiende a la clase base) es Producto, se tiene la siguiente sintaxis: class Producto extends ProductoBasico { private int stock;
public Producto( String nombre, int precioCosto, int precioVenta,int stock ) { super(nombre,precioCosto,precioVenta); this.stock = stock; } public void vender(int cantidad) { stock -= cantidad; } public void comprar(int cantidad) { stock += cantidad; } public int obtenerStock( ) { return stock; } }
3. Clase ProductoExt: Extendiendo la clase Producto, diseñe una clase que pueda registrar la utilidad sobre las ventas, en cada operación de este tipo. Las propiedades de herencia se mantienen, tomando como clase base la clase Producto. La única novedad de esta implementación es que se sobreescribe el método vender. Cuando se acceda a este método a través de un objeto de tipo ProductoExt no se llamará al método definido en la clase base, por el contrario, se estará accediendo al método sobreescrito, por un asunto de jerarquía de clases. Ahora bien, si queremos que el nuevo método conserve parte del funcionamiento del método de la clase base, tenemos que llamar a ese método mediante el uso de super. class ProductoExt extends Producto { private int utilidad; public ProductoExt(String nombre, int precioCosto, int precioVenta, int stock) { super(nombre,precioCosto,precioVenta,stock); this.utilidad = 0; } public int obtenerUtilidad( ) { return utilidad; } public void vender(int cantidad) { super.vender(cantidad); utilidad += cantidad * ( obtenerPrecioVenta( ) - obtenerPrecioCosto( )); } }
Programa de Prueba:
El programa de prueba implementa un método estático llamado simulación que consiste en ir asignado aleatoriamente precio de venta y costo sobre el objeto, además de asignar, va modificando el stock mediante llamadas a los métodos vender y comprar; también imprime una tabla con las columnas mes, costo, venta, stock y utilidad. class PrbProdExt { public static void main(String arg[ ]) { ProductoExt p = new ProductoExt("Coca-Cola 2 lts.",380,650,3000); System.out.println("\n\tInforme de precios , stock y utilidades "); System.out.println("\t---------------------------------------\n"); System.out.println("\n\tProducto : " + p.nombre + "\n"); System.out.println("\n\tmes\tcosto\tventa\t\tstock\t\tutilidad"); System.out.print("\t---\t-----\t-----\t\t-----\t\t--------"); simulacion(p,12); System.out.println("\n\t"); } public static void simulacion(ProductoExt p , int n) { int cont = 0; while(cont < n) { int aux = (int) Math.round(Math.random() * 5) + p.obtenerPrecioCosto( ); p.cambiarPrecioCosto(aux); p.comprar(aux * 4); aux = (int) Math.round(Math.random() * 5) + p.obtenerPrecioVenta( ); p.cambiarPrecioVenta(aux); p.vender(aux * 2); cont++; System.out.print("\n\t" + cont + "\t" + p.obtenerPrecioCosto( )); System.out.print("\t" + p.obtenerPrecioVenta( ));
} }
System.out.print("\t\t" + p.obtenerStock( )); System.out.print("\t\t" + p.obtenerUtilidad( ));
}
APLICACIÓN APOYADA EN ESPECIFICACIONES UML
Esta es la clase de prueba del ejecutable con sus respectivos métodos.
PrbProdExt // No Tiene Atributos Public static void main(); Public static void simulacion();
ProductoBasico Public nombre; Private preciocosto; Private precioventa;
Public Public Public Public Public
Esta es la clase ProductoBasico(); Producto, que se void CambiarPrecioCosto(); extiende de la clase int ObtenerPrecioCosto(); Base ProductoBasico void CambiarPrecioVenta(); int ObtenerPrecioVemta();
Esta es la clase Base del ejecutable, de donde se extienden las demás clase.
Producto ProductoExt Private stock; Private utilidad; Public Producto(); Public void Vender();
Public ProductoExt();
Public void Compra();
Public int ObtenerUtilidad();
Public int ObtenerStck();
Public void Vender();
Esta es la clase que se extiende de la clase Producto.
CONCLUSIÓN
Después de haber visitado y analizado distintas fuentes, que suministran información que ayudan al estudiantado a tener un conocimiento mas claro y preciso de los conceptos involucrados en la jerarquía de java. Puedo describir las siguientes conclusiones:
La herencia es la propiedad que permite la creación de nuevas clases a partir de clases ya existentes. La clase derivada hereda los datos y las funciones miembro de la clase base, y puede redefinir algunas de las funciones miembro o definir otras nuevas, para ampliar la funcionalidad que ha recibido de la clase base.
Para crear un objeto de la clase derivada se llama primero al constructor de la clase base mediante la palabra reservada super. Luego, se inicializa los miembros dato de dicha clase derivada.
El polimorfismo se implementa por medio de las funciones abstractas, en las clases derivadas se declara y se define una función que tiene el mismo nombre, el mismo número de parámetros y del mismo tipo que en la clase base, pero que da lugar a un comportamiento distinto, específico de los objetos de la clase derivada.
No se pueden crear objetos de una clase abstracta pero si se pueden declarar referencias en las que guardamos el valor devuelto por new al crear objetos de las clases derivadas. Esta peculiaridad nos permite pasar un objeto de una clase derivada a una función que conoce el objeto solamente por su clase base. De este modo podemos ampliar la jerarquía de clases sin modificar el código de las funciones que manipulan los objetos de las clases de la jerarquía.