7.3 জাভাস্ক্রিপ্টে ক্লাস কি? 

 

ক্লাস হলো এমন একটি টেম্পলেট যা ভ্যারিয়েবল এবং ফাংশনের সমন্বয়ে তৈরি। শুনতে তো অবজেক্ট এর মতোই হয়ে গেল তাইনা? আরেকটু ভালোভাবে ভাবে বলতে গেলে, ক্লাস হলো একধরণের blueprint যা থেকে সুনির্দিষ্ট অবজেক্ট তৈরি করা হয়। ক্লাসের মধ্যেও Attributes এবং Function থাকে যাদেরকে Method বলা হয়। নিচের কোডটি খেয়াল করিঃ

 
 
 
class Car {
constructor(color, brand, model){
this.color = color;
this.brand = brand;
this.model = model;
}
repaint(){
this.color = “Red”;
}
}
 
const myCar = new Car(“Black”, “Doge”, “Charger”);
const helensCar = new Car(“Blue”, “Nissan”, “Ultima”);
 

 

আমরা একটা Car নামে ক্লাস তৈরি করেছি। তার মধ্যে properties হিসেবে color, brand এবং model দিয়েছি। এবং তার মধ্যে repaint নামে একটি মেথড দিলাম যা গাড়ির রং পরিবর্তন করে। তারপর এই ক্লাস থেকে আমরা দুইটি ‘Car’ টাইপের অবজেক্ট myCar এবং helensCar তৈরি করেছি।এখন আমরা চাইলে এই ক্লাস থেকে হাজারটা অবজেক্টও তৈরি করতে পারব এবং প্রত্যেকটা অবজেক্টেরই ইউনিক প্রোপার্টি থাকবে।

ক্লাসের কোড তো দেখলাম। এখন আমাদের মনে প্রশ্ন জাগতে পারে যে Car ক্লাসের মধ্যে constructor জিনিসটা আবার কি? constructor একটি স্পেশাল ধরণের ফাংশন যার সাহায্যে অবজেক্ট কে ইনিশিয়ালাইজ করা যায়। আরেকটু সহজ করে বলতে গেলে, এটি এমন একধরনের ফাংশন যা নিজেকে নিজেই কল করে। আমরা যখন ‘new’ keyword ব্যবহার করে কোনো ক্লাসের অবজেক্ট তৈরি করি, তখনই সাথে সাথেই constructor ফাংশনটি কল হয় এবং অবজেক্টের মধ্যে কোন ভ্যালু সেট করে দিলে constructor এর মধ্যে সেগুলো এসাইন হয়ে যায়। ‘new’ keyword এর ব্যবহার নিয়ে আমরা পরবর্তীতে বিস্তারিত আলোচনা করব। constructor এর কাজই হচ্ছে অবজেক্ট তৈরি করা এবং অবজেক্টের কোনো প্রোপার্টি থাকলে তাদের ভ্যালু সেট করা। এটা অবজেক্ট তৈরি করার খুবই সহজ পদ্ধতি কারণ আমাদের কষ্ট করে অবজেক্ট রিটার্ন করতে হয়না। জাভাস্ক্রিপ্টে কোনো ক্লাস তৈরি করার সময় অটোম্যাটিক constructor তৈরি হয়ে যায়, কোনো প্যারামিটার ছাড়াই।

 
 
 
constructor(){
 
}
  • ফ্যাক্টরি প্যাটার্ন ব্যবহার করে vehicle এর জন্যে Factory ক্লাস তৈরি করা হয়েছে। যেখানে car বা truck এর অবজেক্ট তৈরি করার জন্যে আমরা Factory ক্লাস করব। এক্ষেত্রে Factory ক্লাস এর create মেথড এ টাইপ পাস করে দিলে মেথড টি আমদের কাঙ্ক্ষিত টাইপের অবজেক্টটি রিটার্ন করবে।
    class Car {
    constructor(options) {
    this.wheels = options.wheels;
    this.doors = options.doors;
    this.color = options.color;
    }
    }
    class Truck {
    constructor(options) {
    this.wheels = options.wheels;
    this.doors = options.doors;
    this.color = options.color;
    }
    }
    class Factory {
    constructor(type) {
    this.type = type;
    }
    create = (options) => {
    let vehicleType = this.type;
    let vehicle;
    if (vehicleType === “car”) {
    vehicle = new Car(options);
    } else if (vehicleType === “truck”) {
    vehicle = new Truck(options);
    }
    vehicle.vehicleType = vehicleType;
    vehicle.startEngine = ()=> console.log(`Reving ${vehicleType} engine`);
    vehicle.driveVehicle = ()=> console.log(`Driving ${vehicleType}…`);
    vehicle.stopEngine = ()=> console.log(`Stop ${vehicleType} engine`);
    return vehicle;
    }
    };
    const TruckFactory = new Factory(“truck”);
    const truck = TruckFactory.create({
    wheels: 12,
    doors: 2,
    color: “yellow”
    })
    console.log(truck)
    truck.startEngine();
     
  • ফ্যাক্টরি প্যাটার্নের আরেকটি উদাহরণঃ
    class chocolateIceCream{
    constructor() {
    console.log(‘chocolate’)
    }
    };
    class vanillaIceCream{
    constructor() {
    console.log(‘vanilla’)
    }
    };
    class oreoIceCream{
    constructor() {
    console.log(‘oreo’)
    }
    };
    class IceCreamFactory {
    constructor(type) {
    this.type = type
    }
    createIceCream = () => {
    if(this.type === “vanilla”)
    return new vanillaIceCream();
    if(this.type === “chocolate”)
    return new chocolateIceCream();
    if(this.type === “oreo”)
    return new oreoIceCream();
    }
    };
    const iceCreamFac = new IceCreamFactory(‘chocolate’);
    const iceCream = iceCreamFac.createIceCream();
  • const FullTime = () => {
    this.hourly = “$12”;
    };
    const PartTime = () => {
    this.hourly = “$11”;
    };
    const Temporary = () => {
    this.hourly = “$10”;
    };
    const Contractor = () => {
    this.hourly = “$15”;
    };
    function run() {
    let employees = [];
    var factory = new Factory();
    employees.push(new Contractor());
    employees.push(new Temporary());
    employees.push(new PartTime());
    }
    }
    উপরোক্ত কোডটি ফ্যাক্টরি প্যাটার্ণ ফলো করছে কি? না হলে ফ্যাক্টরি প্যাটার্ন এ কোডটিকে রূপান্তরিত কর।
  • ফ্যাক্টরি প্যাটার্ণ abstraction অর্জন করতে সহায়তা করে কিভাবে?
  • কোন কোন ক্ষেত্রে factory pattern ব্যবহার করা যেতে পারে?
  • ফ্যাক্টরি প্যাটার্ণ অব্জেক্ট ক্রিয়েশন কীভাবে ডায়নামিক করে?