Menu
CoddyTech

Kumpulan Bentuk

Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan Lua di Coddy. Pelajaran 59 dari 70.

challenge icon

Tantangan

Mudah

Setelah 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

Latihan sendiri: Compiler Lua online