Skill

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (OOP)

জাভা প্রোগ্রামিং (Java Programming) - Computer Programming

1.7k

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (Object-Oriented Programming, সংক্ষেপে OOP) একটি প্রোগ্রামিং প্যারাডাইম যা অবজেক্ট এবং ক্লাস ব্যবহার করে প্রোগ্রাম তৈরি করে। OOP প্রোগ্রামিংয়ের ধারণাগুলো প্রোগ্রামিংয়ের জটিলতাকে সহজ, পুনরায় ব্যবহারযোগ্য এবং মডুলার করে তোলে। OOP এর প্রধান বৈশিষ্ট্যগুলো হলো Encapsulation, Inheritance, Polymorphism, এবং Abstraction


OOP এর মৌলিক ধারণা

১. ক্লাস (Class)

ক্লাস হলো একটি ব্লুপ্রিন্ট বা টেমপ্লেট যা বিভিন্ন অবজেক্ট তৈরি করতে ব্যবহৃত হয়। এতে বিভিন্ন বৈশিষ্ট্য (Properties) এবং আচরণ (Methods) সংজ্ঞায়িত করা থাকে।

উদাহরণ:

public class Car {
    String color;
    int speed;

    void displayInfo() {
        System.out.println("Color: " + color);
        System.out.println("Speed: " + speed);
    }
}

এখানে Car ক্লাসটি color এবং speed নামে দুটি বৈশিষ্ট্য এবং displayInfo নামে একটি মেথড ধারণ করে।


২. অবজেক্ট (Object)

অবজেক্ট হলো একটি ক্লাসের নির্দিষ্ট উদাহরণ বা ইন্সট্যান্স, যা ক্লাসের সমস্ত বৈশিষ্ট্য এবং মেথড ধারণ করে। একটি ক্লাসের বিভিন্ন অবজেক্ট তৈরি করা যায়, এবং প্রতিটি অবজেক্টের মান ভিন্ন হতে পারে।

উদাহরণ:

public class Main {
    public static void main(String[] args) {
        Car myCar = new Car(); // Car ক্লাসের অবজেক্ট তৈরি
        myCar.color = "Red";
        myCar.speed = 100;
        myCar.displayInfo();
    }
}

OOP এর মূল বৈশিষ্ট্য

১. ইনক্যাপসুলেশন (Encapsulation)

ইনক্যাপসুলেশন হলো ডেটা এবং মেথডগুলিকে একটি ক্লাসে আবদ্ধ করা, যাতে বাইরের কেউ সরাসরি ডেটাতে অ্যাক্সেস না করতে পারে। সাধারণত, প্রাইভেট ভেরিয়েবল ব্যবহার করে ডেটা সংরক্ষণ করা হয় এবং পাবলিক মেথড ব্যবহার করে সেই ডেটা অ্যাক্সেস ও পরিবর্তন করা হয়।

উদাহরণ:

public class BankAccount {
    private double balance; // Private ভেরিয়েবল

    public void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
        }
    }

    public double getBalance() {
        return balance;
    }
}

এখানে balance প্রাইভেট ভেরিয়েবল এবং depositgetBalance পাবলিক মেথড ইনক্যাপসুলেশনের মাধ্যমে ব্যবহৃত হয়েছে।


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

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

উদাহরণ:

public class Vehicle {
    int speed;

    void displaySpeed() {
        System.out.println("Speed: " + speed);
    }
}

public class Car extends Vehicle {
    String color;
}

এখানে Car ক্লাসটি Vehicle ক্লাস থেকে উত্তরাধিকার সূত্রে speed এবং displaySpeed মেথড পেয়েছে।


৩. পলিমরফিজম (Polymorphism)

পলিমরফিজমের মাধ্যমে একই মেথড বিভিন্ন প্রকারে কাজ করতে পারে। এটি দুইভাবে কাজ করতে পারে: মেথড ওভারলোডিং (একই ক্লাসে বিভিন্ন প্যারামিটারের উপর ভিত্তি করে) এবং মেথড ওভাররাইডিং (উত্তরাধিকার সূত্রে প্রাপ্ত মেথডকে পরিবর্তন করে)।

উদাহরণ: মেথড ওভারলোডিং

public class MathOperations {
    public int add(int a, int b) {
        return a + b;
    }

    public double add(double a, double b) {
        return a + b;
    }
}

উদাহরণ: মেথড ওভাররাইডিং

public class Animal {
    void sound() {
        System.out.println("Animal sound");
    }
}

public class Dog extends Animal {
    void sound() {
        System.out.println("Dog barks");
    }
}

৪. অ্যাবস্ট্রাকশন (Abstraction)

অ্যাবস্ট্রাকশন হলো এমন একটি ধারণা যেখানে একটি ক্লাসের কিছু অংশ গোপন রাখা হয় এবং প্রয়োজনীয় অংশ ব্যবহারকারীর জন্য উন্মুক্ত রাখা হয়। এটি দুটি উপায়ে করা যায়: অ্যাবস্ট্রাক্ট ক্লাস এবং ইন্টারফেস

উদাহরণ: অ্যাবস্ট্রাক্ট ক্লাস

abstract class Animal {
    abstract void sound(); // অ্যাবস্ট্রাক্ট মেথড
}

public class Dog extends Animal {
    void sound() {
        System.out.println("Dog barks");
    }
}

উদাহরণ: ইন্টারফেস

interface Vehicle {
    void start();
}

public class Car implements Vehicle {
    public void start() {
        System.out.println("Car starts");
    }
}

OOP এর সুবিধা

  1. পুনরায় ব্যবহারযোগ্যতা: একই কোড বিভিন্ন অংশে পুনরায় ব্যবহার করা যায়।
  2. সহজ রক্ষণাবেক্ষণ: কোডকে ছোট ছোট অংশে বিভক্ত করে রাখা হয়, যা রক্ষণাবেক্ষণ সহজ করে।
  3. ডেটা সুরক্ষা: ইনক্যাপসুলেশন ডেটা গোপন রাখে এবং সুরক্ষা প্রদান করে।
  4. মডুলার এবং সম্প্রসারণযোগ্য: ইনহেরিটেন্সের মাধ্যমে নতুন ক্লাস তৈরি করা সহজ হয়, যা কোডকে সম্প্রসারণযোগ্য করে।

উদাহরণ: OOP কনসেপ্ট ব্যবহার

// Animal ক্লাস (অ্যাবস্ট্রাক্ট ক্লাস)
abstract class Animal {
    abstract void sound();
}

// Dog ক্লাস (ইনহেরিটেন্স এবং পলিমরফিজম)
class Dog extends Animal {
    void sound() {
        System.out.println("Dog barks");
    }
}

// BankAccount ক্লাস (ইনক্যাপসুলেশন)
class BankAccount {
    private double balance;

    public void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
        }
    }

    public double getBalance() {
        return balance;
    }
}

public class Main {
    public static void main(String[] args) {
        // ইনহেরিটেন্স এবং পলিমরফিজম উদাহরণ
        Animal dog = new Dog();
        dog.sound(); // Output: Dog barks

        // ইনক্যাপসুলেশন উদাহরণ
        BankAccount account = new BankAccount();
        account.deposit(1000);
        System.out.println("Balance: " + account.getBalance()); // Output: Balance: 1000.0
    }
}

সারসংক্ষেপ

OOP বা অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং প্রোগ্রামিংয়ের একটি শক্তিশালী পদ্ধতি, যা ডেটা এবং আচরণকে মডুলার করে। OOP চারটি মূল বৈশিষ্ট্যের উপর ভিত্তি করে গঠিত: ইনক্যাপসুলেশন, ইনহেরিটেন্স, পলিমরফিজম, এবং অ্যাবস্ট্রাকশন। এই বৈশিষ্ট্যগুলো প্রোগ্রামের জটিলতা হ্রাস করে এবং ডেটা সুরক্ষিত করে, যা বড় প্রজেক্টে রক্ষণাবেক্ষণ সহজ করে।

Content added By

ক্লাস (Class) এবং অবজেক্ট (Object) হলো প্রোগ্রামিংয়ের মূল ভিত্তি, বিশেষত অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) এ। Java তে ক্লাস হলো একটি ব্লুপ্রিন্ট বা টেমপ্লেট যা অবজেক্ট তৈরির জন্য ব্যবহার করা হয়, আর অবজেক্ট হলো সেই ক্লাস থেকে তৈরি হওয়া নির্দিষ্ট উদাহরণ।


ক্লাস (Class)

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

ক্লাসের গঠন

class ClassName {
    // বৈশিষ্ট্য বা ফিল্ড (Properties or Attributes)
    dataType variableName;

    // আচরণ বা মেথড (Methods or Behaviors)
    returnType methodName() {
        // কার্যপ্রণালী
    }
}

উদাহরণ:

public class Car {
    // বৈশিষ্ট্য বা ফিল্ড
    String color;
    int speed;

    // আচরণ বা মেথড
    public void startEngine() {
        System.out.println("Engine started.");
    }

    public void accelerate(int increment) {
        speed += increment;
        System.out.println("Speed increased to " + speed);
    }
}

ব্যাখ্যা:

  • Car হলো ক্লাসের নাম।
  • color এবং speed হলো ক্লাসের বৈশিষ্ট্য বা ফিল্ড।
  • startEngine() এবং accelerate() হলো মেথড, যা Car ক্লাসের নির্দিষ্ট কাজ সম্পন্ন করে।

অবজেক্ট (Object)

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

অবজেক্ট তৈরি

ক্লাস থেকে অবজেক্ট তৈরি করতে new কীওয়ার্ড ব্যবহার করা হয়। উদাহরণ:

Car myCar = new Car();

এখানে myCar হলো Car ক্লাসের একটি অবজেক্ট, যা Car ক্লাসের সকল বৈশিষ্ট্য এবং আচরণ ধারণ করে।

উদাহরণ: অবজেক্ট ব্যবহার

public class Main {
    public static void main(String[] args) {
        // Car ক্লাস থেকে অবজেক্ট তৈরি
        Car myCar = new Car();

        // অবজেক্টের বৈশিষ্ট্য নির্ধারণ করা
        myCar.color = "Red";
        myCar.speed = 0;

        // মেথড কল করা
        myCar.startEngine(); // আউটপুট: Engine started.
        myCar.accelerate(50); // আউটপুট: Speed increased to 50

        // অবজেক্টের বৈশিষ্ট্য প্রিন্ট করা
        System.out.println("Car color: " + myCar.color); // আউটপুট: Car color: Red
        System.out.println("Car speed: " + myCar.speed); // আউটপুট: Car speed: 50
    }
}

ব্যাখ্যা:

  • myCar অবজেক্টের color এবং speed সেট করা হয়েছে এবং startEngineaccelerate মেথড কল করা হয়েছে।
  • অবজেক্টের বৈশিষ্ট্যগুলো এবং মেথডের আউটপুট প্রদর্শিত হয়েছে।

ক্লাস এবং অবজেক্টের পার্থক্য

বৈশিষ্ট্যক্লাসঅবজেক্ট
সংজ্ঞাএকটি ব্লুপ্রিন্ট বা টেমপ্লেটক্লাসের একটি নির্দিষ্ট উদাহরণ
মেমোরিমেমোরিতে স্থান নেয় নামেমোরিতে স্থান নেয়
ব্যবহারএকটি নির্দিষ্ট ধরনের অবজেক্ট তৈরিতে ব্যবহৃত হয়ক্লাসের বৈশিষ্ট্য এবং মেথড ধারণ করে
উদাহরণCarmyCar = new Car();

ক্লাস এবং অবজেক্ট কেন ব্যবহার করা হয়?

  1. পুনরায় ব্যবহারযোগ্য কোড তৈরি: ক্লাস একবার তৈরি করে সেটি থেকে একাধিক অবজেক্ট তৈরি করা যায়, ফলে কোডের পুনরায় ব্যবহার নিশ্চিত হয়।
  2. ডেটা এবং ফাংশনের সংগঠিত ব্যবস্থা: ক্লাসের মাধ্যমে ডেটা (ভেরিয়েবল) এবং ফাংশন (মেথড) একত্রিত করে রাখা যায়, যা প্রোগ্রামকে সহজবোধ্য এবং সংগঠিত করে।
  3. মডুলার প্রোগ্রামিং: ক্লাস ব্যবহারের মাধ্যমে প্রোগ্রামকে ছোট ছোট অংশে বিভক্ত করা যায়, যা মেইনটেনেন্স সহজ করে।
  4. জটিল সিস্টেমের মডেলিং: ক্লাস এবং অবজেক্ট ব্যবহার করে বাস্তব জগতের বিভিন্ন সিস্টেমকে প্রোগ্রামে মডেল করা যায়।

সারসংক্ষেপ

  • ক্লাস: একটি ব্লুপ্রিন্ট বা টেমপ্লেট, যা একটি নির্দিষ্ট ধরনের অবজেক্ট তৈরিতে ব্যবহৃত হয়।
  • অবজেক্ট: ক্লাসের নির্দিষ্ট উদাহরণ, যা ক্লাসের বৈশিষ্ট্য এবং আচরণ ধারণ করে।

ক্লাস এবং অবজেক্ট ব্যবহার করে বাস্তব জগতের বিভিন্ন সিস্টেম বা জিনিসকে প্রোগ্রামে সহজে মডেল করা সম্ভব, যা প্রোগ্রামের স্থায়িত্ব ও পুনরায় ব্যবহারযোগ্যতা নিশ্চিত করে।

Content added By

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


ইনক্যাপসুলেশন (Encapsulation)

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

ইনক্যাপসুলেশনের উদাহরণ

public class BankAccount {
    // প্রাইভেট ভেরিয়েবল, বাইরে থেকে সরাসরি অ্যাক্সেস করা যায় না
    private double balance;

    // পাবলিক মেথড, যেটি ডেটা অ্যাক্সেস করতে ব্যবহার করা হয়
    public void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
        }
    }

    // ডেটা অ্যাক্সেস করার জন্য গেটার মেথড
    public double getBalance() {
        return balance;
    }
}

ব্যাখ্যা:

  • এখানে balance ভেরিয়েবলটি প্রাইভেট করা হয়েছে, ফলে ক্লাসের বাইরে থেকে সরাসরি এটি অ্যাক্সেস করা যায় না।
  • deposit এবং getBalance মেথড ব্যবহার করে balance অ্যাক্সেস এবং পরিবর্তন করা সম্ভব, যা ডেটার নিরাপত্তা বজায় রাখে।

অ্যাক্সেস মডিফায়ার (Access Modifiers)

Java তে চারটি প্রধান অ্যাক্সেস মডিফায়ার রয়েছে যা ক্লাস, মেথড এবং ভেরিয়েবলের অ্যাক্সেস কন্ট্রোল করে। এগুলো হলো public, private, protected, এবং default (যা কোনো মডিফায়ার না দিলে প্রযোজ্য হয়)।

১. public

  • অ্যাক্সেস লেভেল: সর্বত্র অ্যাক্সেসযোগ্য, কোনো বাধা নেই।
  • ব্যবহার: যখন একটি মেথড বা ভেরিয়েবল সকল ক্লাসে অ্যাক্সেসযোগ্য করতে চান, তখন public ব্যবহার করা হয়।

উদাহরণ:

public class Car {
    public String color; // সব জায়গায় অ্যাক্সেসযোগ্য
}

২. private

  • অ্যাক্সেস লেভেল: শুধুমাত্র একই ক্লাসের ভিতরে অ্যাক্সেসযোগ্য।
  • ব্যবহার: যখন একটি ভেরিয়েবল বা মেথড কেবলমাত্র একই ক্লাসের জন্য সংরক্ষিত রাখতে চান, তখন private ব্যবহার করা হয়।

উদাহরণ:

public class Car {
    private String engine; // শুধু Car ক্লাসে অ্যাক্সেসযোগ্য
}

৩. protected

  • অ্যাক্সেস লেভেল: একই প্যাকেজে এবং সাবক্লাসে অ্যাক্সেসযোগ্য।
  • ব্যবহার: যখন কোনো মেম্বার একই প্যাকেজের মধ্যে বা অন্য কোনো ক্লাস থেকে ইনহেরিটেন্সের মাধ্যমে অ্যাক্সেসযোগ্য করতে চান, তখন protected ব্যবহার করা হয়।

উদাহরণ:

public class Car {
    protected int speed; // একই প্যাকেজ ও ইনহেরিটিং ক্লাসে অ্যাক্সেসযোগ্য
}

৪. default

  • অ্যাক্সেস লেভেল: একই প্যাকেজে অ্যাক্সেসযোগ্য (কোনো মডিফায়ার না থাকলে এটি প্রযোজ্য)।
  • ব্যবহার: যখন কোনো ভেরিয়েবল বা মেথড শুধুমাত্র একই প্যাকেজের ক্লাসগুলির জন্য অ্যাক্সেসযোগ্য রাখতে চান।

উদাহরণ:

class Car {
    int wheels; // ডিফল্ট অ্যাক্সেস মডিফায়ার
}

উদাহরণ: বিভিন্ন অ্যাক্সেস মডিফায়ার ব্যবহার

public class Person {
    public String name;      // সকল স্থানে অ্যাক্সেসযোগ্য
    private int age;         // শুধুমাত্র Person ক্লাসে অ্যাক্সেসযোগ্য
    protected String gender; // একই প্যাকেজ এবং ইনহেরিটিং ক্লাসে অ্যাক্সেসযোগ্য
    String address;          // শুধুমাত্র একই প্যাকেজে অ্যাক্সেসযোগ্য (ডিফল্ট)

    // Getter মেথড, age ভেরিয়েবল অ্যাক্সেস করতে সাহায্য করে
    public int getAge() {
        return age;
    }

    // Setter মেথড, age ভেরিয়েবল পরিবর্তন করতে সাহায্য করে
    public void setAge(int age) {
        if (age > 0) {
            this.age = age;
        }
    }
}

ইনক্যাপসুলেশন এবং অ্যাক্সেস মডিফায়ার এর সুবিধা

  1. ডেটা সুরক্ষা: ইনক্যাপসুলেশন এবং অ্যাক্সেস মডিফায়ার ব্যবহার করে ডেটার গোপনীয়তা এবং নিরাপত্তা নিশ্চিত করা যায়।
  2. কোডের রক্ষণাবেক্ষণ সহজ: প্রাইভেট ভেরিয়েবল এবং পাবলিক মেথড ব্যবহার করে ডেটা ব্যবস্থাপনা সহজ হয় এবং কোডের রক্ষণাবেক্ষণ সহজ হয়।
  3. ডেটা হাইডিং: প্রাইভেট মেম্বার ব্যবহার করে প্রোগ্রামের গুরুত্বপূর্ণ তথ্য গোপন রাখা যায়।
  4. নিয়ন্ত্রিত অ্যাক্সেস: অ্যাক্সেস মডিফায়ার ব্যবহার করে কোন অংশকে কোথায় কিভাবে অ্যাক্সেস করা হবে তা নিয়ন্ত্রণ করা যায়।

সারসংক্ষেপ

Java-তে ইনক্যাপসুলেশন এবং অ্যাক্সেস মডিফায়ার ডেটার সুরক্ষা এবং প্রোগ্রামের কাঠামো নিয়ন্ত্রণে সহায়ক। ইনক্যাপসুলেশন ডেটা এবং মেথডগুলোকে ক্লাসে আবদ্ধ করে এবং বাইরে থেকে সরাসরি ডেটা পরিবর্তন প্রতিরোধ করে। অ্যাক্সেস মডিফায়ার দিয়ে ডেটার অ্যাক্সেস লেভেল নির্ধারণ করা যায়, যা প্রোগ্রামের নিরাপত্তা এবং ব্যবহারযোগ্যতা বাড়ায়।

Content added By

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


কেন ইনহেরিটেন্স ব্যবহার করা হয়?

  1. কোডের পুনরায় ব্যবহারযোগ্যতা: বিদ্যমান ক্লাসের কোড পুনরায় ব্যবহার করে নতুন ক্লাস তৈরি করা যায়।
  2. ডাটার সংগঠন: ইনহেরিটেন্স ব্যবহার করে সম্পর্কিত ডাটাকে সহজে সংগঠিত করা যায়।
  3. মডুলার এবং মেইনটেনেবল কোড: ইনহেরিটেন্স ব্যবহার করে কোডকে ছোট ছোট অংশে ভাগ করে রাখা যায়, ফলে কোডের মেইনটেনেন্স সহজ হয়।
  4. পলিমরফিজম (Polymorphism): ইনহেরিটেন্সের মাধ্যমে পলিমরফিজম বাস্তবায়ন করা যায়, যা একাধিক ক্লাসের জন্য একই মেথড ব্যবহার করতে সাহায্য করে।

ইনহেরিটেন্স কিভাবে কাজ করে?

Java-তে extends কীওয়ার্ড ব্যবহার করে ইনহেরিটেন্স করা হয়। ইনহেরিটেন্সে প্যারেন্ট ক্লাস বা সুপারক্লাসের বৈশিষ্ট্য ও মেথডগুলো চাইল্ড ক্লাস বা সাবক্লাসে ইনহেরিট হয়।

উদাহরণ:

// প্যারেন্ট ক্লাস
class Vehicle {
    String color;

    public void start() {
        System.out.println("Vehicle is starting.");
    }
}

// চাইল্ড ক্লাস
class Car extends Vehicle {
    int speed;

    public void accelerate() {
        System.out.println("Car is accelerating.");
    }
}

public class Main {
    public static void main(String[] args) {
        Car myCar = new Car();

        // প্যারেন্ট ক্লাসের বৈশিষ্ট্য এবং মেথড ব্যবহার করা হচ্ছে
        myCar.color = "Red";
        myCar.start(); // আউটপুট: Vehicle is starting.

        // চাইল্ড ক্লাসের বৈশিষ্ট্য এবং মেথড ব্যবহার করা হচ্ছে
        myCar.speed = 120;
        myCar.accelerate(); // আউটপুট: Car is accelerating.

        System.out.println("Car color: " + myCar.color);
        System.out.println("Car speed: " + myCar.speed);
    }
}

আউটপুট:

Vehicle is starting.
Car is accelerating.
Car color: Red
Car speed: 120

ব্যাখ্যা:

  • Vehicle হলো প্যারেন্ট ক্লাস, যার মধ্যে color বৈশিষ্ট্য এবং start() মেথড রয়েছে।
  • Car হলো চাইল্ড ক্লাস, যা Vehicle ক্লাসকে ইনহেরিট করছে। এর ফলে Car ক্লাস Vehicle এর বৈশিষ্ট্য ও মেথডগুলো পেয়েছে এবং নিজস্ব speed বৈশিষ্ট্য এবং accelerate() মেথড যুক্ত করেছে।

ইনহেরিটেন্সের প্রকারভেদ

সিঙ্গেল ইনহেরিটেন্স (Single Inheritance): যেখানে একটি চাইল্ড ক্লাস একটি মাত্র প্যারেন্ট ক্লাস থেকে ইনহেরিট করে।

class A { ... }
class B extends A { ... }

মাল্টিলেভেল ইনহেরিটেন্স (Multilevel Inheritance): যেখানে একটি চাইল্ড ক্লাস একটি প্যারেন্ট ক্লাস থেকে ইনহেরিট করে এবং সেই প্যারেন্ট ক্লাস অন্য একটি ক্লাস থেকে ইনহেরিট করে।

class A { ... }
class B extends A { ... }
class C extends B { ... }

হায়ারারকিকাল ইনহেরিটেন্স (Hierarchical Inheritance): যেখানে একাধিক চাইল্ড ক্লাস একটি প্যারেন্ট ক্লাস থেকে ইনহেরিট করে।

class A { ... }
class B extends A { ... }
class C extends A { ... }

নোট: Java তে মাল্টিপল ইনহেরিটেন্স সরাসরি সমর্থিত নয়, অর্থাৎ একটি ক্লাস একাধিক প্যারেন্ট ক্লাস থেকে সরাসরি ইনহেরিট করতে পারে না। তবে, ইন্টারফেস ব্যবহার করে মাল্টিপল ইনহেরিটেন্সের সুবিধা পাওয়া যায়।


সুপার কীওয়ার্ড ব্যবহার

ইনহেরিটেড ক্লাসের মেথড বা কন্সট্রাক্টরের ক্ষেত্রে প্যারেন্ট ক্লাসের মেথডকে কল করতে super কীওয়ার্ড ব্যবহার করা হয়।

উদাহরণ:

class Animal {
    public void sound() {
        System.out.println("Animal sound");
    }
}

class Dog extends Animal {
    public void sound() {
        super.sound(); // প্যারেন্ট ক্লাসের sound() মেথড কল করা
        System.out.println("Dog barks");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.sound();
    }
}

আউটপুট:

Copy code

Animal sound Dog barks

ব্যাখ্যা: Dog ক্লাস sound() মেথডটি ওভাররাইড করেছে, তবে super.sound() দিয়ে Animal ক্লাসের sound() মেথডকেও কল করেছে।


ওভাররাইডিং (Overriding)

ইনহেরিটেন্সে চাইল্ড ক্লাস প্যারেন্ট ক্লাসের মেথডকে ওভাররাইড করতে পারে, অর্থাৎ একই নামে আবার মেথড সংজ্ঞায়িত করতে পারে। এতে চাইল্ড ক্লাস নিজের মতো করে মেথডটি ব্যবহার করতে পারে।

class Animal {
    public void sound() {
        System.out.println("Animal sound");
    }
}

class Cat extends Animal {
    @Override
    public void sound() {
        System.out.println("Cat meows");
    }
}

ব্যাখ্যা: এখানে sound() মেথড Animal এবং Cat উভয় ক্লাসে রয়েছে, তবে Cat ক্লাসে sound() মেথড ওভাররাইড করা হয়েছে।


ইনহেরিটেন্সের সুবিধা

  1. কোড পুনরায় ব্যবহার: প্যারেন্ট ক্লাসের বৈশিষ্ট্য ও মেথডগুলো চাইল্ড ক্লাসে ব্যবহার করে কোড পুনরায় ব্যবহার নিশ্চিত হয়।
  2. মডুলার কোড: ইনহেরিটেন্স ব্যবহার করে জটিল কোডকে মডুলার করা যায়।
  3. সহজে পরিবর্তন: প্যারেন্ট ক্লাসে কোনো পরিবর্তন করলে চাইল্ড ক্লাসেও তার প্রভাব পড়ে, ফলে কোড মেইনটেন করা সহজ হয়।

সারসংক্ষেপ

  • ইনহেরিটেন্স একটি চাইল্ড ক্লাসকে প্যারেন্ট ক্লাসের বৈশিষ্ট্য এবং মেথড ইনহেরিট করতে দেয়।
  • ইনহেরিটেন্স কোডের পুনরায় ব্যবহারযোগ্যতা, মডুলারিটি, এবং সহজবোধ্যতা বৃদ্ধি করে।
  • Java-তে extends কীওয়ার্ড ব্যবহার করে ইনহেরিটেন্স করা হয় এবং super কীওয়ার্ড প্যারেন্ট ক্লাসের মেথড বা কন্সট্রাক্টর অ্যাক্সেস করতে ব্যবহৃত হয়।

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

Content added By

পলিমরফিজম (Polymorphism) হলো Object-Oriented Programming (OOP) এর একটি মূল বৈশিষ্ট্য, যার মাধ্যমে একই নামের মেথড বিভিন্ন ধরনের আচরণ করতে পারে। Polymorphism-এর দুইটি প্রধান রূপ আছে: মেথড ওভারলোডিং এবং মেথড ওভাররাইডিং


পলিমরফিজমের ধরন

  1. মেথড ওভারলোডিং (Method Overloading) - Compile-Time Polymorphism
  2. মেথড ওভাররাইডিং (Method Overriding) - Runtime Polymorphism

মেথড ওভারলোডিং (Method Overloading)

মেথড ওভারলোডিং হলো একই নামের একাধিক মেথড যা বিভিন্ন প্যারামিটার তালিকার (প্যারামিটার সংখ্যা বা ডেটা টাইপ) ভিত্তিতে আলাদা কাজ সম্পাদন করতে পারে। এটি Compile-Time Polymorphism হিসেবে পরিচিত, কারণ মেথডটি কম্পাইল টাইমে নির্ধারিত হয়।

উদাহরণ: মেথড ওভারলোডিং

public class MathOperations {

    // দুটি সংখ্যার যোগফল প্রদান করে
    public int add(int a, int b) {
        return a + b;
    }

    // তিনটি সংখ্যার যোগফল প্রদান করে
    public int add(int a, int b, int c) {
        return a + b + c;
    }

    // ভিন্ন ডেটা টাইপের সংখ্যার যোগফল প্রদান করে
    public double add(double a, double b) {
        return a + b;
    }

    public static void main(String[] args) {
        MathOperations math = new MathOperations();
        System.out.println("Addition of two integers: " + math.add(5, 10)); // 15
        System.out.println("Addition of three integers: " + math.add(5, 10, 15)); // 30
        System.out.println("Addition of two doubles: " + math.add(5.5, 10.2)); // 15.7
    }
}

ব্যাখ্যা:

  • এখানে add নামের তিনটি মেথড আছে, যার প্রতিটিতে ভিন্ন প্যারামিটার লিস্ট আছে।
  • কম্পাইলার প্যারামিটার অনুযায়ী সঠিক মেথড বেছে নেয় এবং কার্যকর করে।

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

মেথড ওভাররাইডিং হলো প্যারেন্ট ক্লাসের একটি মেথডকে সাবক্লাসে পুনরায় সংজ্ঞায়িত করা। এটি Runtime Polymorphism হিসেবে পরিচিত, কারণ সাবক্লাসে কাস্টমাইজড মেথড রানটাইমে নির্ধারিত হয়।

শর্তাবলী:

  • প্যারেন্ট এবং চাইল্ড ক্লাসে মেথডের নাম, রিটার্ন টাইপ, এবং প্যারামিটারসমূহ একই থাকতে হবে।
  • ওভাররাইডিং মেথডের অ্যাক্সেস মডিফায়ার মূল মেথডের অ্যাক্সেস মডিফায়ারের চেয়ে বেশি সীমাবদ্ধ হতে পারবে না।

উদাহরণ: মেথড ওভাররাইডিং

class Animal {
    // প্যারেন্ট ক্লাসের মেথড
    void sound() {
        System.out.println("Animal makes a sound");
    }
}

class Dog extends Animal {
    // ওভাররাইডিং মেথড
    @Override
    void sound() {
        System.out.println("Dog barks");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myAnimal = new Animal();
        Animal myDog = new Dog(); // Upcasting

        myAnimal.sound(); // Output: Animal makes a sound
        myDog.sound();    // Output: Dog barks (ওভাররাইডিং হয়েছে)
    }
}

ব্যাখ্যা:

  • Animal ক্লাসে sound নামের একটি মেথড আছে, যা Dog সাবক্লাসে ওভাররাইড করা হয়েছে।
  • myDog.sound() কল করলে Dog এর ওভাররাইড করা মেথড কার্যকর হয়, যা Runtime Polymorphism তৈরি করে।

মেথড ওভারলোডিং এবং ওভাররাইডিং এর পার্থক্য

বৈশিষ্ট্যমেথড ওভারলোডিংমেথড ওভাররাইডিং
Polymorphism টাইপCompile-Time PolymorphismRuntime Polymorphism
কোথায় ব্যবহৃত হয়একই ক্লাসেপ্যারেন্ট ও সাবক্লাসে
মেথড সিগনেচারমেথডের নাম একই থাকে, প্যারামিটার ভিন্নমেথডের নাম ও প্যারামিটার একদম একই থাকে
অ্যাক্সেস কন্ট্রোলপ্রয়োজন নেইসাবক্লাসে মূল মেথডের অ্যাক্সেস চেয়ে বেশি সীমাবদ্ধ হতে পারে না

Polymorphism এর সুবিধা

  1. কোডের পুনরায় ব্যবহারযোগ্যতা: Polymorphism-এর মাধ্যমে একই নামের মেথডকে ভিন্ন ভিন্ন কাজের জন্য পুনঃব্যবহার করা যায়।
  2. কোডের সংক্ষিপ্ততা ও মডুলারিটি: Polymorphism কোডকে ছোট ছোট অংশে বিভক্ত করে, যা পড়া এবং বুঝতে সহজ।
  3. রানটাইম ডায়নামিজম: মেথড ওভাররাইডিং-এর মাধ্যমে প্রোগ্রামে পরিবর্তন এনে কোডকে আরও শক্তিশালী ও কার্যকর করা যায়।

উদাহরণ: ওভারলোডিং এবং ওভাররাইডিং একসাথে

class Shape {
    // Parent class method (Overriding possible in subclasses)
    public void draw() {
        System.out.println("Drawing a shape");
    }

    // Overloaded method with different parameters
    public void draw(String color) {
        System.out.println("Drawing a " + color + " shape");
    }
}

class Circle extends Shape {
    // Overriding the draw method in the subclass
    @Override
    public void draw() {
        System.out.println("Drawing a circle");
    }
}

public class Main {
    public static void main(String[] args) {
        Shape shape = new Shape();
        shape.draw();           // Output: Drawing a shape
        shape.draw("red");      // Output: Drawing a red shape (Overloaded)

        Shape circle = new Circle();
        circle.draw();          // Output: Drawing a circle (Overridden)
    }
}

সারসংক্ষেপ

Java তে Polymorphism দুটি প্রধান রূপে বিভক্ত: মেথড ওভারলোডিং এবং মেথড ওভাররাইডিং। মেথড ওভারলোডিং Compile-Time Polymorphism তৈরি করে এবং একই নামের মেথডের জন্য বিভিন্ন প্যারামিটার ব্যবহার করে ভিন্ন ভিন্ন কাজ সম্পাদন করে। মেথড ওভাররাইডিং Runtime Polymorphism তৈরি করে, যেখানে প্যারেন্ট ক্লাসের মেথডকে সাবক্লাসে পুনঃসংজ্ঞায়িত করা হয়, যা কোডকে আরও ডায়নামিক এবং মডুলার করে।

Content added By

অ্যাবস্ট্রাকশন (Abstraction) এবং ইন্টারফেস (Interface) হলো অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের (OOP) দুটি গুরুত্বপূর্ণ ধারণা। অ্যাবস্ট্রাকশন ব্যবহার করে একটি প্রোগ্রামের জটিল অংশগুলোকে লুকানো হয় এবং প্রয়োজনীয় অংশগুলো প্রদর্শন করা হয়। ইন্টারফেসের মাধ্যমে বিভিন্ন ক্লাসে সাধারণ ফাংশনালিটি সংজ্ঞায়িত করা যায় যা পরবর্তীতে বিভিন্ন ক্লাসে বাস্তবায়িত হয়।


অ্যাবস্ট্রাকশন (Abstraction)

অ্যাবস্ট্রাকশন হলো প্রোগ্রামের জটিল অংশগুলো লুকিয়ে রেখে প্রয়োজনীয় অংশগুলো দেখানোর কৌশল। এটি প্রোগ্রামের এমন অংশের ওপর ফোকাস করে যা প্রোগ্রাম ব্যবহারকারীদের জন্য গুরুত্বপূর্ণ, আর অন্যান্য জটিল বিষয়গুলো আড়ালে রাখা হয়।

অ্যাবস্ট্রাকশন কিভাবে কাজ করে?

Java-তে অ্যাবস্ট্রাকশন করতে abstract ক্লাস এবং ইন্টারফেস ব্যবহার করা হয়। অ্যাবস্ট্রাকশন দ্বারা প্রোগ্রামের জটিল অংশ লুকিয়ে রেখে শুধুমাত্র প্রয়োজনীয় অংশগুলো প্রকাশ করা যায়।

Abstract ক্লাস

abstract ক্লাস হলো এমন একটি ক্লাস যার মধ্যে abstract এবং non-abstract উভয় ধরনের মেথড থাকতে পারে। abstract মেথড এমন একটি মেথড যেটির শুধু ডিক্লারেশন থাকে, কিন্তু কোনো ইমপ্লিমেন্টেশন থাকে না। এই মেথডের ইমপ্লিমেন্টেশন পরে সাবক্লাসে প্রদান করা হয়।

উদাহরণ:

// Abstract ক্লাস
abstract class Vehicle {
    // Abstract মেথড
    public abstract void start();

    // Non-abstract মেথড
    public void stop() {
        System.out.println("Vehicle stopped.");
    }
}

// চাইল্ড ক্লাস যা abstract মেথড ইমপ্লিমেন্ট করে
class Car extends Vehicle {
    @Override
    public void start() {
        System.out.println("Car started.");
    }
}

public class Main {
    public static void main(String[] args) {
        Car myCar = new Car();
        myCar.start(); // আউটপুট: Car started.
        myCar.stop();  // আউটপুট: Vehicle stopped.
    }
}

ব্যাখ্যা:

  • Vehicle হলো একটি abstract ক্লাস, যার মধ্যে একটি abstract মেথড start() এবং একটি সাধারণ মেথড stop() রয়েছে।
  • Car ক্লাস Vehicle কে ইনহেরিট করে এবং start() মেথড ইমপ্লিমেন্ট করে।

ইন্টারফেস (Interface)

ইন্টারফেস হলো এমন একটি রেফারেন্স টাইপ যা শুধু মেথডের সিগনেচার (declaration) সংজ্ঞায়িত করে। ইন্টারফেসের মেথডগুলোর কোনো ইমপ্লিমেন্টেশন থাকে না। যেকোনো ক্লাস ইন্টারফেসকে ইমপ্লিমেন্ট করে তার মেথডগুলোর ইমপ্লিমেন্টেশন প্রদান করে।

ইন্টারফেস কিভাবে কাজ করে?

Java-তে interface কীওয়ার্ড ব্যবহার করে ইন্টারফেস তৈরি করা হয়। ইন্টারফেস একধরনের সম্পূর্ণ অ্যাবস্ট্রাকশন প্রদান করে, কারণ এতে শুধুমাত্র মেথডের সিগনেচার থাকে এবং কোনো ইমপ্লিমেন্টেশন থাকে না।

উদাহরণ:

// ইন্টারফেস
interface Vehicle {
    void start();
    void stop();
}

// Car ক্লাস যা Vehicle ইন্টারফেসকে ইমপ্লিমেন্ট করে
class Car implements Vehicle {
    @Override
    public void start() {
        System.out.println("Car started.");
    }

    @Override
    public void stop() {
        System.out.println("Car stopped.");
    }
}

public class Main {
    public static void main(String[] args) {
        Car myCar = new Car();
        myCar.start(); // আউটপুট: Car started.
        myCar.stop();  // আউটপুট: Car stopped.
    }
}

ব্যাখ্যা:

  • Vehicle ইন্টারফেসে start() এবং stop() মেথড ডিক্লারেশন রয়েছে।
  • Car ক্লাস Vehicle ইন্টারফেসকে ইমপ্লিমেন্ট করে এবং start() এবং stop() মেথডের ইমপ্লিমেন্টেশন প্রদান করে।

অ্যাবস্ট্রাকশন বনাম ইন্টারফেসের পার্থক্য

বৈশিষ্ট্যAbstract ক্লাসইন্টারফেস
মেথড টাইপAbstract এবং non-abstract মেথড উভয়ই থাকতে পারেশুধুমাত্র abstract মেথড থাকে (Java 8 পর্যন্ত)
ফিল্ড টাইপভেরিয়েবল থাকতে পারেশুধুমাত্র public static final কনস্ট্যান্ট থাকে
ইনহেরিটেন্সএকাধিক abstract ক্লাস ইনহেরিট করা যায় নাএকাধিক ইন্টারফেস ইমপ্লিমেন্ট করা যায়
ব্যবহারসাধারণ এবং নির্দিষ্ট বৈশিষ্ট্য সংজ্ঞায়িত করতেসম্পূর্ণ অ্যাবস্ট্রাকশন এবং বহুল ব্যবহারযোগ্যতা
কীওয়ার্ডabstract এবং extendsinterface এবং implements

অ্যাবস্ট্রাকশন এবং ইন্টারফেস কেন ব্যবহার করা হয়?

  1. কোড পুনরায় ব্যবহারযোগ্যতা বৃদ্ধি: অ্যাবস্ট্রাকশন এবং ইন্টারফেসের মাধ্যমে কোডকে মডুলার করে রাখা যায়।
  2. কোডের স্থিতিশীলতা: অ্যাবস্ট্রাকশন এবং ইন্টারফেসের ব্যবহার কোডের জটিলতা কমায় এবং বিভিন্ন অংশকে স্বাধীন করে।
  3. প্রবাহ নিয়ন্ত্রণ ও নিরাপত্তা বৃদ্ধি: প্রোগ্রামের প্রয়োজনীয় অংশ ব্যবহারকারীর সামনে দেখানো হয় এবং অপ্রয়োজনীয় অংশগুলো আড়ালে থাকে।
  4. বহু-প্রকার ব্যবহার: ইন্টারফেসের মাধ্যমে একই কাজ একাধিক ক্লাসে আলাদাভাবে ইমপ্লিমেন্ট করা যায়।

সংক্ষেপে

  • অ্যাবস্ট্রাকশন: প্রোগ্রামের জটিলতা লুকিয়ে রেখে প্রয়োজনীয় অংশ প্রকাশ করা।
    • Abstract ক্লাস: একসাথে abstract ও non-abstract মেথড রাখতে পারে।
  • ইন্টারফেস: সম্পূর্ণ অ্যাবস্ট্রাকশন প্রদান করে এবং শুধুমাত্র মেথডের সিগনেচার ধারণ করে।

অ্যাবস্ট্রাকশন এবং ইন্টারফেস OOP প্রোগ্রামিংয়ের একটি গুরুত্বপূর্ণ অংশ, যা কোডের পুনরায় ব্যবহারযোগ্যতা, মডুলারিটি এবং স্থিতিশীলতা বাড়াতে সহায়তা করে।

Content added By
Promotion

Are you sure to start over?

Loading...