প্যাসক্যাল ভাষা মূলত একটি স্ট্রাকচারড প্রোগ্রামিং ভাষা ছিল, তবে পরবর্তীতে এটি অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (OOP) সমর্থন করতে সক্ষম হয়েছে। প্যাসক্যালের আধুনিক সংস্করণে (যেমন Free Pascal), অবজেক্ট ওরিয়েন্টেড ধারণাগুলি প্রবর্তন করা হয়েছে, যা আপনাকে ক্লাস, অবজেক্ট, ইনহেরিটেন্স, পলিমরফিজম এবং এনক্যাপসুলেশন ব্যবহার করে কোড লেখার সুযোগ দেয়।
অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (OOP) এর মূল ধারণাগুলি প্যাসক্যালের মধ্যে বাস্তবায়িত করা যায় এবং এটি কোডের পুনঃব্যবহারযোগ্যতা, মডুলারিটি এবং সিস্টেমের উন্নত রক্ষণাবেক্ষণ করতে সাহায্য করে।
OOP এর মৌলিক ধারণাগুলি
- ক্লাস (Class):
- ক্লাস হলো একটি টেমপ্লেট বা ব্লুপ্রিন্ট যা অবজেক্ট তৈরি করার জন্য ব্যবহৃত হয়। এটি একটি নতুন ডেটা টাইপ তৈরি করে যা বিভিন্ন বৈশিষ্ট্য এবং পদ্ধতি ধারণ করে।
- অবজেক্ট (Object):
- অবজেক্ট হলো একটি ক্লাসের একটি ইনস্ট্যান্স বা উদাহরণ। এটি ক্লাসের বৈশিষ্ট্য এবং পদ্ধতির মূল উপাদান হিসেবে কাজ করে।
- ইনহেরিটেন্স (Inheritance):
- ইনহেরিটেন্স হল একটি ক্লাসের বৈশিষ্ট্য ও পদ্ধতি অন্য একটি ক্লাস দ্বারা পাওয়ার প্রক্রিয়া। একটি ক্লাস অন্য ক্লাসের বৈশিষ্ট্য এবং কার্যকলাপকে উত্তরাধিকারসূত্রে পেতে পারে।
- পলিমরফিজম (Polymorphism):
- পলিমরফিজম হলো একটি ফাংশন বা পদ্ধতির বিভিন্ন বাস্তবায়ন। এক বা একাধিক অবজেক্ট একে অপরের পদ্ধতি ব্যবহার করতে পারে।
- এনক্যাপসুলেশন (Encapsulation):
- এনক্যাপসুলেশন হলো ডেটা এবং ফাংশনগুলিকে একটি একক ইউনিটে লুকানো। এটি কোডের নিরাপত্তা এবং আচ্ছাদন তৈরি করতে সাহায্য করে।
প্যাসক্যালের মধ্যে OOP বাস্তবায়ন
প্যাসক্যালের মধ্যে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং বাস্তবায়িত করতে class এবং object কীওয়ার্ড ব্যবহার করা হয়।
উদাহরণ: একটি ক্লাস তৈরি করা
program OOPExample;
type
// ক্লাস ডেফিনিশন
TPerson = class
name: string;
age: Integer;
// মেথড
procedure Greet;
function GetAge: Integer;
end;
procedure TPerson.Greet;
begin
writeln('Hello, my name is ', name);
end;
function TPerson.GetAge: Integer;
begin
GetAge := age;
end;
var
person1: TPerson;
begin
// অবজেক্ট তৈরি
person1 := TPerson.Create;
person1.name := 'Alice';
person1.age := 25;
// মেথড কল করা
person1.Greet;
writeln('Age: ', person1.GetAge);
// অবজেক্ট ডিলিট করা
person1.Free;
end.এখানে যা ঘটছে:
TPersonএকটি ক্লাস যা দুটি প্রপার্টি (nameএবংage) এবং দুটি মেথড (GreetএবংGetAge) ধারণ করে।person1হলোTPersonক্লাসের একটি অবজেক্ট, যাCreateমেথড ব্যবহার করে তৈরি হয়।Greetমেথডের মাধ্যমে একটি ব্যক্তিগত পরিচয় প্রিন্ট করা হয়, এবংGetAgeমেথডের মাধ্যমে বয়স প্রিন্ট করা হয়।- অবজেক্টটি ব্যবহারের পরে
Freeমেথডের মাধ্যমে ডিলিট করা হয়।
ইনহেরিটেন্স উদাহরণ
প্যাসক্যালের মধ্যে একটি ক্লাস অন্য একটি ক্লাস থেকে বৈশিষ্ট্য এবং মেথড উত্তরাধিকারসূত্রে নিতে পারে।
program InheritanceExample;
type
// সুপার ক্লাস
TPerson = class
name: string;
age: Integer;
procedure Greet;
end;
procedure TPerson.Greet;
begin
writeln('Hello, my name is ', name);
end;
// সাব ক্লাস (Inherits TPerson)
TEmployee = class(TPerson)
jobTitle: string;
procedure ShowJob;
end;
procedure TEmployee.ShowJob;
begin
writeln('I am a ', jobTitle);
end;
var
employee1: TEmployee;
begin
// অবজেক্ট তৈরি
employee1 := TEmployee.Create;
employee1.name := 'Bob';
employee1.age := 30;
employee1.jobTitle := 'Software Developer';
// মেথড কল করা
employee1.Greet;
employee1.ShowJob;
// অবজেক্ট ডিলিট করা
employee1.Free;
end.এখানে যা ঘটছে:
TEmployeeক্লাসটিTPersonক্লাস থেকে ইনহেরিট করেছে, তাই এটিnameএবংageপ্রপার্টি এবংGreetমেথড পায়।TEmployeeক্লাসের নিজস্বjobTitleপ্রপার্টি এবংShowJobমেথড আছে।employee1হলTEmployeeক্লাসের একটি অবজেক্ট, যাGreet(TPerson থেকে) এবংShowJob(TEmployee থেকে) মেথড ব্যবহার করে।
সারাংশ
প্যাসক্যালের মধ্যে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (OOP) ব্যবহারের মাধ্যমে আপনি আপনার প্রোগ্রামকে আরো মডুলার, পুনঃব্যবহারযোগ্য এবং সহজে রক্ষণাবেক্ষণযোগ্য করতে পারেন। প্যাসক্যাল OOP সমর্থন করে ক্লাস, অবজেক্ট, ইনহেরিটেন্স, পলিমরফিজম এবং এনক্যাপসুলেশন এর মতো মৌলিক OOP ধারণা। এই ধারণাগুলি প্যাসক্যাল ভাষায় সহজেই ব্যবহার করা যায়, যা প্রোগ্রামিংকে আরো শক্তিশালী এবং কার্যকরী করে তোলে।
অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) এর দুটি গুরুত্বপূর্ণ ধারণা হল ক্লাস (Class) এবং **অবজেক্ট (Object)**। এই দুটি ধারণা প্রোগ্রামিং ভাষায় একসঙ্গে কাজ করে এবং একটি শক্তিশালী ডেভেলপমেন্ট পরিবেশ তৈরি করে। এখানে ক্লাস এবং অবজেক্টের মৌলিক ধারণা ব্যাখ্যা করা হবে।
১. ক্লাস (Class)
ক্লাস হলো একটি ব্লুপ্রিন্ট বা টেমপ্লেট যা অবজেক্ট তৈরি করার জন্য ব্যবহৃত হয়। এটি একটি ডাটা টাইপের মতো কাজ করে যা অবজেক্টের বৈশিষ্ট্য এবং আচরণ নির্ধারণ করে। ক্লাসের মধ্যে ডেটা (প্রপার্টি বা ফিল্ড) এবং ফাংশন (মেথড) থাকে যা ঐ ডেটার উপর কাজ করে।
ক্লাসের গঠন:
type
ClassName = class
// প্রপার্টি বা ভেরিয়েবল
Field1: Integer;
Field2: String;
// মেথড বা ফাংশন
procedure Method1;
function Method2: Integer;
end;- ClassName: ক্লাসের নাম।
- Field1, Field2: ক্লাসের ভেরিয়েবল বা প্রপার্টি, যেগুলি অবজেক্টের অবস্থাকে প্রতিনিধিত্ব করে।
- Method1, Method2: ক্লাসের মধ্যে ফাংশন বা মেথড, যেগুলি অবজেক্টের আচরণ নির্ধারণ করে।
উদাহরণ:
type
Car = class
Brand: string;
Model: string;
Year: Integer;
procedure Start;
begin
writeln('The car is starting');
end;
function GetBrand: string;
begin
Result := Brand;
end;
end;এখানে Car ক্লাসের মধ্যে কিছু প্রপার্টি (যেমন Brand, Model, Year) এবং মেথড (যেমন Start, GetBrand) রয়েছে।
২. অবজেক্ট (Object)
অবজেক্ট হলো একটি ক্লাসের একটি নির্দিষ্ট উদাহরণ (ইনস্ট্যান্স)। যখন একটি ক্লাস ডিফাইন করা হয়, তখন তার ভিত্তিতে অনেকগুলো অবজেক্ট তৈরি করা যেতে পারে। অবজেক্টটি একটি নির্দিষ্ট ক্লাসের প্রপার্টি এবং মেথড ব্যবহার করতে পারে এবং বাস্তব জীবনের উপাদান বা বস্তু হিসেবে কাজ করে।
অবজেক্ট তৈরি এবং ব্যবহার:
var
myCar: Car;
begin
myCar := Car.Create; // অবজেক্ট তৈরি
myCar.Brand := 'Toyota'; // প্রপার্টি অ্যাক্সেস
myCar.Model := 'Corolla';
myCar.Year := 2020;
writeln(myCar.GetBrand); // মেথড কল
myCar.Start; // মেথড কল
myCar.Free; // অবজেক্টের মেমরি মুক্ত করা
end;এখানে:
myCarহলোCarক্লাসের একটি অবজেক্ট।myCar := Car.Createলাইনটি একটি নতুন অবজেক্ট তৈরি করছে।myCar.Brand,myCar.Model,myCar.Yearএই প্রপার্টিগুলি অবজেক্টের মান সেট করছে।myCar.StartএবংmyCar.GetBrandহলো মেথড কল করা।
ক্লাস এবং অবজেক্টের মধ্যে পার্থক্য
| বৈশিষ্ট্য | ক্লাস (Class) | অবজেক্ট (Object) |
|---|---|---|
| সংজ্ঞা | একটি টেমপ্লেট বা ব্লুপ্রিন্ট যা অবজেক্ট তৈরি করার জন্য ব্যবহৃত হয় | একটি নির্দিষ্ট ক্লাসের উদাহরণ বা ইনস্ট্যান্স |
| মেমরি বরাদ্দ | ক্লাসে মেমরি বরাদ্দ করা হয় না | অবজেক্ট তৈরির সময় মেমরি বরাদ্দ হয় |
| এটি কী নির্ধারণ করে? | অবজেক্টের বৈশিষ্ট্য (প্রপার্টি) এবং আচরণ (মেথড) | ক্লাসের ডেটা এবং আচরণ যা বাস্তবে কাজ করে |
| ব্যবহার | অবজেক্ট তৈরির জন্য একটি রূপরেখা | ক্লাসের একটি বাস্তব উদাহরণ হিসেবে ব্যবহৃত হয় |
সারাংশ
- ক্লাস (Class) একটি টেমপ্লেট বা ব্লুপ্রিন্ট যা অবজেক্টের বৈশিষ্ট্য এবং আচরণ নির্ধারণ করে।
- অবজেক্ট (Object) হলো একটি ক্লাসের একটি নির্দিষ্ট উদাহরণ বা ইনস্ট্যান্স যা বাস্তব জীবনের উপাদানকে প্রতিনিধিত্ব করে।
ক্লাস এবং অবজেক্টের মাধ্যমে প্রোগ্রামিং কোডকে আরও সংগঠিত এবং পুনঃব্যবহারযোগ্য করা সম্ভব হয়।
এই তিনটি ধারণা অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) এর মৌলিক স্তম্ভ। OOP-এর মাধ্যমে কোডের পুনঃব্যবহারযোগ্যতা, সুনির্দিষ্টতা এবং মোডুলারিটি অর্জন করা যায়। নিচে এই তিনটি মূল ধারণা বিস্তারিতভাবে ব্যাখ্যা করা হয়েছে।
১. ইনহেরিটেন্স (Inheritance)
ইনহেরিটেন্স হলো এমন একটি বৈশিষ্ট্য, যার মাধ্যমে একটি ক্লাস (subclass বা derived class) আরেকটি ক্লাস (superclass বা base class) এর গুণাবলী (properties) এবং আচরণ (methods) উত্তরাধিকারসূত্রে লাভ করতে পারে। এটি কোড পুনঃব্যবহার (code reusability) নিশ্চিত করে এবং সহজেই নতুন ফিচার যোগ করার সুবিধা দেয়।
উদাহরণ:
program InheritanceExample;
type
// সুপার ক্লাস (Base Class)
Animal = class
procedure Speak;
end;
// সাব ক্লাস (Derived Class)
Dog = class(Animal)
procedure Speak; override;
end;
// সুপার ক্লাসের মেথড
procedure Animal.Speak;
begin
writeln('Animal makes a sound');
end;
// সাব ক্লাসের মেথড (এটি সুপার ক্লাসের Speak মেথডকে ওভাররাইড করেছে)
procedure Dog.Speak;
begin
writeln('Dog barks');
end;
var
myAnimal: Animal;
myDog: Dog;
begin
myAnimal := Animal.Create;
myDog := Dog.Create;
myAnimal.Speak; // Output: Animal makes a sound
myDog.Speak; // Output: Dog barks
myAnimal.Free;
myDog.Free;
end.এখানে:
Animalহলো সুপার ক্লাস, এবংDogহলো সাব ক্লাস যাAnimalক্লাস থেকে ইনহেরিট করেছে।Dogক্লাসেSpeakমেথডটি সুপার ক্লাসের মেথডকে ওভাররাইড করেছে।
২. পলিমর্ফিজম (Polymorphism)
পলিমর্ফিজম হলো এমন একটি বৈশিষ্ট্য, যার মাধ্যমে একাধিক অবজেক্ট একই মেথড ব্যবহার করলেও তাদের আচরণ ভিন্ন হতে পারে। এই ধারণা ইনহেরিটেন্স এবং মেথড ওভাররাইডিংয়ের মাধ্যমে অর্জিত হয়। মূলত, এটি "one interface, many implementations" এর মত কাজ করে।
উদাহরণ:
program PolymorphismExample;
type
// সুপার ক্লাস
Animal = class
procedure Speak; virtual;
end;
// সাব ক্লাস
Dog = class(Animal)
procedure Speak; override;
end;
Cat = class(Animal)
procedure Speak; override;
end;
// সুপার ক্লাসের মেথড
procedure Animal.Speak;
begin
writeln('Animal makes a sound');
end;
// ডগ ক্লাসের মেথড
procedure Dog.Speak;
begin
writeln('Dog barks');
end;
// ক্যাট ক্লাসের মেথড
procedure Cat.Speak;
begin
writeln('Cat meows');
end;
var
myAnimal: Animal;
myDog: Dog;
myCat: Cat;
begin
myAnimal := Animal.Create;
myDog := Dog.Create;
myCat := Cat.Create;
myAnimal.Speak; // Output: Animal makes a sound
myDog.Speak; // Output: Dog barks
myCat.Speak; // Output: Cat meows
myAnimal.Free;
myDog.Free;
myCat.Free;
end.এখানে:
Speakমেথডটি তিনটি ভিন্ন ক্লাসে (Animal, Dog, Cat) আছে, তবে একই নামের মেথড হলেও তাদের আচরণ ভিন্ন।- এটি পলিমর্ফিজম। একে
dynamic polymorphismবলা হয় কারণ মেথডের আচরণ তখনই নির্ধারিত হয় যখন সেই মেথড কল করা হয়।
৩. এনক্যাপসুলেশন (Encapsulation)
এনক্যাপসুলেশন হলো একটি অবজেক্টের অভ্যন্তরীণ অবস্থা এবং আচরণকে একটি ক্লাসের মধ্যে আবদ্ধ করে রাখা, যাতে বাইরের কোড বা ক্লাসগুলো সরাসরি ঐ অভ্যন্তরীণ অবস্থা পরিবর্তন না করতে পারে। এটি ডেটার নিরাপত্তা নিশ্চিত করে এবং অবজেক্টের ডেটার উপর নিয়ন্ত্রণ রাখে।
উদাহরণ:
program EncapsulationExample;
type
BankAccount = class
private
balance: Integer; // private field
public
procedure Deposit(amount: Integer);
procedure Withdraw(amount: Integer);
function GetBalance: Integer;
end;
procedure BankAccount.Deposit(amount: Integer);
begin
balance := balance + amount;
end;
procedure BankAccount.Withdraw(amount: Integer);
begin
if balance >= amount then
balance := balance - amount
else
writeln('Insufficient funds');
end;
function BankAccount.GetBalance: Integer;
begin
Result := balance;
end;
var
myAccount: BankAccount;
begin
myAccount := BankAccount.Create;
myAccount.Deposit(1000);
myAccount.Withdraw(500);
writeln('Current Balance: ', myAccount.GetBalance); // Output: Current Balance: 500
myAccount.Free;
end.এখানে:
balanceফিল্ডটি private যা বাইরে থেকে অ্যাক্সেস করা যায় না।Deposit,Withdraw, এবংGetBalanceমেথডগুলি পাবলিক, যা অবজেক্টের ভেতরেরbalanceফিল্ডের সাথে কাজ করে।- বাইরের কোড সরাসরি
balanceঅ্যাক্সেস করতে পারে না, কিন্তু মেথডের মাধ্যমে এই ডেটা নিয়ন্ত্রণ করা হয়, এটি এনক্যাপসুলেশনের উদাহরণ।
সারাংশ
- ইনহেরিটেন্স: এক ক্লাস অন্য ক্লাসের গুণাবলী এবং আচরণ উত্তরাধিকারসূত্রে লাভ করে।
- পলিমর্ফিজম: এক নামের মেথডের বিভিন্ন বাস্তবায়ন (implementation) থাকতে পারে, যা একাধিক ক্লাসে ব্যবহৃত হতে পারে।
- এনক্যাপসুলেশন: একটি ক্লাসের অভ্যন্তরীণ ডেটা এবং আচরণ আবদ্ধ রাখা, যাতে বাইরের কোড সরাসরি এই ডেটা অ্যাক্সেস বা পরিবর্তন করতে না পারে।
এই তিনটি ধারণা OOP-এর মূল স্তম্ভ এবং সফটওয়্যার ডেভেলপমেন্টে কার্যকারিতা এবং কোডের মান উন্নত করতে সহায়তা করে।
কনস্ট্রাক্টর এবং ডেস্ট্রাক্টর হল অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP)-এর গুরুত্বপূর্ণ ধারণা। এগুলি ক্লাসের ইনস্ট্যান্স তৈরি এবং ধ্বংস করার সময় স্বয়ংক্রিয়ভাবে কল হয়। এগুলির মাধ্যমে আপনি অবজেক্ট তৈরি এবং ধ্বংসের জন্য নির্দিষ্ট কাজ করতে পারেন।
১. কনস্ট্রাক্টর (Constructor)
কনস্ট্রাক্টর হল একটি বিশেষ ধরনের মেথড যা একটি ক্লাসের অবজেক্ট তৈরি করার সময় স্বয়ংক্রিয়ভাবে কল হয়। কনস্ট্রাক্টর মূলত ক্লাসের অবজেক্ট ইনিশিয়ালাইজ করার জন্য ব্যবহৃত হয়, যেমন কোনো ভেরিয়েবল বা প্রপার্টি সেট করা।
কনস্ট্রাক্টরের বৈশিষ্ট্য:
- কনস্ট্রাক্টরের নাম সাধারণত ক্লাসের নামের মতো হয়।
- কনস্ট্রাক্টর একটি রিটার্ন টাইপ (ফলস্ বা ভ্যালু) পায় না।
- কনস্ট্রাক্টরটি যখন অবজেক্ট তৈরি করা হয় তখন স্বয়ংক্রিয়ভাবে কল হয়।
উদাহরণ: কনস্ট্রাক্টরের ব্যবহার (Pascal)
program ConstructorExample;
type
TPerson = class
name: string;
age: Integer;
constructor Create(n: string; a: Integer); // কনস্ট্রাক্টর ডিফাইন করা
begin
name := n;
age := a;
end;
procedure Display;
begin
writeln('Name: ', name);
writeln('Age: ', age);
end;
end;
var
person: TPerson;
begin
person := TPerson.Create('Aziz', 25); // কনস্ট্রাক্টর কল হচ্ছে
person.Display;
person.Free; // অবজেক্ট ধ্বংস
end.আউটপুট:
Name: Aziz
Age: 25এখানে, Create কনস্ট্রাক্টরটি name এবং age ভেরিয়েবলগুলো ইনিশিয়ালাইজ করে, এবং Display পদ্ধতি অবজেক্টের তথ্য প্রদর্শন করে।
২. ডেস্ট্রাক্টর (Destructor)
ডেস্ট্রাক্টর হল একটি বিশেষ ধরনের মেথড যা একটি অবজেক্ট ধ্বংস করার সময় স্বয়ংক্রিয়ভাবে কল হয়। ডেস্ট্রাক্টরের কাজ হল অবজেক্টের কোনো রিসোর্স বা মেমরি মুক্ত করা, যা অবজেক্টটি ব্যবহার করার সময় বরাদ্দ হয়েছিল। এটি ক্লাসের ইনস্ট্যান্সে আর প্রয়োজনীয় না থাকলে এর মাধ্যমে রিসোর্স রিলিজ করা হয়।
ডেস্ট্রাক্টরের বৈশিষ্ট্য:
- ডেস্ট্রাক্টরের নাম সাধারণত
Destroyহয়। - এটি কোন রিটার্ন টাইপ পায় না।
- যখন অবজেক্টটি মুক্ত করা হয় তখন ডেস্ট্রাক্টর কল হয়, এবং এটি অবজেক্টের মেমরি বা অন্যান্য রিসোর্স মুক্ত করে।
উদাহরণ: ডেস্ট্রাক্টরের ব্যবহার (Pascal)
program DestructorExample;
type
TPerson = class
name: string;
age: Integer;
constructor Create(n: string; a: Integer);
begin
name := n;
age := a;
end;
procedure Display;
begin
writeln('Name: ', name);
writeln('Age: ', age);
end;
destructor Destroy; // ডেস্ট্রাক্টর ডিফাইন করা
begin
writeln('Destructor called for ', name);
inherited Destroy; // প্যারেন্ট ক্লাসের ডেস্ট্রাক্টর কল করা
end;
end;
var
person: TPerson;
begin
person := TPerson.Create('Aziz', 25);
person.Display;
person.Free; // ডেস্ট্রাক্টর কল হবে
end.আউটপুট:
Name: Aziz
Age: 25
Destructor called for Azizএখানে, Destroy ডেস্ট্রাক্টরটি অবজেক্ট person এর জন্য কল হচ্ছে যখন person.Free করা হয়, এবং মেমরি বা অন্যান্য রিসোর্স মুক্ত হচ্ছে।
কনস্ট্রাক্টর এবং ডেস্ট্রাক্টরের পার্থক্য
| বৈশিষ্ট্য | কনস্ট্রাক্টর (Constructor) | ডেস্ট্রাক্টর (Destructor) |
|---|---|---|
| কোন সময় কল হয়? | অবজেক্ট তৈরি হওয়ার সময়। | অবজেক্ট ধ্বংস হওয়ার সময়। |
| নাম | ক্লাসের নামের মতো হয়। | সাধারণত Destroy হয়। |
| ফাংশনালিটি | অবজেক্ট ইনিশিয়ালাইজ করা। | অবজেক্টের মেমরি বা রিসোর্স মুক্ত করা। |
| রিটার্ন টাইপ | কোন রিটার্ন টাইপ থাকে না। | কোন রিটার্ন টাইপ থাকে না। |
সারাংশ
- কনস্ট্রাক্টর (Constructor) হল একটি বিশেষ মেথড যা অবজেক্ট তৈরি করার সময় ফাংশনের মতো কাজ করে এবং এটি অবজেক্টের প্রাথমিক মান ইনিশিয়ালাইজ করার জন্য ব্যবহৃত হয়।
- ডেস্ট্রাক্টর (Destructor) হল একটি বিশেষ মেথড যা অবজেক্ট ধ্বংস হওয়ার সময় কল হয় এবং এটি অবজেক্টের রিসোর্স বা মেমরি মুক্ত করতে ব্যবহৃত হয়।
প্রোগ্রামিংয়ের মধ্যে কনস্ট্রাক্টর এবং ডেস্ট্রাক্টর দুটোই অত্যন্ত গুরুত্বপূর্ণ, কারণ এগুলি অবজেক্টের জীবনচক্রকে নিয়ন্ত্রণ করতে সাহায্য করে।
মেথড ওভারলোডিং (Method Overloading) এবং মেথড ওভাররাইডিং (Method Overriding) হল অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (OOP) এর দুটি গুরুত্বপূর্ণ ধারণা। যদিও তারা কিছুটা সাদৃশ্যপূর্ণ, তবে তাদের মধ্যে মৌলিক পার্থক্য রয়েছে। এই ধারণাগুলি সাধারণত ক্লাস এবং অবজেক্টের মধ্যে কাজ করে এবং নির্দিষ্ট শর্তে মেথডগুলি ব্যবহার করা হয়।
১. মেথড ওভারলোডিং (Method Overloading)
মেথড ওভারলোডিং হল একই মেথড নামের সাথে একাধিক মেথড তৈরি করা, যেখানে প্রতিটি মেথডের প্যারামিটার ভিন্ন থাকে (যেমন সংখ্যায় বা ধরণে)। এটি মূলত একই ফাংশন বা মেথডের বৈচিত্র্যময় সংস্করণ তৈরির প্রক্রিয়া।
মেথড ওভারলোডিং এর উদ্দেশ্য:
- একই মেথড নামের সাথে বিভিন্ন প্যারামিটার ব্যবহার করে একাধিক কাজ সম্পাদন করা।
- এটি কোডের পুনরাবৃত্তি (redundancy) কমাতে সাহায্য করে এবং কোড ক্লিন এবং কমপ্যাক্ট রাখে।
উদাহরণ (Method Overloading in Java):
class Calculator {
// Method to add two integers
int add(int a, int b) {
return a + b;
}
// Method to add three integers
int add(int a, int b, int c) {
return a + b + c;
}
// Method to add two doubles
double add(double a, double b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
Calculator calc = new Calculator();
System.out.println(calc.add(10, 20)); // Calls the first add() method
System.out.println(calc.add(10, 20, 30)); // Calls the second add() method
System.out.println(calc.add(10.5, 20.5)); // Calls the third add() method
}
}এখানে, add() মেথডটি তিনটি ভিন্নভাবে ওভারলোড করা হয়েছে:
- দুটি পূর্ণসংখ্যার যোগফল
- তিনটি পূর্ণসংখ্যার যোগফল
- দুটি দশমিক সংখ্যা যোগফল
মেথড ওভারলোডিং এর মধ্যে প্যারামিটার সংখ্যা বা ধরণে পরিবর্তন থাকতে হবে, তবে মেথডের নাম একই থাকবে।
২. মেথড ওভাররাইডিং (Method Overriding)
মেথড ওভাররাইডিং হল একটি সুপার ক্লাসের মেথডকে সাব-ক্লাসে আবার নতুন করে সংজ্ঞায়িত করা (অথবা পুনরায় বাস্তবায়ন করা)। এটি সুপার ক্লাসের মেথডের আচরণ পরিবর্তন করে এবং সাব-ক্লাসে নতুন আচরণ নির্ধারণ করে।
মেথড ওভাররাইডিং এর উদ্দেশ্য:
- সুপার ক্লাসের মেথডের আচরণকে পরিবর্তন বা উন্নত করা।
- যদি একই মেথড নাম এবং প্যারামিটার থাকে, তবে সাব-ক্লাসে নতুনভাবে আচরণ সংজ্ঞায়িত করা।
উদাহরণ (Method Overriding in Java):
class Animal {
// Method in super class
void sound() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
// Overriding the sound() method in subclass (Dog)
void sound() {
System.out.println("Dog barks");
}
}
public class Main {
public static void main(String[] args) {
Animal myAnimal = new Animal();
myAnimal.sound(); // Calls the super class method
Dog myDog = new Dog();
myDog.sound(); // Calls the overridden method in subclass
}
}এখানে:
Animalক্লাসে একটিsound()মেথড রয়েছে যা "Animal makes a sound" প্রিন্ট করে।Dogক্লাসেsound()মেথডটি Animal ক্লাসের মেথডকে ওভাররাইড করে "Dog barks" প্রিন্ট করে।
এই উদাহরণে Dog ক্লাসে sound() মেথডটি Animal ক্লাসের sound() মেথডকে ওভাররাইড করেছে।
মেথড ওভারলোডিং এবং মেথড ওভাররাইডিং এর মধ্যে পার্থক্য:
| বৈশিষ্ট্য | মেথড ওভারলোডিং (Method Overloading) | মেথড ওভাররাইডিং (Method Overriding) |
|---|---|---|
| কোডের ব্যবহার | একই মেথড নামের সঙ্গে বিভিন্ন প্যারামিটার ব্যবহার করা হয়। | সুপার ক্লাসের মেথডের আচরণ পরিবর্তন করা হয়। |
| মেথডের নাম | একই নাম, কিন্তু প্যারামিটার বা ডেটা টাইপে পার্থক্য। | একই নাম এবং প্যারামিটার ব্যবহার করা হয়। |
| পরিবর্তন | প্যারামিটার সংখ্যা বা টাইপ পরিবর্তন হয়। | মেথডের বাস্তবায়ন (Implementation) পরিবর্তন হয়। |
| ফলাফল | একাধিক মেথড তৈরি করা হয়। | মেথডের আচরণ পরিবর্তন হয়। |
| পর্যবেক্ষণ | কম্পাইল টাইমে (Compile-time) মেথড নির্বাচন হয়। | রানটাইম (Runtime) এ মেথড নির্বাচন হয়। |
সারাংশ (Summary)
- মেথড ওভারলোডিং হল একই মেথড নামের মধ্যে বিভিন্ন প্যারামিটার বা আর্গুমেন্ট দিয়ে একাধিক মেথড সংজ্ঞায়িত করা। এটি কম্পাইল টাইমে নির্ধারিত হয়।
- মেথড ওভাররাইডিং হল সুপার ক্লাসের মেথডের আচরণ সাব-ক্লাসে নতুনভাবে সংজ্ঞায়িত করা। এটি রানটাইমে নির্ধারিত হয়।
এই দুটি কৌশল OOP প্রোগ্রামিংয়ের শক্তিশালী উপাদান এবং কোডকে আরও পুনরায় ব্যবহারযোগ্য এবং সুনির্দিষ্ট করে তোলে।
Read more