IIC2233 / syllabus-2021-1

Repositorio oficial del curso IIC2233 Programación Avanzada 🚀✨
https://iic2233.github.io
38 stars 49 forks source link

Instanciación de objetos dentro de otros #711

Open minsoos opened 3 years ago

minsoos commented 3 years ago

Prerrequisitos

(Marcar colocando una X entre los corchetes los ítems que ya hiciste, así: "[X]")

Duda

Hola, tenía la duda de en qué situaciones es mala práctica instanciar objetos dentro de otros. Por ejemplo, ¿es mala práctica instanciar una ventana dentro de otra? ¿Lo sería por ejemplo para el controlador del juego? que se instanciase como se hace en la AF7? donde incluye la instanciación de todas las ventanas En general, quiero saber cuándo se puede hacer y cuándo no. Gracias de antemano :)

aljara97 commented 3 years ago

Hola @minsoos, si te refieres a guardar una ventana como un atributo de otra, no es una muy buena práctica, ya que, es fácil que llames a los métodos desde la clase que la contiene y no con un adecuado uso de señales. Te recomiendo instanciarlas separadamente en un módulo como main.py y ahí conectar sus señales.

Éxito con tu tarea!

Pabloski100 commented 3 years ago

Hola! Disculpa, de casualidad es una mala practica muy grave? Es que me he estado basando bastante en la estructura de la AF7, no tengo ventanas dentro de otras pero si tengo ventanas dentro de una clase controladora, como en la AF7

aljara97 commented 3 years ago

Hola @Pabloski100 si utilizas un código similar al de la AF7 no deberías tener problemas, fíjate en que uses bien las señales cuando corresponda, ya qué hay un descuento asociado a eso. Te recomiendo referenciar la actividad en tu readme para que el o la ayudante que corrija tu tarea lo tenga en consideración

Éxito con tu tarea 😃

minsoos commented 3 years ago

Siempre que haya dos instanciaciones, por ejemplo entre el controlador y la ventana, tiene que ser mediante señales? a pesar de que por ejemplo la ventana pueda ser atributo del controlador? o en este caso sí se puede llamar directamente al método? Gracias por tu respuesta

aljara97 commented 3 years ago

Hola @minsoos, lo más recomendable es que sea a través de un uso de señales, ya que, un controlador se encarga de manejar la lógica y la ventana solo de representar la interfaz gráfica. Por tanto, si el controlador llama directamente a una función de una clase ventana, tampoco estarías cumpliendo con una adecuada separación entre backend y frontend.