টাইপস্ক্রিপ্টে ক্লাস

টাইপস্ক্রিপ্টে ক্লাস

এই নিবন্ধটি টাইপস্ক্রিপ্টে ক্লাসকে ব্যাখ্যা করে।

YouTube Video

টাইপস্ক্রিপ্টে ক্লাস

টাইপস্ক্রিপ্টের ক্লাসগুলি জাভাস্ক্রিপ্টের ES6 ক্লাসের উপর ভিত্তি করে তৈরি হয়েছে এবং টাইপ অ্যানোটেশন এবং অ্যাক্সেস মডিফায়ারের মতো অতিরিক্ত বৈশিষ্ট্য প্রদান করে। এটি আপনাকে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং-এর ধারণাগুলি ব্যবহার করার পাশাপাশি আরও দৃঢ় এবং স্পষ্ট টাইপ সুরক্ষা নিশ্চিত করতে সক্ষম করে।

টাইপস্ক্রিপ্টে ক্লাসের মৌলিক ব্যবহার এবং বৈশিষ্ট্যগুলির ব্যাখ্যা নীচে রয়েছে।

মৌলিক ক্লাস সংজ্ঞা

 1class Person {
 2    name: string;  // Member variable
 3    age: number;   // Member variable
 4
 5    // Constructor
 6    constructor(name: string, age: number) {
 7        this.name = name;
 8        this.age = age;
 9    }
10
11    // Method
12    greet(): void {
13        console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
14    }
15}
16
17const person = new Person("Alice", 25);
18person.greet();  // Hello, my name is Alice and I am 25 years old.
  • name এবং age হল ক্লাসের প্রোপার্টি (সদস্য ভেরিয়েবল)।
  • constructor হল একটি মেথড যা ক্লাসের একটি ইনস্ট্যান্স তৈরি করার সময় ডাকা হয়, যা আর্গুমেন্ট গ্রহণ করে এবং প্রোপার্টিগুলিতে মান বরাদ্দ করে।
  • greet হল ক্লাসের একটি মেথড, যা বোঝায় যে এটি কোন রিটার্ন মান নেই এবং এটি void টাইপের।

অ্যাক্সেস মডিফায়ার

টাইপস্ক্রিপ্টে, আপনি অ্যাক্সেস মডিফায়ার (public, private, protected) ব্যবহার করতে পারেন ক্লাসের প্রোপার্টি এবং মেথডগুলির অ্যাক্সেস নিয়ন্ত্রণ করতে।

public

ডিফল্টভাবে, সমস্ত প্রোপার্টি এবং মেথড public। এটি বোঝায় যে সেগুলি ক্লাসের বাইরের অংশ থেকে অ্যাক্সেসযোগ্য।

 1class Animal {
 2    public species: string;
 3
 4    constructor(species: string) {
 5        this.species = species;
 6    }
 7
 8    public makeSound(): void {
 9        console.log(`${this.species} makes a sound.`);
10    }
11}
12
13const animal = new Animal("Dog");
14console.log(animal.species);  // Dog
15animal.makeSound();           // Dog makes a sound.
  • species প্রপার্টি এবং makeSound মেথডকে public হিসেবে ঘোষণা করা হয়েছে এবং এগুলো ক্লাসের বাইরে থেকেও এক্সেস করা যায়।

private

private মডিফায়ার ব্যবহার করলে ক্লাসের প্রোপার্টি বা মেথড বাইরের অংশ থেকে অ্যাক্সেস করা যাবে না।

 1class Car {
 2    private brand: string;
 3
 4    constructor(brand: string) {
 5        this.brand = brand;
 6    }
 7
 8    public getBrand(): string {
 9        return this.brand;
10    }
11}
12
13const car = new Car("Toyota");
14// console.log(car.brand);  // Error: 'brand' is private and cannot be accessed.
15console.log(car.getBrand());  // Toyota
  • brand প্রপার্টি private হিসেবে ঘোষণা করা হয়েছে, তাই এটি ক্লাসের বাইরে থেকে এক্সেস করা যাবে না।
  • private সংশোধক ব্যবহার করে প্রপার্টিগুলি লুকিয়ে ডেটা এনক্যাপসুলেশন করা যায়।

protected

protected মডিফায়ার ক্লাসের বাইরের অংশ থেকে অ্যাক্সেস নিষিদ্ধ করে কিন্তু সাবক্লাস (ডেরাইভড ক্লাস) এ এটি অনুমতি দেয়।

 1class Vehicle {
 2    protected model: string;
 3
 4    constructor(model: string) {
 5        this.model = model;
 6    }
 7}
 8
 9class Truck extends Vehicle {
10    public getModel(): string {
11        return this.model;
12    }
13}
14
15const truck = new Truck("Ford F-150");
16console.log(truck.getModel());  // Ford F-150
17
18// console.log(truck.model);
19// Error: Property 'model' is protected and only accessible within class 'Vehicle' and its subclasses.
  • model প্রপার্টি protected হিসেবে ঘোষণা করা হয়েছে, তাই এটি ক্লাসের বাইরে থেকে এক্সেস করা যায় না, কিন্তু সাবক্লাস থেকে এক্সেস করা যায়।

গেটার এবং সেটার

টাইপস্ক্রিপ্টে, আপনি get এবং set কীওয়ার্ড ব্যবহার করে গেটার এবং সেটার সংজ্ঞায়িত করতে পারেন প্রোপার্টি মান উদ্ধার এবং সেট করার জন্য।

 1class Employee {
 2    private _salary: number;
 3
 4    constructor(salary: number) {
 5        this._salary = salary;
 6    }
 7
 8    // Getter
 9    get salary(): number {
10        return this._salary;
11    }
12
13    // Setter
14    set salary(newSalary: number) {
15        if (newSalary > 0) {
16            this._salary = newSalary;
17        } else {
18            console.log("Salary must be positive.");
19        }
20    }
21}
22
23const employee = new Employee(50000);
24console.log(employee.salary);  // 50000
25employee.salary = 60000;
26console.log(employee.salary);  // 60000
27employee.salary = -100;        // Salary must be positive.
  • এই উদাহরণে, salary প্রপার্টির জন্য গেটার এবং সেটার ব্যবহার করা হয়েছে বাহ্যিক এক্সেস ও আপডেট নিয়ন্ত্রণ করতে। সেটারটি নেগেটিভ মান রোধ করতে ভ্যালিডেশন করে এবং অবৈধ মান দিলে ওয়ার্নিং মেসেজ দেখায়।

উত্তরাধিকার

টাইপস্ক্রিপ্টে ক্লাসগুলিকে উত্তরাধিকার করে নেওয়া যায়। extends কীওয়ার্ড ব্যবহার করে, আপনি একটি প্যারেন্ট ক্লাস থেকে কার্যকারিতা উত্তরাধিকার করতে পারেন।

 1class Animal {
 2    constructor(public name: string) {}
 3
 4    public move(): void {
 5        console.log(`${this.name} is moving.`);
 6    }
 7}
 8
 9class Bird extends Animal {
10    public fly(): void {
11        console.log(`${this.name} is flying.`);
12    }
13}
14
15const bird = new Bird("Sparrow");
16bird.move();  // Sparrow is moving.
17bird.fly();   // Sparrow is flying.
  • এই উদাহরণে, Bird ক্লাসটি Animal ক্লাস থেকে ইনহেরিট করে, যার ফলে এটি Animal-এর move মেথড ব্যবহার করতে পারে। আরও, এটি নিজস্ব fly মেথড সংজ্ঞায়িত করে, যাতে প্যারেন্ট ক্লাস থেকে ফিচার ইনহেরিট করার পাশাপাশি নতুন ফিচার যোগ হয়।

অ্যাবস্ট্রাক্ট ক্লাস

অ্যাবস্ট্রাক্ট ক্লাস (abstract) সরাসরি ইনস্ট্যান্স করা যায় না এবং সাবক্লাসগুলিতে নির্দিষ্ট বাস্তবায়ন সরবরাহ করার জন্য টেমপ্লেট হিসাবে ব্যবহৃত হয়।

 1abstract class Shape {
 2    abstract getArea(): number;
 3
 4    public describe(): void {
 5        console.log("This is a shape.");
 6    }
 7}
 8
 9class Circle extends Shape {
10    constructor(private radius: number) {
11        super();
12    }
13
14    public getArea(): number {
15        return Math.PI * this.radius * this.radius;
16    }
17}
18
19const circle = new Circle(5);
20console.log(circle.getArea());  // 78.53981633974483
21circle.describe();  // This is a shape.
  • এই উদাহরণে, Shape-কে একটি অ্যাবস্ট্রাক্ট ক্লাস হিসেবে সংজ্ঞায়িত করা হয়েছে, এবং getArea একটি অ্যাবস্ট্রাক্ট মেথড, যা অবশ্যই সাবক্লাসগুলোতে ইমপ্লিমেন্ট করতে হবে। Circle ক্লাসটি এই অ্যাবস্ট্রাক্ট ক্লাস থেকে ইনহেরিট করে এবং সার্কেলের ক্ষেত্রফল নির্ণয় করতে নিজের getArea মেথড ইমপ্লিমেন্ট করে। তাছাড়া, describe-এর মতো কংক্রিট মেথডগুলি কমন ফাংশনালিটি হিসেবে ইনহেরিট হয় এবং অপরিবর্তিতভাবেই ব্যবহার করা যায়।

ইন্টারফেসের সাথে সম্পর্ক

ক্লাসগুলি ইন্টারফেস প্রয়োগ করতে পারে, যা নিশ্চিত করে যে তাদের নির্দিষ্ট প্রোপার্টি এবং মেথড রয়েছে।

 1interface Flyable {
 2    fly(): void;
 3}
 4
 5class Airplane implements Flyable {
 6    public fly(): void {
 7        console.log("The airplane is flying.");
 8    }
 9}
10
11const airplane: Flyable = new Airplane();
12airplane.fly();  // The airplane is flying.
  • এই উদাহরণে, Flyable ইন্টারফেসটি fly মেথডের স্পেসিফিকেশন সংজ্ঞায়িত করে, এবং Airplane ক্লাসটি fly মেথডের জন্য কংক্রিট ডেফিনিশন দিয়ে এই ইন্টারফেসটি ইমপ্লিমেন্ট করে। এর ফলে, যেকোনো অবজেক্ট যেটিকে Flyable টাইপ হিসেবে ব্যবহার করা যায় তার অবশ্যই fly মেথড থাকবে।

স্ট্যাটিক সদস্যবৃন্দ

যখন আপনি কোনো ক্লাসে স্ট্যাটিক সদস্য সংজ্ঞায়িত করেন, তখন সেই মেথড ও প্রপার্টিগুলো ক্লাসের সাথেই সংশ্লিষ্ট থাকে। স্ট্যাটিক সদস্যবৃন্দ ক্লাস ইনস্ট্যান্স ছাড়াই ডাকা যায়।

 1class MathUtils {
 2    static PI: number = 3.14;
 3
 4    static add(a: number, b: number): number {
 5        return a + b;
 6    }
 7}
 8
 9console.log(MathUtils.add(10, 20)); // 30
10console.log(MathUtils.PI); // 3.14
  • আপনি static কীওয়ার্ড ব্যবহার করে স্ট্যাটিক মেথড সংজ্ঞায়িত করেন।
  • এই উদাহরণে, MathUtils ক্লাসটি একটি স্ট্যাটিক মেথড add এবং একটি স্ট্যাটিক প্রপার্টি PI সংজ্ঞায়িত করেছে।
  • স্ট্যাটিক সদস্যবৃন্দ ক্লাস ইনস্ট্যান্সের অন্তর্ভুক্ত নয়, তবে ক্লাস থেকে সরাসরি ডাকা যায়।

সারসংক্ষেপ

টাইপস্ক্রিপ্ট ক্লাসগুলি জাভাস্ক্রিপ্ট ক্লাস কার্যকারিতায় টাইপ সেফটি, অ্যাক্সেস মোডিফায়ার এবং অ্যাবস্ট্রাক্ট ক্লাসের মতো ফিচার যোগ করে। এটি আরও শক্তিশালী এবং নিরাপদ অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংকে সম্ভব করে তোলে।

আপনি আমাদের ইউটিউব চ্যানেলে ভিজ্যুয়াল স্টুডিও কোড ব্যবহার করে উপরের নিবন্ধটি অনুসরণ করতে পারেন। দয়া করে ইউটিউব চ্যানেলটিও দেখুন।

YouTube Video