ধরা যাক আমার একটি ইন্টারফেস FooInterfaceরয়েছে যার সাথে নিম্নলিখিত স্বাক্ষর রয়েছে:
interface FooInterface {
public function doSomething(SomethingInterface something);
}
এবং একটি কংক্রিট শ্রেণি ConcreteFooযা সেই ইন্টারফেস প্রয়োগ করে:
class ConcreteFoo implements FooInterface {
public function doSomething(SomethingInterface something) {
}
}
আমি ConcreteFoo::doSomething()একটি বিশেষ ধরণের SomethingInterfaceঅবজেক্ট (যদি বলা যাক এটি বলা হয় SpecialSomething) পাস করে তবে অনন্য কিছু করতে চাই ।
আমি যদি পদ্ধতিটির পূর্বশর্তগুলিকে আরও শক্তিশালী করি বা একটি নতুন ব্যতিক্রম ছুঁড়ে ফেলি তবে এটি অবশ্যই একটি এলএসপি লঙ্ঘন, তবে SpecialSomethingজেনেরিক SomethingInterfaceঅবজেক্টগুলির জন্য ফ্যালব্যাক সরবরাহের সময় যদি আমি বিশেষ-কেসযুক্ত বস্তুগুলি করি তবে এটি কি এলএসপি লঙ্ঘন হবে ? কিছুটা এইরকম:
class ConcreteFoo implements FooInterface {
public function doSomething(SomethingInterface something) {
if (something instanceof SpecialSomething) {
// Do SpecialSomething magic
}
else {
// Do generic SomethingInterface magic
}
}
}
doSomething()পদ্ধতির উদ্দেশ্যটি হ'ল রূপান্তরিত হবেSpecialSomething: এটি যদি এটি গ্রহণSpecialSomethingকরে তবে কেবল এটি অবাস্তবহীন বস্তুটি ফিরিয়ে দেবে, অন্যদিকে যদি এটি একটি জেনেরিকSomethingInterfaceবস্তু গ্রহণ করে তবে এটি একটি বস্তুর মধ্যে রূপান্তর করতে একটি অ্যালগরিদম চালায়SpecialSomething। পূর্ব শর্ত এবং পোস্টকন্ডিশনগুলি একই থাকায়, আমি বিশ্বাস করি না যে চুক্তি লঙ্ঘিত হয়েছে।