অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (OOP) একটি শক্তিশালী প্রোগ্রামিং প্যারাডাইম যা অবজেক্ট এবং ক্লাসের ভিত্তিতে কোডের গঠন এবং সংগঠন নিশ্চিত করে। OOP-এর মধ্যে বেশ কিছু গুরুত্বপূর্ণ ধারণা রয়েছে, যেমন Polymorphism (পলিমরফিজম) এবং Encapsulation (এনক্যাপসুলেশন), যা কোডের পুনঃব্যবহারযোগ্যতা, মডুলারিটি এবং নিরাপত্তা বাড়াতে সাহায্য করে। নিচে এই দুইটি ধারণা বিস্তারিতভাবে আলোচনা করা হলো।
১. Polymorphism (পলিমরফিজম)
Polymorphism (পলিমরফিজম) শব্দটি গ্রীক ভাষা থেকে এসেছে, যার অর্থ "বহু আকার" বা "অনেক রূপ"। OOP-এ, পলিমরফিজম এমন একটি ধারণা যেখানে একাধিক ক্লাস বা অবজেক্ট একই নামের ফাংশন বা মেথড ব্যবহার করতে পারে, তবে তাদের আচরণ (বিহেভিয়ার) ভিন্ন হতে পারে। এটি কোডের পুনঃব্যবহারযোগ্যতা এবং নির্ভরযোগ্যতা বাড়ায়।
Polymorphism-এর ধরণ:
- Compile-time Polymorphism (স্ট্যাটিক পলিমরফিজম)
- Runtime Polymorphism (ডাইনামিক পলিমরফিজম)
১.১. Compile-time Polymorphism (স্ট্যাটিক পলিমরফিজম):
এটি সেই ধরনের পলিমরফিজম যেখানে মেথড ওভারলোডিং (Method Overloading) বা অপারেটর ওভারলোডিং (Operator Overloading) ব্যবহার করা হয়। এটি কম্পাইল টাইমে নির্ধারিত হয় এবং একাধিক মেথড বা অপারেটরকে একই নাম দিয়ে বিভিন্ন উপায়ে ব্যবহার করা যায়।
উদাহরণ: Method Overloading (স্ট্যাটিক পলিমরফিজম):
classdef Calculator
methods
function result = add(obj, a, b)
result = a + b;
end
% মেথড ওভারলোডিং: add মেথড, আরও একটি প্যারামিটার নিয়েছে
function result = add(obj, a, b, c)
result = a + b + c;
end
end
endএখানে, add মেথড দুটি ভিন্নভাবে কাজ করছে — একটিতে দুইটি প্যারামিটার এবং অন্যটিতে তিনটি প্যারামিটার আছে।
১.২. Runtime Polymorphism (ডাইনামিক পলিমরফিজম):
এটি সেই ধরনের পলিমরফিজম যেখানে মেথড ওভাররাইডিং (Method Overriding) ব্যবহার করা হয়। এটি রানটাইমে নির্ধারিত হয় এবং একটি প্যারেন্ট ক্লাসের মেথড সাব-ক্লাসে পুনরায় সংজ্ঞায়িত করা হয়।
উদাহরণ: Method Overriding (ডাইনামিক পলিমরফিজম):
classdef Animal
methods
function sound(obj)
disp('Animal makes a sound');
end
end
end
classdef Dog < Animal
methods
% মেথড ওভাররাইডিং
function sound(obj)
disp('Dog barks');
end
end
end
% রানটাইমে মেথড কল
a = Animal;
a.sound(); % Output: Animal makes a sound
d = Dog;
d.sound(); % Output: Dog barksএখানে, Dog ক্লাসে sound মেথডটি Animal ক্লাসের sound মেথডকে ওভাররাইড করেছে, এবং এটি রানটাইমে নির্ধারিত হয় কোন মেথডটি কল হবে।
Polymorphism-এর সুবিধা:
- কোডের পুনঃব্যবহারযোগ্যতা: একাধিক ক্লাস বা অবজেক্ট একই মেথড নাম ব্যবহার করতে পারে, তবে তাদের আচরণ ভিন্ন হবে।
- বিস্তারিত কোড স্ট্রাকচার: কোডের স্ট্রাকচার আরও পরিষ্কার এবং বিস্তারিত হয়।
- নতুন ফিচার যোগ করা সহজ: নতুন ক্লাস যোগ করা হলে পুরানো কোডের পরিবর্তন না করেই নতুন আচরণ যোগ করা যায়।
২. Encapsulation (এনক্যাপসুলেশন)
Encapsulation (এনক্যাপসুলেশন) হল এমন একটি প্রক্রিয়া যার মাধ্যমে ডেটা (প্রোপার্টি) এবং মেথড (ফাংশন) একসাথে একটি ক্লাসের মধ্যে রাখা হয় এবং বাইরে থেকে ডেটার সরাসরি অ্যাক্সেস নিয়ন্ত্রণ করা হয়। এটি OOP-এ ডেটা নিরাপত্তা এবং ইনক্যাপসুলেশনের প্রধান উপাদান।
Encapsulation-এর মূল বৈশিষ্ট্য:
- Private Data: ক্লাসের ডেটা বা ভ্যারিয়েবলগুলোকে
privateকরা হয়, যার ফলে বাইরে থেকে সেগুলো সরাসরি অ্যাক্সেস করা সম্ভব হয় না। - Public Methods: ডেটার অ্যাক্সেস করতে,
getterএবংsetterমেথড ব্যবহার করা হয়, যা ডেটার মধ্যে নিয়ন্ত্রণ এবং সীমাবদ্ধতা প্রদান করে।
উদাহরণ: Encapsulation
classdef BankAccount
properties (Access = private)
balance % private property
end
methods
% Constructor to initialize balance
function obj = BankAccount(initial_balance)
if initial_balance >= 0
obj.balance = initial_balance;
else
error('Initial balance must be non-negative');
end
end
% Getter method for balance
function balance = getBalance(obj)
balance = obj.balance;
end
% Setter method to update balance
function obj = deposit(obj, amount)
if amount > 0
obj.balance = obj.balance + amount;
else
error('Deposit amount must be positive');
end
end
end
end
% Example usage:
account = BankAccount(100); % Create a bank account with initial balance 100
disp(account.getBalance()); % Access balance through getter method
account = account.deposit(50); % Deposit 50 into account
disp(account.getBalance()); % New balance after depositএখানে:
balanceপ্রোপার্টিprivateহিসেবে সেট করা হয়েছে, যাতে বাইরে থেকে সরাসরি অ্যাক্সেস না করা যায়।getBalanceএবংdepositমেথডগুলিpublicহিসেবে অ্যাক্সেস করা যায় এবং এগুলি ডেটার অ্যাক্সেস নিয়ন্ত্রণ করে।
Encapsulation-এর সুবিধা:
- ডেটা সুরক্ষা: ডেটাকে সরাসরি অ্যাক্সেস করা থেকে রক্ষা করা যায়।
- কোডের সহজ রক্ষণাবেক্ষণ: ক্লাসের ভিতরের ডেটা পরিবর্তন করা হলেও বাইরের কোডে কোনো প্রভাব পড়ে না, কারণ বাহ্যিক অ্যাক্সেস কেবল
getterএবংsetterমেথডের মাধ্যমে নিয়ন্ত্রিত হয়। - ডেটা প্রক্রিয়া নিয়ন্ত্রণ: ডেটার অ্যাক্সেস বা পরিবর্তন একটি সুনির্দিষ্ট নিয়মের মাধ্যমে করা হয়, যা অপ্রত্যাশিত ত্রুটি বা ভুলের সম্ভাবনা কমায়।
Polymorphism এবং Encapsulation-এর সম্পর্ক
- Polymorphism এবং Encapsulation উভয়ই OOP ধারণার গুরুত্বপূর্ণ অংশ হলেও, এগুলি একে অপরকে পরিপূরক। যেখানে পলিমরফিজম বিভিন্ন ক্লাসের ফাংশনালিটিকে একসাথে নিয়ে আসে, সেখানে এনক্যাপসুলেশন ডেটার নিরাপত্তা এবং নিয়ন্ত্রণ প্রদান করে।
- Encapsulation ডেটা এবং আচরণের (Behavior) মধ্যে পার্থক্য নির্ধারণ করে এবং Polymorphism সেই আচরণের (Behavior) মধ্যে পরিবর্তন এনে একটি সাধারণ ইন্টারফেস প্রদান করে।
সারাংশ
- Polymorphism (পলিমরফিজম) হল একাধিক ক্লাস বা অবজেক্ট একি নামের মেথড ব্যবহার করতে পারে, তবে তাদের আচরণ (বিহেভিয়ার) ভিন্ন হতে পারে। এটি স্ট্যাটিক (Compile-time) এবং ডাইনামিক (Runtime) পলিমরফিজম হতে পারে।
- Encapsulation (এনক্যাপসুলেশন) হল ডেটা (প্রোপার্টি) এবং মেথড (ফাংশন) একসাথে একটি ক্লাসে রাখা এবং বাইরে থেকে ডেটার অ্যাক্সেস নিয়ন্ত্রণ করা। এটি ডেটার নিরাপত্তা ও কোডের রক্ষণাবেক্ষণ সহজ করে তোলে।
এই দুটি OOP ধারণা কোডের পুনঃব্যবহারযোগ্যতা, মডুলারিটি, নিরাপত্তা এবং কার্যকারিতা নিশ্চিত করতে সহায়তা করে।
Read more