LSP menyatakan bahwa kelas harus dapat disubstitusikan untuk kelas dasar mereka, yang berarti kelas turunan dan kelas dasar harus setara secara semantik.
Tetapi apakah LSP juga berlaku untuk kelas yang mengimplementasikan antarmuka? Dengan kata lain, jika metode antarmuka yang diterapkan oleh suatu kelas secara semantik berbeda dari apa yang diharapkan pengguna, apakah ini akan dianggap sebagai pelanggaran LSP?
design-patterns
design-principles
liskov-substitution
pengguna1483278
sumber
sumber
Jawaban:
Jika implementasinya berbeda secara semantik dari perilaku yang didokumentasikan melalui invarian antarmuka dan metode sebelum dan sesudah persyaratan metodenya, maka jawabannya adalah "ya", itu akan menjadi pelanggaran terhadap LSP. Prinsip ini menetapkan aturan untuk abstraksi dan implementasinya, tanpa mengharuskan sisi abstraksi hadir dalam bentuk kelas.
Namun, jika kita berbicara tentang apa yang diharapkan pengguna , jawabannya akan "tidak harus": pengguna berhak memiliki harapan yang salah.
sumber
Name
yang tidak dapat diaturnull
, makaobj.Name != null
dikatakan invarian antarmuka itu.