স্কালা ইনহেরিটেন্স এবং পলিমরফিজম

স্কালা অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং - স্কালা প্রোগ্রামিং (Scala Programming) - Computer Programming

200

স্কালা প্রোগ্রামিং ভাষায় ইনহেরিটেন্স (Inheritance) এবং পলিমরফিজম (Polymorphism) হল অবজেক্ট-অরিয়েন্টেড প্রোগ্রামিংয়ের দুটি গুরুত্বপূর্ণ ধারণা। এই দুটি বৈশিষ্ট্য কোডের পুনঃব্যবহারযোগ্যতা এবং নমনীয়তা (flexibility) বৃদ্ধি করে।


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

ইনহেরিটেন্স হল একটি প্রক্রিয়া যার মাধ্যমে একটি ক্লাস অন্য একটি ক্লাস থেকে বৈশিষ্ট্য (ফিল্ড, মেথড) এবং আচরণ (behaviors) উত্তরাধিকার (inherit) করে। এটি কোড পুনঃব্যবহার এবং সহজেই নতুন বৈশিষ্ট্য সংযোজনের জন্য ব্যবহৃত হয়।

স্কালায়, ক্লাস ইনহেরিট করতে extends কিওয়ার্ড ব্যবহার করা হয়। এটি একটি ক্লাসকে অন্য ক্লাস থেকে উত্তরাধিকার (inherit) করার অনুমতি দেয়।

১.১ ইনহেরিটেন্স উদাহরণ

// Superclass (Parent class)
class Animal {
  def speak(): Unit = {
    println("The animal makes a sound")
  }
}

// Subclass (Child class) inherits from Animal
class Dog extends Animal {
  def speak(): Unit = {
    println("The dog barks")
  }
}

// Main object to test inheritance
object InheritanceExample {
  def main(args: Array[String]): Unit = {
    val dog = new Dog()
    dog.speak()  // Output: The dog barks

    val animal = new Animal()
    animal.speak()  // Output: The animal makes a sound
  }
}

এখানে:

  • Dog ক্লাস Animal ক্লাস থেকে ইনহেরিট করেছে, কিন্তু এটি speak() মেথডটি ওভাররাইড (override) করেছে যাতে ডগের জন্য নির্দিষ্ট আচরণ (বাক) তৈরি করা যায়।
  • Dog ক্লাস Animal ক্লাসের বৈশিষ্ট্যগুলো উত্তরাধিকার হিসেবে পেয়ে থাকে, তবে Dog ক্লাস তার নিজস্ব আচরণ প্রদান করতে পারে।

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

পলিমরফিজম হল একটি ধারণা যার মাধ্যমে একে একাধিক উপায়ে ব্যবহার করা যায়। এটি এক বা একাধিক মেথড বা অপারেশনকে বিভিন্ন ধরনের অবজেক্টের জন্য বিভিন্ন উপায়ে ব্যবহার করতে দেয়।

পলিমরফিজম দুটি ধরনের হতে পারে:

  1. মেথড পলিমরফিজম (Method Polymorphism): একই নামের মেথডের বিভিন্ন বাস্তবায়ন (implementation) থাকতে পারে।
  2. অপারেটর পলিমরফিজম (Operator Polymorphism): একই অপারেটরের জন্য বিভিন্ন আর্গুমেন্টের সাথে কাজ করার ক্ষমতা।

২.১ মেথড পলিমরফিজম (Method Polymorphism)

মেথড পলিমরফিজম হল একই মেথড নামের একাধিক ভার্সন থাকা, যা বিভিন্ন আর্গুমেন্ট গ্রহণ করে বা প্যারামিটার অনুসারে বিভিন্ন আচরণ প্রদর্শন করে।

// Superclass (Parent class)
class Animal {
  def speak(): Unit = {
    println("The animal makes a sound")
  }
}

// Subclass (Child class) inherits from Animal
class Dog extends Animal {
  override def speak(): Unit = {
    println("The dog barks")
  }
}

// Another subclass (Child class)
class Cat extends Animal {
  override def speak(): Unit = {
    println("The cat meows")
  }
}

// Main object to test polymorphism
object PolymorphismExample {
  def main(args: Array[String]): Unit = {
    val dog: Animal = new Dog()  // Dog object as Animal type
    val cat: Animal = new Cat()  // Cat object as Animal type

    dog.speak()  // Output: The dog barks
    cat.speak()  // Output: The cat meows
  }
}

এখানে:

  • Dog এবং Cat ক্লাস দুটি speak() মেথডটি ওভাররাইড (override) করেছে।
  • Dog এবং Cat অবজেক্টগুলি Animal টাইপের হয়ে থাকা সত্ত্বেও, তারা তাদের নিজস্ব আচরণ প্রদর্শন করে।

২.২ অপারেটর পলিমরফিজম (Operator Polymorphism)

স্কালায় অপারেটর পলিমরফিজমের মাধ্যমে একই অপারেটরের বিভিন্ন প্রকার ব্যবহার করা যায়। এটি সাধারণত কাস্টম অপারেটর ডিফাইন করার জন্য ব্যবহৃত হয়।

class Complex(val real: Double, val imaginary: Double) {
  def +(that: Complex): Complex = {
    new Complex(this.real + that.real, this.imaginary + that.imaginary)
  }

  def display(): Unit = {
    println(s"${real} + ${imaginary}i")
  }
}

object OperatorPolymorphismExample {
  def main(args: Array[String]): Unit = {
    val complex1 = new Complex(3.0, 4.0)
    val complex2 = new Complex(1.0, 2.0)

    val result = complex1 + complex2  // Using the overloaded + operator
    result.display()  // Output: 4.0 + 6.0i
  }
}

এখানে:

  • + অপারেটরকে কাস্টমাইজ করা হয়েছে যাতে এটি দুটি Complex অবজেক্টকে যোগ করতে পারে।

৩. এবস্ট্রাকশন (Abstraction) এবং ইনহেরিটেন্স

এবস্ট্রাকশন এবং ইনহেরিটেন্স একে অপরের সাথে সম্পর্কিত। স্কালায় abstract class এবং trait এর মাধ্যমে আপনি অবজেক্ট-অরিয়েন্টেড প্রোগ্রামিংয়ের এবস্ট্রাকশন ব্যবহার করতে পারেন।

৩.১ এবস্ট্রাক্ট ক্লাস (Abstract Class)

abstract class Animal {
  def sound(): Unit  // Abstract method without implementation
}

class Dog extends Animal {
  def sound(): Unit = {
    println("Bark")
  }
}

object AbstractClassExample {
  def main(args: Array[String]): Unit = {
    val dog = new Dog()
    dog.sound()  // Output: Bark
  }
}

এখানে:

  • Animal ক্লাস একটি abstract ক্লাস, যেখানে sound() মেথডটি অ্যাবস্ট্রাক্ট (অমীমাংসিত) হিসেবে ডিফাইন করা হয়েছে।
  • Dog ক্লাসে sound() মেথডের বাস্তবায়ন (implementation) দেওয়া হয়েছে।

সারাংশ

  • ইনহেরিটেন্স হল একটি ক্লাসের বৈশিষ্ট্য এবং আচরণ অন্য ক্লাস দ্বারা উত্তরাধিকার (inherit) করার প্রক্রিয়া।
  • পলিমরফিজম হল একই নামের মেথডের বিভিন্ন বাস্তবায়ন (overloading বা overriding) বা অপারেটরের বিভিন্ন ব্যবহারের ক্ষমতা।

এগুলি স্কালায় কোডের পুনঃব্যবহারযোগ্যতা, নমনীয়তা এবং কার্যকারিতা বাড়াতে সহায়ক।

Content added By
Promotion

Are you sure to start over?

Loading...