Autor Tema: Cómo nombrar clases java: dar nombres adecuados según convención CU00687B  (Leído 18048 veces)

rubens23

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 30
    • Ver Perfil
Ejercicio resuelto ejemplo de herencia simple, extends y super en Java. Constructores con herencia. (Ejercicio CU00687B del tutorial)


CLASE PRODUCTOS

Código: [Seleccionar]
package aprender;

public class Productos {
private String fechaCaducidad;
private int numLote;
private String fechaEnvasado;
private String paisOrigen;
private int trec;
public Productos(String fechaCaducidad, int numLote, String fechaEnvasado, String paisOrigen){
this.fechaCaducidad=fechaCaducidad;
this.numLote=numLote;
this.fechaEnvasado=fechaEnvasado;
this.paisOrigen=paisOrigen;
}
public Productos(String fechaCaducidad, int numLote, String fechaEnvasado, String paisOrigen,int trec){
this.fechaCaducidad=fechaCaducidad;
this.numLote=numLote;
this.fechaEnvasado=fechaEnvasado;
this.paisOrigen=paisOrigen;
this.trec=trec;
}
public String getFechaCaducidad(){
return fechaCaducidad;
}
public int getNumLote(){
return numLote;
}
public String getFechaEnvasado(){
return fechaEnvasado;
}
public String getPaisOrigen(){
return paisOrigen;
}
public int getTemperaturaRecomendada(){
return trec;
}

}

CLASE PRODUCTOS FRESCOS

Código: [Seleccionar]
package aprender;

public class ProductosFrescos extends Productos {
public ProductosFrescos(String fechaCaducidad, int numLote, String fechaEnvasado, String paisOrigen){
super(fechaCaducidad, numLote, fechaEnvasado, paisOrigen);
}
public void mostrar1(){
System.out.println("Producto fresco con numero de lote: "+getNumLote()+"\nFecha de envasado: "+getFechaEnvasado()+"\nFecha de caducidad: "+getFechaCaducidad()+"\nPais de origen: "+getPaisOrigen());

}

}

CLASE PRODUCTOS REFRIGERADOS

Código: [Seleccionar]
package aprender;

public class ProductoRefrigerado extends Productos{
private String codigoAlimentario;
public ProductoRefrigerado(String fechaCaducidad, int numLote, String fechaEnvasado, String paisOrigen,int trec){
super(fechaCaducidad, numLote, fechaEnvasado, paisOrigen, trec);
codigoAlimentario = "";
}
public void setCodigoAlim(String codigoAlimentario){
this.codigoAlimentario = codigoAlimentario;
}
public String getCodigoAlim(){return codigoAlimentario;}
public void mostrar2(){
System.out.println("Producto refrigerado con codigo alimentario: "+getCodigoAlim()+"\nNumero de lote: "+getNumLote()+"\nFecha de caducidad: "+getFechaCaducidad()+"\nFecha de Envasado: "+getFechaEnvasado()+"\nPais de origen: "+getPaisOrigen()+"\nTemperatura de mantenimiento recomendada: "+getTemperaturaRecomendada());

}
 
}

CLASE PRODUCTOS CONGELADOS

Código: [Seleccionar]
package aprender;

public class ProductosCongelados extends Productos{
public ProductosCongelados(String fechaCaducidad, int numLote, String fechaEnvasado, String paisOrigen, int trec){
super (fechaCaducidad, numLote, fechaEnvasado, paisOrigen,trec);
}
public void mostrar3(){
System.out.println("Producto congelado con temperatura recomendada: "+getTemperaturaRecomendada()+"\nNumero de lote: "+getNumLote()+"\nFecha de caducidad: "+getFechaCaducidad()+"\nFecha de envasado: "+getFechaEnvasado()+"\nPais de origen: "+getPaisOrigen());
}

}

CLASE CONGELADOS POR AIRE

Código: [Seleccionar]
package aprender;

public class CongeladosPorAire extends ProductosCongelados {
private int nitrogeno, oxigeno, co2, vapor;
public CongeladosPorAire(String fechaCaducidad, int numLote, String fechaEnvasado, String paisOrigen,int trec){
super(fechaCaducidad,numLote,fechaEnvasado,paisOrigen,trec);
nitrogeno=0;oxigeno=0;co2=0;vapor=0;
}
public void setComposicionAire(int nitrogeno, int oxigeno, int co2, int vapor){
this.nitrogeno=nitrogeno;this.oxigeno=oxigeno;this.co2=co2;this.vapor=vapor;

}
public int getNitrogeno(){return nitrogeno;}
public int getOxigeno(){return oxigeno;}
public int getCo2(){return co2;}
public int getVapor(){return vapor;}
public void mostrar5(){
System.out.println("Composicion del aire formada por: \nNitrogeno= "+getNitrogeno()+" %"+"\nOxigeno= "+getOxigeno()+" %"+"\nDioxido de carbono= "+getCo2()+" %"+"\nVapor de agua= "+getVapor()+" %");

}

}

CLASE CONGELADOS POR AGUA

Código: [Seleccionar]
package aprender;

public class CongeladosPorAgua extends ProductosCongelados {
private int salinidadAgua; //gramos de sal por litro de agua
public CongeladosPorAgua(String fechaCaducidad, int numLote, String fechaEnvasado, String paisOrigen,int trec){
super(fechaCaducidad,numLote,fechaEnvasado,paisOrigen,trec);
salinidadAgua=0;
}
public void setSalinidadAgua(int salinidadAgua){
this.salinidadAgua=salinidadAgua;
}
public int getSalinidadAgua(){return salinidadAgua;}
public void mostrar6(){
System.out.println("Producto congelado por agua con temperatura recomendada: "+getTemperaturaRecomendada()+"\nNumero de lote: "+getNumLote()+"\nFecha de caducidad: "+getFechaCaducidad()+"\nFecha de envasado: "+getFechaEnvasado()+"\nPais de origen: "+getPaisOrigen()+"\nSalinidad del agua: "+getSalinidadAgua()+" g/litro");

}
}

CLASE CONGELADOS POR NITROGENO

Código: [Seleccionar]
package aprender;

public class CongeladosPorNitrogeno extends ProductosCongelados {
private String metodoCongelacion;
private int tiempoExposicion; //segundos
public CongeladosPorNitrogeno(String fechaCaducidad, int numLote, String fechaEnvasado, String paisOrigen,int trec){
super(fechaCaducidad,numLote,fechaEnvasado,paisOrigen,trec);
metodoCongelacion="";
tiempoExposicion = 0;
}
public void setMetodoCongelacion(String metodoCongelacion){
this.metodoCongelacion=metodoCongelacion;
}
public void setTiempoExposicion(int tiempoExposicion){
this.tiempoExposicion=tiempoExposicion;
}
public String getMetodoCongelacion(){return metodoCongelacion;}
public int getTiempoExposicion(){return tiempoExposicion;}
public void mostrar4(){
System.out.println("Producto congelado por nitrogeno con temperatura recomendada: "+getTemperaturaRecomendada()+"\nNumero de lote: "+getNumLote()+"\nFecha de caducidad: "+getFechaCaducidad()+"\nFecha de envasado: "+getFechaEnvasado()+"\nPais de origen: "+getPaisOrigen()+"\nMetodo de congelacion: "+getMetodoCongelacion()+"\nTiempo de exposicion al nitrógeno: "+getTiempoExposicion()+" segundos");
}



}

CLASE TEST HERENCIA

Código: [Seleccionar]
package aprender;

public class TestHerencia {
public static void main (String [] args){
ProductosFrescos pf = new ProductosFrescos("24/11/15", 12,"05/08/2015","España");
ProductosFrescos pf1 = new ProductosFrescos("27/11/15", 11,"05/08/2015","Italia");
ProductoRefrigerado pr = new ProductoRefrigerado("12/04/16",14,"05/08/2015","España",12);
ProductoRefrigerado pr1 = new ProductoRefrigerado("12/04/16",14,"05/08/2015","España",12);
ProductoRefrigerado pr2 = new ProductoRefrigerado("12/04/16",14,"05/08/2015","España",12);
CongeladosPorAire cpa = new CongeladosPorAire("23/11/15", 15, "05/08/2015","España",5);
CongeladosPorAire cpa1 = new CongeladosPorAire("23/11/15", 15, "05/08/2015","España",5);
CongeladosPorAgua cpag= new CongeladosPorAgua("23/11/15", 15, "05/08/2015","España",5);
CongeladosPorAgua cpag1= new CongeladosPorAgua("23/11/15", 15, "05/08/2015","España",5);
CongeladosPorNitrogeno cpn= new CongeladosPorNitrogeno("23/11/15", 15, "05/08/2015","España",5);
pr.setCodigoAlim("pr23433");pr1.setCodigoAlim("pr23433");pr2.setCodigoAlim("pr23433");
cpa.setComposicionAire(12, 10, 54, 24);cpa1.setComposicionAire(12, 10, 54, 24);
cpag.setSalinidadAgua(23);cpag1.setSalinidadAgua(21);
cpn.setMetodoCongelacion("hielo");cpn.setTiempoExposicion(53);
pf.mostrar1();pf1.mostrar1();
pr.mostrar2();pr1.mostrar2();pr2.mostrar2();
cpa.mostrar3();cpa.mostrar5();cpa1.mostrar3();cpa1.mostrar5();
cpag.mostrar6();cpag1.mostrar6();
cpn.mostrar4();


}

}

« Última modificación: 07 de Agosto 2015, 11:19 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola rubens, tendrías distintas cosas que mejorar en este ejercicio.


No estás nombrando adecuadamente las clases. Te copio desde otro hilo:

CÓMO NOMBRAR O DAR NOMBRES A LAS CLASES Y MÉTODOS EN JAVA **********

Un detalle importante que debemos manejar como programadores es la forma de nombrar las clases y métodos.

En general los nombres de las clases deben estar en singular. Has usado nombres como ProductosFrescos. Esto no se considera adecuado porque no sigue la convención habitual. Cuando nos referimos a la creación de un objeto por ejemplo decimos "he creado un objeto ProductoFresco" y no "he creado un objeto ProductosFrescos". Esto te ocurre con todas las clases. Deberías tenerlo en cuenta.

Además el nombre de una clase, o de un método, debe ser descriptivo y representativo de lo que hace la clase (su misión o tarea). Por ejemplo un nombre correcto es CombinadorDeCadenas mientras que sería incorrecto Comb (este sería un nombre pobre, no descriptivo, no indica la tarea de la clase). También son incorrectos nombres como registra_Teclado ó muestraEnPantalla. Los nombres de clases no deben ser verbos o acciones, sino sustantivos que designan a un objeto, por ejemplo registradorDeEntradasTeclado ó mostradorTextosEnPantalla.

Otras convenciones que suelen aplicarse sobre nombres son:

- Los nombres de clases java los comenzamos con una letra mayúscula, por ejemplo GestorDeTexto

- Los nombres de métodos en java los comenzamos con una letra minúscula, por ejemplo gestionarTexto()

- Los nombres de métodos para recuperar un atributo de una clase comienzan con get y para establecer un atributo empiezan con set, por ejemplo getEdad y setEdad

- Los nombres de métodos suelen nombrarse con el verbo en infinitivo (en español ó inglés) más algo descriptivo, por ejemplo unirCadenas ó joinStrings ó calcularAreaCilindro ó getCylinderArea, mostrarCombo ó showCombo, etc.

- En general en todos los nombres que usemos en java (de clases, métodos, objetos o variables) evitaremos usar la letra eñe, letras con tilde (acentuadas) o con caracteres extraños.

***************************



No has cumplido con lo que pedía este apartado:

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

Recomendación: ver cómo se plantea el esquema de herencia en este ejercicio resuelto https://www.aprenderaprogramar.com/foros/index.php?topic=2342

Ahí verás que se crea una clase intermedia ProductoRefCon para agrupar aspectos comunes de los productos refrigerados y congelados.


El uso de métodos public void mostrar1() public void mostrar2() public void mostrar3() no es adecuado porque no reutilizas el código, no es un buen diseño.

La idea con la herencia es reutilizar el código para no tener que crear repeticiones. Puedes fijarte en este ejercicio https://www.aprenderaprogramar.com/foros/index.php?topic=2935 donde en todas las clases el método se llama mostrarProducto() y donde hace uso de super para reutilizar código.

Saludos
« Última modificación: 23 de Octubre 2020, 14:28 por Alex Rodríguez »

 

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