Quería consultar por una duda conceptual que tengo sobre POO. Usar instanceof se considera una mala práctica en cualquier caso? O en algún caso se justifica verificar de esa manera el tipo de objeto?
Gracias
Hola Jimena,
La introspección de tipos (mediante el operador instanceof en Java) es una práctica muy contraria a POO en general. Al usarla estamos rompiendo dos de los principios SOLID: el de abierto/cerrado y el de sustitución de Liskov. Es preferible usar polimorfismo antes que tener que preguntarle a un objeto si es instancia de una clase en particular salvo cuando no haya otra alternativa, como por ejemplo cuando se necesite saber de qué tipo es un objeto del cual se tiene una referencia que proviene de otro ámbito, como una red global. Es utilizada también en las bibliotecas estándar de Java y en muchos frameworks.
Este tema se va a estar explicando en las próximas clases en el curso de la noche y no se espera que lo utilicen en el TP1 y en el TP2 muy probablemente tampoco (debería estar muy bien justificado).
Saludos,
Tomás
La duda me surgió al momento de contar los chats grupales e individuales, porque hice un supuesto de que pueden existir grupos de una sola persona o de dos personas.
La única forma que se me ocurría de verificar si un objeto es un chat grupal o un chat individual con polimorfismo era contando la cantidad de integrantes del chat, pero si el grupo tiene uno o dos integrantes eso falla.
Otra forma que se me ocurría era con un método abstracto "esChatIndividual" que devuelva un booleano por ejemplo, e implementarlo tanto en el chat individual como en el grupal, pero me parece más feo que usar un instanceof directamente. O bien implementando el "obtenerCantidadDeParticipantes" en el chat individual para que devuelva 0, pero parece poco coherente.
Gracias,
Saludos.
El enfoque ideal para esa situación sería justamente mediante polimorfismo pero no con métodos como esChatIndividual u obtenerCantidadDeParticipantes porque estaríamos teniendo problemas de diseño similares que con instanceof.
La idea no es que tengas que primero preguntarle a un objeto algo para que en función de esa respuesta vos hagas una cosa u otra, sino que directamente le digas a tus objetos que hagan lo que vos querés. No importará que los objetos sean distintos, si son polimórficos todos tendrán la capacidad de entender el mismo mensaje y cada uno sabrá resolverlo de la manera que corresponda.
Fijate este ejemplo de una de las lecturas obligatorias.
Saludos,
Tomás