Liskov Substitution Principle
অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং এ লিসকভ সাবস্টিটিউট প্রিন্সিপাল খুব গুরুত্বপূর্ণ। এর মূল এপ্লিকেশন হচ্ছে পেরেন্ট-চাইল্ড ক্লাস এর রিলেশন এর ক্ষেত্রে। মূল কথা হচ্ছে চাইল্ডকে দিয়ে সব সময় পেরেন্টকে প্রতিস্থাপন বা সাবস্টিটিউট করা যাবে। এমন কোন বৈশিষ্ট্য চাইল্ড এর মধ্যে থাকতে পারবে না, যা পেরেন্ট এর সাথে যায় না। নিচের উদাহরণ দেখা যাক
public class Bird {
public void fly();
}
Public class Pigeon extends Bird {
@Override
public void fly() {
}
}
Public class Penguin extends Bird {
@Override
public void fly() {
throw new FlyException(“Penguins can not fly”);
}
}
যেহেতু Penguin উড়তে পারে না, তাই Penguin ক্লাস Bird ক্লাস এর সাব ক্লাস বা চাইল্ড হতে পারে না, কারণ সেখানে fly() মেথড আছে। তাই এখানে নিচের মতো করে রিফেক্টর করতে পারি
public class WalkingBird { public void walk(); }
public class FlyingBird { public void fly(); } Public class Pigeon extends FlyingBird { @Override public void fly() { //fly } } Public class Penguin extends WalkingBird { @Override public void walk() { //walk
}}