একটি sublcass পিতামাতার আচরণ পরিবর্তন করা উচিত নয়?
এটি এলএসপির একটি সাধারণ ভুল ব্যাখ্যা। একটি সাবক্লাস পিতামাতার আচরণের পরিবর্তন করতে পারে, যতক্ষণ না এটি পিতামাতার ধরণের ক্ষেত্রে সত্য থাকে।
উইকিপিডিয়ায় একটি দীর্ঘ দীর্ঘ ব্যাখ্যা আছে , যা এলএসপিকে লঙ্ঘন করবে এমন জিনিসগুলির পরামর্শ দিচ্ছে:
... এমন অনেকগুলি আচরণগত শর্ত রয়েছে যা উপ-প্রকারটি অবশ্যই পূরণ করতে পারে। এগুলি চুক্তি পদ্ধতি অনুসারে ডিজাইনের অনুরূপ পরিভাষায় বিশদযুক্ত, চুক্তিগুলি উত্তরাধিকারের সাথে কীভাবে যোগাযোগ করতে পারে তার কিছুটা বিধিনিষেধের দিকে নিয়ে যায়:
- পূর্ব শর্তগুলি উপ-টাইপে শক্তিশালী করা যায় না।
- উপ-টাইপে পোস্টকন্ডিশনগুলি দুর্বল করা যায় না।
- সুপারটাইপের আক্রমণকারীদের অবশ্যই একটি সাব টাইপে সংরক্ষণ করতে হবে।
- ইতিহাস সীমাবদ্ধতা ("ইতিহাসের নিয়ম")। অবজেক্টগুলি কেবল তাদের পদ্ধতির (এনক্যাপসুলেশন) মাধ্যমে পরিবর্তনযোগ্য হিসাবে বিবেচিত হয়। যেহেতু সাব টাইপগুলি এমন ধরণের পদ্ধতি প্রবর্তন করতে পারে যা সুপারটাইপটিতে উপস্থিত নেই, সুতরাং এই পদ্ধতিগুলির প্রবর্তনটি সুপার টাইপের ক্ষেত্রে অনুমতিপ্রাপ্ত নয় এমন উপ-প্রকারের রাজ্য পরিবর্তনকে অনুমতি দিতে পারে। ইতিহাসের সীমাবদ্ধতা এটি নিষিদ্ধ করে। এটি ছিল লিসকোভ এবং উইং প্রবর্তিত অভিনব উপাদান। এই সীমাবদ্ধতার লঙ্ঘনকে কোনও মিউটেবলপয়েন্টকে একটি ইমটিউটেবলপয়েন্টের উপ-টাইপ হিসাবে সংজ্ঞায়িত করে উদাহরণ দেওয়া যেতে পারে। এটি ইতিহাসের সীমাবদ্ধতার লঙ্ঘন, কারণ অপরিবর্তনীয় বিন্দুর ইতিহাসে, সৃষ্টির পরে রাষ্ট্র সর্বদা একই থাকে, সুতরাং এটি সাধারণভাবে কোনও মিউটেবলপয়েন্টের ইতিহাস অন্তর্ভুক্ত করতে পারে না। সাব টাইপের সাথে যুক্ত ক্ষেত্রগুলি তবে নিরাপদে পরিবর্তিত হতে পারে কারণ তারা সুপারটাইপ পদ্ধতির মাধ্যমে পর্যবেক্ষণযোগ্য নয়।
ব্যক্তিগতভাবে, আমি এটি মনে রাখা সহজতর বলে মনে করি: আমি যদি এমন পদ্ধতিতে প্যারামিটারটির দিকে তাকান যেটি টাইপ করে থাকে, তবে কি উপ-টাইপ বি পাশ করা কেউ আমার বিস্ময় প্রকাশ করবে? তারা যদি থাকে তবে এলএসপি লঙ্ঘন হচ্ছে।
একটি ব্যতিক্রম নিক্ষেপ করা কি অবাক? আসলে তা না. এটি এমন কিছু যা কোনও সময়ে ঘটতে পারে, আমি অর্ডারস্টেটে শিপ পদ্ধতিটি কল করছি বা মঞ্জুরিপ্রাপ্ত বা শিপড whether সুতরাং আমি এটির জন্য অ্যাকাউন্ট করতে হবে এবং এটি আসলে এলএসপির লঙ্ঘন নয়।
বলেছে , আমি মনে করি এই পরিস্থিতি পরিচালনা করার আরও ভাল উপায় আছে। আমি যদি এটি সি # তে লিখছিলাম তবে আমি ইন্টারফেস ব্যবহার করব এবং পদ্ধতিটি কল করার আগে ইন্টারফেসের প্রয়োগের জন্য যাচাই করতাম। উদাহরণস্বরূপ, যদি বর্তমান অর্ডারস্টেট ইশিয়্যাপেবল প্রয়োগ করে না, তবে এটিতে শিপ পদ্ধতিটি কল করবেন না।
তবে আমি তখনও এই বিশেষ পরিস্থিতির জন্য রাজ্য প্যাটার্নটি ব্যবহার করব না। এর মতো কোনও ডোমেন অবজেক্টের অবস্থার চেয়ে কোনও অ্যাপ্লিকেশনের অবস্থার চেয়ে রাষ্ট্রীয় প্যাটার্ন অনেক বেশি উপযুক্ত।
সুতরাং, সংক্ষেপে বলতে গেলে, এটি স্টেট প্যাটার্নের একটি দুর্বল স্বীকৃতিযুক্ত উদাহরণ এবং আদেশের রাজ্য পরিচালনা করার জন্য বিশেষভাবে ভাল উপায় নয়। তবে এটি যুক্তিযুক্তভাবে এলএসপিকে লঙ্ঘন করে না। এবং রাষ্ট্রের প্যাটার্নটি এবং নিজেই, অবশ্যই তা করে না।