Yetki Devretme ve Kalıtım
Bileşimi seçin
Yetki Devretme ve Kalıtım, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Kotlin Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Kotlin Academy kursu toplamda 4 dersten oluşur.
Yeniden Kullanmanın İki Yolu
Kalıtım ve delegasyon davranışı yeniden kullanır. Kalıtım, bir sınıfın başka bir sınıfın türü olduğunu söyler. Delegasyon ise bir sınıfın, çağrıları yönlendirdiği bir iş birlikçiye sahip olduğunu söyler.
Klasik öneri şudur: kalıtım yerine bileşimi tercih edin.
Kalıtım Örneği
Kalıtımda alt sınıf, bir temel sınıfı genişletir ve üyeleri geçersiz kılar. Kotlin'de temel sınıfın open olması gerekir.
open class Animal {
open fun sound() = "..."
}
class Dog : Animal() {
override fun sound() = "woof"
}
fun main() {
println(Dog().sound())
}Delegasyon Örneği
Delegasyonla da aynı yeniden kullanım sağlanır: davranış, sınıfın yönlendirme yaptığı bir üyede bulunur.
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())
}Kırılgan Temel Sınıf
Kalıtım, alt sınıfı üst sınıfın iç yapısına sıkı sıkıya bağlar. Temel sınıftaki bir değişiklik, alt sınıfları fark edilmeden bozabilir — kırılgan temel sınıf sorunu. Delegasyon yalnızca arayüze bağlıdır.
Kapsülleme
Bir alt sınıf, korumalı üyelere erişebilir ve kancaları geçersiz kılarak üst sınıfın iç yapısını görebilir. Delegasyon yapan bir sınıf yalnızca herkese açık arayüzü görür ve kapsüllemeyi korur.
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())
}Çalışma Zamanında Esneklik
Kalıtım, üst sınıfı derleme zamanında sabitler. Delegasyon, farklı uygulamaları çalışma zamanında enjekte etmenize olanak tanır ve sahte nesnelerle kolay test yapmayı destekler.
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
}Birden Çok Davranış
Bir sınıf yalnızca tek bir üst sınıfı genişletebilir, ancak birçok arayüze delegasyon yapabilir. Delegasyon, çeşitli yetenekleri birleştirmek için ölçeklenebilir.
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())
}Kalıtım Ne Zaman Uygundur
Kalıtım, gerçek bir bir türüdür ilişkisi ile genişlemeye göre tasarlanmış, kararlı bir hiyerarşinin bulunduğu durumlarda hâlâ doğru seçimdir: mühürlü tür aileleri, çatı temel sınıfları ve ortak bir soyut tür üzerindeki çok biçimlilik.
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)))
}Delegasyon Ne Zaman Uygundur
Şunları istediğinizde delegasyonu seçiniz:
- İlişkisiz türler arasında davranışı yeniden kullanmak
- Birden çok yeteneği birleştirmek
- Bağımlılığı düşük, testleri kolay bir yapı kurmak
- Mevcut uygulamaları sarmalamak ve dekorasyon eklemek
Yan Yana
Kalıtım: tek bir üst sınıf, sıkı bağımlılık, derleme zamanında sabitlik, bir türüdür. Delegasyon: birçok iş birlikçi, gevşek bağımlılık, çalışma zamanında değiştirilebilirlik, birine sahiptir. Kotlin, by ile delegasyonu kolaylaştırarak dengeyi kompozisyon yönüne kaydırır.
Pratik Bir Varsayılan
İyi bir kural şudur: delegasyonla başlayınız. Kalıtıma yalnızca gerçek ve kararlı bir bir türüdür hiyerarşisi ortaya çıktığında geçiniz. Böylece tasarımlar esnek kalır ve değişikliklere dayanıklı olur.
Hızlı Kontrol
Delegasyon ile kalıtım konusundaki anlayışınızı sınayınız.
Özet
İki yaklaşımı karşılaştırdınız:
- Kalıtım: bir türüdür, tek üst sınıf, sıkı bağımlılık
- Delegasyon: birine sahiptir, birçok iş birlikçi, gevşek bağımlılık
- Kompozisyonu tercih ediniz; kararlı bir türüdür hiyerarşileri için kalıtımı kullanınız
Sıradaki konu: delegasyonla pratik dekoratör kalıpları.
Sıkça Sorulan Sorular
“Yetki Devretme ve Kalıtım” dersi ücretsiz mi?
Evet — “Yetki Devretme ve Kalıtım” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Kotlin Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Kotlin Academy kursu toplamda 4 dersten oluşur.
“Yetki Devretme ve Kalıtım” dersinde ne öğreneceğim?
Bileşimi seçin Kotlin Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Kotlin Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Kotlin Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Yetki Devretme ve Kalıtım” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Kotlin Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Kotlin Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- by Anahtar Sözcüğü
- Üyelere Yetki Devretme
- Yetki Devretme ve Kalıtım
- Uygulamalı Tasarım Kalıpları