Abstract Classes এবং Interfaces

Kotlin এ Object-Oriented Programming (OOP) - কটলিন (Kotlin) - Mobile App Development

354

Abstract Classes এবং Interfaces

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


১. Abstract Classes

Abstract Classes হলো এমন ক্লাস যেগুলো থেকে সরাসরি অবজেক্ট তৈরি করা যায় না। এগুলো সাধারণত কিছু সাধারণ প্রোপার্টি এবং মেথড ডিফাইন করে, যেগুলোকে সাবক্লাসে ওভাররাইড করে ইমপ্লিমেন্ট করতে হয়। কটলিনে abstract কীওয়ার্ড ব্যবহার করে একটি ক্লাস এবং মেথডকে অ্যাবস্ট্রাক্ট করা হয়।

Abstract Class উদাহরণ:

abstract class Animal {
    abstract val name: String

    abstract fun sound()

    fun eat() {
        println("$name is eating.")
    }
}

class Dog : Animal() {
    override val name: String = "Dog"

    override fun sound() {
        println("Bark")
    }
}

ব্যাখ্যা:

  • Animal হলো একটি abstract ক্লাস যা একটি abstract প্রোপার্টি (name) এবং একটি abstract মেথড (sound()) ধারণ করে।
  • eat() হলো একটি সাধারণ মেথড যা ইমপ্লিমেন্ট করা হয়েছে এবং এটি সকল সাবক্লাসে ব্যবহৃত হতে পারে।
  • Dog ক্লাসটি Animal থেকে ইনহেরিট করে এবং name এবং sound() মেথড ইমপ্লিমেন্ট করে।

Abstract Class ব্যবহার কেন?

  • যখন কিছু সাধারণ ফাংশনালিটি (যেমন: eat()) সব সাবক্লাসে শেয়ার করতে হয়, কিন্তু কিছু নির্দিষ্ট ফাংশনালিটি (যেমন: sound()) প্রতিটি সাবক্লাসে আলাদা ভাবে ইমপ্লিমেন্ট করতে হয়।
  • অ্যাবস্ট্রাক্ট ক্লাস ইনহেরিট করতে হলে কটলিনে সাবক্লাসগুলোকে open করতে হয় না, কারণ অ্যাবস্ট্রাক্ট ক্লাস ডিফল্টভাবে open থাকে।

২. Interfaces

Interfaces হলো এমন এক ধরনের ব্লুপ্রিন্ট যা শুধুমাত্র ফাংশনালিটি ঘোষণা করে। এটি ক্লাস বা অবজেক্টকে নির্দিষ্ট ফাংশনালিটি ইমপ্লিমেন্ট করতে বাধ্য করে। কটলিনে interface কীওয়ার্ড ব্যবহার করে ইন্টারফেস ডিক্লেয়ার করা হয়। কটলিনে একটি ক্লাস একাধিক ইন্টারফেস ইমপ্লিমেন্ট করতে পারে, যা মাল্টিপল ইনহেরিটেন্সের মতো কাজ করে।

Interface উদাহরণ:

interface Animal {
    val name: String

    fun sound()

    fun eat() {
        println("$name is eating.")
    }
}

class Cat : Animal {
    override val name: String = "Cat"

    override fun sound() {
        println("Meow")
    }
}

ব্যাখ্যা:

  • Animal হলো একটি ইন্টারফেস যা একটি প্রোপার্টি (name), একটি ফাংশন (sound()), এবং একটি ডিফল্ট ফাংশন (eat()) ডিফাইন করে।
  • Cat ক্লাসটি Animal ইন্টারফেস ইমপ্লিমেন্ট করে এবং এতে থাকা প্রোপার্টি এবং মেথডগুলো ওভাররাইড করে।

Interface ব্যবহার কেন?

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

মাল্টিপল ইন্টারফেস ইমপ্লিমেন্ট করা:

interface Animal {
    fun sound()
}

interface Pet {
    fun play()
}

class Bird : Animal, Pet {
    override fun sound() {
        println("Chirp")
    }

    override fun play() {
        println("Bird is playing")
    }
}
  • Bird ক্লাসটি Animal এবং Pet দুটি ইন্টারফেস ইমপ্লিমেন্ট করছে এবং তাদের মেথডগুলো ওভাররাইড করেছে।

Abstract Classes এবং Interfaces-এর পার্থক্য

ফিচারAbstract ClassInterface
ইনস্ট্যান্স তৈরিইনস্ট্যান্স তৈরি করা যায় নাইনস্ট্যান্স তৈরি করা যায় না
মাল্টিপল ইনহেরিটেন্সএকটি ক্লাস একাধিক অ্যাবস্ট্রাক্ট ক্লাস ইনহেরিট করতে পারে নাএকটি ক্লাস একাধিক ইন্টারফেস ইমপ্লিমেন্ট করতে পারে
প্রোপার্টিপ্রোপার্টি হোল্ড করতে পারেশুধুমাত্র অ্যাবস্ট্রাক্ট প্রোপার্টি ঘোষণা করতে পারে
কন্সট্রাক্টরকন্সট্রাক্টর থাকতে পারেকন্সট্রাক্টর থাকতে পারে না
মেথডঅ্যাবস্ট্রাক্ট এবং নন-অ্যাবস্ট্রাক্ট মেথড থাকতে পারেশুধুমাত্র অ্যাবস্ট্রাক্ট এবং ডিফল্ট মেথড থাকতে পারে

উপসংহার

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

Content added By
Promotion

Are you sure to start over?

Loading...