পূর্বশর্ত শক্তিশালীকরণ এবং উত্তরোত্তর দুর্বলতা কীভাবে লিসকভের প্রতিস্থাপনের নীতি লঙ্ঘন করে?


19

আমি পড়েছি লিসকভের প্রতিস্থাপনের নীতিটি লঙ্ঘন করা হয় যদি:

  1. পূর্বশর্ত শক্তিশালী হয়, বা

  2. পোস্টকন্ডিশনগুলি দুর্বল হয়ে পড়েছে

তবে এই দুটি বিষয় কীভাবে লিসকভের প্রতিস্থাপনের নীতি লঙ্ঘন করবে তা আমি পুরোপুরি এখনও পাই না। কেউ দয়া করে একটি উদাহরণ দিয়ে ব্যাখ্যা করতে পারেন। বিশেষত, উপরের যে কোনও একটি পরিস্থিতি কীভাবে এমন পরিস্থিতির সৃষ্টি করবে যেখানে একটি সাবক্লাস অবজেক্টকে একটি সুপার ক্লাস অবজেক্টের জন্য প্রতিস্থাপন করা যাবে না?

উত্তর:


29
  1. ধরুন আপনার বেসক্লাস একটি সদস্য ইন্টের সাথে কাজ করে। এখন আপনার সাব টাইপের জন্য এটি ইতিবাচক হওয়ার প্রয়োজন। এটি প্রাক-শর্তগুলিকে আরও শক্তিশালী করা হয়েছে, এবং এখন কোনও কোড যা নেতিবাচক ইন্টের সাথে পুরোপুরি সূক্ষ্মভাবে কাজ করেছিল তা নষ্ট হয়ে গেছে।

  2. একইভাবে, একই পরিস্থিতিটি অনুমান করুন, তবে বেস শ্রেণিটি গ্যারান্টি দিয়েছিল যে সদস্যকে ডাকা হওয়ার পরে ইতিবাচক হবে। তারপরে সাব টাইপটি নেতিবাচক ইনটগুলিকে অনুমতি দেওয়ার জন্য আচরণটি পরিবর্তন করে। কোডটি যা অবজেক্টে কাজ করে (এবং ধরে রাখে যে পোস্ট-শর্তটি একটি ইতিবাচক অন্তর্ভুক্ত) পোস্ট-শর্তটি সমর্থন না করা হওয়ায় এখন ভেঙে গেছে।

এগুলি অবশ্যই তুচ্ছ উদাহরণ, তবে ধারণাটি ধারণ করে। কোনও ফাইল / ডাটাবেস সংযোগটি খোলা রেখে দেওয়ার মতো স্টাফ হ'ল একটি স্বচ্ছল পোস্ট-শর্তের উদাহরণ যা সমস্যার দিকে পরিচালিত করে।


1

এখানে চিত্র বর্ণনা লিখুন

ইনভেরিয়েন্ট - সেলফ্রাইভিংভিহিলের টেমপ্লেট যা সমস্ত সাব টাইপগুলিতে অপরিবর্তিত থাকে অর্থাৎ অর্ডার যাতে এটি গন্তব্যে পৌঁছাতে ওভাররাইড করা আচরণগুলি কার্যকর করে।

এখানে আরও একটি পদ্ধতি ধরে নেওয়া যাক

           -List<SelfDrivingVehicle> vehicles 
           +Add(SelfDrivingVehicle vehicle)
            vehicles.add(vehicle)

পূর্ব শর্ত - সেলড্রাইভভিক্যাল বেস টাইপের কোনও যানবাহন নেই (এখানে প্রসঙ্গটি অ্যাড করা হয়েছে) এবং এর দুর্বল পূর্বশর্তে যা সম্পত্তির যানবাহন পরিবর্তন করে এটির উপ-প্রকারগুলির দ্বারা কোনওটিকে পরিবর্তন করা যায় না এবং স্পষ্টভাবে এটি শক্তিশালী করা যায়। উপ-ধরণের যে কোনও একটিই কেবল যুক্ত করতে পারেন।

পোস্টকন্ডিশন - একবার অ্যাড করা হলে বেস প্রকারটি শক্তিশালী পোস্টকন্ডিশনে থাকে যা যানবাহনের মান পরিবর্তন করে উপ-প্রকারের মাধ্যমে দুর্বল করা যায় না।

বেস আচরণ প্রেরণার পরে বেস টাইপের স্টেটটি তার মূল রাজ্যে ফিরে আসে।


-1

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

তবে, আপনি যদি মাত্রিক পরিবর্তনের সক্ষমতা অপসারণ করেন তবে প্রতিস্থাপনের নীতিটি হ'ল কারণ যদি কোনও আয়তক্ষেত্র বা স্কোয়ার উভয়ই মাত্রা পরিবর্তন করতে না পারে তবে তাদের উত্তরাধিকার নির্বিশেষে পূর্বের ও পোস্টের সমান অবস্থা রয়েছে। উভয়ের দৈর্ঘ্য, উভয়ের প্রস্থ এবং উভয়ই এই মানগুলিকে পরিবর্তন করতে পারে না।

রেফ: উইকিপিডিয়া - http://en.wikedia.org/wiki/Liskov_substुट__ মূলনীতি


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