Riepilogo - Gerarchia dei dipendenti
Fa parte della sezione Programmazione orientata agli oggetti del percorso Swift di Coddy. Lezione 26 di 57.
Sfida
DifficileCrea un elenco del personale. Person memorizza name e ha role(), che restituisce person, e card(), che restituisce Ada (person), costruito a partire da role(). Staff: Person aggiunge department, impostato nel proprio inizializzatore prima di super.init, e sovrascrive role() per restituire staff in <department>. Manager: Staff aggiunge team (un array di Staff, inizialmente vuoto), un metodo hire(_:) e sovrascrive role() per restituire il ruolo di Staff seguito da , 2 reports. Contractor: Person è final, aggiunge days e sovrascrive role() per restituire contractor for 30 days.
Il codice fornito legge righe staff,name,dept, manager,name,dept, contractor,name,days e hire,manager,staff (il manager assume un membro del personale usando il nome). Stampa card() per ogni persona, nell’ordine in cui è stata creata.
Il tuo codice va inserito in Person.swift, Staff.swift, Manager.swift e Contractor.swift. main.swift contiene il codice di input/output fornito e non può essere modificato.
Provalo tu
// Codice di input/output fornito: lascialo così com'è
var input: [String] = []
while let line = readLine() { input.append(line) }
var people: [Person] = []
for line in input {
let p = line.split(separator: ",").map(String.init)
switch p[0] {
case "staff": people.append(Staff(name: p[1], department: p[2]))
case "manager": people.append(Manager(name: p[1], department: p[2]))
case "contractor": people.append(Contractor(name: p[1], days: Int(p[2])!))
default:
let boss = people.first { $0.name == p[1] } as? Manager
let member = people.first { $0.name == p[2] } as? Staff
if let boss = boss, let member = member { boss.hire(member) }
}
}
for person in people { print(person.card()) }
Tutte le lezioni di Programmazione orientata agli oggetti
1Classi e oggetti
Lavorare con i fileDefinire le classiMetodi e selfInizializzatoriLe classi sono riferimentiRiepilogo - Tessera della biblioteca4Incapsulamento
Controllo degli accessiSola lettura dall’esternoProteggere lo statoInizializzatori che possono fallireRiepilogo - Conto bancario7Polimorfismo e tipi generici
PolimorfismoCasting dei tipiFunzioni genericheTipi genericiRipasso - Calcolatore di forme2Struct e tipi valore
Le structSemantica dei valoriMetodi mutantiStruct o classeRiepilogo - Articolo di inventario5Ereditarietà
SottoclassiSovrascrivere i metodiInizializzatori e superfinal e gerarchieRiepilogo - Gerarchia dei dipendenti8Protocolli standard
CustomStringConvertibleEquatableComparableHashableRiepilogo - Ordinamento personalizzato11Progetto: Gestione della biblioteca
Libri e utentiPrestito dei libriEsercitati da solo: Playground Swift