Inheritance (ইনহেরিটেন্স)

ডার্ট প্রোগ্রামিং (Dart Programming) - Computer Programming

414

Inheritance (ইনহেরিটেন্স) হল একটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) ধারণা যা একটি ক্লাসকে অন্য ক্লাসের বৈশিষ্ট্য এবং আচরণ গ্রহণ করতে সক্ষম করে। এটি কোড পুনঃব্যবহারকে উন্নত করে এবং নতুন ক্লাস তৈরি করার সময় বিদ্যমান ক্লাসের বৈশিষ্ট্যগুলি ব্যবহার করতে দেয়। Dart এ ইনহেরিটেন্সকে extends কিওয়ার্ড ব্যবহার করে বাস্তবায়িত করা হয়।


1. Inheritance এর মূল ধারণা

  • Super Class (Parent Class): যাকে থেকে বৈশিষ্ট্যগুলি অর্জিত হয়, তাকে সুপার ক্লাস বা প্যারেন্ট ক্লাস বলা হয়।
  • Sub Class (Child Class): যেটি বৈশিষ্ট্যগুলি অর্জন করে, তাকে সাব ক্লাস বা চাইল্ড ক্লাস বলা হয়।

2. Inheritance এর উদাহরণ

ধরি, আমাদের একটি Animal ক্লাস আছে, এবং আমরা একটি Dog ক্লাস তৈরি করতে চাই যা Animal ক্লাসের বৈশিষ্ট্য এবং আচরণ গ্রহণ করবে।

সুপার ক্লাস (Super Class):

class Animal {
  String name; // Property

  Animal(this.name); // Constructor

  void speak() {
    print("$name makes a sound."); // Method
  }
}

সাব ক্লাস (Sub Class):

class Dog extends Animal { // Inheriting from Animal
  Dog(String name) : super(name); // Calling the superclass constructor

  @override
  void speak() {
    print("$name barks."); // Overriding the method
  }
}

3. Inheritance এর ব্যবহার

void main() {
  Dog dog = Dog('Buddy'); // Creating an instance of Dog
  dog.speak(); // Output: Buddy barks.

  Animal animal = Animal('Generic Animal');
  animal.speak(); // Output: Generic Animal makes a sound.
}

4. Multiple Inheritance

Dart সরাসরি মাল্টিপল ইনহেরিটেন্স সমর্থন করে না, কিন্তু আপনি ইন্টারফেস ব্যবহার করে এই সীমাবদ্ধতা অতিক্রম করতে পারেন।

উদাহরণ:

abstract class Swimmable {
  void swim();
}

class Fish extends Animal implements Swimmable { // Implementing multiple interfaces
  Fish(String name) : super(name);

  @override
  void swim() {
    print("$name swims.");
  }
}

5. Overriding Methods

সাব ক্লাসের মেথড সুপার ক্লাসের মেথডকে পুনরায় সংজ্ঞায়িত করতে পারে, যা পলিমরফিজমের একটি উদাহরণ।

class Cat extends Animal {
  Cat(String name) : super(name);

  @override
  void speak() {
    print("$name meows."); // Overriding the method
  }
}

void main() {
  Cat cat = Cat('Whiskers');
  cat.speak(); // Output: Whiskers meows.
}
Content added By

Inheritance (ইনহেরিটেন্স) হল একটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) ধারণা যা একটি ক্লাসকে অন্য ক্লাসের বৈশিষ্ট্য এবং আচরণ গ্রহণ করার ক্ষমতা প্রদান করে। এটি কোড পুনঃব্যবহার এবং সফটওয়্যার স্থাপনার সহজতর করার জন্য ব্যবহৃত হয়। নিম্নলিখিত পয়েন্টগুলি ইনহেরিটেন্সের মৌলিক ধারণাগুলি তুলে ধরে:


1. Super Class (Parent Class)

  • সুপার ক্লাস বা প্যারেন্ট ক্লাস হল সেই ক্লাস যা থেকে বৈশিষ্ট্যগুলি অর্জিত হয়।
  • এটি সাধারণভাবে সাধারণ বৈশিষ্ট্য এবং আচরণ ধারণ করে যা সাব ক্লাসে প্রযোজ্য।

2. Sub Class (Child Class)

  • সাব ক্লাস বা চাইল্ড ক্লাস হল সেই ক্লাস যা সুপার ক্লাস থেকে বৈশিষ্ট্য এবং আচরণ গ্রহণ করে।
  • সাব ক্লাসে অতিরিক্ত বৈশিষ্ট্য এবং মেথড যুক্ত করা যেতে পারে।

3. Code Reusability (কোড পুনঃব্যবহার)

  • ইনহেরিটেন্সের মাধ্যমে আপনি একই কোড আবার লিখতে হয় না। সাব ক্লাস সুপার ক্লাসের বৈশিষ্ট্যগুলি ব্যবহার করতে পারে, যা কোডকে আরও সংগঠিত এবং কার্যকর করে।

4. Method Overriding (মেথড ওভাররাইডিং)

  • সাব ক্লাস সুপার ক্লাসের মেথডকে পুনরায় সংজ্ঞায়িত করতে পারে, যার ফলে বিভিন্ন ক্লাসে একই নামের মেথড ভিন্নভাবে কাজ করতে পারে। এটি পলিমরফিজমের অংশ।

5. Is-A Relationship (Is-A সম্পর্ক)

  • ইনহেরিটেন্সে সাব ক্লাস এবং সুপার ক্লাসের মধ্যে একটি "Is-A" সম্পর্ক থাকে। অর্থাৎ, সাব ক্লাসটি সুপার ক্লাসের একটি বিশেষ ধরনের। যেমন:
    • একটি Dog ক্লাস একটি Animal ক্লাসের একটি বিশেষ ধরনের।

6. Single Inheritance vs Multiple Inheritance

  • Single Inheritance: একটি সাব ক্লাস একক সুপার ক্লাস থেকে বৈশিষ্ট্য গ্রহণ করে।
  • Multiple Inheritance: একটি সাব ক্লাস একাধিক সুপার ক্লাস থেকে বৈশিষ্ট্য গ্রহণ করতে পারে। (Dart সরাসরি মাল্টিপল ইনহেরিটেন্স সমর্থন করে না, তবে ইন্টারফেস ব্যবহার করে এটি সম্ভব হয়।)

উদাহরণ

সুপার ক্লাস (Animal):

class Animal {
  void speak() {
    print("Animal speaks");
  }
}

সাব ক্লাস (Dog):

class Dog extends Animal {
  @override
  void speak() {
    print("Dog barks");
  }
}

ব্যবহার:

void main() {
  Dog dog = Dog();
  dog.speak(); // Output: Dog barks
}
Content added By

Parent Class (সুপার ক্লাস) এবং Child Class (সাব ক্লাস) ব্যবহার করে আপনি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) এর বৈশিষ্ট্যগুলি ব্যবহার করে কোড পুনঃব্যবহার এবং সংগঠনের সুবিধা পেতে পারেন। নিচে Parent এবং Child Class এর ব্যবহার এবং উদাহরণসহ আলোচনা করা হলো।

. Parent Class (সুপার ক্লাস)

Parent Class হল একটি ক্লাস যা অন্যান্য ক্লাসকে বৈশিষ্ট্য এবং আচরণ প্রদান করে। এটি সাধারণ বৈশিষ্ট্য এবং মেথড ধারণ করে।

উদাহরণ:

class Product {
 String name;
 double price;
 Product(this.name, this.price); // Constructor
 void displayDetails() {
   print("Product Name: $name");
   print("Price: \$${price.toStringAsFixed(2)}");
 }
}

 

 

Child Class (সাব ক্লাস)

Child Class হল একটি ক্লাস যা Parent Class থেকে বৈশিষ্ট্য এবং আচরণ অর্জন করে। এটি Parent Class এর মেথডগুলোকে ওভাররাইড (override) করে নতুনভাবে সংজ্ঞায়িত করতে পারে।

উদাহরণ:

class Electronics extends Product {
 int warranty; // Warranty in months
 Electronics(String name, double price, this.warranty) : super(name, price); // Constructor
 @override
 void displayDetails() {
   super.displayDetails(); // Call the parent method
   print("Warranty: $warranty months");
 }
}
class Clothing extends Product {
 String size; // Size of the clothing item
 Clothing(String name, double price, this.size) : super(name, price); // Constructor
 @override
 void displayDetails() {
   super.displayDetails();
   print("Size: $size");
 }
}
class Furniture extends Product {
 String material; // Material of the furniture
 Furniture(String name, double price, this.material) : super(name, price); // Constructor
 @override
 void displayDetails() {
   super.displayDetails();
   print("Material: $material");
 }
}

Parent এবং Child Class এর ব্যবহার

void main() {
 // Create instances of each product type
 Product laptop = Electronics("Laptop", 999.99, 24);
 Product shirt = Clothing("T-Shirt", 19.99, "M");
 Product chair = Furniture("Dining Chair", 89.99, "Wood");
 // Store products in a list
 List<Product> products = [laptop, shirt, chair];
 // Display details of each product
 for (var product in products) {
   product.displayDetails();
   print('---------------------'); // Separator
 }
}

Multiple Child Classes

একটি Parent Class থেকে একাধিক Child Class তৈরি করা সম্ভব। এটি বিভিন্ন ধরনের অবজেক্ট তৈরিতে সাহায্য করে।

উদাহরণ:

// Parent Class
class Animal {
 String name;
 Animal(this.name);
 String makeSound() {
   return "Animal sound";
 }
 String getName() {
   return name;
 }
}
// Child Class: Dog
class Dog extends Animal {
 Dog(String name) : super(name);
 @override
 String makeSound() {
   return "Bark";
 }
}
// Child Class: Cat
class Cat extends Animal {
 Cat(String name) : super(name);
 @override
 String makeSound() {
   return "Meow";
 }
}
// Child Class: Cow
class Cow extends Animal {
 Cow(String name) : super(name);
 @override
 String makeSound() {
   return "Moo";
 }
}
void main() {
 // Object Creation
 var dog = Dog("Buddy");
 var cat = Cat("Whiskers");
 var cow = Cow("Bessie");
 // Method Calling
 print('${dog.getName()} says ${dog.makeSound()}'); // Output: Buddy says Bark
 print('${cat.getName()} says ${cat.makeSound()}'); // Output: Whiskers says Meow
 print('${cow.getName()} says ${cow.makeSound()}'); // Output: Bessie says Moo
}

ব্যাখ্যা:

  • Parent Class (Animal): এখানে Animal ক্লাসটি একটি সাধারণ অবজেক্ট তৈরি করে যা একটি নাম গ্রহণ করে এবং একটি সাধারণ শব্দ তৈরি করে।
  • Child Classes (Dog, Cat, Cow): এখানে Dog, Cat, এবং Cow ক্লাসগুলি Animal ক্লাস থেকে উত্তরাধিকার সূত্রে প্রাপ্ত। তারা তাদের নিজস্ব শব্দ তৈরি করে makeSound মেথডের মাধ্যমে।
  • অবজেক্ট তৈরি এবং মেথড কল: প্রতিটি Child Class এর একটি অবজেক্ট তৈরি করা হয়েছে এবং তাদের মেথডগুলি কল করা হয়েছে।

এভাবে, Parent Class এর থেকে একাধিক Child Class তৈরি করে বিভিন্ন ধরনের অবজেক্ট তৈরি করা যায়।

Content added By

Method Overriding এবং Super Constructor হল অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের (OOP) দুটি গুরুত্বপূর্ণ ধারণা। এগুলি ইনহেরিটেন্সের সাথে যুক্ত এবং একটি সাব ক্লাসকে সুপার ক্লাসের বৈশিষ্ট্য ও আচরণ পরিবর্তন করার সুযোগ দেয়। নিচে বিস্তারিত আলোচনা করা হলো।

1. Method Overriding

Method Overriding হল একটি প্রক্রিয়া যেখানে সাব ক্লাসে সুপার ক্লাসের একটি মেথডের পুনরায় সংজ্ঞায়িত করা হয়। এটি পলিমরফিজমের একটি উদাহরণ এবং এটি সাব ক্লাসের নির্দিষ্ট আচরণ তৈরি করতে ব্যবহৃত হয়।

উদাহরণ:

class Animal {
 void speak() {
   print("Animal makes a sound.");
 }
}
class Dog extends Animal {
 @override
 void speak() {
   print("Dog barks."); // Overriding the speak method
 }
}
class Cat extends Animal {
 @override
 void speak() {
   print("Cat meows."); // Overriding the speak method
 }
}
void main() {
 Animal myDog = Dog();
 Animal myCat = Cat();
 myDog.speak(); // Output: Dog barks.
 myCat.speak(); // Output: Cat meows.
}

2. Super Constructor

Super Constructor হল একটি মেথড যা সাব ক্লাসের কনস্ট্রাক্টরে সুপার ক্লাসের কনস্ট্রাক্টরকে কল করার জন্য ব্যবহৃত হয়। এটি ইনহেরিটেড বৈশিষ্ট্যগুলির প্রাথমিক মান সেট করতে সাহায্য করে।

উদাহরণ:

class Animal {
 String name;
 // Super constructor
 Animal(this.name); // Constructor with a parameter
 void displayInfo() {
   print("Animal Name: $name");
 }
}
class Dog extends Animal {
 // Subclass constructor
 Dog(String name) : super(name); // Calling the super constructor
 void bark() {
   print("$name barks.");
 }
}
void main() {
 Dog myDog = Dog('Buddy'); // Creating an instance of Dog
 myDog.displayInfo(); // Output: Animal Name: Buddy
 myDog.bark(); // Output: Buddy barks.
}

Combining Method Overriding and Super Constructor

উদাহরণ:

class Animal {
 String name;
 Animal(this.name); // Super constructor
 void speak() {
   print("$name makes a sound.");
 }
}
class Dog extends Animal {
 Dog(String name) : super(name); // Calling the super constructor
 @override
 void speak() {
   print("$name barks."); // Overriding the speak method
 }
}
class Cat extends Animal {
 Cat(String name) : super(name); // Calling the super constructor
 @override
 void speak() {
   print("$name meows."); // Overriding the speak method
 }
}
void main() {
 Animal myDog = Dog('Buddy');
 Animal myCat = Cat('Whiskers');
 myDog.speak(); // Output: Buddy barks.
 myCat.speak(); // Output: Whiskers meows.
}
Content added By

Abstract Class এবং Interface হল অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের (OOP) দুটি গুরুত্বপূর্ণ ধারণা। এগুলি সফটওয়্যার ডিজাইনে নমনীয়তা এবং পুনঃব্যবহারযোগ্যতা বাড়াতে সহায়ক। নিচে প্রতিটির ব্যবহার এবং উদাহরণ সহ বিস্তারিত আলোচনা করা হলো।


1. Abstract Class

Abstract Class একটি ক্লাস যা এক বা একাধিক অ্যাবস্ট্রাক্ট মেথড (abstract methods) ধারণ করে। অ্যাবস্ট্রাক্ট মেথডগুলি এমন মেথড যা সুপার ক্লাসে সংজ্ঞায়িত করা হয় কিন্তু সাব ক্লাসে অবশ্যই প্রয়োগ করতে হয়। এটি সাব ক্লাসের জন্য একটি ব্লুপ্রিন্ট হিসেবে কাজ করে।

উদাহরণ:

abstract class Animal {
  String name;

  Animal(this.name); // Constructor

  // Abstract method
  void speak(); // No implementation, must be implemented by subclasses
}

class Dog extends Animal {
  Dog(String name) : super(name); // Calling super constructor

  @override
  void speak() {
    print("$name barks.");
  }
}

class Cat extends Animal {
  Cat(String name) : super(name); // Calling super constructor

  @override
  void speak() {
    print("$name meows.");
  }
}

void main() {
  Animal myDog = Dog('Buddy');
  Animal myCat = Cat('Whiskers');

  myDog.speak(); // Output: Buddy barks.
  myCat.speak(); // Output: Whiskers meows.
}

2. Interface

Dart এ একটি ক্লাস স্বাভাবিকভাবে একটি ইন্টারফেস হিসেবে কাজ করে। এটি শুধুমাত্র মেথড ঘোষণা করতে পারে এবং কোনো ডেটা বা কনস্ট্রাক্টর থাকতে পারে না। ইন্টারফেস ব্যবহার করে আপনি বিভিন্ন ক্লাসের মধ্যে সাধারণ আচরণ সংজ্ঞায়িত করতে পারেন।

উদাহরণ:

// Defining an interface
class CanFly {
  void fly(); // Abstract method
}

class Bird implements CanFly {
  String name;

  Bird(this.name);

  @override
  void fly() {
    print("$name is flying.");
  }
}

class Airplane implements CanFly {
  String model;

  Airplane(this.model);

  @override
  void fly() {
    print("$model is flying.");
  }
}

void main() {
  CanFly myBird = Bird('Sparrow');
  CanFly myPlane = Airplane('Boeing 747');

  myBird.fly(); // Output: Sparrow is flying.
  myPlane.fly(); // Output: Boeing 747 is flying.
}

3. Key Differences between Abstract Classes and Interfaces

FeatureAbstract ClassInterface
ImplementationCan provide default implementationCannot provide implementation
InheritanceA class can extend only one abstract classA class can implement multiple interfaces
ConstructorCan have constructorsCannot have constructors
Member TypesCan have fields, methods, and getters/settersOnly method declarations
Use CaseWhen you want to provide common base functionalityWhen you want to enforce a contract
Content added By
Promotion

Are you sure to start over?

Loading...