Ringkasan: Peran Karyawan
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan Lua di Coddy. Pelajaran 42 dari 70.
Tantangan
MudahMari kita buat sistem bonus penggajian yang menunjukkan bagaimana berbagai jenis karyawan dapat menggunakan antarmuka yang sama sambil menghitung bonus dengan cara berbeda!
Kamu akan membuat hierarki karyawan sederhana dalam empat file:
Employee.lua: class dasar yang mewakili karyawan umum. Konstruktor:new(name, salary)harus menyimpan nama dan gaji karyawan. Sertakan method:calculateBonus()yang mengembalikan 10% dari gaji (bonus default untuk karyawan biasa), dan method:getName()untuk mengambil nama.Manager.lua: class turunan yang mewarisi dari Employee. Manager bekerja keras dan mendapat imbalan: override:calculateBonus()agar mengembalikan 20% dari gajinya, bukan nilai default 10%.Intern.lua: class turunan lain yang mewarisi dari Employee. Intern menerima bonus tetap sebesar50, berapa pun gajinya: override:calculateBonus()agar selalu mengembalikan jumlah ini.main.lua: Satukan semuanya! Baca tiga input untuk nama karyawan dan tiga input untuk gaji mereka. Buat satu Manager, satu Intern, dan satu Employee biasa. Simpan ketiganya dalam sebuah tabel, lalu lakukan perulangan dan cetak nama setiap orang diikuti bonus yang dihitung.
Kamu akan menerima enam input:
- Nama Manager
- Gaji Manager
- Nama Intern
- Gaji Intern
- Nama karyawan biasa
- Gaji karyawan biasa
Untuk setiap karyawan dalam kumpulanmu (dengan urutan: Manager, Intern, Employee), cetak nama dan bonusnya dengan format berikut:
{name}: {bonus}Misalnya, jika inputnya adalah Alice, 5000, Bob, 2000, Carol, dan 3000, outputnya seharusnya:
Alice: 1000
Bob: 50
Carol: 300Perhatikan bagaimana pemanggilan :calculateBonus() yang sama menghasilkan nilai berbeda berdasarkan tipe setiap karyawan: inilah polymorphism! Manager mendapat 20% dari 5000, Intern mendapat 50 tetap, dan Employee biasa mendapat 10% dari 3000.
Coba sendiri
-- main.lua: Gabungkan semuanya
local Employee = require('Employee')
local Manager = require('Manager')
local Intern = require('Intern')
-- Baca input
local managerName = io.read()
local managerSalary = tonumber(io.read())
local internName = io.read()
local internSalary = tonumber(io.read())
local employeeName = io.read()
local employeeSalary = tonumber(io.read())
-- TODO: Buat satu Manager, satu Intern, dan satu Employee biasa
-- TODO: Simpan ketiganya dalam tabel (dengan urutan: Manager, Intern, Employee)
-- TODO: Ulangi setiap entri dalam tabel dan cetak nama serta bonus masing-masing orang
-- Format: {name}: {bonus}
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