डेलीगेशन बनाम इनहेरिटेंस
composition चुनें
डेलीगेशन बनाम इनहेरिटेंस, CoddyKit पर Kotlin Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Kotlin Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Kotlin Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
पुनः उपयोग के दो तरीके
वंशागति और प्रतिनिधि-निर्देशन, दोनों ही व्यवहार का पुनः उपयोग करते हैं। वंशागति कहती है कि कोई वर्ग दूसरे वर्ग का एक प्रकार है। प्रतिनिधि-निर्देशन कहता है कि किसी वर्ग के पास एक सहयोगी है, जिसे वह काम सौंपता है।
प्रसिद्ध सलाह है: वंशागति के बजाय संयोजन को प्राथमिकता दीजिए।
वंशागति का उदाहरण
वंशागति के साथ, कोई उपवर्ग आधार-वर्ग का विस्तार करता है और सदस्यों को अधिलेखित करता है। कोटलिन में आधार-वर्ग का open होना आवश्यक है।
open class Animal {
open fun sound() = "..."
}
class Dog : Animal() {
override fun sound() = "woof"
}
fun main() {
println(Dog().sound())
}प्रतिनियोजन का उदाहरण
प्रतिनियोजन के साथ वही पुनः उपयोग: व्यवहार उस सदस्य में रहता है, जिस पर वर्ग अपने अनुरोध अग्रेषित करता है।
interface Sound { fun sound(): String }
class Bark : Sound { override fun sound() = "woof" }
class Dog(s: Sound) : Sound by s
fun main() {
println(Dog(Bark()).sound())
}नाज़ुक आधार वर्ग
विरासत उपवर्ग को उसके मूल वर्ग की आंतरिक संरचना से कसकर जोड़ देती है। आधार वर्ग में किया गया बदलाव उपवर्गों को चुपचाप तोड़ सकता है — यह नाज़ुक आधार वर्ग समस्या है। प्रतिनियोजन केवल इंटरफ़ेस पर निर्भर करता है।
आवरण
उपवर्ग संरक्षित सदस्यों तक पहुँच सकता है और विस्तार-बिंदुओं को अधिलेखित कर सकता है, जिससे वह मूल वर्ग की आंतरिक संरचना में झाँकता है। प्रतिनियोजक वर्ग केवल सार्वजनिक इंटरफ़ेस देखता है और आवरण को बनाए रखता है।
interface Counter { fun increment(): Int }
class SimpleCounter : Counter {
private var n = 0
override fun increment(): Int { n++; return n }
}
class GuardedCounter(private val c: Counter) : Counter by c {
override fun increment(): Int {
println("incrementing")
return c.increment()
}
}
fun main() {
val g = GuardedCounter(SimpleCounter())
println(g.increment())
println(g.increment())
}निष्पादन समय में लचीलापन
विरासत मूल वर्ग को संकलन समय पर निश्चित कर देती है। प्रतिनियोजन आपको निष्पादन समय पर अलग-अलग कार्यान्वयन डालने देता है, जिससे नकली कार्यान्वयनों के साथ परीक्षण आसान हो जाता है।
interface Clock { fun now(): Int }
class RealClock : Clock { override fun now() = 100 }
class FakeClock : Clock { override fun now() = 0 }
class Timer(c: Clock) : Clock by c
fun main() {
println(Timer(RealClock()).now())
println(Timer(FakeClock()).now()) // easy to test
}अनेक व्यवहार
कोई वर्ग केवल एक मूल वर्ग का विस्तार कर सकता है, लेकिन वह कई इंटरफ़ेस को प्रतिनियोजित कर सकता है। प्रतिनियोजन कई क्षमताओं को मिलाने के लिए बेहतर ढंग से विस्तृत होता है।
interface Walk { fun walk() = "walking" }
interface Swim { fun swim() = "swimming" }
class Walker : Walk
class Swimmer : Swim
class Amphibian : Walk by Walker(), Swim by Swimmer()
fun main() {
val a = Amphibian()
println(a.walk() + ", " + a.swim())
}विरासत कब उपयुक्त है
वास्तविक एक-है संबंध और स्थिर, विस्तार के लिए बनाई गई पदानुक्रम होने पर विरासत अब भी सही विकल्प है: सीलबंद प्रकार-परिवार, ढाँचे के आधार वर्ग और साझा अमूर्त प्रकार पर बहुरूपता।
sealed class Shape
class Circle(val r: Double) : Shape()
class Square(val s: Double) : Shape()
fun area(shape: Shape) = when (shape) {
is Circle -> 3.14 * shape.r * shape.r
is Square -> shape.s * shape.s
}
fun main() {
println(area(Circle(2.0)))
}प्रतिनियोजन कब उपयुक्त है
प्रतिनियोजन चुनें, जब आप:
- असंबंधित प्रकारों में व्यवहार का पुनः उपयोग करना चाहते हों
- कई क्षमताओं को मिलाना चाहते हों
- युग्मन कम और परीक्षण आसान रखना चाहते हों
- मौजूदा कार्यान्वयनों को आवृत और सज्जित करना चाहते हों
साथ-साथ तुलना
विरासत: एक मूल वर्ग, कसा हुआ युग्मन, संकलन समय पर निश्चित, एक-है। प्रतिनियोजन: अनेक सहयोगी, ढीला युग्मन, निष्पादन समय पर बदला जा सकने वाला, एक-रखता-है। Kotlin by के साथ प्रतिनियोजन को सरल बनाता है और संतुलन को संयोजन की ओर झुका देता है।
एक व्यावहारिक डिफ़ॉल्ट
एक अच्छा नियम है: प्रतिनियोजन से शुरुआत करें। विरासत पर तभी जाएँ, जब वास्तविक और स्थिर एक-है पदानुक्रम उभर आए। इससे अभिकल्पनाएँ लचीली रहती हैं और बदलावों के प्रति अधिक टिकाऊ बनती हैं।
त्वरित जाँच
प्रतिनियोजन और विरासत की अपनी समझ जाँचें।
पुनरावलोकन
आपने दोनों दृष्टिकोणों की तुलना की:
- विरासत: एक-है, एक मूल वर्ग, कसा हुआ युग्मन
- प्रतिनियोजन: एक-रखता-है, अनेक सहयोगी, ढीला युग्मन
- संयोजन को प्राथमिकता दें; स्थिर एक-है पदानुक्रमों के लिए विरासत का उपयोग करें
अगला विषय: प्रतिनियोजन के साथ व्यावहारिक सज्जाकार प्रतिमान।
एआई शिक्षक के साथ Kotlin सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 51
- पाठ
- 203
अक्सर पूछे जाने वाले प्रश्न
क्या “डेलीगेशन बनाम इनहेरिटेंस” पाठ निःशुल्क है?
हाँ — Kotlin Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “डेलीगेशन बनाम इनहेरिटेंस” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Kotlin Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“डेलीगेशन बनाम इनहेरिटेंस” में मैं क्या सीखूँगा?
composition चुनें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Kotlin Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Kotlin Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Kotlin Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“डेलीगेशन बनाम इनहेरिटेंस” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Kotlin Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Kotlin Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- by कीवर्ड
- सदस्यों को कार्य सौंपना
- डेलीगेशन बनाम इनहेरिटेंस
- व्यावहारिक पैटर्न