Autor Tema: Bases de diseño para hacer buenos programas en Java cohesión métodos CU00665B  (Leído 2792 veces)

MarckyMarck

  • Sin experiencia
  • *
  • Mensajes: 15
    • Ver Perfil
Buenas tardes,

Les muestro mi ejercicio CU00665B, debo confesar que me dio un poco de trabajo que me compilara todo bien.

Código Main
Código: [Seleccionar]
import java.util.ArrayList;
public class Test
{
    public static void main (String[]args)
    {
        ListaCantantesFamosos cantantes= new ListaCantantesFamosos();
        System.out.println("Escriba el nombre de un cantante famoso.");
        cantantes.addNombre();
        System.out.println("Escriba el nombre de otro cantante famoso.");
        cantantes.addNombre();
        System.out.println("Los nombres son: ");
        for(int i=0;i<5;i++){
            System.out.println(cantantes.showNombre(i));
        }

 
    }
}


Clase para crear ArrayList
Código: [Seleccionar]
import java.util.ArrayList;

public class ListaCantantesFamosos
{

    private ArrayList<String>listaCantantes;

    public ListaCantantesFamosos()
    {
        listaCantantes=new ArrayList<String>();

        listaCantantes.add("Luis Miguel");
        listaCantantes.add("John Lelon");
        listaCantantes.add("Mathew Komma");

    }

    //Métodos para ArrayList
    public void addNombre(){
        IntroTexto nomCantante= new IntroTexto();
        listaCantantes.add(nomCantante.getPalabra());
    }

    public String showNombre(int posicion){
        return listaCantantes.get(posicion);

    }
}

Clase para entrada de texto
Código: [Seleccionar]
import java.util.Scanner;
public class IntroTexto
{
    String entradaTexto;

   
    public IntroTexto()
    {
        entradaTexto="";

        Scanner nuevaPalabra=new Scanner(System.in);
        entradaTexto=nuevaPalabra.nextLine();

    }

    public void setPalabra ()
    {
        Scanner nuevaPalabra=new Scanner(System.in);
        entradaTexto=nuevaPalabra.nextLine();
    }

    public String getPalabra()
    {
        return entradaTexto;
    }

}

   

Les agradezco mucho de antemano, saludos!
« Última modificación: 24 de Septiembre 2015, 10:15 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Hola MarckyMarck, tu código funciona bien y cumple lo que solicitaba el ejercicio. Cosas que debes tener en cuenta para mejorar:

- Añade métodos get y set siempre en tus clases, por ejemplo no tienes en la clase ListaCantantesFamosos   public ArrayList<String> getLista() { return listaCantantes;}

- Intenta no hacer recorridos de bucles indicando números concretos como límites

Código: [Seleccionar]
        for(int i=0;i<5;i++){
            System.out.println(cantantes.showNombre(i));
        }

Sería mejor:

Código: [Seleccionar]
        for(int i=0;i<cantantes.getLista().size();i++){
            System.out.println(cantantes.showNombre(i));
        }

- Cada método debe tener una responsabilidad única, clara y bien definida. No es un buen diseño:

Código: [Seleccionar]
    public void addNombre(){
        IntroTexto nomCantante= new IntroTexto();
        listaCantantes.add(nomCantante.getPalabra());
    }

Este método debería recibir un cantante y añadirlo, eso es lo que hace un método add. Si querías un método para pedir un cantante y añadirlo a la lista deberías haberlo nombrado de otra manera por ejemplo

Código: [Seleccionar]
    public void pedirNombreEInsertarEnLista(){
        IntroTexto nomCantante= new IntroTexto();
        listaCantantes.add(nomCantante.getPalabra());
    }

Sin embargo este método no está tampoco bien diseñado, porque un método debe encargarse de una cosa y no de dos. Si es para pedir un nombre, no es para insertar, y si es para insertar, no es para pedir. Esto se llama cohesión de un método: cada método tiene su responsabilidad. Esto son bases de diseño para hacer buenos programas en Java.

Te recomiendo revisar el hilo https://www.aprenderaprogramar.com/foros/index.php?topic=1549 y compararlo con tu código

Salu2!

 

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