Buenas tardes, estaba leyendo la programacion por diferencia y la verdad no logro distinguir entre herencia y delegacion de comportamiento.
Entiendo que no existe las clases en JavaScript pero realmente me parece que el texto dice que hacen exactamente lo mismo pero con distintas palabras
Y luego
Creo que la diferencia entre herencia y delegacion por comportamiento es que en herencia no solo delegas comportamiento, delegas todo el contrato.
Si un profe vee esto que me confirme o corrija please.
Buenas,
Piensen en herencia y delegación por composición como mecanismos de reutilización de código.
Cuando utilizamos herencia la clase hereda todo el contrato del padre (Ej.: TestCase esPadreDe: NuestroTest; NuestroTest sería la "hija" y TestCase el "padre"). Esto significa que la clase "hija" debe honrar ese contrato en su totalidad. Esto tiene ventajas y desventajas que están descritas por ciertos principios de diseños que cubriremos en sucesivas clases.
Existen ocasiones en las cuales el contrato de una clase "padre" no se puede honrar o no queremos establecer una relación restrictiva y rígidas (considerando posibles, potenciales, futuros requerimientos). Cuando esto ocurre podemos hacer uso de un mecanismo de reutilización selectiva denominado "delegación por composición".
En este último en lugar de establecer una relación de herencia en (B esPadreDe: A) creamos la clase A que contiene una variable de instancia B.
Ejemplo:
RangoPartido>>contiene: unaDirCelda.
RangoVertical>>contiene: unaDirCelda.
Aquí podemos tener dos implementaciones:
Con herencia:
RangoPartido esPadreDe: RangoVertical. Sobrecargando el método "contiene:".Con delegación:
RangoVertical conteniendo una variable de instancia del tipo RangoPartido. Cuando RangoVertical recibe el mensaje "contiene:" este lo "delega" a la instancia de RangoPartido.