복습 - 직원 디렉터리
Coddy Kotlin 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 57개 중 21번째.
챌린지
중급클래스 계층 구조로 직원 디렉터리를 만드세요.
Person(name)은 추상 클래스입니다. 추상role()을 선언하고card()를 구현하며,Ada (staff in sales)를 반환하고 재정의할 수 없습니다.Staff(name, department)는 열려 있으며, 역할은staff in sales입니다.Manager(name, department)는Staff를 확장하고 비공개 팀을 유지합니다.hire(member)는 구성원이 같은 부서에서 일하고, 관리자가 아니며, 아직 팀에 속해 있지 않을 때true를 반환하고 해당 구성원을 추가하며, 그 외의 경우에는false를 반환합니다. 역할은Staff의 역할 뒤에, 2 reports가 이어지는 형태입니다(super를 사용하세요).Contractor(name, days)는Person을 확장하며, 역할은contractor for 30 days입니다.
제공된 코드는 staff Ada sales, manager Bo sales, contractor Cy 30 또는 hire Bo Ada 명령을 읽습니다(이름을 알 수 없는 경우에도 hired 또는 refused를 출력합니다). 그런 다음 추가된 순서대로 모든 사람의 카드를 출력합니다.
코드는 Person.kt, Staff.kt, Manager.kt 및 Contractor.kt에 작성하세요. Main.kt에는 제공된 입력/출력 코드가 있으며 편집할 수 없습니다.
직접 해보기
fun main() {
// 제공된 입력/출력 코드: 그대로 유지하세요
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())
}
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: Kotlin 플레이그라운드