Dalam upaya saya untuk menulis kode yang lebih baik dan lebih bersih, saya belajar tentang prinsip-prinsip SOLID. Dalam hal ini, LSP terbukti sedikit sulit untuk dipahami dengan baik.
Keraguan saya adalah bagaimana jika saya memiliki beberapa metode tambahan dalam subtipe saya, S, yang tidak ada dalam tipe, T, apakah ini akan selalu menjadi pelanggaran terhadap LSP? Jika ya, lalu bagaimana extend
saya kelas saya?
Misalnya, katakanlah kita memiliki Bird
tipe. Dan subtipe-nya adalah Eagle
dan Humming Bird
. Sekarang kedua subtipe memiliki beberapa perilaku umum sebagai Bird
. Tetapi Eagle
juga memiliki perilaku predator yang baik (yang tidak ada pada Bird
tipe umum ), yang ingin saya gunakan . Karenanya, sekarang saya tidak akan bisa melakukan ini:
Bird bird = new Eagle();
Jadi apakah memberi Eagle
perilaku ekstra itu melanggar LSP?
Jika ya, maka itu berarti saya tidak dapat memperpanjang kelas saya karena itu akan menyebabkan pelanggaran LSP?
class Eagle extends Bird {
//we are extending Bird since Eagle has some extra behavior also
}
Perluasan kelas harus diizinkan sesuai dengan prinsip Terbuka / Tertutup bukan?
Terima kasih sebelumnya telah menjawab! Seperti yang Anda lihat dengan jelas, LSP membuat saya bingung seperti apa pun.
Sunting: Lihat jawaban SO ini. Dalam hal ini lagi, ketika Car
memiliki perilaku tambahan seperti ChangeGear
, itu melanggar LSP. Jadi, lalu bagaimana kita memperluas kelas, tanpa melanggar LSP?