লিসকভ সাবস্টিটিউশন নীতিটি কোনও ইন্টারফেস প্রয়োগকারী শ্রেণিতেও প্রয়োগ করে?


17

এলএসপিতে বলা হয়েছে যে ক্লাসগুলি তাদের বেস ক্লাসগুলির জন্য পরিবর্তনযোগ্য হওয়া উচিত, যার অর্থ উত্পন্ন এবং বেস শ্রেণিগুলি শব্দার্থগতভাবে সমতুল্য হওয়া উচিত।

তবে এলএসপি কি ইন্টারফেস প্রয়োগকারী ক্লাসগুলিতে প্রয়োগ করে? অন্য কথায়, কোনও শ্রেণীর দ্বারা প্রয়োগ করা একটি ইন্টারফেস পদ্ধতি যদি ব্যবহারকারী তার প্রত্যাশা থেকে শব্দার্থগতভাবে পৃথক হয়, তবে এটি কী এলএসপির লঙ্ঘন হিসাবে বিবেচিত হবে?


7
হ্যাঁ. LSP লঙ্ঘন করার মতো ঠিক একই কারণ এবং ফলাফলগুলি যদি এটি কোনও ইন্টারফেস, একটি বিমূর্ত শ্রেণি, একটি সম্পূর্ণ শ্রেণি, কিছু যায় আসে না। এলএসপি হ'ল গ্রাহকরা আপনার ধরণের একটি সাধারণ উপায়ে আচরণ করতে দেয় সে জন্য প্রত্যাশাগুলি সেট করা এবং পূরণ করা।
জিমি হোফা

5
বৃহত্তর দ্বারা (আমি পার্থক্যগুলি জানি, তবে আমি এখানে সাধারণীকরণ করছি), ইন্টারফেসগুলি কিছুটা খাঁটি বিমূর্ত শ্রেণির (সি ++ শব্দ) সাথে সমতুল্য এবং তাই লিসকভ ইন্টারফেস এবং তাদের প্রয়োগকারী ক্লাসগুলিতে প্রয়োগ করা উচিত।
জেসি সি স্লিকার

3
NB আমি যে এলএসপিটির সাথে পরিচিত তার সাথে সূচিত এবং বেস ক্লাসের চেয়ে সাব টাইপের কথা বলে। যথাযথ কারণ সহ, আমি ধরে নিই, কারণ কারণগুলির কোনওটি উত্তরাধিকারের জন্য নির্দিষ্ট নয় এবং অন্য কোনও ধরণের টাইপিংয়ের জন্য ঠিক একইভাবে প্রযোজ্য।

উত্তর:


17

কোনও শ্রেণীর দ্বারা প্রয়োগ করা একটি ইন্টারফেস পদ্ধতি যদি ব্যবহারকারী এর প্রত্যাশা থেকে শব্দার্থগতভাবে পৃথক হয়, তবে এটি কি এলএসপির লঙ্ঘন হিসাবে বিবেচিত হবে?

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

তবে, আমরা যদি ব্যবহারকারীদের প্রত্যাশা সম্পর্কে কথা বলি তবে উত্তরটি "প্রয়োজনীয় নয়": ব্যবহারকারীরা ভুল প্রত্যাশা পাওয়ার অধিকারী।


"যদি প্রয়োগটি ইন্টারফেসের আক্রমণকারীদের মাধ্যমে নথিভুক্ত আচরণ থেকে শব্দার্থগতভাবে পৃথক হয়" "ইন্টারফেসের আক্রমণকারী" বলতে কী বোঝাতে চেয়েছিলেন আপনি কি তা ব্যাখ্যা করতে পারেন?
ব্যবহারকারী 1483278

3
@ user1483278 টাইপ আক্রমণকারীদের সম্পর্কে একটি নিবন্ধ এখানে । নিবন্ধটি তাদের "শ্রেণীর আক্রমণকারী" বলে ডাকা হয়েছে, তবে বর্ণনাটি ইন্টারফেসগুলিতেও প্রযোজ্য। আক্রমণকারীরা এমন একটি শর্ত যা নির্মাণে প্রতিষ্ঠিত হয় এবং উদাহরণস্বরূপ সারা জীবন জুড়ে থাকে। উদাহরণস্বরূপ, যদি একটি ইন্টারফেস সম্পত্তি থাকে Nameসেট করা যেতে পারে যে null, তারপর obj.Name != nullএকটি মনে করা হয় পরিবর্তিত যে ইন্টারফেসের।
dasblinkenlight

1
সাধারণত যখন আক্রমণকারীদের নিয়ে আলোচনা করা হয়, তখন আক্রমক পুরো বস্তুর পুরো জীবনকাল ধরে রয়েছে কিনা তা যাচাই করার জন্য কোডের একটি টুকরো লেখা সম্ভব। তবে সাধারণভাবে সরল ইংরেজিতে আক্রমণকারীকে মৌখিকভাবে বর্ণনা করা আরও সহজ।
রওয়ং
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.