Classes এবং Inheritance

জাভাস্ক্রিপ্ট ইএস৬ (ES6) - Web Development

404

Classes এবং Inheritance ES6 (ECMAScript 2015) এর একটি গুরুত্বপূর্ণ ফিচার, যা JavaScript-কে আরও অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) ধারণার কাছাকাছি নিয়ে আসে। এই ফিচারগুলির মাধ্যমে, আপনি ক্লাস তৈরি করতে পারেন, যেগুলোর মধ্যে প্রোপার্টি এবং মেথড থাকবে, এবং ইনহেরিটেন্স (Inheritance) ব্যবহার করে একটি ক্লাস থেকে অন্য ক্লাসের প্রোপার্টি এবং মেথড গ্রহণ করতে পারবেন।


1. Classes: ক্লাসের পরিচিতি

JavaScript-এ Class একটি টেমপ্লেট বা ব্লুপ্রিন্ট হিসেবে কাজ করে, যেটির মাধ্যমে আপনি অবজেক্ট তৈরি করতে পারেন। ক্লাসে সাধারণত constructor (কনস্ট্রাকটর), properties (প্রোপার্টি), এবং methods (মেথড) থাকে।

Class ডিফাইন করা

class Person {
  // Constructor: ক্লাসের প্রাথমিক অবস্থা নির্ধারণ
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  // Method: ক্লাসের একটি ফাংশন
  greet() {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
  }
}

// ক্লাস থেকে অবজেক্ট তৈরি করা
const person1 = new Person("John", 30);
person1.greet();  // "Hello, my name is John and I am 30 years old."

এখানে, Person ক্লাসটি দুটি প্রপার্টি (name এবং age) এবং একটি মেথড (greet) ধারণ করে। constructor মেথডটি ক্লাসের ইনস্ট্যান্স তৈরির সময় কল হয় এবং ইনস্ট্যান্সের প্রাথমিক মান নির্ধারণ করে।


2. Inheritance: ইনহেরিটেন্স

Inheritance হলো একটি ক্লাসের প্রোপার্টি এবং মেথড অন্য একটি ক্লাসের দ্বারা গ্রহণ করা। ES6-এ, extends কিওয়ার্ড ব্যবহার করে একটি ক্লাস অন্য ক্লাস থেকে ইনহেরিট করতে পারে।

Inheritance এর মাধ্যমে সাবক্লাস তৈরি করা

// Base class
class Animal {
  constructor(name) {
    this.name = name;
  }

  speak() {
    console.log(`${this.name} makes a sound.`);
  }
}

// Derived class (Inherits from Animal)
class Dog extends Animal {
  constructor(name, breed) {
    super(name);  // Parent class constructor কে কল করা
    this.breed = breed;
  }

  speak() {
    console.log(`${this.name} barks.`);
  }
}

// অবজেক্ট তৈরি করা
const dog1 = new Dog("Rex", "German Shepherd");
dog1.speak();  // "Rex barks."

এখানে, Dog ক্লাস Animal ক্লাস থেকে ইনহেরিট করেছে এবং speak মেথডটি ওভাররাইড করেছে। super(name) কিওয়ার্ডের মাধ্যমে, Dog ক্লাস Animal ক্লাসের কনস্ট্রাকটর মেথডকে কল করে প্যারেন্ট ক্লাসের প্রপার্টি ইনিশিয়ালাইজ করছে।


3. Constructor এবং super()

  • super(): যখন আপনি একটি সাবক্লাস (derived class) তৈরি করেন এবং প্যারেন্ট ক্লাসের কনস্ট্রাকটর মেথডকে কল করতে চান, তখন super() ব্যবহার করতে হয়। এটি প্যারেন্ট ক্লাসের কনস্ট্রাকটর মেথডকে কল করে ইনহেরিট করা প্রপার্টিগুলি সেট করতে সহায়তা করে।

Example: Constructor with super()

class Vehicle {
  constructor(make, model) {
    this.make = make;
    this.model = model;
  }

  displayInfo() {
    console.log(`This is a ${this.make} ${this.model}.`);
  }
}

class Car extends Vehicle {
  constructor(make, model, doors) {
    super(make, model);  // প্যারেন্ট ক্লাসের কনস্ট্রাকটর মেথড কল করা
    this.doors = doors;
  }

  displayInfo() {
    super.displayInfo();  // প্যারেন্ট ক্লাসের মেথড কল করা
    console.log(`It has ${this.doors} doors.`);
  }
}

const car1 = new Car("Toyota", "Corolla", 4);
car1.displayInfo();
// Output:
// "This is a Toyota Corolla."
// "It has 4 doors."

এখানে, Car ক্লাস Vehicle ক্লাস থেকে ইনহেরিট করছে এবং তার মেথড ও প্রোপার্টি গ্রহণ করেছে। super(displayInfo()) ব্যবহার করে প্যারেন্ট ক্লাসের displayInfo মেথডটিকে কল করা হয়েছে।


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

যখন একটি সাবক্লাস (derived class) তার প্যারেন্ট ক্লাসের (base class) মেথডকে পুনরায় সংজ্ঞায়িত করে, তখন তাকে method overriding বলা হয়। এটি প্যারেন্ট ক্লাসের মেথডকে নতুনভাবে ডিফাইন করার প্রক্রিয়া।

Example: Method Overriding

class Animal {
  speak() {
    console.log("Animal makes a sound");
  }
}

class Dog extends Animal {
  speak() {
    console.log("Dog barks");
  }
}

const dog = new Dog();
dog.speak();  // "Dog barks"

এখানে, Dog ক্লাস speak() মেথডটি Animal ক্লাসের speak() মেথডকে ওভাররাইড করেছে।


5. Class Methods এবং Getter/Setter

ES6-এ আপনি ক্লাসে getter এবং setter মেথডও ব্যবহার করতে পারেন, যা ক্লাসের প্রোপার্টির মান পেতে এবং সেট করতে সাহায্য করে।

Example: Getter and Setter Methods

class Person {
  constructor(name, age) {
    this._name = name;
    this._age = age;
  }

  get name() {
    return this._name;
  }

  set name(newName) {
    this._name = newName;
  }

  get age() {
    return this._age;
  }

  set age(newAge) {
    if (newAge > 0) {
      this._age = newAge;
    } else {
      console.log("Age must be positive.");
    }
  }
}

const person1 = new Person("John", 30);
console.log(person1.name);  // "John"
person1.age = 35;
console.log(person1.age);  // 35

এখানে, get এবং set কিওয়ার্ড ব্যবহার করে name এবং age প্রোপার্টির জন্য getter এবং setter মেথড তৈরি করা হয়েছে।


সারাংশ

Classes এবং Inheritance ES6-এ অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ধারণার সমর্থন করে, যেখানে আপনি ক্লাস তৈরি করতে পারেন, তার প্রোপার্টি এবং মেথড ডিফাইন করতে পারেন, এবং এক ক্লাস থেকে অন্য ক্লাসের প্রোপার্টি ও মেথড ইনহেরিট করতে পারেন। এই ফিচারগুলোর মাধ্যমে কোড আরও সংগঠিত এবং পুনঃব্যবহারযোগ্য করা সম্ভব হয়।

Content added By

ES6 Classes হল ECMAScript 2015 (ES6) এর একটি নতুন ফিচার যা JavaScript এ ক্লাস ভিত্তিক (class-based) অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (OOP) সাপোর্ট প্রদান করে। এটি আগের prototype-based ইনহেরিটেন্স মডেলকে সহজতর এবং আরও পরিষ্কারভাবে উপস্থাপন করার সুযোগ দেয়। ES6 ক্লাস ব্যবহার করার মাধ্যমে কোড আরও পড়তে এবং রক্ষণাবেক্ষণ (maintenance) করতে সহজ হয়, এবং আপনি অবজেক্ট ওরিয়েন্টেড প্যাটার্নের সুবিধা পুরোপুরি উপভোগ করতে পারেন।


ES6 Classes এর সিনট্যাক্স

ES6 ক্লাসের সিনট্যাক্স সাধারণ function constructors এর থেকে অনেক বেশি পরিষ্কার এবং সহজ। এটি ক্লাসের কাঠামো ও ইনহেরিটেন্স ব্যবহারকে সহজ করে তোলে।

class ClassName {
  constructor() {
    // constructor body
  }

  methodName() {
    // method body
  }
}

ES6 Classes এর বৈশিষ্ট্য

  1. ক্লাস ডেফিনিশন (Class Definition): ES6 ক্লাস একটি নতুন সাইন্ট্যাক্সের মাধ্যমে একটি অবজেক্ট টেমপ্লেট তৈরি করে, যা আপনি বিভিন্ন ইনস্ট্যান্স তৈরি করতে ব্যবহার করতে পারেন।
  2. Constructor: ক্লাসের ভিতরে একটি constructor মেথড থাকে যা ক্লাসের নতুন ইনস্ট্যান্স তৈরি হওয়ার সময় কল করা হয়। এটি অবজেক্ট ইনিশিয়ালাইজ (initialize) করার জন্য ব্যবহৃত হয়।
  3. Methods: ক্লাসের ভিতরে বিভিন্ন মেথড (function) ডিফাইন করা যায় যা ক্লাসের ইনস্ট্যান্সের সাথে যুক্ত থাকে।
  4. this কীওয়ার্ড: ক্লাসের মধ্যে this ব্যবহার করে সেই ক্লাসের ইনস্ট্যান্সের প্রপার্টি ও মেথডে অ্যাক্সেস করা যায়।
  5. Inheriting Classes (এনহেরিটেন্স): ES6 ক্লাসের মাধ্যমে আপনি এক ক্লাসের বৈশিষ্ট্য অন্য ক্লাসে হেরিট (inherit) করতে পারেন।

ES6 Classes এর উদাহরণ

ক্লাস ডেফিনিশন এবং Constructor:

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  greet() {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
  }
}

const person1 = new Person("John", 30);
person1.greet();  // "Hello, my name is John and I am 30 years old."

এখানে, Person ক্লাসের একটি constructor মেথড রয়েছে যা name এবং age প্রপার্টি ইনিশিয়ালাইজ করে এবং greet মেথড ক্লাসের ইনস্ট্যান্সের সাথে কাজ করে।

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

ES6 ক্লাসের মাধ্যমে একটি ক্লাস অন্য ক্লাস থেকে ইনহেরিট করতে পারে।

class Animal {
  constructor(name) {
    this.name = name;
  }

  speak() {
    console.log(`${this.name} makes a sound.`);
  }
}

class Dog extends Animal {
  constructor(name, breed) {
    super(name);  // Parent class constructor কে কল করা
    this.breed = breed;
  }

  speak() {
    console.log(`${this.name} barks.`);
  }
}

const dog1 = new Dog("Buddy", "Golden Retriever");
dog1.speak();  // "Buddy barks."

এখানে, Dog ক্লাস Animal ক্লাস থেকে ইনহেরিট করেছে। super(name) এর মাধ্যমে Animal ক্লাসের constructor কে কল করা হয়েছে। Dog ক্লাসের speak() মেথড Animal ক্লাসের মেথডকে ওভাররাইড (override) করেছে।


ES6 Classes কেন প্রয়োজন?

  1. পরিষ্কার এবং সুন্দর সিনট্যাক্স: ES6 ক্লাস প্রাচীন prototype-based inheritance এর তুলনায় অনেক পরিষ্কার এবং সহজ। এটি কোড লেখার সময় কমপ্লেক্সিটি কমায় এবং কোডের ধারাবাহিকতা বজায় রাখে।
  2. অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (OOP) প্যাটার্ন: ES6 ক্লাস OOP এর সকল প্রধান বৈশিষ্ট্য (যেমন ইনহেরিটেন্স, এনক্যাপসুলেশন, পলিমরফিজম) সাপোর্ট করে, যা বড় এবং জটিল অ্যাপ্লিকেশনের ক্ষেত্রে কোড ম্যানেজমেন্ট সহজ করে।
  3. ইনহেরিটেন্স: ES6 ক্লাসের মাধ্যমে সহজেই এক ক্লাস থেকে অন্য ক্লাস ইনহেরিট (inherit) করা যায়। এটি কোডের পুনঃব্যবহারযোগ্যতা (reusability) বৃদ্ধি করে।
  4. this এর ব্যবহার সহজতর: ES6 ক্লাসে this কিওয়ার্ডটি পরিষ্কারভাবে কাজ করে এবং এটি সাধারণ ফাংশনের তুলনায় আরও intuitively ব্যবহার করা যায়।
  5. মেথডের সমন্বয় (Method Binding): ES6 ক্লাসে মেথডগুলো সরাসরি ক্লাসের মধ্যে ডিফাইন করা যায়, যা this এর ব্যবহারকে সহজ করে এবং ফাংশন বানানোর সময় অনেক বেশি ফ্লেক্সিবিলিটি দেয়।

ES6 Classes এবং ফাংশন কনস্ট্রাক্টর: পার্থক্য

১. সিনট্যাক্স:

  • ES6 ক্লাসের সিনট্যাক্স অনেক পরিষ্কার এবং সুন্দর, যেখানে ফাংশন কনস্ট্রাক্টরটি প্রাচীন উপায়ে ব্যবহার করা হয়।
  • ES6 ক্লাসে constructor এবং মেথড ডিফাইন করা সহজ হয়, যা ফাংশন কনস্ট্রাক্টরে অতিরিক্ত কোডিংয়ের প্রয়োজন।

২. this এর আচরণ:

  • ES6 ক্লাসের ভিতরে this কিওয়ার্ডটি মেথডে সঠিকভাবে কাজ করে, যা ফাংশন কনস্ট্রাক্টরের তুলনায় কমপ্লেক্স হতে পারে।

৩. Inheriting Classes:

  • ES6 ক্লাসে extends এবং super() কিওয়ার্ড ব্যবহার করে সহজে ইনহেরিটেন্স কার্যকর করা যায়, যা ফাংশন কনস্ট্রাক্টরের মাধ্যমে করার জন্য অতিরিক্ত কোডিং প্রয়োজন।

সারাংশ

ES6 ক্লাস হল JavaScript এর নতুন একটি ফিচার যা অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (OOP) ধারণাকে সহজ এবং কার্যকরভাবে প্রয়োগ করতে সহায়তা করে। এর মাধ্যমে কোডের পাঠযোগ্যতা ও রক্ষণাবেক্ষণ সহজ হয়, এবং ক্লাস ভিত্তিক ইনহেরিটেন্স সুবিধা ব্যবহার করে কোড পুনঃব্যবহারযোগ্যতা বৃদ্ধি পায়।

Content added By

ES6 (ECMAScript 2015) এ Class Syntax যোগ করার মাধ্যমে Object-Oriented Programming (OOP) আরও সহজ এবং পরিষ্কার হয়ে ওঠে। Class একটি ব্লুপ্রিন্ট বা টেমপ্লেট হিসেবে কাজ করে, যা ব্যবহারকারীর জন্য অবজেক্ট তৈরি করার জন্য নিয়ম এবং বৈশিষ্ট্য সংজ্ঞায়িত করে।

Class Syntax এর মৌলিক কাঠামো

Class এর সঠিক সঠিক সিনট্যাক্স এরকম:

class ClassName {
  constructor() {
    // Constructor body
  }
}

Constructor

Constructor হল একটি বিশেষ ধরনের মেথড যা ক্লাসের নতুন ইনস্ট্যান্স (অবজেক্ট) তৈরি করার সময় স্বয়ংক্রিয়ভাবে কল হয়। এটি সাধারণত অবজেক্টের প্রাথমিক ভ্যালু বা অবস্থান সেট করার জন্য ব্যবহৃত হয়। constructor মেথডটি একটি ক্লাসের একমাত্র বিশেষ মেথড, এবং এটি প্যারামিটার গ্রহণ করতে পারে যা ক্লাসের ইনস্ট্যান্স তৈরি করার সময় দেয়া হয়।


Class এবং Constructor এর উদাহরণ

1. একটি সিম্পল ক্লাস তৈরি করা

class Person {
  constructor(name, age) {
    this.name = name;  // Assigning value to property 'name'
    this.age = age;    // Assigning value to property 'age'
  }

  greet() {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
  }
}

const person1 = new Person("John", 30);  // Creating an instance of Person class
person1.greet();  // "Hello, my name is John and I am 30 years old."

এখানে, Person নামক ক্লাসটি একটি constructor মেথড ব্যবহার করে দুটি প্রোপার্টি name এবং age সেট করে। greet মেথডটি সেই প্রোপার্টি ব্যবহার করে একটি শুভেচ্ছা বার্তা প্রদর্শন করে।

2. Constructor এর মাধ্যমে প্রোপার্টি অ্যাসাইন করা

class Car {
  constructor(make, model, year) {
    this.make = make;   // Car make (e.g., Toyota)
    this.model = model; // Car model (e.g., Corolla)
    this.year = year;   // Manufacturing year (e.g., 2020)
  }

  displayInfo() {
    console.log(`${this.year} ${this.make} ${this.model}`);
  }
}

const car1 = new Car("Toyota", "Corolla", 2020);
car1.displayInfo();  // "2020 Toyota Corolla"

এখানে, Car ক্লাসের constructor মেথডটি গাড়ির make, model, এবং year প্রপার্টি ইনিশিয়ালাইজ করছে। নতুন অবজেক্ট car1 তৈরি করে displayInfo() মেথড কল করা হচ্ছে।

3. ক্লাসের প্রোপার্টি এবং মেথড

class Animal {
  constructor(name, type) {
    this.name = name;
    this.type = type;
  }

  speak() {
    console.log(`${this.name} makes a sound.`);
  }
}

const dog = new Animal("Dog", "Mammal");
dog.speak();  // "Dog makes a sound."

এখানে, Animal ক্লাসের speak মেথডটি কোনও নির্দিষ্ট ধরণের প্রাণীকে কল করলে সেই প্রাণী শব্দ করবে বলে প্রস্তাব করছে।


ক্লাসের উন্নত ব্যবহার: Inheritance

ES6 ক্লাসে Inheritance (উত্তরাধিকার) সুবিধা রয়েছে, যার মাধ্যমে একটি ক্লাস অন্য ক্লাস থেকে বৈশিষ্ট্য ও মেথড উত্তরাধিকারসূত্রে গ্রহণ করতে পারে।

উদাহরণ: Inheritance ব্যবহার

class Animal {
  constructor(name) {
    this.name = name;
  }

  speak() {
    console.log(`${this.name} makes a sound.`);
  }
}

class Dog extends Animal {  // Dog class extends Animal class
  constructor(name, breed) {
    super(name);  // Call the parent class's constructor
    this.breed = breed;  // New property specific to Dog
  }

  speak() {
    console.log(`${this.name} barks.`);
  }
}

const myDog = new Dog("Buddy", "Golden Retriever");
myDog.speak();  // "Buddy barks."

এখানে, Dog ক্লাস Animal ক্লাসকে extends করে। super() মেথড ব্যবহার করে আমরা প্যারেন্ট ক্লাসের constructor কল করেছি এবং তারপরে নতুন প্রপার্টি breed যোগ করেছি। speak() মেথডটি ওভাররাইড করা হয়েছে যাতে এটি নির্দিষ্টভাবে কুকুরের জন্য “barks” মেসেজ দেয়।


সারাংশ

Class Syntax ES6 এর মাধ্যমে ক্লাস ভিত্তিক প্রোগ্রামিং আরও সহজ এবং পরিচিত হয়ে ওঠে। Constructor মেথডের সাহায্যে ইনস্ট্যান্স তৈরি করার সময় প্রোপার্টি অ্যাসাইন করা হয়। একাধিক ক্লাস, ইনহেরিটেন্স, এবং মেথড ব্যবহার করে বড়ো অ্যাপ্লিকেশন তৈরি করা সহজ হয়।

Content added By

ES6 (ECMAScript 2015) এ method, getter, এবং setter এর ব্যবহার জাভাস্ক্রিপ্টের ক্লাসগুলিকে আরও শক্তিশালী এবং উপযোগী করেছে। এগুলি Object-Oriented Programming (OOP) স্টাইলের প্রোগ্রামিংয়ে কাজ করার সময় কার্যকরী হয়। এখানে আমরা method, getter, এবং setter এর ব্যবহার এবং তাদের মধ্যে পার্থক্য বুঝে দেখব।


Method in ES6 Classes

Method হলো ফাংশন যা ক্লাসের মধ্যে ডিফাইন করা হয়। এগুলি সাধারণত অবজেক্টের আচরণ বা কার্যকলাপ নির্ধারণ করে।

Method Syntax:

class ClassName {
  methodName() {
    // method body
  }
}

উদাহরণ:

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  greet() {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
  }
}

const person1 = new Person("John", 30);
person1.greet();  // "Hello, my name is John and I am 30 years old."

এখানে, greet() একটি method যা Person ক্লাসের এক্সপ্লেসিত আচরণ নির্দেশ করে, যেটি ব্যক্তির নাম এবং বয়স প্রিন্ট করে।


Getter এবং Setter in ES6

Getter এবং Setter হলো বিশেষ মেথড যা ক্লাসের প্রোপার্টি অ্যাক্সেস বা সেট করার সময় ব্যবহার করা হয়। এগুলি সাধারণত ডেটা হালনাগাদ এবং নিয়ন্ত্রণে সাহায্য করে।

  1. Getter: Getter মেথডের মাধ্যমে একটি প্রোপার্টির মান পড়া হয়। এটি সাধারণত ক্লাসের প্রোপার্টির মান বের করতে ব্যবহৃত হয়।
  2. Setter: Setter মেথডের মাধ্যমে একটি প্রোপার্টির মান সেট করা হয়। এটি মান নিয়ন্ত্রণের জন্য ব্যবহৃত হয়।

Getter এর সিনট্যাক্স:

get propertyName() {
  // return value
}

Setter এর সিনট্যাক্স:

set propertyName(value) {
  // set value
}

Getter এবং Setter এর উদাহরণ:

class Person {
  constructor(name, age) {
    this._name = name;
    this._age = age;
  }

  // Getter for 'name'
  get name() {
    return this._name;
  }

  // Setter for 'name'
  set name(newName) {
    this._name = newName;
  }

  // Getter for 'age'
  get age() {
    return this._age;
  }

  // Setter for 'age'
  set age(newAge) {
    if (newAge < 0) {
      console.log("Age cannot be negative!");
    } else {
      this._age = newAge;
    }
  }
}

const person1 = new Person("John", 30);
console.log(person1.name);  // "John" - Getter
person1.name = "Doe";  // Setter
console.log(person1.name);  // "Doe"

console.log(person1.age);  // 30 - Getter
person1.age = -5;  // Invalid age
console.log(person1.age);  // 30 - Age can't be negative

ব্যাখ্যা:

  • এখানে, name এবং age প্রোপার্টির জন্য getter এবং setter মেথড ব্যবহার করা হয়েছে।
  • name এবং age প্রোপার্টির জন্য getter এর মাধ্যমে মান পড়া যায় এবং setter এর মাধ্যমে নতুন মান সেট করা যায়।
  • Setter মেথডের মধ্যে age প্রপার্টির জন্য একটি চেক আছে, যেখানে আমরা যদি negative বয়স দেয়ার চেষ্টা করি, তবে এটি একটি ত্রুটি (error) মেসেজ প্রদর্শন করবে।

Method, Getter, Setter এর মধ্যে পার্থক্য

বৈশিষ্ট্যMethodGetterSetter
কাজক্লাসের কোনো কার্যকলাপ বা আচরণক্লাসের প্রোপার্টি থেকে মান পড়াক্লাসের প্রোপার্টির মান সেট করা
সিনট্যাক্সmethodName() {}get propertyName() {}set propertyName(value) {}
উদাহরণgreet() {}get name() { return this._name; }set name(newName) { this._name = newName; }
ব্যবহারকার্যকরী ফাংশন/এ্যাকশনপ্রোপার্টি মান রিটার্ন করতেপ্রোপার্টি মান সেট করতে

Getter এবং Setter ব্যবহার করার সুবিধা

  1. ডেটা এনক্যাপসুলেশন (Data Encapsulation):
    Getter এবং Setter মেথড ব্যবহার করার মাধ্যমে, আপনি প্রোপার্টির মান নিয়ন্ত্রণ করতে পারেন এবং বাইরের কোড থেকে সরাসরি এক্সেস বন্ধ করতে পারেন। এতে ডেটা নিরাপদ থাকে এবং আরও নিয়ন্ত্রিত উপায়ে সেট করা যায়।
  2. ডেটা ভ্যালিডেশন:
    Setter মেথডের মাধ্যমে আপনি ডেটার মান যাচাই করতে পারেন, যেমন বয়স নির্ধারণের জন্য আপনি সেটার মান পরিবর্তন করতে পারেন, যদি তা বৈধ না হয়।
  3. লজিক সংযোজন:
    Getter এবং Setter মেথডের মাধ্যমে আপনি মান সেট বা রিটার্ন করার সময় অতিরিক্ত লজিক বা ফাংশনালিটি যোগ করতে পারেন। যেমন, যখন আপনি কোন প্রোপার্টি সেট করেন, তখন একটি নির্দিষ্ট ক্যালকুলেশন বা ভ্যালিডেশন করা যায়।

সারাংশ

ES6 ক্লাসে method, getter, এবং setter ব্যবহার করা জাভাস্ক্রিপ্টের কার্যকারিতা এবং ফ্লেক্সিবিলিটি বাড়ায়। Methods ক্লাসের কার্যকলাপ বা আচরণ নির্ধারণ করে, আর getters এবং setters প্রোপার্টি অ্যাক্সেস ও সেট করার জন্য ব্যবহৃত হয়, যা ডেটা নিয়ন্ত্রণ ও ভ্যালিডেশন সহজ করে।

Content added By

ES6 (ECMAScript 2015) জাভাস্ক্রিপ্টে ক্লাস সিস্টেম চালু করেছে, যা OOP (Object-Oriented Programming) এর ধারণা এবং প্যাটার্ন অনুসরণ করে। Inheritance এবং Subclassing এর মাধ্যমে আপনি কোড পুনঃব্যবহার করতে পারেন, যেখানে এক ক্লাস অন্য ক্লাসের বৈশিষ্ট্য এবং আচরণ গ্রহণ করে। ES6-এ এই ধারণাগুলো class কিওয়ার্ড ব্যবহার করে সহজে বাস্তবায়িত করা সম্ভব।


1. ES6-এ Inheritance (উত্তরাধিকার)

Inheritance হল একটি ক্লাসের বৈশিষ্ট্য ও মেথড অন্য একটি ক্লাস দ্বারা গ্রহণ করার প্রক্রিয়া। ES6-এ ক্লাস ভিত্তিক ইন্সট্যান্স তৈরি করা হয় এবং extends কিওয়ার্ডের মাধ্যমে এক ক্লাস অন্য ক্লাস থেকে উত্তরাধিকার সূত্রে বৈশিষ্ট্য ও মেথড গ্রহণ করে।

উদাহরণ:

// Parent class
class Animal {
  constructor(name) {
    this.name = name;
  }

  speak() {
    console.log(`${this.name} makes a sound`);
  }
}

// Child class inheriting from Animal class
class Dog extends Animal {
  speak() {
    console.log(`${this.name} barks`);
  }
}

const dog = new Dog('Rex');
dog.speak();  // Rex barks

এখানে Dog ক্লাস Animal ক্লাস থেকে inheritance পেয়েছে এবং speak() মেথডটি overridden করেছে।


2. ES6-এ Subclassing (সাবক্লাসিং)

Subclassing হল Inheritance এর একটি বাস্তবায়ন যেখানে একটি ক্লাস (subclass) আরেকটি ক্লাস (parent class) থেকে বৈশিষ্ট্য এবং মেথড গ্রহণ করে, এবং প্রয়োজনে সেই বৈশিষ্ট্য পরিবর্তন বা এক্সটেন্ড করে। ES6-এ extends কিওয়ার্ডের মাধ্যমে সাবক্লাসিং করা হয়।

উদাহরণ:

// Parent class
class Vehicle {
  constructor(make, model) {
    this.make = make;
    this.model = model;
  }

  displayInfo() {
    console.log(`${this.make} ${this.model}`);
  }
}

// Child class inheriting from Vehicle class
class Car extends Vehicle {
  constructor(make, model, doors) {
    super(make, model);  // Calls the constructor of the parent class
    this.doors = doors;
  }

  displayInfo() {
    super.displayInfo();  // Calls the parent class method
    console.log(`Doors: ${this.doors}`);
  }
}

const myCar = new Car("Toyota", "Camry", 4);
myCar.displayInfo();
// Toyota Camry
// Doors: 4

এখানে, Car ক্লাস Vehicle ক্লাস থেকে সাবক্লাসিং করেছে এবং displayInfo() মেথডে প্যারেন্ট ক্লাসের মেথডটিকে এক্সটেন্ড করেছে।


3. super কিওয়ার্ড

ES6-এ super কিওয়ার্ডটি ব্যবহার করা হয় প্যারেন্ট ক্লাসের কনস্ট্রাকটর এবং মেথড কল করার জন্য। super এর মাধ্যমে সাবক্লাস প্যারেন্ট ক্লাসের কনস্ট্রাকটর এবং মেথড এক্সেস করতে পারে।

উদাহরণ:

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  greet() {
    console.log(`Hello, my name is ${this.name}`);
  }
}

class Student extends Person {
  constructor(name, age, grade) {
    super(name, age);  // Calls the constructor of the parent class
    this.grade = grade;
  }

  greet() {
    super.greet();  // Calls the greet() method of the parent class
    console.log(`I am in grade ${this.grade}`);
  }
}

const student = new Student("Alice", 20, "A");
student.greet();
// Hello, my name is Alice
// I am in grade A

এখানে super(name, age) প্যারেন্ট ক্লাসের কনস্ট্রাকটরকে কল করে এবং super.greet() প্যারেন্ট ক্লাসের greet() মেথডকে কল করেছে।


4. Static Methods in ES6 Classes

ES6-এ ক্লাসে static methods সংজ্ঞায়িত করা সম্ভব, যা শুধুমাত্র ক্লাসের সাথে সম্পর্কিত থাকে, অবজেক্টের সাথে নয়। static কিওয়ার্ড ব্যবহার করে এসব মেথড ডিফাইন করা হয়।

উদাহরণ:

class MathUtil {
  static add(a, b) {
    return a + b;
  }

  static multiply(a, b) {
    return a * b;
  }
}

console.log(MathUtil.add(2, 3));  // 5
console.log(MathUtil.multiply(2, 3));  // 6

এখানে MathUtil ক্লাসের add() এবং multiply() মেথড দুটি static method হিসেবে ডিফাইন করা হয়েছে, তাই এগুলো ক্লাস নাম দিয়ে কল করা হচ্ছে, অবজেক্টের মাধ্যমে নয়।


5. Inheritance and Subclassing: Summary

বিষয়InheritanceSubclassing
সংজ্ঞাএক ক্লাস অন্য ক্লাসের বৈশিষ্ট্য গ্রহণ করে।এক ক্লাস (subclass) অন্য ক্লাস (parent class) থেকে বৈশিষ্ট্য গ্রহণ এবং এক্সটেন্ড করে।
extends কিওয়ার্ডব্যবহৃত হয় ক্লাসের উত্তরাধিকার তৈরি করতে।ব্যবহৃত হয় এক ক্লাসের subclass তৈরি করতে।
super কিওয়ার্ডপ্যারেন্ট ক্লাসের কনস্ট্রাকটর এবং মেথড কল করার জন্য।সাবক্লাসে প্যারেন্ট ক্লাসের কনস্ট্রাকটর এবং মেথড কল করতে।
Static Methodsstatic মেথডের সাথে সম্পর্কিত না, কেবলমাত্র ক্লাসের সাথে সম্পর্কিত।Static methods একইভাবে সাবক্লাসেও ব্যবহৃত হয়।

ES6 এ Inheritance এবং Subclassing এর মাধ্যমে আপনার কোড আরও মডুলার, পুনঃব্যবহারযোগ্য এবং স্ট্রাকচারড হতে পারে। class, extends, এবং super কিওয়ার্ডগুলি এই ধারণাগুলোকে কার্যকরভাবে বাস্তবায়ন করতে সাহায্য করে।

Content added By
Promotion

Are you sure to start over?

Loading...