Kumpulan Bentuk
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan Lua di Coddy. Pelajaran 59 dari 70.
Tantangan
MudahSetelah kamu memiliki class Rectangle dan Circle dengan fungsionalitas lengkap, mari buat class ShapeCollection yang dapat mengelola beberapa shape sekaligus. Ini contoh komposisi yang bagus: koleksi tersebut "memiliki" shape, bukan "menjadi" sebuah shape.
Kamu akan menambahkan file baru ke proyekmu:
Shape.lua: Base class Shape milikmu (tidak berubah).Rectangle.lua: Class Rectangle milikmu dengan:getArea()dan:getPerimeter().Circle.lua: Class Circle milikmu dengan:getArea()dan:getPerimeter().ShapeCollection.lua: Buat class baru yang menyimpan shape secara internal. Sertakan constructor:new()yang menginisialisasi list shape kosong, method:addShape(shape)yang menambahkan shape apa pun ke koleksi, dan method:count()yang mengembalikan jumlah shape yang saat ini disimpan.main.lua: Satukan semuanya dengan me-require module milikmu. Baca dimensi dari input, buat Rectangle dan Circle, tambahkan keduanya ke ShapeCollection, lalu cetak jumlah shape dalam koleksi, diikuti nama setiap shape (sesuai urutan penambahannya).
ShapeCollection tidak perlu mengetahui apakah yang disimpannya adalah rectangle atau circle. Class ini hanya menyimpan shape. Ini menunjukkan bagaimana polimorfisme memungkinkan kamu menangani berbagai tipe object secara seragam melalui interface yang sama.
Input: Tiga baris: width (angka), height (angka), dan radius (angka).
Output: Tiga baris: jumlah shape dalam koleksi, lalu nama shape pertama yang ditambahkan, kemudian nama shape kedua yang ditambahkan.
Coba sendiri
-- Muat module Rectangle
local Rectangle = require('Rectangle')
-- Muat module Circle
local Circle = require('Circle')
-- Muat module ShapeCollection
local ShapeCollection = require('ShapeCollection')
-- Baca width dan height dari input
local width = tonumber(io.read())
local height = tonumber(io.read())
local radius = tonumber(io.read())
-- Buat instance Rectangle baru dengan dimensi yang diberikan
local rect = Rectangle:new(width, height)
-- Buat instance Circle baru dengan radius yang diberikan
local circ = Circle:new(radius)
-- Buat ShapeCollection baru
local collection = ShapeCollection:new()
-- Tambahkan kedua bentuk ke collection
collection:addShape(rect)
collection:addShape(circ)
-- Cetak jumlah bentuk dalam collection
print(collection:count())
-- Cetak nama setiap bentuk sesuai urutan penambahannya
for i = 1, collection:count() do
print(collection.shapes[i]:getName())
end
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