SOLID নীতি (SOLID Principles)
SOLID হল পাঁচটি মৌলিক ডিজাইন নীতির সংমিশ্রণ, যা অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ে সফটওয়্যার ডিজাইনকে আরও ভাল এবং রক্ষণাবেক্ষণযোগ্য করতে সহায়ক। এই নীতিগুলি নিম্নলিখিত:
S - Single Responsibility Principle (SRP):
- বর্ণনা: একটি ক্লাসের একটি মাত্র দায়িত্ব থাকা উচিত, অর্থাৎ একটি ক্লাস শুধুমাত্র একটি কাজ সম্পন্ন করবে। এতে ক্লাসটির কার্যকারিতা এবং জটিলতা কমে যায়।
- উদাহরণ: একটি
Userক্লাস ব্যবহারকারীর তথ্য পরিচালনা করে, কিন্তু এটি যদি রিপোর্ট তৈরি করার কাজও করে, তবে এটি SRP লঙ্ঘন করে।
O - Open/Closed Principle (OCP):
- বর্ণনা: সফটওয়্যার সিস্টেমের অবজেক্টগুলি অবশ্যই এক্সটেনশনের জন্য খোলা থাকতে হবে, কিন্তু পরিবর্তনের জন্য বন্ধ থাকতে হবে। অর্থাৎ, নতুন ফিচার যোগ করতে হলে পুরনো কোড পরিবর্তন না করে নতুন কোড লিখতে হবে।
- উদাহরণ: যদি একটি
Shapeক্লাস থাকে, তবে নতুন শেপ (যেমন,Triangle) যোগ করার সময়Shapeক্লাসের কোড পরিবর্তন না করে নতুন ক্লাস তৈরি করা উচিত।
L - Liskov Substitution Principle (LSP):
- বর্ণনা: একটি সাবক্লাসের ইনস্ট্যান্স উক্ত ক্লাসের মা-ক্লাসের ইনস্ট্যান্সের স্থান নেবে এমনভাবে ডিজাইন করতে হবে যাতে মা-ক্লাসের কোডে সাবক্লাসের ইনস্ট্যান্স ব্যবহার করা যায়।
- উদাহরণ: যদি
Birdক্লাসের মধ্যেFlyমেথড থাকে, তবে যদিPenguinক্লাস সেইBirdথেকে ইনহেরিট করে, তবে এটি LSP লঙ্ঘন করে, কারণ পেঙ্গুইন উড়তে পারে না।
I - Interface Segregation Principle (ISP):
- বর্ণনা: ব্যবহারকারীদের জন্য বিশেষায়িত ইন্টারফেস তৈরি করা উচিত। একটি বৃহৎ ইন্টারফেসের পরিবর্তে, ছোট ছোট ইন্টারফেস ব্যবহার করা উচিত, যা ক্লায়েন্টদের প্রয়োজনীয় ফিচারগুলি নিয়ে কাজ করে।
- উদাহরণ: যদি একটি
Vehicleইন্টারফেসেDrive,Fly, এবংFloatমেথড থাকে, তবে যেগুলি সব ভেহিকেলের জন্য প্রযোজ্য নয়। বরং, প্রতিটি ভেহিকেল টাইপের জন্য আলাদা ইন্টারফেস তৈরি করা উচিত।
D - Dependency Inversion Principle (DIP):
- বর্ণনা: উচ্চ স্তরের মডিউলগুলি নীচু স্তরের মডিউলের প্রতি নির্ভরশীল হওয়া উচিত নয়। বরং উভয়কেই একটি ইন্টারফেসের মাধ্যমে নির্ভরশীল হতে হবে।
- উদাহরণ: যদি
Databaseক্লাসের মধ্যেUserক্লাসের উপর নির্ভরশীলতা থাকে, তবে সরাসরিUserক্লাসের সাথে কাজ না করে, একটি ইন্টারফেসের মাধ্যমে কাজ করা উচিত।
উপসংহার
SOLID নীতিগুলি অবজেক্ট-ওরিয়েন্টেড ডিজাইনে একটি শক্তিশালী ভিত্তি প্রদান করে, যা সফটওয়্যার ডিজাইনকে আরও কার্যকরী, পুনঃব্যবহারযোগ্য, এবং রক্ষণাবেক্ষণযোগ্য করে। এই নীতিগুলি অনুসরণ করলে সফটওয়্যার ডেভেলপাররা উন্নতমানের কোড লিখতে সক্ষম হয়, যা পরিবর্তনশীল প্রয়োজনীয়তার সঙ্গে মানিয়ে চলতে পারে।
Read more