Riepilogo - Ruoli dei dipendenti
Fa parte della sezione Programmazione orientata agli oggetti del percorso Lua di Coddy. Lezione 42 di 70.
Sfida
FacileCostruiamo un sistema di bonus per le buste paga che mostri come diversi tipi di dipendenti possano condividere la stessa interfaccia pur calcolando i bonus in modo diverso!
Creerai una piccola gerarchia di dipendenti distribuita in quattro file:
Employee.lua: la tua classe base che rappresenta un dipendente generico. Il costruttore:new(name, salary)deve memorizzare sia il nome del dipendente sia il suo stipendio. Includi un metodo:calculateBonus()che restituisce il 10% dello stipendio (il bonus predefinito per i dipendenti regolari) e un metodo:getName()per recuperare il nome.Manager.lua: una classe figlia che eredita da Employee. I manager lavorano sodo e vengono premiati: sovrascrivi:calculateBonus()affinché restituisca il 20% del loro stipendio invece del 10% predefinito.Intern.lua: un'altra classe figlia che eredita da Employee. Gli stagisti ricevono un bonus fisso di50indipendentemente dal loro stipendio: sovrascrivi:calculateBonus()affinché restituisca sempre questo importo.main.lua: metti insieme il tutto! Leggi tre input per i nomi dei dipendenti e tre input per i loro stipendi. Crea un Manager, un Intern e un Employee regolare. Memorizzali tutti e tre in una tabella, poi scorri la tabella e stampa il nome di ciascuno seguito dal bonus calcolato.
Riceverai sei input:
- Nome del Manager
- Stipendio del Manager
- Nome dell'Intern
- Stipendio dell'Intern
- Nome del dipendente regolare
- Stipendio del dipendente regolare
Per ciascun dipendente della tua raccolta (nell'ordine: Manager, Intern, Employee), stampa il nome e il bonus in questo formato:
{name}: {bonus}Per esempio, se gli input sono Alice, 5000, Bob, 2000, Carol e 3000, l'output dovrebbe essere:
Alice: 1000
Bob: 50
Carol: 300Nota come la stessa chiamata a :calculateBonus() produca risultati diversi in base al tipo di ciascun dipendente: questa è la polimorfia in azione! Il Manager riceve il 20% di 5000, l'Intern riceve un importo fisso di 50 e l'Employee regolare riceve il 10% di 3000.
Provalo tu
-- main.lua: Metti tutto insieme
local Employee = require('Employee')
local Manager = require('Manager')
local Intern = require('Intern')
-- Leggi gli 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: Crea un Manager, un Intern e un Employee normale
-- TODO: Memorizza tutti e tre in una tabella (nell'ordine: Manager, Intern, Employee)
-- TODO: Scorri la tabella e stampa il nome e il bonus di ciascuna persona
-- Formato: {name}: {bonus}
Tutte le lezioni di Programmazione orientata agli oggetti
1Il concetto di «self»
Tabelle con funzioni«self» esplicitoLa sintassi dei due puntiPunto o due puntiRiepilogo - Spostare il punto4Progetto: Banca digitale
Configurazione del progettoMetodo di deposito7Polimorfismo e sovrascrittura
Sovrascrivere i metodiChiamare i metodi della classe genitoreDuck TypingInterfaccia comuneVerificare il tipoRiepilogo - Ruoli dei dipendenti2Schema del prototipo di classe
Il concetto di prototipoCollegare con __indexIl costruttore :new()Inizializzare gli attributiIstanze indipendentiRiepilogo - Fabbrica di auto5Sovraccarico degli operatori nella OOP
Sommare oggettiSottrarre oggettiConcatenare oggettiConfrontare oggetti (<, >)Ripasso - Calcoli con il portafoglio8Incapsulamento
Convenzioni di denominazioneClosure per la privacyAccesso tramite closureTabelle di sola letturaLogica di convalidaRiepilogo - Cassaforte sicura11Modelli di progettazione (base)
Funzioni factoryTabella singletonPattern IteratorObserver (listener)Riepilogo - Factory per logger3Stato e comportamento degli oggetti
Variabili di istanzaMetodi getterMetodi setterProprietà calcolateFormattazione delle stringheControlli di uguaglianzaRiepilogo - Voto dello studente6Fondamenti dell'ereditarietà
Configurare l'ereditarietàEreditare i metodiEstendere il costruttoreAggiungere metodi alla classe figliaCondiviso vs specificoRiepilogo - Gerarchia delle formeEsercitati da solo: Compilatore Lua online