Revisão - Diretório de Funcionários
Parte da seção Programação Orientada a Objetos do Journey de Kotlin da Coddy. Lição 21 de 57.
Desafio
MédioConstrua um diretório de funcionários como uma hierarquia de classes.
Person(name)é abstrata. Ela declara arole()abstrata e implementacard(), que retornaAda (staff in sales)e não pode ser sobrescrita.Staff(name, department)é aberta; sua função éstaff in sales.Manager(name, department)estendeStaffe mantém uma equipe privada.hire(member)retornatruee adiciona o membro quando ele trabalha no mesmo departamento, não é o gerente e ainda não está na equipe; caso contrário, retornafalse. Sua função é a função deStaffseguida por, 2 reports(usesuper).Contractor(name, days)estendePerson; sua função écontractor for 30 days.
O código fornecido lê os comandos staff Ada sales, manager Bo sales, contractor Cy 30 ou hire Bo Ada (ele imprime hired ou refused, inclusive quando um nome é desconhecido) e, em seguida, imprime o cartão de cada pessoa na ordem em que foram adicionadas.
Seu código deve estar em Person.kt, Staff.kt, Manager.kt e Contractor.kt. Main.kt contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
fun main() {
// Código de entrada/saída fornecido: mantenha-o como está
val input = generateSequence(::readLine).toList()
val people = mutableListOf<Person>()
val staff = mutableMapOf<String, Staff>()
val managers = mutableMapOf<String, Manager>()
for (cmd in input) {
val p = cmd.split(" ")
when (p[0]) {
"staff" -> Staff(p[1], p[2]).also { people.add(it); staff[it.name] = it }
"manager" -> Manager(p[1], p[2]).also { people.add(it); staff[it.name] = it; managers[it.name] = it }
"contractor" -> people.add(Contractor(p[1], p[2].toInt()))
"hire" -> {
val boss = managers[p[1]]
val worker = staff[p[2]]
println(if (boss != null && worker != null && boss.hire(worker)) "hired" else "refused")
}
}
}
for (person in people) println(person.card())
}
Todas as lições de Programação Orientada a Objetos
1Classes e Objetos
Trabalhando com ArquivosDefinindo ClassesConstrutores PrimáriosBlocos init e ValidaçãoConstrutores SecundáriosRecapitulação - Cartão da Biblioteca4Herança
Classes Abertas e SubclassesSobrescrevendo Membrossuper e ConstrutoresClasses AbstratasRevisão - Diretório de Funcionários2Propriedades e Encapsulamento
Acessores PersonalizadosModificadores de VisibilidadeSetters Privadoslazy e lateinitRevisão - Conta Bancária5Interfaces
Declarando InterfacesMétodos PadrãoMúltiplas InterfacesInterfaces como TiposRecapitulação - Métodos de Pagamento8Genéricos
Funções genéricasClasses genéricasRestrições de tipoVariância com in e outRecapitulação - Fila de prioridade11Projeto: Gerenciamento de Biblioteca
Livros e MembrosEmpréstimo de LivrosPratique por conta própria: Playground de Kotlin