Vivasoft-logo

অ্যাবস্ট্রাকশন এবং এনক্যাপসুলেশন:

অবজেক্ট-অরিয়েন্টেড প্রোগ্রামিংয়ের চারটি মৌলিক প্রিন্সিপল মধ্যে একটি হল অ্যাবস্ট্রাকশন। অ্যাবস্ট্রাকশন এর মাধ্যমে কোন
একটি সিস্টেমের জটিল কাজগুলোকে লুকিয়ে রেখে বেবহারকারিদের কাছে শুধু মাত্র প্রয়োজনীয় বিষয় গুলোই তুলে ধরা হয়। অবজেক্ট-অরিয়েন্টেড প্রোগ্রামিংয়ে অ্যাবস্ট্রাক ক্লাস , ইন্টারফেস এবং এনক্যাপসুলেশন এর মাধ্যমে অ্যাবস্ট্রাকশন প্রয়োগ করা যায় । ডার্টে অ্যাবস্ট্রাকশন প্রয়োগ করার জন্যে abstract ক্লাস ব্যাবহার করা হয়ে থাকে । আমরা ‘abstract’ কীওয়ার্ড ব্যবহার করে abstract ক্লাসটি ঘোষণা করতে পারি। অ্যাবস্ট্রাক ক্লাসে এক বা একাধিক অ্যাবস্ট্রাক মেথড (যে মেথড গুলোর কোন ইমপ্লিমেন্টেশন দেওয়া থাকে না ) থাকতে পারে । অ্যাবস্ট্রাক ক্লাসে এক বা একাধিক অ্যাবস্ট্রাক মেথড (যে মেথড গুলোর কোন ইমপ্লিমেন্টেশন দেওয়া থাকে না ) থাকতে পারে । অ্যাবস্ট্রাক ক্লাসের কোন ইন্সটেন্স তৈরি করা যায় না, অ্যাবস্ট্রাক ক্লাসকে কোন একটি সাবক্লাস extend / implement করে এবং সাবক্লাসটির দায়িত্ব থাকে অ্যাবস্ট্রাক মেথডগুলোর ইমপ্লিমেন্টেশন দেওয়া আমরা একটি কোড স্যাম্পল দেখে ফেলি:

abstract class Car {
String manufacturerCompany;
String color;
int numberOfSeats;

Car(
this.manufacturerCompany,
this.color,
this.numberOfSeats,
);

void power();
}

class BmwCar extends Car {
String bmwModel;

BmwCar(
String manufacturerCompany,
String color,
int numberOfSeats,
this.bmwModel,
) : super(manufacturerCompany, color, numberOfSeats);

@override
void power() {
print('BMW runs on oil');
}
}

class TeslaCar extends Car {
TeslaCar(
String manufacturerCompany,
String color,
int numberOfSeats,
) : super(manufacturerCompany, color, numberOfSeats);

@override
void power() {
print('Tesla runs on electricity.');
}
}

void main() {
BmwCar bmwCar = BmwCar(
'BMW',
'Black',
4,
'Electric Luxury Sedan',
);
bmwCar.power();

TeslaCar teslaCar = TeslaCar(
'Tesla',
'Black',
4,
);

teslaCar.power();
}
 

আউটপুট :

BMW runs on oil
Tesla runs on electricity.
 

এখানে

 TeslaCar 
এবং
 BmwCar 
অ্যাবস্ট্রাক
 Car 
ক্লাসকে এক্সটেন্ড করে অ্যাবস্ট্রাক মেথড
 power() 
কে নিজেদের মতন করে ইমপ্লিমেন্ট করে নিয়েছে

এনক্যাপসুলেশন হল অবজেক্ট-অরিয়েন্টেড প্রোগ্রামিংয়ের আরেকটি গুরুত্বপূর্ণ বৈশিষ্ট্য , একটি ক্লাসের শুধুমাত্র প্রয়োজনীয় মেথড এবং প্রপার্টিজ গুলোকে ব্যাবহার করতে দিয়ে এনক্যাপসুলেশন একটি ক্লাসের নিরাপত্তা কে নিশিত করে থাকে । এনক্যাপসুলেশন এর মাধ্যমে সহজেই কোন একটি ক্লাসের নিজস্ব বৈশিষ্ট্য কে বদলানো যায় , পুরো সিস্টেম এর উপরে কোন ইমপ্যাক্ট না ফেলেই এক্সেস মডিফায়ার এর মাধ্যমে আমরা একটি ক্লাসে প্রাইভেট প্রপার্টি অথবা মেথড কে প্রাইভেট হিসেবে ডিক্লেয়ার করে এনক্যাপসুলেশন প্রয়োগ করতে পারি । ডার্টে _ এর মাধ্যমে এটি ব্যাবহার করা যায় ।

class Car {
String _color; // Private field for car color

Car(this._color);

// Getter for car color
String get color => _color;

// Setter for car color
set color(String color) {
_color = color;
}
}

void main() {
var myCar = Car('Red');

// Accessing and modifying the private field using getter and setter
print('Car Color: ${myCar.color}'); // Access using getter
myCar.color = 'Blue'; // Modify using setter
print('Updated Car Color: ${myCar.color}');
}
 

আউটপুট :

Car Color: Red
Updated Car Color: Blue