Differenza tra ereditarietà e composizione

Ereditarietà rispetto alla composizione

L'ereditarietà e la composizione sono due concetti importanti trovati in OOP (Object Oriented Programming). In termini semplici, sia la Composizione che l'Eredità si occupano di fornire proprietà o comportamenti aggiuntivi a una classe. L'ereditarietà è la capacità di una classe di ereditare proprietà e comportamenti da una classe genitore estendendola. D'altra parte, Composition è l'abilità di una classe di contenere oggetti di classi diverse come dati dei membri.

Cos'è l'ereditarietà?

Come menzionato sopra, l'ereditarietà è la capacità di una classe di ereditare proprietà e comportamenti 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 una classe appena definita. Se la classe A estende B, la classe B viene chiamata classe genitore (o super classe) e la classe A è chiamata classe figlio (o classe derivata / classe secondaria). In questo scenario di esempio, la classe A erediterà tutti gli attributi e i metodi pubblici e protetti della super classe (B). La sottoclasse può facoltativamente 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 un 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. Questo è chiamato specializzazione. Ma potresti anche prima creare la classe Employee e poi generalizzarla a una classe Person (cioè generalizzazione). In questo esempio, il Dipendente avrà tutte le proprietà e il comportamento della Persona (cioè il Dipendente è anche una Persona) e potrebbe contenere alcune funzionalità aggiuntive (quindi, Persona non è un Dipendente) pure.

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 pubblici (o funzioni) 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 è anche indicata come Containership. In questo esempio, si può affermare che la classe A è composta dalla classe B. In OOP, Composition 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 alterare o fornire funzionalità aggiuntive. Quando si tratta di un problema di programmazione del mondo reale, un oggetto di classe TextBox può essere contenuto nella classe Form, e quindi si può affermare che un modulo contiene un controllo TextBox (o in alternativa, un modulo è composto da un controllo TextBox).

Qual è la differenza tra ereditarietà e composizione?

Sebbene l'ereditarietà e la composizione siano due concetti di OOP, sono piuttosto diversi in ciò che consentono al programmatore di raggiungere. L'ereditarietà è la capacità di una classe di ereditare proprietà e comportamenti da una classe genitore estendendola, mentre Composition è l'abilità 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 ha la possibilità di modificare o aggiungere comportamenti al contenuto. L'ereditarietà rappresenta una relazione "is-a" in OOP, mentre Composition rappresenta una relazione "ha-a".