ম্যাটল্যাব অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (OOP) সমর্থন করে, যা কোডের পুনঃব্যবহারযোগ্যতা, মডুলারিটি, এবং কার্যকরী পারফরম্যান্স নিশ্চিত করতে সহায়ক। OOP ধারণার মাধ্যমে কোডের বিভিন্ন অংশকে অবজেক্ট এবং ক্লাস এর মাধ্যমে সংগঠিত করা যায়। MATLAB এর M-Files এর মধ্যে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং ব্যবহার করলে, আপনার কোড আরো সহজে বজায় রাখা, পরীক্ষণ এবং সম্প্রসারণ করা সম্ভব হয়।
OOP এর মূল ধারণা
OOP-র মূল ধারণাগুলি হল:
- ক্লাস (Class): একটি ব্লুপ্রিন্ট বা টেমপ্লেট, যা অবজেক্টের গঠন এবং আচরণ বর্ণনা করে।
- অবজেক্ট (Object): ক্লাসের একটি নির্দিষ্ট ইনস্ট্যান্স, যার মধ্যে বিভিন্ন গুণ বা অ্যাট্রিবিউট থাকে।
- ইনক্যাপসুলেশন (Encapsulation): ডেটা এবং সেই ডেটার উপর পরিচালিত কাজ বা ফাংশন একত্রিত করে রাখা।
- ইনহেরিট্যান্স (Inheritance): একটি ক্লাস অন্য একটি ক্লাসের বৈশিষ্ট্য অর্জন করতে পারে।
- পলিমরফিজম (Polymorphism): একই নামের ফাংশন বা মেথড বিভিন্ন ধরনের অবজেক্টে ভিন্নভাবে কাজ করতে পারে।
MATLAB-এ OOP কীভাবে কাজ করে
ম্যাটল্যাবের OOP সিস্টেমে ক্লাস ডিফাইন করা এবং অবজেক্ট তৈরি করা হয়। ক্লাস একটি মেটাফাইল (যা .m এক্সটেনশনে থাকে) এবং এতে বিভিন্ন প্রপার্টি (অ্যাট্রিবিউট) এবং মেথড (ফাংশন) থাকে।
ক্লাস ডিফাইন করা
ম্যাটল্যাবের ক্লাস তৈরির জন্য আপনাকে একটি মেটাফাইল তৈরি করতে হবে। এই ফাইলে ক্লাসের প্রপার্টি, কনস্ট্রাক্টর, মেথড ইত্যাদি থাকবে।
ক্লাস ডিফাইন করার উদাহরণ:
classdef Circle
% Circle ক্লাসের মধ্যে গুণাবলী এবং মেথড সংরক্ষিত হবে
properties
radius % রেডিয়াস
end
methods
% কনস্ট্রাক্টর মেথড
function obj = Circle(r)
if nargin > 0
obj.radius = r;
end
end
% এরিয়া হিসাবের মেথড
function area = calculateArea(obj)
area = pi * (obj.radius^2); % রেডিয়াসের বর্গ গুণে পাই
end
end
endএখানে:
properties: ক্লাসের অ্যাট্রিবিউট বা গুণাবলী, যা ক্লাসের অবজেক্টের অংশ হতে পারে।methods: ক্লাসের মধ্যে ফাংশন বা মেথড, যা ক্লাসের অবজেক্টের সাথে সম্পর্কিত কাজ করে।Circle: একটি কনস্ট্রাক্টর মেথড যা অবজেক্ট তৈরি করার সময় রেডিয়াস ইনপুট হিসেবে নেয়।
অবজেক্ট তৈরি করা
একবার ক্লাস ডিফাইন হয়ে গেলে, আপনি এই ক্লাস থেকে অবজেক্ট তৈরি করতে পারবেন। অবজেক্ট তৈরি করতে সাধারণভাবে ক্লাসের কনস্ট্রাক্টর মেথড ব্যবহার করা হয়।
অবজেক্ট তৈরি করার উদাহরণ:
% Circle ক্লাসের অবজেক্ট তৈরি
c1 = Circle(5); % রেডিয়াস 5 দিয়ে অবজেক্ট তৈরি
% এরিয়া বের করা
area1 = c1.calculateArea();
disp(['Area of circle: ', num2str(area1)]);এখানে, c1 একটি Circle অবজেক্ট এবং এটি radius প্রপার্টি ধারণ করে। আপনি অবজেক্টটির calculateArea() মেথড ব্যবহার করে তার এরিয়া হিসাব করতে পারেন।
ইনহেরিট্যান্স (Inheritance)
ইনহেরিট্যান্স এর মাধ্যমে একটি ক্লাস অন্য একটি ক্লাসের প্রপার্টি এবং মেথড অর্জন করতে পারে। এতে কোড পুনঃব্যবহারযোগ্যতা বাড়ে।
ইনহেরিট্যান্স উদাহরণ:
classdef Cylinder < Circle
% Cylinder ক্লাসটি Circle ক্লাসের অধীনে একটি সাবক্লাস
properties
height % সিলিন্ডারের উচ্চতা
end
methods
% কনস্ট্রাক্টর মেথড
function obj = Cylinder(r, h)
obj@Circle(r); % Circle ক্লাসের কনস্ট্রাক্টর কল করা
obj.height = h;
end
% ভলিউম হিসাবের মেথড
function volume = calculateVolume(obj)
volume = c1.calculateArea() * obj.height; % এলাকা গুণে উচ্চতা
end
end
endএখানে, Cylinder ক্লাসটি Circle ক্লাস থেকে ইনহেরিট করেছে। Cylinder-এর কনস্ট্রাক্টর Circle ক্লাসের কনস্ট্রাক্টর কল করেছে এবং তার পরে সিলিন্ডারের উচ্চতা প্রপার্টি যোগ করা হয়েছে।
অবজেক্ট তৈরি এবং ভলিউম বের করা:
% Cylinder ক্লাসের অবজেক্ট তৈরি
c2 = Cylinder(5, 10); % রেডিয়াস 5, উচ্চতা 10
% ভলিউম বের করা
volume = c2.calculateVolume();
disp(['Volume of cylinder: ', num2str(volume)]);এখানে, c2 একটি Cylinder অবজেক্ট এবং এটি Circle ক্লাসের প্রপার্টি এবং মেথড ইনহেরিট করেছে। calculateVolume মেথড দিয়ে সিলিন্ডারের ভলিউম হিসাব করা হচ্ছে।
পলিমরফিজম (Polymorphism)
পলিমরফিজম হল একটি ধারণা, যেখানে একাধিক ক্লাসের ফাংশন একই নামের হলেও, প্রতিটি ক্লাসের জন্য এটি আলাদা কাজ করতে পারে।
পলিমরফিজম উদাহরণ:
classdef Shape
methods
function displayArea(obj)
disp('Area of the shape');
end
end
end
classdef Circle < Shape
methods
function displayArea(obj)
disp(['Area of the circle: ', num2str(pi * obj.radius^2)]);
end
end
end
classdef Rectangle < Shape
methods
function displayArea(obj)
disp(['Area of the rectangle: ', num2str(obj.length * obj.width)]);
end
end
endএখানে, Circle এবং Rectangle ক্লাসগুলি একই নামের displayArea মেথড ব্যবহার করছে, তবে প্রতিটি ক্লাসে এই মেথডটি ভিন্নভাবে কাজ করছে।
সারাংশ
অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (OOP) ম্যাটল্যাব M-Files-এ ক্লাস, অবজেক্ট, ইনক্যাপসুলেশন, ইনহেরিট্যান্স, এবং পলিমরফিজম এর মাধ্যমে কোডকে আরও সংগঠিত এবং পুনঃব্যবহারযোগ্য করে তোলে।
- ক্লাস ডিফাইন করার মাধ্যমে আপনি ডেটা এবং ফাংশন একত্রে রাখেন।
- ইনহেরিট্যান্স এর মাধ্যমে ক্লাসগুলি একে অপরের বৈশিষ্ট্য অর্জন করতে পারে।
- পলিমরফিজম আপনাকে একই নামের মেথডের ভিন্ন আচরণ নির্ধারণ করতে সাহায্য করে।
এই ধারণাগুলির মাধ্যমে কোডের পুনঃব্যবহারযোগ্যতা বৃদ্ধি পায় এবং কোডের রক্ষণাবেক্ষণ সহজ হয়।
অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) একটি প্রোগ্রামিং ধারণা যেখানে কোডকে বিভিন্ন ক্লাস (Class) এবং অবজেক্ট (Object)-এ ভাগ করা হয়। এটি কোডকে মডুলার এবং পুনঃব্যবহারযোগ্য করে তোলে। ম্যাটল্যাবের মত ভাষাতেও OOP কনসেপ্ট ব্যবহার করা যায়। এখানে আমরা Class এবং Object কী এবং এগুলোর definition সম্পর্কে আলোচনা করব।
১. Class (ক্লাস)
Class হল একটি টেমপ্লেট বা ব্লুপ্রিন্ট, যা অবজেক্ট তৈরি করার জন্য ব্যবহৃত হয়। এটি সাধারণত ডেটা (অ্যাট্রিবিউট) এবং ফাংশন (মেথড) ধারণ করে, যেগুলি সেই ধরনের অবজেক্টের আচরণ এবং গুণাবলী নির্ধারণ করে।
Class ডিফাইন করার সময় আপনি কিছু প্রোপার্টি (অ্যাট্রিবিউট) এবং মেথড (ফাংশন) নির্ধারণ করেন।
ক্লাস ডিফাইন করার উদাহরণ:
classdef Car
% Car ক্লাস ডিফাইন করা
properties
Make % গাড়ির ব্র্যান্ড
Model % গাড়ির মডেল
Year % গাড়ির বছর
end
methods
% কনস্ট্রাক্টর মেথড
function obj = Car(make, model, year)
obj.Make = make;
obj.Model = model;
obj.Year = year;
end
% একটি মেথড যা গাড়ির তথ্য প্রদর্শন করে
function displayInfo(obj)
disp(['Make: ', obj.Make]);
disp(['Model: ', obj.Model]);
disp(['Year: ', num2str(obj.Year)]);
end
end
endএখানে:
- properties: ক্লাসের অবজেক্টের মধ্যে যে সমস্ত ডেটা বা প্রোপার্টি থাকবে, সেগুলি সংজ্ঞায়িত করে।
- methods: ক্লাসের অবজেক্টের জন্য যে সমস্ত ফাংশন বা মেথড থাকবে, সেগুলি সংজ্ঞায়িত করে। এখানে
displayInfoএকটি মেথড যা গাড়ির তথ্য প্রদর্শন করবে। - কনস্ট্রাক্টর মেথড:
Carক্লাসের একটি কনস্ট্রাক্টর মেথড আছে যা একটি নতুন অবজেক্ট তৈরি করার জন্য ব্যবহার হয়।
২. Object (অবজেক্ট)
Object হল একটি ক্লাসের বাস্তব ইনস্ট্যান্স (instance)। এটি ক্লাসের attribute এবং method গুলি ধারণ করে এবং এর মাধ্যমে আপনি সেই ক্লাসের কার্যকারিতা ব্যবহার করতে পারেন।
অবজেক্ট তৈরি করা:
% Car ক্লাসের একটি অবজেক্ট তৈরি
myCar = Car('Toyota', 'Corolla', 2020);
% অবজেক্টের মেথড কল করা
myCar.displayInfo(); % গাড়ির তথ্য প্রদর্শন করবেএখানে:
myCarএকটি অবজেক্ট যাCarক্লাসের একটি ইনস্ট্যান্স।myCar.displayInfo()কল করার মাধ্যমেCarক্লাসেরdisplayInfoমেথডটি চালানো হয়।
Class এবং Object এর মধ্যে পার্থক্য
- Class হল একটি টেমপ্লেট বা ব্লুপ্রিন্ট যা অবজেক্ট তৈরি করতে ব্যবহৃত হয়। এটি শুধুমাত্র একটি ডেফিনিশন এবং আচরণ (ফাংশন) সংজ্ঞায়িত করে।
- Object হল সেই টেমপ্লেটের ভিত্তিতে তৈরি করা একটি বাস্তব ইনস্ট্যান্স। এটি properties এবং methods ধারণ করে।
OOP এর মূল ধারণা:
- Encapsulation: ডেটা এবং মেথড একত্রে রাখা। প্রাইভেট ডেটা ক্লাসের বাইরে অ্যাক্সেস করা যাবে না।
- Abstraction: জটিলতা আড়াল করা এবং শুধুমাত্র প্রয়োজনীয় তথ্য প্রদান করা।
- Inheritance: একটি ক্লাস অন্য একটি ক্লাসের গুণাবলী উত্তরাধিকার সূত্রে গ্রহণ করতে পারে।
- Polymorphism: একাধিক মেথডের ব্যবহার, যার মাধ্যমে একই নামের ফাংশন বিভিন্ন ধরনের ইনপুট নিয়ে কাজ করতে পারে।
Class এবং Object এর অন্যান্য বৈশিষ্ট্য:
Properties (অ্যাট্রিবিউট):
ক্লাসের মধ্যে ডেটার উপাদানগুলি। এগুলি অবজেক্টের গুণাবলী বা বৈশিষ্ট্য হিসেবে কাজ করে।properties Make Model Year endMethods (ফাংশন):
ক্লাসের মধ্যে ফাংশন যা অবজেক্টের জন্য কার্যক্ষমতা নির্ধারণ করে।methods function obj = Car(make, model, year) obj.Make = make; obj.Model = model; obj.Year = year; end function displayInfo(obj) disp(['Make: ', obj.Make]); disp(['Model: ', obj.Model]); disp(['Year: ', num2str(obj.Year)]); end endConstructor:
ক্লাসের কনস্ট্রাক্টর হল একটি বিশেষ ধরনের মেথড যা অবজেক্ট তৈরি করার জন্য ব্যবহৃত হয়।function obj = Car(make, model, year) obj.Make = make; obj.Model = model; obj.Year = year; end
সারাংশ
- Class হল একটি টেমপ্লেট বা ব্লুপ্রিন্ট যা অবজেক্ট তৈরি করতে ব্যবহৃত হয়। এটি properties এবং methods ধারণ করে।
- Object হল সেই ক্লাসের একটি ইনস্ট্যান্স যা বাস্তবে ব্যবহৃত হয় এবং সেই ক্লাসের বৈশিষ্ট্য ও কার্যকারিতা ধারণ করে।
- ম্যাটল্যাবের মাধ্যমে Class এবং Object ব্যবহার করে অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের শক্তি এবং সুবিধা অর্জন করা সম্ভব, যেমন ডেটা এনক্যাপসুলেশন, পুনঃব্যবহারযোগ্য কোড, এবং পরিষ্কার কোড উন্নয়ন।
এটি বিশেষত বড় এবং জটিল সিস্টেমে কার্যকরী, যেখানে কোডের সংগঠন এবং পুনঃব্যবহারযোগ্যতা খুব গুরুত্বপূর্ণ।
অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) এর মূল ধারণাগুলির মধ্যে Properties, Methods, এবং Inheritance অত্যন্ত গুরুত্বপূর্ণ। এই ধারণাগুলির মাধ্যমে কোডের পুনঃব্যবহারযোগ্যতা, মডুলারিটি এবং সহজে পরিচালনা করা যায়। ম্যাটল্যাবেও OOP এর ধারণাগুলি ব্যবহার করা যায় এবং এই ফিচারগুলো প্রোগ্রামিং কোডকে আরও কার্যকরী ও মডুলার করে তোলে।
১. Properties (প্রোপার্টি)
Properties হল ক্লাসের একটি অংশ যা অবজেক্টের state বা data ধারণ করে। সাধারণত প্রোপার্টি গুলি ক্লাসের অ্যাট্রিবিউট (attribute) হিসেবে কাজ করে এবং অবজেক্টের মান বা অবস্থা নির্ধারণ করে।
বৈশিষ্ট্য:
- প্রোপার্টি হল ক্লাসের ইনস্ট্যান্স ভেরিয়েবল, যা অবজেক্টের ডেটা ধারণ করে।
- প্রোপার্টি সাধারণত ক্লাসের ভিতরে
propertiesব্লকের মধ্যে ডিফাইন করা হয়।
উদাহরণ:
classdef Car
properties
make % গাড়ির প্রস্তুতকারক
model % গাড়ির মডেল
year % গাড়ির বছর
end
methods
function obj = Car(make, model, year)
obj.make = make;
obj.model = model;
obj.year = year;
end
end
endএখানে, Car ক্লাসে তিনটি প্রোপার্টি (make, model, year) ডিফাইন করা হয়েছে, যা গাড়ির তথ্য ধারণ করে।
অবজেক্ট তৈরি করা:
myCar = Car('Toyota', 'Corolla', 2020);
disp(myCar.make); % Toyota
disp(myCar.model); % Corolla২. Methods (মেথড)
Methods হল ক্লাসের ফাংশন বা অ্যাকশন যা ক্লাসের প্রোপার্টি বা স্টেট ম্যানিপুলেট করতে ব্যবহৃত হয়। মেথডগুলি ক্লাসের সদস্য হিসেবে কাজ করে এবং ক্লাসের ইনস্ট্যান্সের উপর কাজ করে।
বৈশিষ্ট্য:
- মেথড সাধারণত ক্লাসের
methodsব্লকের মধ্যে ডিফাইন করা হয়। - মেথডগুলি ক্লাসের প্রোপার্টির উপর কার্যকর হতে পারে, অর্থাৎ ইনস্ট্যান্সের প্রোপার্টির মান পরিবর্তন করতে পারে।
উদাহরণ:
classdef Car
properties
make
model
year
end
methods
function obj = Car(make, model, year)
obj.make = make;
obj.model = model;
obj.year = year;
end
function displayInfo(obj)
disp(['Car Make: ', obj.make]);
disp(['Car Model: ', obj.model]);
disp(['Car Year: ', num2str(obj.year)]);
end
end
endএখানে displayInfo একটি মেথড, যা গাড়ির তথ্য প্রদর্শন করবে।
মেথড কল করা:
myCar = Car('Toyota', 'Corolla', 2020);
myCar.displayInfo();৩. Inheritance (ইনহেরিটেন্স)
Inheritance হল একটি OOP কনসেপ্ট যেখানে একটি ক্লাস অন্য একটি ক্লাস থেকে প্রোপার্টি এবং মেথড উত্তরাধিকারসূত্রে পায়। এতে কোড পুনঃব্যবহারযোগ্যতা বাড়ে এবং নতুন ক্লাস তৈরি করার সময় পূর্ববর্তী ক্লাসের বৈশিষ্ট্যগুলোকে উত্তরাধিকারীভাবে ব্যবহার করা যায়।
বৈশিষ্ট্য:
- একটি ক্লাস
superclassবাparent classথেকে অন্য ক্লাসsubclassবাchild classপ্রোপার্টি এবং মেথড গ্রহণ করে। - একটি সাবক্লাস মূল ক্লাসের মেথড এবং প্রোপার্টি ব্যবহার করতে পারে এবং এগুলিকে কাস্টমাইজ বা রিডিফাইন করতে পারে।
উদাহরণ:
classdef Vehicle
properties
make
model
end
methods
function obj = Vehicle(make, model)
obj.make = make;
obj.model = model;
end
function displayInfo(obj)
disp(['Vehicle Make: ', obj.make]);
disp(['Vehicle Model: ', obj.model]);
end
end
end
classdef Car < Vehicle
properties
year
end
methods
function obj = Car(make, model, year)
obj@Vehicle(make, model); % সুপারক্লাসের কনস্ট্রাক্টর কল করা
obj.year = year;
end
function displayInfo(obj)
displayInfo@Vehicle(obj); % সুপারক্লাসের মেথড কল করা
disp(['Car Year: ', num2str(obj.year)]);
end
end
endএখানে, Car ক্লাসটি Vehicle ক্লাস থেকে ইনহেরিট করেছে। Car ক্লাসের মধ্যে Vehicle ক্লাসের প্রোপার্টি এবং মেথড ব্যবহার করা হয়েছে।
ইনহেরিটেন্স ব্যবহার:
myCar = Car('Toyota', 'Corolla', 2020);
myCar.displayInfo();এটি Car ক্লাসের displayInfo মেথড কল করবে, যা প্রথমে Vehicle ক্লাসের displayInfo মেথড কল করবে এবং পরে Car ক্লাসের অতিরিক্ত তথ্য প্রদর্শন করবে।
সারাংশ
- Properties (প্রোপার্টি): ক্লাসের স্টেট বা ডেটা ধারণ করে, যেগুলি অবজেক্টের বৈশিষ্ট্য বা অ্যাট্রিবিউট হিসেবে কাজ করে।
- Methods (মেথড): ক্লাসের ফাংশন বা অ্যাকশন যা প্রোপার্টি ম্যানিপুলেট বা অবজেক্টের আচরণ নিয়ন্ত্রণ করে।
- Inheritance (ইনহেরিটেন্স): একটি ক্লাস অন্য একটি ক্লাস থেকে প্রোপার্টি এবং মেথড উত্তরাধিকারসূত্রে গ্রহণ করে, যা কোড পুনঃব্যবহারযোগ্যতা বৃদ্ধি করে।
এই তিনটি ধারণা OOP এর মূল স্তম্ভ এবং এগুলি ব্যবহার করে আরও মডুলার, ক্লিন এবং পুনঃব্যবহারযোগ্য কোড তৈরি করা যায়।
ম্যাটল্যাব (MATLAB) একটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) ভাষা নয়, তবে এটি অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং ধারণাকে সমর্থন করে। MATLAB-এ অবজেক্টগুলি ব্যবহার করে আপনি ডেটা এবং ফাংশনগুলোকে একত্রিত করে সেগুলি একসাথে পরিচালনা করতে পারেন। Object Arrays এবং Object Methods হল OOP-তে ব্যবহৃত দুটি গুরুত্বপূর্ণ ধারণা, যা MATLAB-এর ক্লাস এবং অবজেক্ট ব্যবস্থাপনায় সহায়তা করে।
১. Object Arrays (অবজেক্ট অ্যারে)
অবজেক্ট অ্যারে এমন একটি অ্যারে যা একাধিক অবজেক্ট ধারণ করতে পারে। প্রতিটি অবজেক্ট একটি ক্লাসের ইনস্ট্যান্স এবং সেই ক্লাসের বৈশিষ্ট্য এবং ফাংশন (মেথড) ধারণ করে। MATLAB-এ আপনি একটি ক্লাসের একাধিক অবজেক্ট তৈরি করতে পারেন এবং সেগুলি একটি অ্যারেতে সংরক্ষণ করতে পারেন।
Object Array তৈরি করার উদাহরণ:
ধরা যাক, একটি ক্লাস Car তৈরি করা হয়েছে এবং এর মধ্যে একটি বৈশিষ্ট্য speed রয়েছে। আমরা একটি Car ক্লাসের অবজেক্ট অ্যারে তৈরি করতে পারি।
classdef Car
properties
speed % গতি
end
methods
function obj = Car(initialSpeed)
if nargin > 0
obj.speed = initialSpeed;
end
end
function obj = setSpeed(obj, newSpeed)
obj.speed = newSpeed;
end
function dispSpeed(obj)
disp(['Speed: ', num2str(obj.speed), ' km/h']);
end
end
endএখানে Car ক্লাসে একটি প্রপার্টি speed এবং দুটি মেথড setSpeed ও dispSpeed রয়েছে।
Object Array তৈরি করা:
car1 = Car(50); % প্রথম অবজেক্ট
car2 = Car(70); % দ্বিতীয় অবজেক্ট
car3 = Car(90); % তৃতীয় অবজেক্ট
cars = [car1, car2, car3]; % অবজেক্ট অ্যারে তৈরিএখন cars একটি অ্যারে, যা তিনটি Car অবজেক্ট ধারণ করে।
Object Array-এ মেথড ব্যবহার:
for i = 1:length(cars)
cars(i).dispSpeed(); % প্রতিটি কার অবজেক্টের গতি প্রদর্শন
endএখানে, আমরা for লুপ ব্যবহার করে cars অবজেক্ট অ্যারে থেকে প্রতিটি Car অবজেক্টের dispSpeed মেথড কল করছি।
২. Object Methods (অবজেক্ট মেথড)
অবজেক্ট মেথড হল একটি ক্লাসের জন্য ডিফাইন করা ফাংশন, যা ঐ ক্লাসের অবজেক্টের উপর কাজ করে। মেথডগুলি একটি অবজেক্টের প্রপার্টি বা বৈশিষ্ট্যগুলিকে পরিবর্তন বা অ্যাক্সেস করার জন্য ব্যবহৃত হয়।
মেথড ডিফাইন করা:
Car ক্লাসে আমরা দুটি মেথড ডিফাইন করেছি:
setSpeed: এই মেথডটি একটি নতুন গতি সেট করার জন্য ব্যবহৃত হয়।dispSpeed: এই মেথডটি গতি প্রদর্শন করে।
Object Methods ব্যবহার:
car1 = Car(60);
car1.dispSpeed(); % গতি প্রদর্শন করবে
car1 = car1.setSpeed(80); % গতি পরিবর্তন করা
car1.dispSpeed(); % নতুন গতি প্রদর্শন করবেএখানে, প্রথমে car1 অবজেক্টের গতি প্রদর্শন করা হয়েছে, তারপর setSpeed মেথড ব্যবহার করে গতি পরিবর্তন করা হয়েছে, এবং অবশেষে নতুন গতি প্রদর্শন করা হয়েছে।
মেথডের মধ্যে obj ব্যবহার:
MATLAB-এ অবজেক্ট মেথডে obj নামক একটি প্যারামিটার থাকে, যা ঐ অবজেক্টের ইনস্ট্যান্সকে নির্দেশ করে। মেথডের মধ্যে এই obj প্যারামিটার ব্যবহার করে অবজেক্টের প্রপার্টি পরিবর্তন বা অ্যাক্সেস করা হয়।
function obj = setSpeed(obj, newSpeed)
obj.speed = newSpeed; % অবজেক্টের গতি পরিবর্তন করা
endএখানে setSpeed মেথডে obj প্যারামিটার ব্যবহার করা হয়েছে, যা এই ফাংশনের মাধ্যমে গতি পরিবর্তন করে।
Object Methods ও Object Arrays এর সংমিশ্রণ
Object Arrays এর মধ্যে Methods ব্যবহার করা:
আপনি অবজেক্ট অ্যারের মধ্যে একাধিক অবজেক্টের উপর মেথড প্রয়োগ করতে পারেন। যেমন একটি অ্যারের সব অবজেক্টের গতি পরিবর্তন করা:
for i = 1:length(cars)
cars(i) = cars(i).setSpeed(cars(i).speed + 10); % গতি 10 বৃদ্ধি করা
cars(i).dispSpeed(); % নতুন গতি প্রদর্শন
endএখানে, আমরা cars অ্যারের প্রতিটি Car অবজেক্টের গতি 10 বৃদ্ধি করেছি এবং তারপর তা প্রদর্শন করেছি।
সারাংশ:
- Object Arrays: এটি একাধিক অবজেক্ট ধারণ করতে ব্যবহৃত হয়। MATLAB-এ একাধিক অবজেক্টকে একটি অ্যারেতে সংরক্ষণ করা সম্ভব।
- Object Methods: অবজেক্টের জন্য ডিফাইন করা ফাংশনগুলি, যা অবজেক্টের প্রপার্টি বা বৈশিষ্ট্যগুলির উপর কাজ করে। Methods অবজেক্টের কাজ করতে সহায়তা করে এবং তাদের বৈশিষ্ট্য পরিবর্তন বা অ্যাক্সেস করে।
- ব্যবহার: অবজেক্ট অ্যারে এবং মেথডগুলি একত্রে ব্যবহার করে আপনি একাধিক অবজেক্টের উপর কার্যকরী কাজ করতে পারেন, যেমন গতি পরিবর্তন, ডেটা বিশ্লেষণ ইত্যাদি।
অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (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