2.2.6 · HinglishDesign Principles

SOLID — Liskov Substitution Principle

1,937 words9 min readRead in English

2.2.6 · Coding › Design Principles


LSP kyun exist karta hai?

SOLID ka L Barbara Liskov (1987) se aaya hai. Unka formal statement:


Subclass ko exactly kya preserve karna chahiye? (The contract)

Ek subclass jo method override kare, usse behavioural contract ka respect karna hoga, sirf method signature ka nahi. Teen rules hain:

Woh directions kyun? (Caller ke nazariye se derivation)


Figure — SOLID — Liskov Substitution Principle

Violation kaise pakdein — classic Rectangle/Square example


Common mistakes (Steel-manned)


Flashcards

LSP ek sentence mein
Subtypes ko base type ki jagah substitute kiya ja sake bina program correctness todte.
LSP kisne formulate kiya
Barbara Liskov (1987).
Kya subclass precondition strengthen kar sakta hai?
Nahi — preconditions sirf weaken/widen ho sakti hain (base ke inputs se ≥ accept karna zaroori hai).
Kya subclass postcondition weaken kar sakta hai?
Nahi — postconditions sirf strengthen/narrow ho sakti hain (base ke promises se ≥ guarantee karna zaroori hai).
Preconditions contravariant aur postconditions covariant kyun hoti hain?
Kyunki jo caller sirf base jaanta hai woh base-legal inputs bhejta hai aur base-promised outputs par rely karta hai; inputs widening / outputs narrowing kabhi us caller ko nahi chaunkaata.
Square extends Rectangle LSP kyun violate karta hai
Mutable Square par setWidth/setHeight doosri dimension bhi change kar deta hai, woh invariant tod ke jo Rectangle caller rely karta hai ki width aur height independent hain.
Penguin extends Bird (fly() ke saath) LSP violation kyun hai
Penguin.fly() ek aisi exception throw karta hai jo Bird ke contract mein nahi thi (rule 3: koi nayi exception types nahi).
Ek common fix jab subtype koi method honour nahi kar sakta
Hierarchy restructure karo / interfaces split karo taaki subtype kabhi wahan substitute na ho sake jahan capability required hai.
LSP kaun si feature ko actually kaam karne deta hai
Polymorphism — base type ke against ek baar code likhna aur sabhi subtypes par trust karna.

Recall Feynman: 12 saal ke bachche ko samjhao

Socho ek job posting hai jo kehti hai "Humein koi chahiye jo car chalaa sake." Tum jisko bhi aate dekho use hire kar lo, trust karte hue ki woh drive kar sakta hai. LSP kehta hai: agar tum kisi ko "Driver" bolte ho, toh unhe sach mein drive karna chahiye — tumhe aisa koi nahi milna chahiye jo, jab tum unhe keys do, toh chillaye "Main drive nahi kar sakta!" ya jo sirf left turn kar sake. Ek "subclass" ek specific tarah ka Driver hai (taxi driver, race driver). Har ek ko woh sab kuch karna hoga jo ek normal Driver kar sakta hai, warna tumhara plan bigad jaata hai. Agar ek "Penguin" kehta hai woh ek "Bird hai jo fly karta hai" lekin fly nahi kar sakta, toh use woh mat kaho — use alag label do taaki koi use sky-job na de.

Connections

Concept Map

only pays off if

means

must respect

rule 1

rule 2

rule 3

derives

derives

contravariant widen

covariant narrow

when violated

destroys

Inheritance plus Polymorphism

Liskov Substitution Principle

Subclass replaces base

Behavioural contract

Preconditions cannot strengthen

Postconditions cannot weaken

Invariants preserved

Caller knows only base

Polymorphism preserved

Type-check hacks everywhere