Hola a todos! Les voy contestando de a poquito...
osk la justificación que esperamos no va por el lado de la herencia, que es lo que estás diciendo vos. Tranquilamente podrías resolver el requerimiento sin usar herencia. Las ventajas de una solución polimórfica pasan por la mantenibilidad, la extensibilidad... O sea, si vos tenés varios objetos que son distintos entre sí (a.k.a tienen distinto comportamiento) pero que los podés usar a todos de la misma manera, en primer lugar tenés una abstracción (el mensaje #seAdapta, ponele) que podés reutilizar. En segundo lugar, si tenés que agregar más animales, lo único que hacés es definir ese mensaje en la clase correspondiente, y lo demás no cambia. Si no tuvieras polimorfismo, lo más probable es que caigas en hacer ifs horrendos donde usas strings o preguntás por la clase del animal, para tomar vos una decisión... y eso no escala, si querés agregar más tenes que hacer más ifs, y probablemente no sea el único lugar donde vayas a tener que tomar una decisión basandote en el tipo de animal.
Entonces, ahí deberías preguntarte, y si todo esto depende del animal ¿por qué decido yo? ¿por que no le pregunto al animal y ya? Y que queda uno lo maneje como corresponda --->
voilà! Polimorfismo
Ahora, como desventaja, el uso de polimorfismo tiene un poco mas de complejidad, en el sentido que para saber que pasa tengo que pasar por más objetos, porque las responsabilidades están repartidas... Respecto al if, está todo en un solo lado (todo junto y re acoplado, pero en un solo lado).
nicmora, una de las posibles soluciones sin polimorfismo es tener distintas colecciones, una para cada tipo de animal. Eso está bien.
Ahora,
MUCHO CUIDADO, no es que no hay polimorfismo solo porque no entienden el mismo mensaje. No hay polimorfismo porque vos no los estás tratando indistintamente, porque están todos separados...
Respecto al polimorfismo entre especies... es entre esas especies distintas. Recuerden que polimorfismo = muchas formas, ergo, tienen que ser objetos distintos (de clases distintas)... un mono es polimórfico con otro mono? Y no, es la misma cosa xD O sea, entienden los mismos mensajes porque son instancia de la misma clase, pero el chiste del polimorfismo es justamente usar indistintamente a cosas que no son del mismo "tipo".
Bien las ventajas de polimorfismo, pero se pueden decir más cosas pensando en extensibilidad y mantenibilidad, como dije más arriba.
Respecto a las desventajas de no usar polimorfismo, no sé si hay que escribir más código. Tampoco se si es una buena métrica para decidir ir por una solución o por otra. Yo creo que está más copado hablar de delegación, responsabilidad, mantenibilidad, extensibilidad... duplicación de código (ahí podrían hablar de herencia, pero como ya dije no es necesaria en esa parte del requerimiento)... Se podría hablar de cantidad de código si van por la opción de hacer ifTrue:, en esta solución con distintas colecciones... meh. Los mensajes en cada calse de animal los tenés que escribir igual
Para todos:
El polimorfismo tiene tres partes:
1) Los objetos polimórficos
2) El mensaje o mensajes para los cuales son polimórficos (esto es re importante y lo pasan por alto)
3) El tercero que los usa polimórficamente --> Esto también es importante, si no hay un tercero que los use indistintamente, no hay polimorfismo (podríamos decir que los objetos son "potencialmente polimórficos")
vuelvo a remarcar, la justificación que esperamos en un final es en términos de extensibilidad, mantenibilidad, delegación, responsabilidad, declaratividad, etc etc y todas esas cosas que se supone que ya les hinchamos tanto en la cursada que las deberían re contra re saber ^^
Nada, eso. Cualquier cosa, pregunten en la lista, de casualidad estaba buscando un apunte para economía y caí acá y les contesto
Digo, para que no se queden con la duda, en la lista de pdep seguro alguien les contesta al toque
Saludos, y espero que les sirva