878
« en: 10 de Julio 2014, 22:42 »
Hola, el código se ve bien trabajado, se puede decir que funciona, pero hay bastante que mejorar y que comentar.
Clase EntradaPorTeclado: como su nombre indica, lo lógico es que tenga la misión de manejar entradas de teclado (digamos que pedirlas, almacenarlas, etc.). Sin embargo la declaras con 2 atributos entrada1 y entrada2, y en el constructor se pide al usuario que introduzca dichos atributos.
Esto no es un buen diseño: según la filosofía de orientación a objetos, la clase EntradaPorTeclado sería más lógico que tuviera a lo sumo 1 atributo (que representaría la propia entradaPorTeclado). Para manejar dos entradas de teclado, crearías dos objetos. Y esa creación la harías en el método main o en otra clase, no en el constructor de la clase EntradaPorTeclado.
Otro fallo: los atributos de una clase deben declararse private, no public.
Clase ComparandoCaracterXCaracter: El código puede estar bien, pero el diseño no es correcto. Cosas que fallan:
- Un constructor (al menos en una primera aproximación) sirve para inicializar los atributos de la clase, no para mostrar mensajes, realizar cálculos, comparaciones, ni otro tipo de cosas. ¿Incluir todo un proceso en un constructor? Mal diseño.
Clase CaracteresSobrantes: idem. Otra cosa que no es un buen diseño es hacer que los atributos de una clase sean los atributos de una clase. Cada clase tiene sus atributos, y no hay dependencia (en principio) entre los atributos de una clase y los de otra.
Clase VocalesCadena2: lo mismo indicado.
Clase ComparandoCadenas: es la clase con el método main. ¿Del código de esta clase podemos ver cómo crea objetos y hace que interaccionen entre ellos, conduciendo el proceso global? No. Más bien al analizar el código parece que quien condujera el proceso fuera la clase EntradaPorTeclado, cosa que no debe ocurrir. Quien debe conducir el programa es la clase con el método main.
A modo de resumen:
Fallos graves de diseño: usar los constructores para realizar procesos. Usar atributos de una clase A para incorporarlos como atributos de otra clase B. Delegar el flujo del programa en una clase que no es la clase con el método main.
Recomendaciones: el nombre de una clase dice lo que es, o lo que hace. Si el nombre representa lo que es una clase, será tipo EntradaPorTeclado, ListaPalabras, Vocal, Sorteo, etc. Si el nombre representa lo que hace se llamará ComparadorDeCaracteres, ComparadorDeCadenas, AnalizadorDeCaracteresSobrantes, etc.
Recomendación: antes de escribir código, hacer el diseño de clases escribiendo para cada clase:
- Cuáles serán sus atributos (información que almacena)
- Cuáles serán sus métodos (operaciones que es capaz de realizar)
Recomendación: ver el diseño que han hecho otras personas que están realizando los cursos y que están colgados en el foro.
Si una clase no tiene métodos, con bastante probabilidad está mal diseñada (excepto la clase con el main). Si una clase no tiene atributos propios, en general será porque es una clase "manejadora" de información que le pasan otros objetos y se encarga de realizar procesos y devolver un resultado.
Saludos!