Autor Tema: Ejercicio resuelto herencia en java. CU00687B# Especialización y generalización  (Leído 14566 veces)

arcanFAC

  • Visitante
Hola, aquí presento este ejercicio para su revisión (el código se encuentra como archivo adjunto para su descarga estando logados):

Citar
Se plantea desarrollar un programa Java que permita la gestión de una empresa agroalimentaria que trabaja con tres tipos de productos: productos frescos, productos refrigerados y productos congelados. Todos los productos llevan esta información común: fecha de caducidad y número de lote. A su vez, cada tipo de producto lleva alguna información específica. Los productos frescos deben llevar la fecha de envasado y el país de origen. Los productos refrigerados deben llevar el código del organismo de supervisión alimentaria, la fecha de envasado, la temperatura de mantenimiento recomendada y el país de origen. Los productos congelados deben llevar la fecha de envasado, el país de origen y la temperatura de mantenimiento recomendada.

Hay tres tipos de productos congelados: congelados por aire, congelados por agua y congelados por nitrógeno. Los productos congelados por aire deben llevar la información de la composición del aire con que fue congelado (% de nitrógeno, % de oxígeno, % de dióxido de carbono y % de vapor de agua). Los productos congelados por agua deben llevar la información de la salinidad del agua con que se realizó la congelación en gramos de sal por litro de agua. Los productos congelados por nitrógeno deben llevar la información del método de congelación empleado y del tiempo de exposición al nitrógeno expresada en segundos.

Crear el código de las clases Java implementando una relación de herencia siguiendo estas indicaciones:

a) En primer lugar realizar un esquema con papel y bolígrafo donde se represente cómo se van a organizar las clases cuando escribamos el código. Estudiar los atributos de las clases y trasladar a la superclase todo atributo que pueda ser trasladado.

b) Crear superclases intermedias (aunque no se correspondan con la descripción dada de la empresa) para agrupar atributos y métodos cuando sea posible. Esto corresponde a “realizar abstracciones” en el ámbito de la programación, que pueden o no corresponderse con el mundo real.

c) Cada clase debe disponer de constructor y permitir establecer (set) y recuperar (get) el valor de sus atributos y tener un método que permita mostrar la información del objeto cuando sea procedente.

Crear una clase testHerencia3 con el método main donde se creen: dos productos frescos, tres productos refrigerados y cinco productos congelados (2 de ellos congelados por agua, otros 2 por agua y 1 por nitrógeno). Mostrar la información de cada producto por pantalla.


Aunque antes quisiera aclarar unos puntos con respecto al desarrollo de este ejercicio:

1.   El ejercicio nos pedía ingresar unos productos los cuales yo no ingresé por el tiempo básicamente aunque creo que esto no afecta la lógica del programa.

2.   Hay 2 clases las cuales no tienen parámetros, mirando las revisiones de otros compis leí en una de las respuestas que no era necesario borrarlas ya que mirando la realidad de la empresa convenía dejarla para futuras expansiones y demás, así que por ello las dejé.

3.   Todas las variables están declaradas como String , esto se debe a que se me volvió a presentar el problema del salto de línea con números,  decidí utilizar las soluciones que encontré anteriormente(Las cuales me sirvieron en esos ejercicios) sin resolver el problema, por lo cual por el mismo asunto del tiempo  todo lo puse como String.

4.   Lo primero que hice para resolver el ejercicio fue establecer una “estructura” para saber como proceder  a la hora de escribir el código, me quedó algo similar a esto:


Sin mas aquí dejo el ejercicio para que me dejen sus sugerencias. Saludos
« Última modificación: 15 de Abril 2015, 08:34 por Mario R. Rancel »

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Hola arcanFAC, en primer lugar felicitarte porque este es un ejercicio un poco extenso y se ve que lo has trabajado, y bien trabajado. Tanto el diseño (estructura) como el código en general podemos decir que están bien planteados. En algunos aspectos no has seguido exactamente lo que pedía el enunciado. Voy a comentarlo por partes.

Dentro de la clase Producto has incluido como atributos private String fechaEnvasado; y private String paisOrigen; Aunque el enunciado no lo dice explícitamente, si se lee con detenimiento son atributos de todos los productos, por tanto has hecho bien llevando esos atributos a un nivel superior, evitando la repetición en las diferentes subclases.

También has hecho bien creando la clase ProductoRefCong como abstracción que engloba todo lo común de ProductoRefrigerado y Productocongelado. Esto se corresponde con el apartado del enunciado donde dice

Citar
Crear superclases intermedias (aunque no se correspondan con la descripción dada de la empresa) para agrupar atributos y métodos cuando sea posible. Esto corresponde a “realizar abstracciones” en el ámbito de la programación, que pueden o no corresponderse con el mundo real.

En la clase CongeladoPorAire has definido estos atributos:

public class CongeladoPorAire extends ProductoCongelado{
   private String nitrogeno;
   private String oxigeno;
   private String dioxidoCarbono;
   private String vaporAgua;

Dado que los datos de composición son un %, es decir, un valor numérico, hubiera sido más adecuado declarar estos atributos como valores numéricos (por ejemplo double):


public class CongeladoPorAire extends ProductoCongelado{
   private double nitrogeno;
   private double oxigeno;
   private double dioxidoCarbono;
   private double vaporAgua;

Tener en cuenta que los String son para almacenar información textual. Si se trata de valores numéricos debemos usar un tipo numérico.

Lo mismo ocurre en las clases CongeladoPorAgua y CongeladoPorNitrogeno: deberías haber declarado los atributos como de tipo numérico en lugar de String.

Por lo que comentas esto ya lo conocías, pero si lo conocías lo lógico hubiera sido resolverlo usando los tipos numéricos

Has definido una clase de nombre Intermedio. No me parece mal. Lo único que te recomendaría es que pongas un nombre a la clase que describa lo que hace. Intermedio no describe lo que hace la clase. El nombre debería ser GestorProductos ó GestorListasProductos u otro descriptivo. Dentro de esta clase el método public void agregarProducto(String caracteristica) parece una muy buena idea para evitar la repetición de código, creo que es un buen ejemplo para que pueda ser consultado por personas que revisen ejercicios en los foros.

Te has saltado esta parte del enunciado:

Citar
Crear una clase testHerencia3 con el método main donde se creen: dos productos frescos, tres productos refrigerados y cinco productos congelados (2 de ellos congelados por agua, otros 2 por agua y 1 por nitrógeno). Mostrar la información de cada producto por pantalla.

Pero a cambio has incluido un menú y opciones que demuestran que dominas perfectamente lo que se pretendía con el ejercicio.

Aunque con algunos detalles que se podrían corregir, me ha parecido muy buen ejercicio. Mi enhorabuena.

Saludos.

arcanFAC

  • Visitante
Hola Mario, antes que nada agradecerte el tiempo que ustedes sacan de su día para atender nuestros problemas.

Ahora bien entrando en el ejercicio explico lo siguiente:

1.   Ya había explicado que los coloqué todos como String por un problema que me daba en la lectura de los números, sin embargo volví a retomar el ejercicio y ahora creo que funciona sin ningún problema. Aquí  está el enlace del tema del foro donde traté el problema con la lectura de números específicamente y donde encontramos soluciones.
https://www.aprenderaprogramar.com/foros/index.php?topic=2282.msg10925#msg10925


2.   Atendí la sugerencia de Toni en el ejercicio anterior de que a la hora de imprimir si la lista estaba vacía me imprimiera un mensaje indicándolo en vez de mostrar el título de la lista sin ningún objeto lo cual no tenia de mucho sentido.

Vuelvo a adjuntar el proyecto corregido para la revisión de los cambios para los que los desean mirar.

« Última modificación: 14 de Abril 2015, 23:14 por Mario R. Rancel »

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Hola arcanFAC, con las correcciones introducidas creo que has redondeado el ejercicio, gracias por subirlo pues puede servir de modelo para otras personas que estén realizando el curso. Saludos!

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".