Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: RaGa en 14 de Marzo 2015, 18:54
-
Mi versión del Ejercicio propuesto en la Entrega Nº67. Ejercicio CU00667B.
clase CantanteFamoso
public class CantanteFamoso{
// Declaración de los campos de instancia
private String nombre;
private String discoConMasVentas;
public CantanteFamoso(){ // Constructor de clase vacio
}
// SETTERS
public void setNombre(String valorNombre){
nombre = valorNombre;
}
public void setDiscoConMasVentas (String valorDiscoConMasVentas){
discoConMasVentas = valorDiscoConMasVentas;
}
// GETTERS
public String getNombre(){ return nombre; }
public String getDiscoConMasVentas() { return discoConMasVentas; }
} // Fin de la clase
clase ListaCantantesFamosos
import java.util.ArrayList;
public class ListaCantantesFamosos{
//Declaración de campos de instancia
ArrayList<CantanteFamoso> listaCantantesFamosos;
public ListaCantantesFamosos(){ //Constructor de clase
listaCantantesFamosos = new ArrayList<CantanteFamoso>();
}
public void addListaCantante(CantanteFamoso valorCantante){ //Agrega un objeto CantanteFamoso a la Lista
listaCantantesFamosos.add(valorCantante);
}
} // fin de la clase
clase GestionadorEntradasTeclado
import java.util.Scanner;
public class GestionadorEntradasTeclado{
//Declaracion de campos de instancia de la clase vacia
public GestionadorEntradasTeclado(){ // Constructor de clase
}
static String leer(){
Scanner scannerTeclado = new Scanner (System.in);
String valorTeclado = scannerTeclado.nextLine();
return valorTeclado;
}
} // Fin de la clase
clase Test
import java.util.Iterator;
public class Test{
//Declaración de campos de instancia vacío
public Test(){ //Constructor de clase vacío
}
private static CantanteFamoso AgregarCantante(){ // Crea nuevo objeto CantanteFamoso de manera manual. Se devuelve el objeto.
//Declaración de variables locales del método
CantanteFamoso tmpCantanteFamoso;
tmpCantanteFamoso = new CantanteFamoso(); // Instanciación del objeto CantanteFamoso
System.out.println("");
System.out.println("Ingrese Nombre del Cantante:");
tmpCantanteFamoso.setNombre(GestionadorEntradasTeclado.leer());
System.out.println("Ingrese su Disco con más ventas:");
tmpCantanteFamoso.setDiscoConMasVentas(GestionadorEntradasTeclado.leer());
return tmpCantanteFamoso;
} // fin de método
private static void mostrarLista(ListaCantantesFamosos tmpLista){ // Muestra la Lista completa
//Declaración de variables locales del método
CantanteFamoso tmpCantante;
Iterator<CantanteFamoso> it;
it = tmpLista.listaCantantesFamosos.iterator();
System.out.println("");
while(it.hasNext()){
tmpCantante = it.next();
System.out.println("Nombre: "+tmpCantante.getNombre()+". Disco más vendido: "+tmpCantante.getDiscoConMasVentas());
}
} // fin de método
public static void main (String[] args){ // método main
//Declaración de variables locales
ListaCantantesFamosos listaOchentosa;
CantanteFamoso tmpCantante;
String respuesta;
listaOchentosa = new ListaCantantesFamosos(); // Instanciación de la Lista
tmpCantante = AgregarCantante(); // Creación del primer objeto CantanteFamoso
listaOchentosa.addListaCantante(tmpCantante); // Agrego el primer objeto a la lista
tmpCantante = AgregarCantante(); // Creación del segundo objeto CantanteFamoso
listaOchentosa.addListaCantante(tmpCantante); // Agrego el segundo objeto a la lista
System.out.println("");
System.out.println("La lista inicial contiene los siguientes datos:"); // Mostrar la Lista inicial
mostrarLista(listaOchentosa);
do{
tmpCantante = AgregarCantante(); // Creación de un nuevo objeto CantanteFamoso
listaOchentosa.addListaCantante(tmpCantante); // Agrego el nuevo objeto a la Lista
System.out.println("");
System.out.println("La lista actualizada contiene los siguientes datos:"); // Mostrar la Lista actualizada
mostrarLista(listaOchentosa);
System.out.println("");
System.out.println("Presione cualquier letra para agregar un nuevo Cantante a la Lista, o presione la letra \"N\" para salir.");
respuesta = GestionadorEntradasTeclado.leer();
}while(!respuesta.equalsIgnoreCase("n"));
System.out.println("Gracias por usuar el software. Hasta luego!");
} // fin main
} // fin de la clase
Agradezco como siempre las correcciones y/o sugerencias. Muchas gracias.
-
Hola RaGA
Tu ejercicio está perfecto. OK
A esta altura del curso, quiero comentarte que para una eficiencia del código y mayor coherencia, en la clase Test, el método llamado
mostrarLista(...)
debería estar en la clase ListaCantantesFamosos, pues manipula información 100% exclusiva de esa clase ListaCantantesFamosos.
De esta forma el método main se descarga de código y se encarga exclusivamente de dar órdenes usando los métodos del resto de las clases del proyecto.
Saludos
-
Muchas gracias por la sugerencia toni_apr. El cambio sugerido tiene a su vez implícito el hacerme notar el enfoque de POO que debemos ir incorporando creo.
Además: no solo el método mostrarLista(...) queda entonces incluído dentro de la clase ListaDeCantantesFamosos sino que a su vez me permite declarar al campo tipo ArrayList de esa clase como Private. Esto no lo había podido realizar de la manera en que lo había codificado yo. Mantener todos los campos de instancia declarados como privados de la clase (inaccecibles desde fuera) creo que también es una buena política, cierto?. Y que ellos sean solo modificables por los propios métodos de la clase.
Saludos!
-
Hola Raga
Si, así es, siempre oirás decir que los campos de la clase o atributos se declaran private. (salvo excepciones muy raras en que necesitemos algo especial.)
Saludos