Skip to main content

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং - এ SOLID

এই পোস্টে ব্যাখ্যা দেওয়া হলো SOLID এর। যা অবজেক্ট ওরিয়েন্টেড ডিজাইনে বহুল ব্যবহৃত। 
SOLID এর পুরো অর্থ হলো -
  • S – Single Responsibility Principle (SRP)
  • O – Open Closed Principle (OCP)
  • L – Liskov Substitution Principle (LSP)
  • I – Interface Segregation Principle (ISP)
  • D – Dependency Inversion Principle (DIP)









Single Responsibility Principle (SRP) বলছে - A class should have one, and only one, reason to change.
এর মানে হচ্ছে, আমাদের একেকটি ক্লাসকে অন্তত একটি এবং সর্বোচ্চ একটি 
কাজেই ব্যবহার করতে হবে।
ধরা যাক, Bank management system প্রজেক্টে, একটি ক্লাস খোলা 
হলো account, এখানে দুইটি মেথড আছে = registration, deposite। 
একটি ক্লাসেই টাস্ক পড়লো দুইটি। আদতে সমস্যা না থাকলেও এটি ভাল 
ওওপি ডিজাইন না কারণ এটি কে ভঙ্গ করছে। দুইটি কাজ দুই ক্লাসে করলে  
SRP মেইন্টেইন হবে।









Open Closed Principle (OCP) বলছে - You should be able to 
extend a classes behavior, without modifying.
এরমানে হচ্ছে, আমরা যখন নতুন ক্লাস খুলব, বা ফিচার ধরব, তখন যেন 
অন্য ক্লাসে হাত দিতে না হয় অর্থাৎ মডিফাইয়ের দরকার না হয়, একটা 
ক্লাসের কাজ শেষ মানে ওখানে আর কোন মেরামত চলবেনা।  এবস্ট্রাকশন 
 মেইন্টেইন করে ইন্টারফেসকে ইমপ্লিমেন্ট বা ইনহেরিটেন্স ব্যবহার করে 
অন্য ক্লাসকে ইনহেরিট করে কাজ করতে হবে।









Liskov Substitution Principle (LSP) বলছে - Derived classes 
must be substitutable for their base classes.
 এর মানে হচ্ছে, আমরা যখন কোন ক্লাসকে ইনহেরিট করে ডেটা নিয়ে 
আসছি। 
এমনভাবে দুটো ক্লাসকেই ডিজাইন করতে হবে যেন,
প্যারেন্ট ক্লাসের সবকিছু চাইল্ড ক্লাসে থাকে, চাইল্ড ক্লাসে এমন কোন অভাব 
থাকা যাবেনা যা দ্বারা 
প্যারেন্ট ক্লাসের কোন একটা কাজ করা না যায়।








Interface Segregation Principle (ISP) বলছে - Make fine grained interfaces that are client specific.
আমরা কাজের ভিত্তিতে ইন্টারফেসগুলি ছোট ছোট করে লিখতে পারি। এক 
ইন্টারফেসে বিশাল মেথডের লিস্ট থাকা কাজের কথা নয়!!









Dependency Inversion Principle (DIP) বলছে - Depend on abstraction, not on concretions.
কোন প্যারেন্ট ক্লাসকে ইনহেরিট করে কাজ করার চেয়ে এবস্ট্রাক্ট ক্লাস বা 
ইন্টারফেসকে ইমপ্লিমেন্ট করে কাজ করাকে গুরুত্ব দেয়া হচ্ছে। প্যারেন্ট ক্লাস 
চেঞ্জ হলে চাইল্ড ক্লাসে এর প্রভাব পড়বে, সিস্টেম অচলও হয়ে যেতে পারে।



SOLID principles আবশ্যক না হলেও সফটওয়্যার ডিজাইনে এটি 
আলোচিত।   






Comments

Popular posts from this blog

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং

বর্তমান সময়ে সফটওয়্যার তৈরিতে বহুল ব্যবহৃত এবং  বৈপ্লবিক একটি ধারণা অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং। আধুনিক সফটওয়্যার ইঞ্জিনিয়ারিংয়ে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের ব্যবহার অনেক। সেজন্য অ্যাপ ডেভেলপিংয়ে নাম লেখাতে চাইলে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং জানতেই হবে। অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং বুঝতে গেলে, জানতে হবে অবজেক্ট কি। অবজেক্ট আমাদের বাস্তবজীবনের যেকোন বস্তু, যার কিছু সাধারণ বৈশিষ্ট্য আছে। আপনার মোবাইল বা কম্পিউটারটা একটা অবজেক্ট যার কিছু বৈশিষ্ট্য আছে, বসে আছেন যে খাট বা চেয়ারে সেটি একটি অবজেক্ট যার কিছু বৈশিষ্ট্য আছে। আপনি নিজেও একজন অবজেক্ট, অন্য মানুষের সাথে আপনার কিছু সাধারণ বৈশিষ্ট্যে অবশ্য কিছু মিল আছে। সুতরাং, আমাদের চারপাশে থাকা সকল বস্তুই আসলে একেকটি অবজেক্ট। এখন কম্পিউটার বিজ্ঞানের ভাষায় অবজেক্টকে সংজ্ঞায়িত করতে গেলে বিভিন্ন শাখা থেকে বিভিন্নভাবে ব্যাখ্যা বের হয়ে আসবে। তবে সবগুলো থেকেই সাধারণ যে ধারণা আসে তা হলো, অবজেক্ট হচ্ছে এমন এক এন্টিটি যা রিয়েল লাইফ অবজেক্টের প্রতিনিধিত্ব করে,  যে এন্টিটি সেটের প্রতিটি এন্টিটির অবস্থা আলাদা...

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং - ২

শেষ আর্টিকেলে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং কি এবং কেন প্রয়োজন তাঁর  আলোচনা করার চেষ্টা করা হয়েছে। একটি অবজেক্ট ওরিয়েন্টেড ডিজাইন  কেমন হতে পারে সেটি দেখানো হয়েছিল। সেগুলো যখন আমরা কোন  প্রোগ্রামিং ল্যাংগুয়েজে কোড লিখে ইমপ্লিমেন্ট করব , তখন আমাদেরকে নতুন  কিছু কনসেপ্টের আশ্রয় নিতে হচ্ছে যেমন ক্লাস , মেথড , ইন্টারফেস ইত্যাদি। ক্লাসের কাজ কি ? ক্লাস হচ্ছে আমরা যেই অবজেক্টটার কথা চিন্তা করলাম , তাঁর একটা ব্লুপ্রিন্ট  বলতে পারি। ইন্টারে পড়ে আসা প্রাণীদের শ্রেণীবিন্যাসের সাথে এর  সামঞ্জস্যতা রয়েছে। যেমন আমি বলছি , মানুষ মাম্মালিয়া ক্লাসের অন্তর্ভুক্ত।  অর্থাৎ মাম্মালিয়া ক্লাসের অন্য প্রাণীদের সাধারণ বৈশিষ্ট্যগুলি অবশ্যই মানুষের  মধ্যে থাকবে। ক্লাসটা নির্ধারণ করে দিচ্ছে তাঁর অন্তর্গত প্রাণীদের কি কি  বৈশিষ্ট্য থাকবে। অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়েও ব্যাপারটা তাই।  আমি একটি ক্লাস তৈরি করে যখন ঐ ক্লাসের অবজেক্ট তৈরি করছি , তখন  ক্লাসের ডিফাইনকৃত বৈশিষ্ট্যগুলিই ঐ অবজেক্টে বিদ্যমান থাকবে। মেথডে...

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং-এ এবস্ট্রাকশন

এবস্ট্রাকশনঃ এবস্ট্রাকশন মানে হচ্ছে বিমূর্তন বা পরম কোন কিছুকে বোঝায়। অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ে এবস্ট্রাক্ট ক্লাস ব্যবহার করে আমরা অনেকগুলি ক্লাসের কোন সাধারণ বৈশিষ্ট্যকে ধারণ করতে পারি। ঐ ক্লাসে কমন মেথড লিখে অন্যান্য ক্লাসে ব্যবহার করা যাবে। ধরা যাক, আমরা বিভিন্ন প্রাণীর বৈশিষ্ট্য নিয়ে কাজ করব। বেশিরভাগ প্রাণী মুখ দিয়ে শব্দ করে, হাঁটতে পারে এটা তাঁদের সাধারণ বৈশিষ্ট্য। কিন্তু সবাই একভাবে হাঁটেনা, শব্দ করেনা। সেগুলো আলাদা করে আমরা মেথড ইমপ্লিমেন্ট বা ওভাররাইড করে বৈশিষ্ট্য প্রদান করতে পারব। এবস্ট্রাক্ট ক্লাস লিখে, অন্য ক্লাস দিয়ে inherit করে মেথড override করে। এবস্ট্রাক্ট ক্লাস এমন একটি ক্লাস যার করা যায় না, অর্থাৎ new কিওয়ার্ড দিয়ে নতুন অবজেক্ট খোলা যাবেনা, কিন্তু ইনহেরিট করা যাবে অর্থাৎ extends করা যাবে। এবস্ট্রাক্ট ক্লাসে কোন মেথডের বডি থাকতে পারে, ভ্যারিয়েবলও রাখা যেতে পারে।   অথবা, ইন্টারফেস তৈরি করে, অন্য ক্লাসে ইমপ্লিমেন্ট করতে হবে। ঐ ক্লাসে অবশ্যই ইন্টারফেসের মেথডগুলির বডির কোড লিখতে হবে। ইন্টারফেসে শুধু মেথড ছাড়া কিছু রাখা যাবেনা, কোন মেথ...