Dart প্রোগ্রামিং ভাষায় Classes এবং Objects অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের (OOP) প্রধান ধারণা। এগুলি ডেটা এবং কার্যক্রমকে একটি কাঠামোতে সংগঠিত করতে সহায়ক। নিচে ক্লাস এবং অবজেক্টের বিস্তারিত আলোচনা করা হলো।
1. Classes (ক্লাস)
Class হল একটি ব্লুপ্রিন্ট বা টেমপ্লেট যা অবজেক্ট তৈরি করার জন্য ব্যবহৃত হয়। এটি একটি ডেটা স্ট্রাকচার ধারণ করে যা প্রপার্টি (attributes) এবং মেথড (methods) নিয়ে গঠিত। ক্লাসের মাধ্যমে আপনি একাধিক অবজেক্ট তৈরি করতে পারেন।
ক্লাস ডিফাইনেশন:
class Car {
String brand; // প্রপার্টি
int year; // প্রপার্টি
// Constructor
Car(this.brand, this.year);
// Method
void displayInfo() {
print("Brand: $brand, Year: $year");
}
}
2. Objects (অবজেক্টস)
Object হল ক্লাসের একটি নির্দিষ্ট উদাহরণ। এটি ক্লাসে ডিফাইন করা প্রপার্টি এবং মেথডগুলি ধারণ করে। অবজেক্ট তৈরি করার সময়, আপনি ক্লাসের কনস্ট্রাক্টর ব্যবহার করেন।
অবজেক্ট তৈরি করা:
void main() {
// অবজেক্ট তৈরি করা
Car myCar = Car('Toyota', 2020);
// অবজেক্টের মেথড কল করা
myCar.displayInfo(); // Output: Brand: Toyota, Year: 2020
}
ক্লাস এবং অবজেক্টের মধ্যে পার্থক্য
| বিষয় | ক্লাস | অবজেক্ট |
|---|---|---|
| সংজ্ঞা | একটি ব্লুপ্রিন্ট বা টেমপ্লেট | ক্লাসের একটি নির্দিষ্ট উদাহরণ |
| ডেটা স্ট্রাকচার | প্রপার্টি এবং মেথড থাকে | প্রপার্টি এবং মেথড ধারণ করে |
| তৈরি করা | class ClassName { ... } | ClassName objectName = ClassName(); |
ক্লাসের বৈশিষ্ট্য
Encapsulation (এনক্যাপসুলেশন): ক্লাসের মাধ্যমে ডেটা এবং কার্যক্রম একত্রে রাখা হয়, যা ডেটা সুরক্ষা বাড়ায়।
Inheritance (ইনহেরিট্যান্স): একটি ক্লাস অন্য ক্লাসের বৈশিষ্ট্যগুলি গ্রহণ করতে পারে, যা কোড পুনঃব্যবহার বাড়ায়।
Polymorphism (পলিমরফিজম): একই নামের মেথড বিভিন্ন ক্লাসে ভিন্নভাবে কার্যকর হতে পারে।
Object-Oriented Programming (OOP) হল একটি প্রোগ্রামিং প্যারাডাইম যা ক্লাস এবং অবজেক্টের ভিত্তিতে ডিজাইন করা হয়। এটি বাস্তব জগতের অবজেক্টগুলির প্রতিনিধিত্ব করে এবং ডেটা ও কার্যক্রমকে সংগঠিত করার একটি কার্যকরী উপায় প্রদান করে। OOP-এর মূল ধারণাগুলি নিচে আলোচনা করা হলো।
1. Classes (ক্লাস)
ক্লাস হল একটি ব্লুপ্রিন্ট বা টেমপ্লেট যা অবজেক্ট তৈরি করতে ব্যবহৃত হয়। এটি ডেটা (প্রপার্টি) এবং কার্যক্রম (মেথড) ধারণ করে। ক্লাসের মাধ্যমে আপনি একই ধরনের অবজেক্টগুলির একটি গ্রুপ তৈরি করতে পারেন।
2. Objects (অবজেক্টস)
অবজেক্ট হল ক্লাসের একটি নির্দিষ্ট উদাহরণ। এটি ক্লাসের মধ্যে সংজ্ঞায়িত প্রপার্টি এবং মেথডগুলির একটি বাস্তব প্রতিনিধিত্ব। অবজেক্ট তৈরি করার সময়, আপনি ক্লাসের কনস্ট্রাক্টর ব্যবহার করেন।
3. Encapsulation (এনক্যাপসুলেশন)
এনক্যাপসুলেশন হল একটি মৌলিক OOP ধারণা যা ডেটা এবং কার্যক্রমকে একটি ক্লাসে একত্রিত করে। এটি ডেটাকে বাইরে থেকে অ্যাক্সেস এবং পরিবর্তন করার বিরুদ্ধে সুরক্ষা প্রদান করে। এনক্যাপসুলেশন মূলত প্রাইভেট এবং পাবলিক অ্যাক্সেস মডিফায়ার ব্যবহার করে ডেটা সুরক্ষা নিশ্চিত করে।
4. Inheritance (ইনহেরিট্যান্স)
Inheritance হল একটি প্রক্রিয়া যার মাধ্যমে একটি ক্লাস অন্য ক্লাসের বৈশিষ্ট্যগুলি গ্রহণ করে। এর ফলে কোড পুনঃব্যবহার সম্ভব হয় এবং নতুন ক্লাস তৈরি করার সময় পূর্ববর্তী ক্লাসের বৈশিষ্ট্যগুলি ব্যবহার করা যায়।
উদাহরণ:
class Animal {
void speak() {
print("Animal speaks");
}
}
class Dog extends Animal {
@override
void speak() {
print("Dog barks");
}
}
5. Polymorphism (পলিমরফিজম)
Polymorphism হল একটি OOP ধারণা যা একই নামের মেথড বিভিন্ন ক্লাসে ভিন্নভাবে কার্যকর হতে পারে। এটি কোডের নমনীয়তা বাড়ায় এবং একাধিক ক্লাসে সাধারণ কার্যক্রমকে সংজ্ঞায়িত করার সুযোগ দেয়।
উদাহরণ:
void makeSound(Animal animal) {
animal.speak(); // বিভিন্ন প্রাণী ভিন্নভাবে কথা বলবে
}
void main() {
Dog dog = Dog();
makeSound(dog); // Output: Dog barks
}
6. Abstraction (অ্যাবস্ট্রাকশন)
Abstraction হল তথ্যের গুরুত্বপূর্ণ দিকগুলি তুলে ধরার প্রক্রিয়া এবং অপ্রয়োজনীয় তথ্যগুলো লুকিয়ে রাখার জন্য ব্যবহৃত হয়। এটি ক্লাস এবং অবজেক্টগুলির মাধ্যমে বাস্তবায়িত হয়।
উদাহরণ:
abstract class Shape {
void draw(); // abstract method
}
class Circle extends Shape {
@override
void draw() {
print("Drawing a circle");
}
}
Dart প্রোগ্রামিং ভাষায় Class ডিক্লারেশন এবং Constructor হল অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের (OOP) মূল উপাদান। নিচে এই দুটি ধারণার বিস্তারিত আলোচনা করা হলো।
1. Class ডিক্লারেশন
Class হল একটি ব্লুপ্রিন্ট বা টেমপ্লেট যা অবজেক্ট তৈরি করতে ব্যবহৃত হয়। ক্লাসে সাধারণত প্রপার্টি (attributes) এবং মেথড (methods) থাকে। ক্লাস ডিক্লারেশনটি class কিওয়ার্ড ব্যবহার করে করা হয়।
সিনট্যাক্স:
class ClassName {
// Properties
dataType propertyName;
// Method
void methodName() {
// method body
}
}
উদাহরণ:
class Car {
String brand; // Property
int year; // Property
// Constructor
Car(this.brand, this.year); // Constructor to initialize properties
// Method
void displayInfo() {
print("Brand: $brand, Year: $year");
}
}
2. Constructor
Constructor হল একটি বিশেষ ধরনের মেথড যা ক্লাসের অবজেক্ট তৈরি করার সময় স্বয়ংক্রিয়ভাবে কল হয়। এটি অবজেক্টের প্রপার্টিগুলি প্রাথমিকভাবে সেট করতে ব্যবহৃত হয়। Dart এ, কনস্ট্রাক্টর সাধারণত ক্লাসের নামের সাথে মিলে যায়।
সিনট্যাক্স:
ClassName(parameters) {
// Initialization code
}
বিভিন্ন ধরনের কনস্ট্রাক্টর:
Default Constructor: এটি কোন আর্গুমেন্ট গ্রহণ না করে। ক্লাসের প্যারামিটার সেট করতে ব্যবহার করা হয়।
class Person {
String name;
int age;
// Default constructor
Person() {
name = 'Unknown';
age = 0;
}
}Parameterized Constructor: এটি এক বা একাধিক আর্গুমেন্ট গ্রহণ করে।
class Person {
String name;
int age;
// Parameterized constructor
Person(this.name, this.age);
}Named Constructor: এটি নির্দিষ্ট নাম দিয়ে কনস্ট্রাক্টর তৈরি করতে পারে, যা ক্লাসের একাধিক কনস্ট্রাক্টর থাকতে পারে।
class Person {
String name;
int age;
// Named constructor
Person.named(this.name, this.age);
}উদাহরণ:
void main() {
// Using parameterized constructor
Car myCar = Car('Toyota', 2020);
myCar.displayInfo(); // Output: Brand: Toyota, Year: 2020
// Using default constructor
Person person = Person(); // Assuming default constructor initializes name and age
print("Name: ${person.name}, Age: ${person.age}"); // Output: Name: Unknown, Age: 0
}
Dart প্রোগ্রামিং ভাষায় Fields (ফিল্ডস) এবং Methods (মেথডস) ক্লাসের গুরুত্বপূর্ণ উপাদান। ফিল্ডস হল ক্লাসের বৈশিষ্ট্য এবং মেথডস হল ক্লাসের কার্যক্রম। নিচে ফিল্ডস এবং মেথডস এর ধারণা, ব্যবহার এবং উদাহরণসহ বিস্তারিত আলোচনা করা হলো।
1. Fields (ফিল্ডস)
Fields হল ক্লাসের ভেরিয়েবল যা অবজেক্টের স্টেট বা তথ্য সংরক্ষণ করে। ফিল্ডস সাধারণত ডেটা টাইপের সাথে ঘোষণা করা হয় এবং ক্লাসের বাইরে থেকে অ্যাক্সেস করা যায় (যদি তারা পাবলিক হয়)।
উদাহরণ:
class Person {
String name; // Field
int age; // Field
// Constructor
Person(this.name, this.age);
}
ফিল্ডসের ব্যবহার:
void main() {
Person person = Person('Alice', 30);
print("Name: ${person.name}"); // Output: Name: Alice
print("Age: ${person.age}"); // Output: Age: 30
}
2. Methods (মেথডস)
Methods হল ক্লাসের ফাংশন যা ক্লাসের ফিল্ডসকে প্রক্রিয়া করতে পারে। মেথডস ক্লাসের কার্যক্রম বা আচরণ নির্দেশ করে।
উদাহরণ:
class Person {
String name; // Field
int age; // Field
// Constructor
Person(this.name, this.age);
// Method to display person details
void displayInfo() {
print("Name: $name, Age: $age");
}
}
মেথডসের ব্যবহার:
void main() {
Person person = Person('Alice', 30);
person.displayInfo(); // Output: Name: Alice, Age: 30
}
3. Fields এবং Methods এর সাথে একত্রিত ব্যবহার
Fields এবং Methods একত্রে ব্যবহার করে আপনি একটি ক্লাসের সম্পূর্ণ কার্যকারিতা তৈরি করতে পারেন।
উদাহরণ:
class Rectangle {
double length; // Field
double width; // Field
// Constructor
Rectangle(this.length, this.width);
// Method to calculate area
double calculateArea() {
return length * width; // Method
}
// Method to display dimensions
void displayDimensions() {
print("Length: $length, Width: $width, Area: ${calculateArea()}");
}
}
void main() {
Rectangle rect = Rectangle(10.0, 5.0);
rect.displayDimensions(); // Output: Length: 10.0, Width: 5.0, Area: 50.0
}
Getters এবং Setters হল ক্লাসের ফিল্ডগুলির জন্য নির্দিষ্ট ভাবে অ্যাক্সেস এবং মান সেট করার পদ্ধতি। এগুলি ডেটা কিভাবে অ্যাক্সেস এবং পরিবর্তন করা হবে তা নিয়ন্ত্রণ করে, যা এনক্যাপসুলেশন (encapsulation) বজায় রাখতে সহায়ক।
1. Getter
Getter হল একটি মেথড যা একটি ফিল্ডের মানকে ফেরত দেয়। এটি সাধারণত get কিওয়ার্ড ব্যবহার করে ডিফাইন করা হয়। Getter ব্যবহার করে আপনি ফিল্ডগুলির মানকে নিরাপদে অ্যাক্সেস করতে পারেন।
উদাহরণ:
class Person {
String _name; // Private field
Person(this._name); // Constructor
// Getter for _name
String get name => _name; // Returns the value of _name
}
void main() {
Person person = Person('Alice');
print(person.name); // Output: Alice
}
2. Setter
Setter হল একটি মেথড যা একটি ফিল্ডের মান সেট করে। এটি সাধারণত set কিওয়ার্ড ব্যবহার করে ডিফাইন করা হয়। Setter ব্যবহার করে আপনি ফিল্ডগুলির মান পরিবর্তন করতে পারেন এবং এটি যাচাই করতে পারেন।
উদাহরণ:
class Person {
String _name; // Private field
Person(this._name); // Constructor
// Getter for _name
String get name => _name; // Returns the value of _name
// Setter for _name
set name(String newName) {
if (newName.isNotEmpty) {
_name = newName; // Sets the value of _name
} else {
print("Name cannot be empty.");
}
}
}
void main() {
Person person = Person('Alice');
print(person.name); // Output: Alice
person.name = 'Bob'; // Using setter
print(person.name); // Output: Bob
person.name = ''; // Trying to set an empty name
// Output: Name cannot be empty.
}
Read more