Recapitulação - Hierarquia de funcionários
Parte da seção Programação Orientada a Objetos do Journey de Swift da Coddy. Lição 26 de 57.
Desafio
DifícilCrie um diretório de funcionários. Person armazena name e possui role(), que retorna person, e card(), que retorna Ada (person), construído a partir de role(). Staff: Person adiciona department, definido em seu próprio inicializador antes de super.init, e sobrescreve role() para retornar staff in <department>. Manager: Staff adiciona team (um array de Staff, vazio inicialmente), um método hire(_:) e sobrescreve role() para retornar a função de Staff seguida por , 2 reports. Contractor: Person é final, adiciona days e sobrescreve role() para retornar contractor for 30 days.
O código fornecido lê linhas staff,name,dept, manager,name,dept, contractor,name,days e hire,manager,staff (o gerente contrata um funcionário pelo nome). Ele imprime card() para cada pessoa na ordem em que foram criadas.
Seu código deve ser colocado em Person.swift, Staff.swift, Manager.swift e Contractor.swift. main.swift contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
// Código de entrada/saída fornecido: mantenha-o como está
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()) }
Todas as lições de Programação Orientada a Objetos
1Classes e Objetos
Trabalhando com ArquivosDefinindo ClassesMétodos e selfInicializadoresClasses são ReferênciasRevisão - Cartão da Biblioteca4Encapsulamento
Controle de AcessoSomente Leitura ExternaProtegendo o EstadoInicializadores que Podem FalharRevisão - Conta Bancária7Polimorfismo e Genéricos
PolimorfismoConversão de TiposFunções GenéricasTipos GenéricosRevisão - Calculadora de Formas2Structs e Tipos de Valor
StructsSemântica de ValorMétodos MutáveisStruct ou ClasseRecapitulação - Item de Inventário5Herança
SubclassesSobrescrita de métodosInicializadores e superfinal e hierarquiasRecapitulação - Hierarquia de funcionários8Protocolos Padrão
CustomStringConvertibleEquatableComparableHashableRecapitulação - Ordenação Personalizada11Projeto: Gerenciamento de Biblioteca
Livros e MembrosEmpréstimo de LivrosPratique por conta própria: Playground de Swift