Menu
CoddyTech

Luas Total

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

challenge icon

Tantangan

Mudah

Mari tambahkan fitur hebat ke ShapeCollection-mu: kemampuan untuk menghitung total luas semua bangun yang ada di dalamnya. Di sinilah polimorfisme benar-benar bersinar: koleksimu dapat memanggil :getArea() pada bangun apa pun tanpa perlu mengetahui apakah bangun itu persegi panjang atau lingkaran.

Kamu akan melanjutkan pengerjaan file proyek yang sudah ada:

  • Shape.lua: class Shape dasar milikmu (tidak berubah).
  • Rectangle.lua: class Rectangle milikmu dengan :getArea() dan :getPerimeter().
  • Circle.lua: class Circle milikmu dengan :getArea() dan :getPerimeter().
  • ShapeCollection.lua: Kembangkan class koleksimu dengan menambahkan method :getTotalArea(). Method ini harus menelusuri semua bangun yang tersimpan, memanggil :getArea() pada masing-masing bangun, lalu mengembalikan jumlah semua luasnya.
  • main.lua: Gunakan modul-modulmu, baca dimensi dari input, buat Rectangle dan Circle, tambahkan keduanya ke ShapeCollection, lalu cetak total luas semua bangun di dalam koleksi.

Keunggulan pendekatan ini adalah :getTotalArea() tidak memerlukan logika terpisah untuk persegi panjang dan lingkaran. Method ini cukup mengandalkan bahwa setiap bangun dalam koleksi memiliki method :getArea(). Kamu dapat menambahkan segitiga, segi enam, atau bangun lainnya nanti, dan perhitungan total luas akan tetap berfungsi tanpa perubahan.

Input: Tiga baris: lebar (angka), tinggi (angka), dan radius (angka).

Output: Satu baris yang berisi total luas semua bangun di dalam koleksi.

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 total luas semua bentuk dalam collection
print(collection:getTotalArea())

Semua pelajaran di Pemrograman Berorientasi Object

Latihan sendiri: Compiler Lua online