101
Aprender a programar desde cero / Re:Java básico cómo relacionar clases entre sí uso de extends y super CU00687B
« en: 07 de Julio 2018, 20:13 »
Hola por un lado felicitarte por haber desarrollado este código. Por otro lado te comento las cosas que veo mejorables.
- Con la herencia se pretende reutilizar código de las superclases en las subclases. Por ejemplo, si en la superclase Producto se usa el método imprimirProducto() en la clase ProductoFresco reutilizamos ese código para evitar repetirlo. Esto lo has hecho correctamente en
De esta forma logras reutilizar el código de la superclase en la subclase. (Nota: más adelante en el curso se explica el método toString pero ahora no nos vamos a meter con eso).
Sin embargo en la clase ProductoReferenciaFrio no haces esta reutilización de código. Luego introduces imprimirProducto() en la clase ProductoRefrigerado, pero no en la clase ProductoCongelado, ni en ProductoCongeladoPorAgua, etc. No acabo de entender el por qué.
Luego utilizas en el main
refrigerado3.imprimirProductoReferenciaCongelado();
refrigerado3.imprimirProductoRefrigerado();
Resulta confuso... si refrigerado3 es un producto refrigerado ¿Por qué invocas el método refrigerado3.imprimirProductoReferenciaCongelado(); si no es un producto congelado? Ese método lo tienes dentro de la clase ProductoReferenciaFrio pero eso no es correcto: crea confusión. Si el producto no es congelado, no debe tener un método que se llame imprimirProductoReferenciaCongelado
La idea debería ser:
a) Introducir el código a reutilizar en la clase más elevada en la jerarquía posible. En este caso deberías reutilizar imprimirProducto() en la clase ProductoReferenciaFrio
b) En cada subclase ir llamando al método de la superclase que sea necesario, más las instrucciones específicas de esa subclase.
c) Evitar tener que hacer dobles invocaciones para una tarea que puede solucionarse con un solo método: para eso está la herencia.
En resumen, las correcciones a hacer en este ejercicio serían:
- Corregir los nombres de métodos para evitar incoherencias (por ejemplo que se pueda invocar imprimirProductoReferenciaCongelado sobre un producto que no es un congelado, esto no tiene lógica). Es importante que los nombres de clases y métodos sean coherentes y no induzcan a confusión.
- Estructurar bien la reutilización de código desde las superclases hasta las subclases de modo que solo sea necesario llamar a un método para mostrar la información de un producto por ejemplo
Saludos
- Con la herencia se pretende reutilizar código de las superclases en las subclases. Por ejemplo, si en la superclase Producto se usa el método imprimirProducto() en la clase ProductoFresco reutilizamos ese código para evitar repetirlo. Esto lo has hecho correctamente en
Código: [Seleccionar]
public void imprimirProductoFresco() {
imprimirProducto();
System.out.println("La fecha de envasado es: " + getFechaEnvasado() + " el pais de origen: " + getPais());
}
De esta forma logras reutilizar el código de la superclase en la subclase. (Nota: más adelante en el curso se explica el método toString pero ahora no nos vamos a meter con eso).
Sin embargo en la clase ProductoReferenciaFrio no haces esta reutilización de código. Luego introduces imprimirProducto() en la clase ProductoRefrigerado, pero no en la clase ProductoCongelado, ni en ProductoCongeladoPorAgua, etc. No acabo de entender el por qué.
Luego utilizas en el main
refrigerado3.imprimirProductoReferenciaCongelado();
refrigerado3.imprimirProductoRefrigerado();
Resulta confuso... si refrigerado3 es un producto refrigerado ¿Por qué invocas el método refrigerado3.imprimirProductoReferenciaCongelado(); si no es un producto congelado? Ese método lo tienes dentro de la clase ProductoReferenciaFrio pero eso no es correcto: crea confusión. Si el producto no es congelado, no debe tener un método que se llame imprimirProductoReferenciaCongelado
La idea debería ser:
a) Introducir el código a reutilizar en la clase más elevada en la jerarquía posible. En este caso deberías reutilizar imprimirProducto() en la clase ProductoReferenciaFrio
b) En cada subclase ir llamando al método de la superclase que sea necesario, más las instrucciones específicas de esa subclase.
c) Evitar tener que hacer dobles invocaciones para una tarea que puede solucionarse con un solo método: para eso está la herencia.
En resumen, las correcciones a hacer en este ejercicio serían:
- Corregir los nombres de métodos para evitar incoherencias (por ejemplo que se pueda invocar imprimirProductoReferenciaCongelado sobre un producto que no es un congelado, esto no tiene lógica). Es importante que los nombres de clases y métodos sean coherentes y no induzcan a confusión.
- Estructurar bien la reutilización de código desde las superclases hasta las subclases de modo que solo sea necesario llamar a un método para mostrar la información de un producto por ejemplo
Saludos