La relazione tra una classe madre e le sue sottoclassi è conosciuto come sottoclassi dipendenza o implementazione dependecy. Come altri tipi di dipendenza, la dipendenza dall'implementazione genera un accoppiamento tra due classi. Ricordare che l'accoppiamento deve essere ridotto a tra le classi dell'architettura.
Come indicato nel libro Design Pattern, l'unico modo per ridurre questo tipo di accoppiamento utilizza il seguente principio:
programmazione di un'interfaccia, non un'implementazione.
Quindi, se si deve utilizzare l'ereditarietà, il modo migliore per farlo sta usando classi astratte come classi genitore e lasciando che le sottoclassi di ignorare solo metodi astratti.
L'utilizzo dell'ereditarietà tra classi di calcestruzzo viene anche chiamato riutilizzo codice casella bianca.
Le classi parenti spesso definiscono almeno parte della rappresentazione fisica delle loro sottoclassi. Poiché l'ereditarietà espone una sottoclasse ai dettagli dell'implementazione del genitore, si dice spesso che "l'eredità interrompe l'incapsulamento".
Quindi utilizzare codice scatola nera riutilizzo, invece, compisition oggetto pseudonimo, che non si rompe l'incapsulamento e minimizzare accoppiamento sottoclassi.
fonte
2015-03-22 17:29:44
Sottotipo standard OOP * si basa su * following [l'idea generale di] LSP. Quindi sì, cambiare il genitore (così che il bambino non può trattenere i suoi contratti precedentemente dichiarati) infrangerà la classe dei bambini. Tuttavia questo è uno strano (ma non posso sostenere che sia errato) l'uso di "accoppiamento". Forse questo significa semplicemente che l'accoppiamento è * assunto/implicito da * nelle relazioni di sottotipo di implementazione. – user2864740
Sicuramente spezzerebbe il codice nelle classi figlie. Un modo per evitare questo è usare un'interfaccia piuttosto che usare una superclasse. Ma perché rimuovere una così importante superclasse? – nom
Ma le interfacce consentono solo ai membri dati e non alle funzioni membro. Quindi non sconfiggerebbe l'intero scopo dell'eredità? –