Kotlin Academy · Pelajaran

Delegasi versus Pewarisan

Pilih komposisi

Pelajaran 3 dari 413 langkah

Delegasi versus Pewarisan adalah pelajaran Kotlin Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Kotlin Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Kotlin Academy mencakup 4 pelajaran total.

Dua Cara Menggunakan Kembali

Pewarisan dan delegasi sama-sama menggunakan kembali perilaku. Pewarisan menyatakan bahwa sebuah kelas adalah jenis dari kelas lain. Delegasi menyatakan bahwa sebuah kelas memiliki kolaborator yang menjadi tujuan penerusannya.

Saran klasiknya: dahulukan komposisi daripada pewarisan.

Contoh Pewarisan

Dengan pewarisan, subkelas memperluas kelas dasar dan menimpa anggota. Kelas dasar harus bersifat open di Kotlin.

open class Animal {
    open fun sound() = "..."
}

class Dog : Animal() {
    override fun sound() = "woof"
}

fun main() {
    println(Dog().sound())
}

Contoh Delegasi

Pemakaian ulang yang sama dengan delegasi: perilakunya berada dalam anggota yang diteruskan oleh kelas.

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())
}

Kelas Dasar yang Rapuh

Pewarisan mengikat subkelas secara erat pada bagian internal kelas induknya. Perubahan pada kelas dasar dapat diam-diam merusak subkelas—masalah kelas dasar yang rapuh. Delegasi hanya bergantung pada antarmuka.

Enkapsulasi

Subkelas dapat mengakses anggota protected dan mengganti kait, sehingga dapat mengintip ke dalam kelas induk. Kelas yang mendelegasikan hanya melihat antarmuka publik, sehingga enkapsulasi tetap terjaga.

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())
}

Fleksibilitas saat Berjalan

Pewarisan menetapkan kelas induk pada waktu kompilasi. Delegasi memungkinkan Anda memasukkan implementasi yang berbeda saat program berjalan, serta mendukung pengujian yang mudah dengan implementasi tiruan.

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
}

Berbagai Perilaku

Sebuah kelas hanya dapat memperluas satu kelas induk, tetapi dapat mendelegasikan ke banyak antarmuka. Delegasi dapat berkembang dengan baik saat menggabungkan beberapa kemampuan.

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())
}

Saat Pewarisan Tepat Digunakan

Pewarisan tetap tepat untuk hubungan adalah yang benar-benar ada, dengan hierarki yang stabil dan dirancang untuk diperluas: keluarga tipe tersegel, kelas dasar kerangka kerja, serta polimorfisme pada tipe abstrak bersama.

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)))
}

Saat Delegasi Tepat Digunakan

Pilih delegasi saat Anda ingin:

  • Menggunakan ulang perilaku pada tipe-tipe yang tidak saling berkaitan
  • Menggabungkan beberapa kemampuan
  • Menjaga keterikatan tetap rendah dan pengujian tetap mudah
  • Membungkus serta menghias implementasi yang sudah ada

Perbandingan Berdampingan

Pewarisan: satu kelas induk, keterikatan erat, ditetapkan saat kompilasi, adalah. Delegasi: banyak kolaborator, keterikatan longgar, dapat ditukar saat program berjalan, memiliki. Kotlin membuat delegasi menjadi murah dengan by, sehingga keseimbangannya condong ke komposisi.

Pilihan Awal yang Praktis

Aturan yang baik: mulailah dengan delegasi. Beralihlah ke pewarisan hanya ketika hierarki adalah yang nyata dan stabil mulai terbentuk. Dengan begitu, desain tetap fleksibel dan tahan terhadap perubahan.

Pemeriksaan Singkat

Uji pemahaman Anda tentang delegasi dibandingkan dengan pewarisan.

Ringkasan

Anda telah membandingkan kedua pendekatan tersebut:

  • Pewarisan: adalah, satu kelas induk, keterikatan erat
  • Delegasi: memiliki, banyak kolaborator, keterikatan longgar
  • Utamakan komposisi; gunakan pewarisan untuk hierarki hubungan adalah yang stabil

Berikutnya: pola dekorator praktis dengan delegasi.

Gratis untuk memulai

Belajar Kotlin dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
51
Pelajaran
203

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Delegasi versus Pewarisan” gratis?

Ya — teks lengkap “Delegasi versus Pewarisan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Kotlin Academy, upgrade ke CoddyKit PRO. Kursus Kotlin Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Delegasi versus Pewarisan”?

Pilih komposisi Kamu berlatih Kotlin Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Kotlin Academy?

Tidak diperlukan pengalaman sebelumnya. Kotlin Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Delegasi versus Pewarisan” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Kotlin Academy ini?

Ya. Setiap pelajaran Kotlin Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Kata Kunci by
  2. Mendelegasikan kepada Anggota
  3. Delegasi versus Pewarisan
  4. Pola Praktis
← Kembali ke Kotlin Academy