IIC2233 / syllabus-2020-1

Repositorio oficial del curso IIC2233 Programación Avanzada 🎉🎊
35 stars 68 forks source link

Tips y consejos para modularizar #476

Closed raimundomartinez closed 4 years ago

raimundomartinez commented 4 years ago

Hola,

Que tengo una clase que por sí sola me ocupa 700 líneas, y no sabría cómo modularizar esto de forma limpia y ordenada, considerando que tendría que dividir una misma clase en 2. Podría convertir ciertos métodos en funciones en otro archivo pero según yo no es la idea porque el hecho que sean métodos hace que el programa sea un mejor modelo con respecto a la realidad. ¿Algún consejo o tip o tutorial de youtube que me ayude con esto?

matiasmasjuan commented 4 years ago

Hola @raimundomartinez !

Si bien es cierto que algunas clases pueden tener muchos métodos y algunos de ellos muy extensos, es extraño que ocupe tantas líneas de código. Generalmente cuando suceden estas cosas es porque se repite de alguna u otra forma muchas líneas que suelen ser iguales o muy parecidas, sobretodo con el uso de prints() en consola. En esos casos lo que recomendaría sería que en todos esos prints(), lo hagas en otro archivo_prints.py e importaría algunas funciones de prints() escritas en ese archivo, de tal forma de ahorrarte bastantes líneas de código dentro de una clase. Puedes realizar lo mismo con el tema de funciones de probabilidades, u otras tareas similares.

Espero haberte ayudado y mucho éxito con tu tarea!

raimundomartinez commented 4 years ago

¡Buen consejo! Muchas gracias.

raimundomartinez commented 4 years ago

Al final lo que hice fue que esa clase super larga la divide en dos clases (una hereda de la otra) y divide los métodos entre estas dos dependiendo de su clasificación (los más generales en la clase padre y los más específicos en la hijo). ¿Que opinas de esta solución?

matiasmasjuan commented 4 years ago

El uso de herencia está ligado al uso de métodos y atributos que quieres que una clase herede de la otra, de tal forma de que puedas incorporar otros atributos y métodos que sabes que no tiene la clase padre pero quieres que tenga la clase heredada. En ese sentido, no es necesario volver a reescribir todos los métodos que tienen en común para la clase heredada con la clase padre, y sólo deberás escribir el contenido nuevo o modificado para el caso de la heredada.

De acuerdo a esto, yo considero que es válido el uso de herencia para ahorrarte bastantes líneas de código. Pero te diría que tuvieras ojo con esto, ya que no es lo más óptimo destinar el uso de herencias sólo para ahorrar líneas.

Aterrizando un poco mi respuesta, yo creo que es válida esta solución, pero depende para qué clase/s estas usando eso.

Saludos y mucho éxito con la tarea! 😄

matiasmasjuan commented 4 years ago

Hola @raimundomartinez !

Recuerda que está prohibo subir contenido sobre algún tipo de modelación específica que está siendo evaluada para esta tarea. Con respecto a la respuesta a tu pregunta, no me parece necesaria el uso de una clase intermedia para el uso exclusivo de ahorrar líneas de código y así no sobrepasarte de las 400 líneas. Tal como mencioné anteriormente, es extremadamente raro que la modelación de una clase no alcance en esa cantidad de lineas de código, y si esto pasa es porque probablemente no estes modelando las entidades de manera correcta. Te recomendaría hacer lo indicado en mi primer comentario, en donde quizas hay muchos procesos que se repiten continuamente en tu código, como son los prints(), o funciones lógicas-matemáticas que pueden ser modeladas a través de módulos externos y que pueden ser importados.

Saludos! 😄