Delegation কী এবং এর প্রয়োজনীয়তা
Delegation হলো একটি ডিজাইন প্যাটার্ন যা একটি অবজেক্টের কাজ বা আচরণ অন্য একটি অবজেক্টের কাছে হস্তান্তর করে। কটলিনে, এটি একটি শক্তিশালী ফিচার যা অবজেক্টের মধ্যে আচরণ এবং তথ্য ভাগাভাগি করতে সাহায্য করে। এই প্রক্রিয়ায়, একটি অবজেক্ট অন্য অবজেক্টের কার্যকলাপকে সমর্থন করে, যা কোডকে আরও সংগঠিত এবং পুনঃব্যবহারযোগ্য করে তোলে। নিচে delegation এর ধারণা, প্রয়োজনীয়তা এবং কিভাবে কাজ করে তা বিস্তারিতভাবে আলোচনা করা হলো।
১. Delegation কি?
Delegation হল একটি প্যাটার্ন যেখানে একটি অবজেক্টের কার্যকলাপ অন্য একটি অবজেক্টের কাছে হস্তান্তর করা হয়। কটলিনে, এটি একটি সহজ এবং সুসংগঠিত উপায়ে করা যায়, বিশেষ করে by কিওয়ার্ড ব্যবহার করে।
উদাহরণ:
interface Printer {
fun print()
}
class ConsolePrinter : Printer {
override fun print() {
println("Printing to console")
}
}
class FilePrinter : Printer {
override fun print() {
println("Printing to file")
}
}
class Document(private val printer: Printer) {
fun printDocument() {
printer.print() // Delegate the printing to the printer
}
}
fun main() {
val consolePrinter = ConsolePrinter()
val filePrinter = FilePrinter()
val document1 = Document(consolePrinter)
document1.printDocument() // আউটপুট: Printing to console
val document2 = Document(filePrinter)
document2.printDocument() // আউটপুট: Printing to file
}
ব্যাখ্যা:
- এখানে
Printerএকটি ইন্টারফেস যাprint()মেথড ধারণ করে।Documentক্লাসেprinterএকটি অবজেক্ট প্যারামিটার হিসেবে গ্রহণ করে এবং তারprint()মেথডকে কল করে। এইভাবে, printing-এর কাজprinterঅবজেক্টের উপর নির্ভর করে।
২. Delegation এর প্রয়োজনীয়তা
i) Code Reusability
Delegation ব্যবহার করে আপনি কোডের পুনঃব্যবহারযোগ্যতা বাড়াতে পারেন। একটি অবজেক্টের কার্যকলাপ অন্য একটি অবজেক্টের কাছে হস্তান্তর করে, আপনার কোডের পুনরাবৃত্তি কমানো যায়।
ii) Separation of Concerns
Delegation ডিজাইন প্যাটার্ন আপনার কোডের বিভিন্ন দিক আলাদা করতে সহায়ক। এটি একটি অবজেক্টের আচরণ এবং বাস্তবায়ন বিচ্ছিন্ন করে, যা কোডের পরিষ্কারতা এবং রিডেবিলিটি বাড়ায়।
iii) Flexibility and Extensibility
Delegation আপনাকে নতুন কার্যকলাপ যোগ করতে সহজ করে তোলে। উদাহরণস্বরূপ, নতুন প্রিন্টারের ক্লাস তৈরি করতে পারবেন এবং পূর্বের Document ক্লাসে তা ব্যবহার করতে পারবেন, এটি কোনও পরিবর্তন ছাড়াই।
iv) Composition Over Inheritance
Delegation ব্যবহারের মাধ্যমে আপনি বংশগতির পরিবর্তে সংমিশ্রণ ব্যবহার করে আচরণগুলি পুনঃব্যবহার করতে পারেন, যা কোডের জটিলতা কমায় এবং নমনীয়তা বাড়ায়।
৩. Kotlin এ Delegation এর বাস্তবায়ন
কটলিনে, by কিওয়ার্ড ব্যবহার করে সহজে delegation করতে পারেন। এটি একটি ক্লাসের একটি কার্যকলাপ বা বৈশিষ্ট্যকে অন্য ক্লাসের দ্বারা বাস্তবায়িত করতে সাহায্য করে।
উদাহরণ:
interface Logger {
fun log(message: String)
}
class ConsoleLogger : Logger {
override fun log(message: String) {
println("Log: $message")
}
}
class Application(logger: Logger) : Logger by logger {
fun performTask() {
log("Task is being performed") // Delegates to the logger
}
}
fun main() {
val logger = ConsoleLogger()
val app = Application(logger)
app.performTask() // আউটপুট: Log: Task is being performed
}
ব্যাখ্যা:
- এখানে
Applicationক্লাসLoggerইন্টারফেসের বাস্তবায়ন করেছে এবংbyকিওয়ার্ড ব্যবহার করেloggerএর কার্যকলাপের জন্য delegation ব্যবহার করেছে।performTask()মেথডেlog()কল করা হলে, এটিloggerঅবজেক্টেরlog()মেথডকে ডেকে আনে।
উপসংহার
Delegation কটলিনের একটি শক্তিশালী ফিচার যা কোডের পুনঃব্যবহারযোগ্যতা, স্পষ্টতা এবং নমনীয়তা বাড়ায়। এটি বংশগতির পরিবর্তে সংমিশ্রণের সুবিধা নিয়ে আসে এবং কোডের জটিলতা কমাতে সাহায্য করে। by কিওয়ার্ড ব্যবহার করে কটলিনে সহজেই delegation বাস্তবায়ন করা যায়।
Read more