ওপেন-ক্লোজড নীতি (ওসিপি) বলেছে যে কোনও বিষয় এক্সটেনশনের জন্য উন্মুক্ত হওয়া উচিত তবে পরিবর্তনের জন্য এটি বন্ধ করা উচিত। আমি বিশ্বাস করি যে আমি এটি বুঝতে পেরেছি এবং এসআরপির সাথে একত্রে এটি ব্যবহার করে এমন ক্লাস তৈরি করতে যা কেবল একটি কাজ করে। এবং, আমি অনেকগুলি ছোট পদ্ধতি তৈরি করার চেষ্টা করি যা এমন আচরণগুলিতে সমস্ত আচরণ নিয়ন্ত্রণগুলি এমন পদ্ধতিতে বের করা সম্ভব করে যা কিছু উপক্লাসে প্রসারিত বা ওভাররাইড করা যেতে পারে। সুতরাং, আমি ক্লাসগুলি শেষ করেছি যার অনেকগুলি এক্সটেনশন পয়েন্ট রয়েছে, এটির মধ্য দিয়ে হোক: নির্ভরতা ইনজেকশন এবং রচনা, ইভেন্ট, প্রতিনিধি দল ইত্যাদি be
নিম্নলিখিতটি একটি সাধারণ, প্রসারযোগ্য শ্রেণীর বিবেচনা করুন:
class PaycheckCalculator {
// ...
protected decimal GetOvertimeFactor() { return 2.0M; }
}
উদাহরণস্বরূপ, এখন বলুন যে OvertimeFactor
1.5 এ পরিবর্তন হয়েছে। যেহেতু উপরের শ্রেণিটি প্রসারিত করার জন্য ডিজাইন করা হয়েছিল, তাই আমি সহজেই সাবক্লাস করে অন্যরকম ফিরে আসতে পারি OvertimeFactor
।
তবে ... ক্লাসটি বর্ধিতকরণ এবং ওসিপি মেনে চলার জন্য ডিজাইন করা সত্ত্বেও, আমি প্রশ্নে পদ্ধতিটি সাবক্লাসিং ও ওভাররাইড না করে আমার আইওসি পাত্রে আমার অবজেক্টগুলিকে রি-ওয়্যারিংয়ের চেয়ে প্রশ্নে একক পদ্ধতি পরিবর্তন করব।
ফলস্বরূপ আমি ওসিপি যা অর্জন করার চেষ্টা করে তার একটি অংশ লঙ্ঘন করেছি। মনে হচ্ছে আমি কেবল অলস হয়ে যাচ্ছি কারণ উপরেরটি কিছুটা সহজ। আমি কি ওসিপিকে ভুল বুঝছি? আমার কি আসলেই আলাদা কিছু করা উচিত? আপনি কি ওসিপির সুবিধাগুলি আলাদাভাবে উপার্জন করেন?
আপডেট : উত্তরের উপর ভিত্তি করে দেখে মনে হয় যে এই স্বীকৃত উদাহরণটি বিভিন্ন কারণে বিভিন্ন কারণে দরিদ্র। উদাহরণটির মূল উদ্দেশ্যটি ছিল এটি প্রদর্শন করা যে শ্রেণিটি এমন পদ্ধতি সরবরাহ করে প্রসারিত করার জন্য ডিজাইন করা হয়েছিল যা ওভাররাইড করা হলে অভ্যন্তরীণ বা ব্যক্তিগত কোড পরিবর্তন করার প্রয়োজন ছাড়াই পাবলিক পদ্ধতির আচরণকে পরিবর্তন করে দেয় । তবুও আমি অবশ্যই ওসিপিকে ভুল বুঝেছি।