python-basic

⌘K
  1. Home
  2. python-basic
  3. OOP
  4. Single Responsibility Principle (SRP)

Single Responsibility Principle (SRP)

Single Responsibility Principle (SRP) বোঝাতে আমরা একটা গল্পের মাধ্যমে ব্যাখ্যা করবো।

গল্প:

একটা ছোট্ট গ্রামে ছিল রফিক নামে একজন। রফিক গ্রামের মানুষদের বিভিন্ন ধরনের কাজ করে সাহায্য করতো। সে সকালে উঠে দুধ বিক্রি করত, তারপর মাঠে গিয়ে চাষ করত, দুপুরে দোকানে বসে গ্রাহকদের জিনিস বিক্রি করত, আর রাতে গিয়ে গ্রামের সবাইকে চিঠি বিলি করত। এত কাজ করতে করতে একসময় রফিক খুবই ক্লান্ত হয়ে পড়ল এবং অনেক সময় তার কাজগুলোতে ভুল হতে লাগলো।

একদিন গ্রামের প্রধান এসে বললেন, “রফিক, তুমি সব কাজ একা একা করছো, তাই সবকিছু ঠিকমতো করতে পারছো না। যদি তুমি প্রতিটা কাজের জন্য আলাদা আলাদা লোক রাখো, তাহলে সবাই নিজের কাজ ভালোভাবে করতে পারবে, আর তুমি এতটা ক্লান্তও হবে না।”

রফিক প্রধানের কথা মেনে প্রতিটা কাজের জন্য আলাদা লোক রাখল। যেমন, দুধ বিক্রির জন্য একজন রাখল, চাষের জন্য আরেকজন, দোকানে বসার জন্য আরেকজন, আর চিঠি বিলির জন্য একজন। এরপর সব কাজ ভালোভাবে চলতে লাগল, আর রফিকেরও কাজ সহজ হয়ে গেল।

এই গল্প থেকে আমরা কী শিখলাম?

এই গল্পটা ঠিক “Single Responsibility Principle (SRP)” এর মতো।

SRP বলে, একটা ক্লাস বা ফাংশনের শুধু একটা কাজ (responsibility) থাকা উচিত। যেমন, রফিক যখন সব কাজ একা করছিল, তখন সে সবকিছুতে ভুল করছিল কারণ তার অনেকগুলো কাজ ছিল। কিন্তু যখন প্রতিটা কাজের জন্য আলাদা আলাদা লোক রাখা হলো, তখন সবকিছু সুন্দরভাবে চলতে লাগল।

এখন, চলুন দেখি কিভাবে এটা প্রোগ্রামিং-এ প্রযোজ্য:

ধরা যাক, আমাদের একটা কোড আছে যেখানে একজন মেনেজার এর দায়িত্ব অনেক ধরনের কাজের জন্য। যেমন:

class Manager:
    def manage_employees(self):
        print("Managing employees")
    
    def prepare_reports(self):
        print("Preparing reports")
    
    def calculate_salary(self):
        print("Calculating salary")

এখন এই ক্লাসের মধ্যে অনেক কাজ হচ্ছে, যেমন:

  • কর্মচারীদের ম্যানেজ করা
  • রিপোর্ট তৈরি করা
  • বেতন গণনা করা

এটা ঠিক রফিকের মতো সব কাজ একা করার মতো। ফলে, এই কোড যখন বড় হবে, তখন তা পরিচালনা করা কঠিন হয়ে যাবে। তাই SRP অনুযায়ী, প্রতিটা কাজের জন্য আলাদা ক্লাস করা উচিত। যেমন:

class EmployeeManager:
    def manage_employees(self):
        print("Managing employees")
        
class ReportManager:
    def prepare_reports(self):
        print("Preparing reports")
        
class SalaryManager:
    def calculate_salary(self):
        print("Calculating salary")

এখন প্রতিটা ক্লাসের শুধু একটা করে কাজ আছে, যা SRP মেনে চলে। যেমন, EmployeeManager শুধু কর্মচারীদের ম্যানেজ করবে, ReportManager শুধু রিপোর্ট তৈরি করবে, আর SalaryManager শুধু বেতন গণনা করবে।

সুবিধা:

  • সহজ পরিবর্তন: যখন কোডে কোনো পরিবর্তন দরকার হবে, তখন শুধুমাত্র নির্দিষ্ট ক্লাসে পরিবর্তন করতে হবে। অন্য ক্লাসগুলো অক্ষত থাকবে।
  • সহজ রক্ষণাবেক্ষণ: কোড পড়া এবং পরিচালনা করা সহজ হয়ে যাবে।
  • ক্লাসের স্পষ্ট দায়িত্ব: প্রতিটা ক্লাসের কাজ স্পষ্ট, তাই ভুল হওয়ার সম্ভাবনা কম।

এভাবেই Single Responsibility Principle প্রোগ্রামিং-এর জন্য উপকারী।

How can we help?