Eredità vs Composizione
Ereditarietà e Composizione sono due concetti importanti che si trovano in OOP (Programmazione orientata agli oggetti). In termini semplici, sia Composizione che Ereditarietà si occupano di fornire proprietà o comportamenti aggiuntivi a una classe. L'ereditarietà è la capacità di una classe di ereditare proprietà e comportamento da una classe genitore estendendola. D' altra parte, la composizione è la capacità di una classe di contenere oggetti di classi diverse come dati dei membri.
Cos'è l'eredità?
Come accennato in precedenza, l'ereditarietà è la capacità di una classe di ereditare proprietà e comportamento da una classe genitore estendendola. L'ereditarietà fornisce essenzialmente il riutilizzo del codice consentendo l'estensione delle proprietà e del comportamento di una classe esistente da parte di una classe appena definita. Se la classe A estende B, allora la classe B è chiamata classe genitore (o superclasse) e la classe A è chiamata classe figlia (o classe derivata/sottoclasse). In questo scenario di esempio, la classe A erediterà tutti gli attributi ei metodi pubblici e protetti della superclasse (B). La sottoclasse può opzionalmente sovrascrivere (fornire funzionalità nuove o estese ai metodi) il comportamento ereditato dalla classe genitore.
L'ereditarietà rappresenta una relazione "è-a" in OOP. Ciò significa essenzialmente che A è anche una B. In altre parole, B può essere la classe con una descrizione generale di una certa entità del mondo reale ma A specifica una certa specializzazione. In un problema di programmazione del mondo reale, la classe Person potrebbe essere estesa per creare la classe Employee. Questa si chiama specializzazione. Ma potresti anche prima creare la classe Employee e poi generalizzarla anche a una classe Person (es.e. generalizzazione). In questo esempio, il Dipendente avrà tutte le proprietà e il comportamento della Persona (cioè il Dipendente è anche una Persona) e può contenere anche alcune funzionalità aggiuntive (quindi, la Persona non è un Dipendente).
Cos'è la composizione?
La composizione è la capacità di una classe di contenere oggetti di classi diverse come dati dei membri. Ad esempio, la classe A potrebbe contenere un oggetto di classe B come membro. Qui, tutti i metodi (o funzioni) pubblici definiti in B possono essere eseguiti all'interno della classe A. La classe A diventa il contenitore, mentre la classe B diventa la classe contenuta. La composizione viene anche chiamata portacontainer. In questo esempio, si può dire che la classe A è composta dalla classe B. In OOP, Composizione rappresenta una relazione "ha-a". È importante notare che, anche se il contenitore ha accesso per eseguire tutti i metodi pubblici della classe contenuta, non è in grado di modificare o fornire funzionalità aggiuntive. Quando si tratta di un problema di programmazione nel mondo reale, un oggetto della classe TextBox può essere contenuto nella classe Form, e quindi si può dire che un Form contiene un TextBox (o in alternativa, un Form è composto da un TextBox).
Qual è la differenza tra ereditarietà e composizione?
Sebbene l'ereditarietà e la composizione siano due concetti OOP, sono abbastanza diversi in ciò che consentono al programmatore di ottenere. L'ereditarietà è la capacità di una classe di ereditare proprietà e comportamento da una classe padre estendendola, mentre Composizione è la capacità di una classe di contenere oggetti di classi diverse come dati dei membri. Se una classe viene estesa, eredita tutte le proprietà/comportamenti pubblici e protetti e tali comportamenti possono essere sovrascritti dalla sottoclasse. Ma se una classe è contenuta in un' altra, il contenitore non ottiene la possibilità di modificare o aggiungere comportamenti al contenuto. Ereditarietà rappresenta una relazione "è-a" in OOP, mentre Composizione rappresenta una relazione "ha-a".