Menu
Coddy logo textTech

Итоги: Иерархия сотрудников

Часть раздела Объектно-ориентированное программирование путешествия по Dart на Coddy. Урок 42 из 110.

challenge icon

Задание

Легко

Давайте создадим полноценную систему иерархии сотрудников, которая объединит все концепции наследования из этой главы. Вы создадите базовый класс сотрудника и расширите его специализированными ролями, каждая из которых обладает своим уникальным поведением.

Вы организуете свой код в двух файлах:

  • employee.dart: Определите здесь иерархию сотрудников:
    • Базовый класс Employee со свойствами String name, double salary и int id. Включите конструктор и метод getDetails(), который возвращает '[name] (ID: [id]) - Salary: $[salary]'
    • Класс Manager, который расширяет Employee и добавляет свойство int teamSize. Используйте super-параметры для унаследованных полей. Переопределите getDetails(), чтобы он возвращал детали родителя, за которыми следует ', Team: [teamSize] members'
    • Класс Developer, который расширяет Employee и добавляет свойство String language. Переопределите getDetails(), чтобы он возвращал детали родителя, за которыми следует ', Specializes in [language]'
    • Класс TeamLead, который расширяет Developer и добавляет свойство int projectCount. Переопределите getDetails(), чтобы он дополнял версию Developer, добавляя в конец ', Leading [projectCount] projects'
  • main.dart: Импортируйте файл с сотрудниками и создайте экземпляры каждого типа сотрудников:
    • Создайте Employee с именем 'Alice', зарплатой 50000.0 и id 101
    • Создайте Manager с именем 'Bob', зарплатой 75000.0, id 102 и teamSize 8
    • Создайте Developer с именем 'Carol', зарплатой 65000.0, id 103 и языком 'Dart'
    • Создайте TeamLead с именем 'David', зарплатой 80000.0, id 104, языком 'Python' и projectCount 3
    • Выведите результат вызова getDetails() для каждого сотрудника, по одному в строке

Обратите внимание, как TeamLead демонстрирует многоуровневое наследование — он расширяет Developer, который, в свою очередь, расширяет Employee. Каждый уровень добавляет свои детали, сохраняя информацию из родительских классов с помощью super.

Ожидаемый вывод:

Alice (ID: 101) - Salary: $50000.0
Bob (ID: 102) - Salary: $75000.0, Team: 8 members
Carol (ID: 103) - Salary: $65000.0, Specializes in Dart
David (ID: 104) - Salary: $80000.0, Specializes in Python, Leading 3 projects

Попробуйте сами

import 'employee.dart';

void main() {
  // TODO: Создайте Employee с именем 'Alice', зарплатой 50000.0 и id 101

  // TODO: Создайте Manager с именем 'Bob', зарплатой 75000.0, id 102 и teamSize 8

  // TODO: Создайте Developer с именем 'Carol', зарплатой 65000.0, id 103 и language 'Dart'

  // TODO: Создайте TeamLead с именем 'David', зарплатой 80000.0, id 104, language 'Python' и projectCount 3

  // TODO: Выведите getDetails() для каждого сотрудника, по одному в строке
}

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Онлайн-компилятор Dart