Composizione invece di ereditarietà
Preferire design has-a quando appropriato.
Composizione invece di ereditarietà è una lezione Dart Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Dart Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Dart Academy include 4 lezioni in totale.
Due modi per riutilizzare il codice
È possibile riutilizzare un comportamento ereditandolo oppure contenendo un altro oggetto. Il secondo approccio si chiama composizione.
is-a rispetto a has-a
L'ereditarietà rappresenta la relazione is-a: un Circle è uno Shape. La composizione rappresenta la relazione has-a: una Car ha un Engine.
Una classe composta
Con la composizione si memorizza un componente ausiliario in un campo e gli si delega il lavoro, invece di estenderlo.
class Car {
final Engine engine = Engine();
}Delegare il comportamento
La classe esterna inoltra le chiamate al proprio oggetto interno. Questa delegation consente di riutilizzare la logica senza alcuna ereditarietà.
class Car {
final engine = Engine();
void start() => engine.ignite();
}Il problema della classe base fragile
Un'ereditarietà profonda è fragile. Una modifica a una classe genitore può rompere silenziosamente sottoclassi molto lontane: è il problema noto come classe base fragile.
Flessibilità durante l'esecuzione
La composizione consente di sostituire l'oggetto interno in qualsiasi momento. L'ereditarietà è fissa, mentre un campo può cambiare.
class Car {
Engine engine;
Car(this.engine);
}Combinare con le interfacce
Si può combinare la composizione con le interfacce: si dipende da un tipo Engine astratto, così qualsiasi motore compatibile può essere inserito senza problemi.
abstract class Engine {
void ignite();
}Più facile da testare
Poiché le parti sono oggetti separati, nei test è possibile passarne uno fittizio. La composizione rende semplice e naturale il mocking.
var car = Car(FakeEngine());Evitare di ereditare ciò che non serve
Le sottoclassi ereditano ogni membro, anche quelli che non dovrebbero esporre. La composizione condivide solo ciò che si sceglie di delegare.
Quando l'ereditarietà è ancora la scelta migliore
L'ereditarietà va bene quando esiste un chiaro legame is-a con un'identità condivisa. Si preferisca la composizione quando il legame è realmente has-a.
La regola pratica
È preferibile usare la composizione come scelta predefinita e ricorrere all'ereditarietà con moderazione. In questo modo i progetti restano debolmente accoppiati e facili da modificare in seguito. 🧩
Verifica rapida
Una domanda rapida sulla composizione.
Riepilogo
La composizione rappresenta la relazione has-a contenendo altri oggetti e delegando loro il lavoro. Rimane flessibile e facile da testare, mentre l'ereditarietà è adatta ai chiari legami is-a. 👍
Domande Frequenti
La lezione «Composizione invece di ereditarietà» è gratuita?
Sì — il testo completo di «Composizione invece di ereditarietà» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Dart Academy, passa a CoddyKit PRO. Il corso Dart Academy include 4 lezioni in totale.
Cosa imparerò in «Composizione invece di ereditarietà»?
Preferire design has-a quando appropriato. Eserciti Dart Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Dart Academy?
Non è richiesta alcuna esperienza precedente. Dart Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Composizione invece di ereditarietà»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Dart Academy?
Sì. Ogni lezione Dart Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Classi e metodi astratti
- Interfacce implicite e implements
- Polimorfismo tramite tipi condivisi
- Composizione invece di ereditarietà