Luas Total
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan Lua di Coddy. Pelajaran 60 dari 70.
Tantangan
MudahMari 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
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