Autor Tema: CU00687B crear esquemas de herencia y definir clases Java  (Leído 8998 veces)

momo

  • Principiante
  • **
  • Mensajes: 64
    • Ver Perfil
CU00687B crear esquemas de herencia y definir clases Java
« en: 18 de Octubre 2014, 03:47 »
Citar
EJERCICIO

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.

Puedes comprobar si tu respuesta es correcta consultando en los foros aprenderaprogramar.com.



Aqui les dejo la  siguiente entrega:

Nota: En el Ejercicio quedaron clases(ProductoCongelado y ProductoFresco) sin Establecerle los metodos getter y setter.
por el motivo de que las dos clases se quedaron sin atributos.

Nota: La clase(TempDeProdRefrigeradoOCongelado) fue creada por la razon de que la clase (ProductoCongelado y ProductoRefrigerado)
se le pasa un mismo atributo que es la temperatura recomendada. a subes dicha clase contiene los datos de la clase Producto

Bueno Espero que el Ejercicio este Bien Elaborado y bien Estructurado

Se lo dejo en Archivo Adjunto (código en archivo rar e imagen adjunta, descargar estando logeado en el foro)
« Última modificación: 19 de Octubre 2014, 21:32 por Alex Rodríguez »

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Re:CU00687B
« Respuesta #1 en: 18 de Octubre 2014, 21:54 »
Hola momo
Tu ejercicio cumple con lo demandado.

Supongo que habrás tenido un lio en organizar que atributos asignas a cada clase y como organizar éstas.
Caben muchas estructuras de clases con herencia entre ellas para solventar nuestro ejercicio.
En tu caso la creación de dos clases sin atributo alguno resta eficiencia a tu solución.
No sé si lo has hecho
Citar
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.

Por mi experiencia, te puedo decir que ayuda mucho. Es como si tuvieras un colega frente a ti que te señala tus errores o te confirma que vas por el buen camino.

Como siempre, la experiencia que vayas adquiriendo te permitirá crear estructuras de clases más eficientes (sin clases intermedias vacías).
Se dice que un buen diseño en la estructura de las clases de un proyecto, es más del 50% del diseño.

Como valores positivos, te señalo:
OK al uso de la palabra clave 'super' para invocar métodos de la clase padre para mostrar información de la clase actual y los atributos que hereda de su clase padre.

Me he quedado con las ganas de poder añadir productos en tu menú. Espero que la próxima vez me des el gusto de poder interactuar con tu programa.

Saludos.

momo

  • Principiante
  • **
  • Mensajes: 64
    • Ver Perfil
Re:CU00687B
« Respuesta #2 en: 18 de Octubre 2014, 23:02 »

Hola Toni_apr Bueno Principalmente si realice un esquema a papel . También organice cada atributo correspondiente a sus clase en un papel. Por eso es que dejo como nota que dos clases quedaron sin atributos Por ejemplo

ProductoFresco : Los atributos (FechaEnavasado,paisOrigen) que pertenecen a esta clase y a su vez a los otras dos clases  productos(Congelado,Refrigerado) estos dos atributo los paso a la clase producto quedando sin atributos ProductoFresco. Lo que en realidad no se si esta mal dejar una clase sin Atributo  .

La idea de Trabajar con Herencia  es  no llegar a tener duplicidad de código y eso  es lo que hice que el ejercicio no llegara a tener duplicidad de código.

Preguntas :

Ahora mi pregunta  es ¿ esta Mal Dejar una clase sin atributos y sin asignarle sus métodos  setter y getter  ?

Si eso esta mal dejar una clase sin atributos y sin métodos  que opciones  se  podrían tomar? Tomando en cuenta la situación de este Ejercicio.

Le Agradecería su  respuesta

Citar
Me he quedado con las ganas de poder añadir productos en tu menú. Espero que la próxima vez me des el gusto de poder interactuar con tu programa.

Resp: Bueno Amigo no diseñe el ejercicio de manera que el usuario añadiera mas producto ya que me apegue al enunciado del ejercicio..



Amigo Toni Muchas Gracias por tus observaciones..
« Última modificación: 12 de Noviembre 2014, 23:17 por Alex Rodríguez »

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Re:CU00687B
« Respuesta #3 en: 19 de Octubre 2014, 11:03 »
Hola momo
Cito de tu mensaje anterior.
Citar
La idea de Trabajar con Herencia  es  no llegar a tener duplicidad de código y eso  es lo que hice que el ejercicio no llegara a tener duplicidad de código.

Es cierto, evitas problemas al impedir duplicidad de código. Y también podemos añadir te beneficias del código de las clases superiores. Es decir te evitas problemas por un lado y al mismo tiempo te das facilidades a ti mismo.

En cuanto a tener clases sin atributos, si existen, pero son clases que trabajan en sus métodos con los parámetros que les suministran otras clases.
Al final te mando este ejercicio comprimido, con otro punto de vista sobre el ejercicio y con clases (Validador, Fecha, Mensa) que no tienen atributos porque no los necesitan, son clases con métodos estáticos que trabajan con los parámetros que les suministramos.

En el ejercicio actual. Clases con relación de herencia, tener una clase que hereda de la superior y ella no aporta nada, a primera vista podríamos decir que podemos prescindir de la clase que no contiene atributos, porque los métodos que tiene en definitiva los invoca de la clase superior. En fin no quiero alargarme más.

Chequeas el ejercicio que te envío. Te anticipo que no es la perfección. Siempre puedes venir tu mañana y presentarme una solución con mejoras sustantivas. En principio verás una organización de las clases distinta pero cumpliendo las especificaciones del ejercicio.

Saludos

yorman adco

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
Re:CU00687B crear esquemas de herencia y definir clases Java
« Respuesta #4 en: 12 de Noviembre 2014, 22:49 »
alguien me podria decir que esta mal con mi codigo soy nuevo en esto de la programacion

el problema es que no me muestra todos los datos ingresados

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Re:CU00687B crear esquemas de herencia y definir clases Java
« Respuesta #5 en: 13 de Noviembre 2014, 23:30 »
Hola yorman adco
A tu proyecto he tenido que añadirle en la clase Aplicacion una línea al siguiente método

Código: [Seleccionar]
    private static String Leer(String msje)
    {
        Scanner Lector = new Scanner(System.in); '1
        System.out.print(msje+": ");              '2
        return Lector.nextLine();                  '3
    }

Con la línea 1 el programa funciona, pero funciona a medias.
Tu código a la hora de mostrar los datos de un producto, le faltan los atributos de la clase super. Así la información del producto queda truncada

Además, este proyecto lo has construido a tu conveniencia. Has cambiado atributos de clase.
Citar
Los productos refrigerados deben llevar el código del organismo de supervisión alimentaria

No has incluido las clases para productos congelados por aire, agua y nitrógeno.

He visto que este es el primer ejercicio que presentas.
No utilizas la covención lowerCamelCase para bautizar los atributos. Dejo aparte la indentación del código.

Si entiendes todo lo anterior, sabrás como solucionarlo. Sino, deberías repasar las entregas anteriores para afianzar conceptos.

Saludos

ZSCFCP

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 8
    • Ver Perfil
Re:CU00687B crear esquemas de herencia y definir clases Java
« Respuesta #6 en: 19 de Noviembre 2014, 13:47 »
Buenos días.

Como en otras ocasiones, me gusta hacer mi aportación al foro en cada ejercicio, por lo que os incluyo un rar con mi propuesta y una imagen de la relación de herencia.

Solo comentar que no me he complicado con entradas por teclado o mantenimiento de BBDD pues entiendo no es el fin del ejercicio. Si lo es el entendimiento y manejo optimo de la herencia. Por ello me he centrado en intentar el mayor grado de abstracción para el ejercicio propuesto.

Espero de los profes me lo revisen y hagan los comentarios que gusten, como siempre, con el fin de aprender uno y todo el que detrás lo lea.

Gracias de antemano.

Saludos.



toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Re:CU00687B crear esquemas de herencia y definir clases Java
« Respuesta #7 en: 21 de Noviembre 2014, 12:27 »
Hola
Tu ejercicio cumple con lo que se pide en la entrega.
Tu estructura de la herencia es correcta, aunque observo que tienes una clase Producto que aumenta el tamaño de la estructura pero no aporta información discriminante.

Nuestra empresa agroalimentaria, si bien comercializa productos, siempre serán o bien productos frescos o congelados o de otro tipo, nunca productos (sin más).
A mi modo de ver los atributos de la clase Producto podrían incluirse en la clase PFresco sin desvirtuar la estructura de herencia actual.

Quiero observar que tu código es fácil de leer. Además le has añadido los comentarios para la documentación de la clase que enriquecen el valor del código.
Destaco también el uso de los métodos MostrarProductoXXX (valorBooleano) para decidir si se presenta cabecera de producto. Bien.

Por último, cito de tu mensaje
Citar
Solo comentar que no me he complicado con entradas por teclado o mantenimiento de BBDD pues entiendo no es el fin del ejercicio. Si lo es el entendimiento y manejo optimo de la herencia. Por ello me he centrado en intentar el mayor grado de abstracción para el ejercicio propuesto.

Como has decidido excluir cosas que no formaban parte del propósito del ejercicio (La herencia entre clases). Has tenido que contruir un main que, para presentar los datos de cada producto has tenido que escribir una línea para cada uno de ellos.
Si hubieras decidido poner dos productos más, bastaba con poner dos líneas más. Y con ventidos productos más, que... ¿ventidos líneas más?
Con esto te quiero decir que tu clase main (siendo operativa) no está a la altura del resto de las clases.

Tal como decías, has cumplido con lo que se pedía.
Me he quedado con las ganas de ver el edificio completo, no solo la fachada principal.

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".