অ্যাবস্ট্রাকশন এবং এনক্যাপসুলেশন:
অবজেক্ট-অরিয়েন্টেড প্রোগ্রামিংয়ের চারটি মৌলিক প্রিন্সিপল মধ্যে একটি হল অ্যাবস্ট্রাকশন। অ্যাবস্ট্রাকশন এর মাধ্যমে কোন
একটি সিস্টেমের জটিল কাজগুলোকে লুকিয়ে রেখে বেবহারকারিদের কাছে শুধু মাত্র প্রয়োজনীয় বিষয় গুলোই তুলে ধরা হয়। অবজেক্ট-অরিয়েন্টেড প্রোগ্রামিংয়ে অ্যাবস্ট্রাক ক্লাস , ইন্টারফেস এবং এনক্যাপসুলেশন এর মাধ্যমে অ্যাবস্ট্রাকশন প্রয়োগ করা যায় । ডার্টে অ্যাবস্ট্রাকশন প্রয়োগ করার জন্যে 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