Rangkuman: Hierarki Bentuk
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan Lua di Coddy. Pelajaran 36 dari 70.
Tantangan
MudahMari kita bangun hierarki bentuk yang lengkap dari awal! Kamu akan membuat class induk Shape yang menjadi induk bagi semua bentuk, lalu membuat class turunan Circle dan Square yang masing-masing memiliki properti unik sekaligus berbagi fungsi umum.
Kamu akan menyusun kodemu dalam empat file:
Shape.lua: Class dasar yang akan menjadi induk bagi semua bentuk. Class ini harus memiliki konstruktor:new(color)yang menyimpan warna bentuk, serta method:getColor()yang mengembalikan warna tersebut. Karena properti ini digunakan bersama, setiap bentuk, baik lingkaran maupun persegi, akan memiliki warna.Circle.lua: Class turunan yang mewarisi dari Shape. Konstruktor:new(color, radius)harus memanggil konstruktor induk untuk menetapkan warna, lalu menambahkan radius sebagai atribut unik. Sertakan method:describe()yang mencetak detail lingkaran.Square.lua: Class turunan lain yang mewarisi dari Shape. Konstruktor:new(color, side)juga harus memanggil konstruktor induk, lalu menyimpan panjang sisi. Sertakan juga method:describe()untuk persegi.main.lua: Satukan semuanya dengan membuat instance dari kedua bentuk dan menunjukkan bahwa keduanya mewarisi dari Shape dengan benar sekaligus mempertahankan properti uniknya.
Kamu akan menerima dua input:
- Data Circle: warna dan radius yang dipisahkan dengan koma (misalnya,
blue,5) - Data Square: warna dan panjang sisi yang dipisahkan dengan koma (misalnya,
red,4)
Di file utamamu, buat Circle dan Square dengan nilai yang diberikan. Lalu cetak hal-hal berikut pada baris terpisah:
- Panggil
:describe()pada lingkaran - Panggil
:describe()pada persegi - Cetak warna lingkaran menggunakan
:getColor() - Cetak warna persegi menggunakan
:getColor()
Method :describe() untuk Circle harus mencetak:
Circle with radius {radius}Method :describe() untuk Square harus mencetak:
Square with side {side}Misalnya, jika inputnya adalah blue,5 dan red,4, outputnya harus seperti berikut:
Circle with radius 5
Square with side 4
blue
redIni menunjukkan pola pewarisan yang lengkap: kedua bentuk mewarisi :getColor() dari Shape (keduanya tidak pernah mendefinisikannya sendiri), sementara masing-masing memiliki atribut unik dan method :describe()!
Coba sendiri
-- main.lua: Gabungkan semuanya
local Circle = require('Circle')
local Square = require('Square')
-- Baca input untuk lingkaran (color,radius)
local circleInput = io.read()
local circleColor, circleRadius = circleInput:match("([^,]+),([^,]+)")
circleRadius = tonumber(circleRadius)
-- Baca input untuk persegi (color,side)
local squareInput = io.read()
local squareColor, squareSide = squareInput:match("([^,]+),([^,]+)")
squareSide = tonumber(squareSide)
-- TODO: Buat instance Circle dengan warna dan jari-jari yang diberikan
-- TODO: Buat instance Square dengan warna dan panjang sisi yang diberikan
-- TODO: Panggil :describe() pada lingkaran
-- TODO: Panggil :describe() pada persegi
-- TODO: Cetak warna lingkaran menggunakan :getColor()
-- TODO: Cetak warna persegi menggunakan :getColor()
Semua pelajaran di Pemrograman Berorientasi Object
1Konsep "Self"
Tabel dengan Fungsi'self' EksplisitSintaks Titik DuaTitik vs Titik DuaRangkuman, Titik Bergerak4Proyek: Bank Digital
Penyiapan Proyekmethod Setoran7Polimorfisme & Overriding
Menimpa methodMemanggil method indukDuck TypingAntarmuka UmumMemeriksa TipeRingkasan: Peran Karyawan10Proyek: Pengelola Bentuk
Penyiapan Proyekclass Rectangleclass Circlemethod KelilingKumpulan BentukLuas TotalSaring Bentuk2Pola Prototype untuk class
Konsep PrototypeMenghubungkan dengan __indexKonstruktor :new()Menginisialisasi AtributInstans yang MandiriRangkuman: Pabrik Mobil5Pembebanan Operator dalam OOP
Menjumlahkan ObjekMengurangkan ObjekMenggabungkan ObjekMembandingkan Objek (<, >)Ulasan: Aritmetika Dompet8Enkapsulasi
Konvensi PenamaanClosure untuk PrivasiAkses melalui ClosureTabel Hanya-BacaLogika ValidasiRangkuman: Brankas Aman11Pola Desain (Ringan)
Fungsi FactoryTabel SingletonPola IteratorObserver (Listener)Rangkuman, Factory Logger3State dan Behavior pada object
Variabel InstansGetter methodSetter methodProperty TerhitungMemformat stringPemeriksaan KesetaraanRangkuman: Nilai Siswa6Dasar-Dasar Pewarisan
Menyiapkan PewarisanMewarisi methodMemperluas KonstruktorMenambahkan method untuk ChildSama vs UnikRangkuman: Hierarki BentukLatihan sendiri: Compiler Lua online