গল্প:
একটা শহরে ছিল একটা ফার্নিচারের দোকান। দোকানের মালিক, মিজান ভাই, সবাইকে চেয়ারের অর্ডার বুঝে বানিয়ে দিতেন। প্রথমে সবাই সাধারণ কাঠের চেয়ার চাইত, তাই মিজান ভাই শুধু কাঠের চেয়ার বানানোর নিয়ম জানতেন। কিন্তু পরে কিছু লোক এল যারা বলল, তারা আরামদায়ক সোফা চেয়ারে বসতে চায়। আবার কেউ কেউ এসে বলল, তারা চায় চকচকে ধাতুর চেয়ার।
প্রথমে মিজান ভাই চিন্তায় পড়ে গেলেন। যদি তিনি প্রতিবার চেয়ারের নতুন ধরণ যোগ করতে চান, তাহলে তাকে পুরোনো চেয়ারের ডিজাইন পুরো বদলাতে হবে! এতে তার কাজ খুবই কঠিন হয়ে যাচ্ছে।
কিন্তু তারপর মিজান ভাই একটা বুদ্ধি করলেন। তিনি তার চেয়ার বানানোর পদ্ধতিটা এমনভাবে তৈরি করলেন, যাতে নতুন ধরনের চেয়ার যোগ করা সহজ হয়, কিন্তু পুরোনো চেয়ারের নিয়ম পরিবর্তন করতে না হয়। তিনি একটা সাধারণ কাঠামো তৈরি করলেন, যেখানে নতুন যেকোনো ধরনের চেয়ার সহজেই যোগ করা যায়।
এখন, মিজান ভাই যখনই কোনো নতুন ধরনের চেয়ার বানানোর অর্ডার পান, তিনি পুরোনো নিয়ম না বদলিয়ে শুধু নতুন চেয়ার তৈরি করার নিয়ম যোগ করে দেন। এতে তার কাজ দ্রুত হয়, এবং পুরোনো কোনো সমস্যাও হয় না।
এই গল্প থেকে আমরা কী শিখলাম?
এই গল্পটা “Open/Closed Principle (OCP)” এর উদাহরণ।
OCP বলে, কোনো ক্লাস বা কোড এমনভাবে লেখা উচিত যাতে নতুন ফিচার যোগ করা যায়, কিন্তু পুরোনো কোড পরিবর্তন করতে না হয়। অর্থাৎ, কোড ‘open for extension’ হওয়া উচিত, কিন্তু ‘closed for modification’ হওয়া উচিত।
এখন, প্রোগ্রামিং-এ এটা কেমন হয়?
ধরা যাক, মিজান ভাইয়ের গল্পের মতো আমাদের একটা ক্লাস আছে যেটা কাঠের চেয়ার বানায়:
class WoodenChair:
def make_chair(self):
return "Making a wooden chair"
এখন যদি নতুন কোনো চেয়ারের অর্ডার আসে, যেমন ধাতুর চেয়ার, তাহলে আমরা মিজান ভাইয়ের মতোই চিন্তায় পড়বো, কারণ আমাদের এই ক্লাসটা পরিবর্তন করতে হবে।
কিন্তু OCP মানলে, আমরা ক্লাসটাকে পরিবর্তন না করে নতুন ধরনের চেয়ার যোগ করার সুযোগ রাখবো। উদাহরণ:
class Chair:
def make_chair(self):
pass
class WoodenChair(Chair):
def make_chair(self):
return "Making a wooden chair"
class MetalChair(Chair):
def make_chair(self):
return "Making a metal chair"
এখানে আমরা Chair নামের একটা সাধারণ কাঠামো তৈরি করেছি, যেখানে আমরা নতুন ধরনের চেয়ার যোগ করতে পারি যেমন WoodenChair এবং MetalChair।
এখন যদি আরামদায়ক সোফা যোগ করতে হয়, আমরা শুধু আরেকটা নতুন ক্লাস যোগ করবো:
class SofaChair(Chair):
def make_chair(self):
return "Making a sofa chair"
OCP এর কারণে, আমরা পুরোনো কোড একদমই পরিবর্তন করছি না, শুধু নতুন ক্লাস যোগ করে দিচ্ছি, যেমন মিজান ভাই নতুন চেয়ারের ডিজাইন যোগ করছিলেন।
সুবিধা:
- কোড ভেঙে যায় না: পুরোনো কোড পরিবর্তন না করায় কোনো ভুল হওয়ার সম্ভাবনা কম।
- সহজ আপডেট: নতুন ফিচার বা চেয়ারের মতো নতুন কিছু যোগ করা অনেক সহজ হয়।
- রক্ষণাবেক্ষণ সহজ: কোডের রক্ষণাবেক্ষণ এবং ভবিষ্যতে উন্নয়ন করা সহজ হয়ে যায়।
এভাবেই Open/Closed Principle কোডকে আরও উন্নত এবং ভবিষ্যৎ-প্রস্তুত করে তুলতে সাহায্য করে।