অ্যাবস্ট্রাক্ট ক্লাস এবং ফাইনাল কিওয়ার্ড স্কালা প্রোগ্রামিং ভাষার গুরুত্বপূর্ণ বৈশিষ্ট্য। এগুলি ক্লাসের বিশেষ বৈশিষ্ট্য এবং ইনহেরিটেন্স (Inheritance) সম্পর্কিত বিভিন্ন কনসেপ্টের সঙ্গে সম্পর্কিত। এখানে স্কালার অ্যাবস্ট্রাক্ট ক্লাস এবং ফাইনাল কিওয়ার্ডের ব্যবহার এবং উদাহরণ আলোচনা করা হলো।
১. অ্যাবস্ট্রাক্ট ক্লাস (Abstract Class)
অ্যাবস্ট্রাক্ট ক্লাস এমন একটি ক্লাস যা সম্পূর্ণভাবে বাস্তবায়িত (implemented) না হয়ে কিছু অংশ অনির্দিষ্ট (abstract) রেখে দেয়, এবং এই ক্লাসটি সরাসরি ইনস্ট্যান্স (instance) তৈরি করা যায় না। অ্যাবস্ট্রাক্ট ক্লাসকে অন্য ক্লাস দ্বারা সম্প্রসারিত (extend) করা হয় এবং সেখানে এর অনির্দিষ্ট মেথডগুলির বাস্তবায়ন প্রদান করা হয়।
অ্যাবস্ট্রাক্ট ক্লাস ডিফাইন করা:
// অ্যাবস্ট্রাক্ট ক্লাস
abstract class Animal {
// একটি abstract মেথড (এটি কোন কোড রিটার্ন করে না)
def sound(): String
// একটি সাধারণ মেথড
def sleep(): String = {
"Sleeping..."
}
}
// অ্যাবস্ট্রাক্ট ক্লাস ইনহেরিট করে বাস্তব ক্লাস
class Dog extends Animal {
// abstract মেথডের বাস্তবায়ন
def sound(): String = {
"Bark"
}
}
object AbstractClassExample {
def main(args: Array[String]): Unit = {
val dog = new Dog()
println(dog.sound()) // Output: Bark
println(dog.sleep()) // Output: Sleeping...
}
}এখানে:
- abstract class:
Animalএকটি অ্যাবস্ট্রাক্ট ক্লাস, যার মধ্যে একটিabstractমেথডsound()রয়েছে। - abstract method:
sound()মেথডের কোনও বাস্তবায়ন নেই, এটি কেবল ক্লাসের উপরে ডিফাইন করা হয়েছে। - real class:
Dogক্লাসAnimalক্লাসের উপরে ইনহেরিট করে এবংsound()মেথডের বাস্তবায়ন প্রদান করেছে।
২. ফাইনাল কিওয়ার্ড (Final Keyword)
ফাইনাল কিওয়ার্ড ব্যবহৃত হয় ক্লাস, মেথড বা ভ্যারিয়েবলগুলিতে, যার মাধ্যমে সেই ক্লাস, মেথড বা ভ্যারিয়েবলটি পরিবর্তন বা ইনহেরিট করা যাবে না।
২.১ ফাইনাল ক্লাস
যখন একটি ক্লাসে final কিওয়ার্ড ব্যবহার করা হয়, তখন সে ক্লাসটি অন্য কোন ক্লাস দ্বারা ইনহেরিট (extend) করা যাবে না। অর্থাৎ, সেই ক্লাসটি ফাইনাল হয়ে যায়।
final class Car {
def start(): Unit = {
println("Car started!")
}
}
// এই কোডটি কম্পাইল হবে না, কারণ Car ক্লাসটি ফাইনাল
// class ElectricCar extends Car { } // Error: Cannot extend final classএখানে:
Carক্লাসেfinalকিওয়ার্ড দেওয়া হয়েছে, ফলে এটি আর কোনো ক্লাস দ্বারা ইনহেরিট করা যাবে না।
২.২ ফাইনাল মেথড
যদি একটি মেথডে final কিওয়ার্ড ব্যবহার করা হয়, তাহলে সেই মেথডটি ওভাররাইড (override) করা যাবে না।
class Vehicle {
final def move(): Unit = {
println("Vehicle is moving")
}
}
class Car extends Vehicle {
// এই কোডটি কম্পাইল হবে না, কারণ move() মেথডটি ফাইনাল
// override def move(): Unit = {
// println("Car is moving")
// }
}এখানে:
move()মেথডেfinalকিওয়ার্ড ব্যবহৃত হয়েছে, যার কারণে এটি override করা যাবে না।
২.৩ ফাইনাল ভ্যারিয়েবল
ফাইনাল ভ্যারিয়েবল এমন একটি ভ্যারিয়েবল, যার মান একবার অ্যাসাইন করার পর তা আর পরিবর্তন করা যায় না।
object FinalVariableExample {
final val maxSpeed = 120
def main(args: Array[String]): Unit = {
// maxSpeed = 130 // Error: reassignment to val
println(s"Max Speed: $maxSpeed")
}
}এখানে:
maxSpeedএকটি ফাইনাল ভ্যারিয়েবল, যার মান একবার নির্ধারণ করার পর তা আর পরিবর্তন করা যাবে না।
সারাংশ
- অ্যাবস্ট্রাক্ট ক্লাস: এটি এমন একটি ক্লাস যা সম্পূর্ণভাবে বাস্তবায়িত না হয়ে কিছু অংশ অনির্দিষ্ট রেখে দেয় এবং এটি সরাসরি ইনস্ট্যান্স তৈরি করতে পারে না। এটি ইনহেরিট করে অন্যান্য ক্লাসে তার অনির্দিষ্ট অংশগুলোর বাস্তবায়ন করা হয়।
- ফাইনাল কিওয়ার্ড:
- ফাইনাল ক্লাস: এটি এমন একটি ক্লাস যা অন্য কোন ক্লাস দ্বারা ইনহেরিট করা যাবে না।
- ফাইনাল মেথড: এটি এমন একটি মেথড যা ওভাররাইড করা যাবে না।
- ফাইনাল ভ্যারিয়েবল: এটি এমন একটি ভ্যারিয়েবল যার মান একবার অ্যাসাইন করার পর তা আর পরিবর্তন করা যায় না।
এগুলি স্কালার ইনহেরিটেন্স, ক্লাস, এবং অবজেক্ট মডেলিংয়ে গুরুত্বপূর্ণ ভূমিকা পালন করে এবং কোডকে আরো সুরক্ষিত ও কার্যকরী করে তোলে।
Read more