0Pricing
Dart Academy · Lección

Composición en lugar de herencia

Preferir diseños has-a cuando resulten adecuados.

Composición en lugar de herencia es una lección gratuita de Dart Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Dart Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Dart Academy incluye 4 lecciones en total.

Dos formas de reutilizar

Puede reutilizar comportamiento heredándolo o manteniendo otro objeto. El segundo enfoque se denomina composición.

is-a frente a has-a

La herencia modela is-a: un Circle es un Shape. La composición modela has-a: un Car tiene un Engine.

Una clase compuesta

Con la composición, almacena un auxiliar como field y delega el trabajo en él en lugar de extenderlo.

class Car {
  final Engine engine = Engine();
}

Delegar comportamiento

La clase externa reenvía las llamadas a su objeto interno. Esta delegación reutiliza la lógica sin ninguna herencia.

class Car {
  final engine = Engine();
  void start() => engine.ignite();
}

Problema de la clase base frágil

La herencia profunda es frágil. Un cambio en una clase padre puede romper silenciosamente subclases lejanas; esta trampa se conoce como fragile base class.

Flexibilidad en tiempo de ejecución

La composición permite sustituir el objeto interno cuando quiera. La herencia queda fijada una vez, pero un field puede cambiar.

class Car {
  Engine engine;
  Car(this.engine);
}

Combinar con interfaces

Combine la composición con interfaces: dependa de un tipo abstracto Engine para que cualquier motor compatible se integre correctamente.

abstract class Engine {
  void ignite();
}

Más fácil de probar

Como las partes son objetos independientes, puede pasar uno falso en las pruebas. La composición hace que el mocking sea sencillo y natural.

var car = Car(FakeEngine());

Evitar heredar lo que no corresponde

Las subclases heredan todos los miembros, incluso los que no deberían exponer. La composición comparte solo lo que usted decida delegar.

Cuándo sigue ganando la herencia

La herencia es adecuada para una relación clara de is-a con identidad compartida. Recurra a la composición cuando la relación sea realmente has-a.

La regla práctica

Prefiera la composición de forma predeterminada y use la herencia con moderación. Así mantendrá diseños débilmente acoplados y fáciles de modificar más adelante. 🧩

Comprobación rápida

Una pregunta rápida sobre la composición.

Resumen

La composición modela has-a al contener otros objetos y delegarles tareas. Es flexible y fácil de probar, mientras que la herencia encaja en relaciones claras de is-a. 👍

Preguntas frecuentes

¿La lección «Composición en lugar de herencia» es gratis?

Sí — el texto completo de «Composición en lugar de herencia» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Dart Academy, actualiza a CoddyKit PRO. El curso de Dart Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Composición en lugar de herencia»?

Preferir diseños has-a cuando resulten adecuados. Practicas Dart Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Dart Academy?

No se requiere experiencia previa. Dart Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Composición en lugar de herencia»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Dart Academy?

Sí. Cada lección de Dart Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Clases y métodos abstractos
  2. Interfaces implícitas e implements
  3. Polimorfismo mediante tipos compartidos
  4. Composición en lugar de herencia
← Volver a Dart Academy