Seriál Quick-and-Dirty-Programming Část 6: Nepodceňujte LSP – Liskov Substitution Principle aneb proč čtverec není v OOP dědicem obdélníku
Na nedávném in-house školení na téma Čistý kód a Design Patterns jeden účastník vznesl následující dotaz: „Někde jsem se dočetl, že čtverec nemůže být dědicem obdélníka, protože to porušuje tzv. „Liskov Substitution Principle“ (dále jen LSP). Ale když přece podědím z Obdélníka novou třídu Čtverec a současně překryji metody pro nastavení stran tak, aby byly vždy shodné, tak vše bude fungovat. Přece platí, že čtverec je speciální případ obdélníka a proto jej zavedeme jednoduše jako speciálnější třídu, teda jako potomka obdélníka. Takže kde je problém? Mohl byste vysvětlit princip LSP?“
V tomto článku si vysvětlíme LSP princip a ukážeme si, jak dochází k jeho porušení (Poznámka: Mimochodem česky tento princip zní „Liskovové princip zastoupení“, nikoliv „Liskovův princip“, autorem je totiž žena, paní Liskovová ).