class Circle
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan Lua di Coddy. Pelajaran 57 dari 70.
Tantangan
MudahMari lanjutkan membangun Shape Manager dengan menambahkan class Circle bersama Rectangle yang kamu buat pada pelajaran sebelumnya.
Kamu akan menggunakan empat file agar shape-mu tetap teratur:
Shape.lua: class Shape dasar dengan:new(name)dan:getName().Rectangle.lua: class Rectangle dari tantangan sebelumnya dengan:getArea().Circle.lua: Buat class Circle yang mewarisi Shape. Konstruktor harus menerimaradius, memanggil konstruktor induk dengan nama"Circle", dan menyimpan radius tersebut. Tambahkan method:getArea()yang menghitung luas lingkaran menggunakan rumus πr². Gunakanmath.piuntuk nilai π.main.lua: Gunakan require untuk kedua module Rectangle dan Circle. Baca tiga nilai dari input: lebar rectangle, tinggi rectangle, dan radius circle. Buat satu instance untuk setiap shape dan cetak empat baris: nama rectangle, luas rectangle, nama circle, dan luas circle.
Sekarang kedua shape memiliki antarmuka yang sama melalui pewarisan: masing-masing memiliki method :getName() dari Shape dan implementasi :getArea() sendiri. Antarmuka umum ini akan berguna dalam pelajaran berikutnya.
Input: Tiga baris: lebar (angka), tinggi (angka), dan radius (angka).
Output: Empat baris: nama rectangle, luas rectangle, nama circle, luas circle.
Coba sendiri
-- Muat module Rectangle
local Rectangle = require('Rectangle')
-- Muat module Circle
-- TODO: Muat module Circle di sini
-- Baca lebar dan tinggi dari input
local width = tonumber(io.read())
local height = tonumber(io.read())
-- TODO: Baca jari-jari dari input
-- Buat instance Rectangle baru dengan dimensi yang diberikan
local rect = Rectangle:new(width, height)
-- TODO: Buat instance Circle baru dengan jari-jari yang diberikan
-- Cetak nama dan luas persegi panjang
print(rect:getName())
print(rect:getArea())
-- TODO: Cetak nama dan luas lingkaran
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