Nella mia ricerca di scrivere meglio, codice più pulito, sto imparando i principi SOLID. In questo, LSP si sta rivelando poco difficile da comprendere correttamente.
Il mio dubbio è se avessi alcuni metodi extra nel mio sottotipo, S, che non erano presenti nel tipo, T, sarà sempre una violazione di LSP? Se sì, allora come faccio a extend
delle mie classi?
Ad esempio, supponiamo di avere un tipo Bird
. E i suoi sottotipi sono Eagle
e Humming Bird
. Ora entrambi i sottotipi hanno un comportamento comune come Bird
. Ma Eagle
ha anche un buon comportamento predatorio (che non è presente in generale Bird
type), che voglio usare . Quindi, ora non potrò fare questo:
Bird bird = new Eagle();
Quindi sta dando a Eagle
quei comportamenti extra che spezzano LSP?
Se sì, questo significa che non posso estendere le mie classi perché ciò causerebbe una violazione LSP?
class Eagle extends Bird {
//we are extending Bird since Eagle has some extra behavior also
}
Le estensioni delle classi dovrebbero essere consentite conformemente al principio Aperto / Chiuso?
Grazie in anticipo per la risposta! Come puoi vedere chiaramente, LSP mi ha confuso come qualsiasi cosa.
Modifica: Segnala questa risposta SO In questo di nuovo, quando Car
ha un comportamento aggiuntivo come ChangeGear
, viola la LSP. Allora, come possiamo estendere una classe, senza violare LSP?