Итоги: Иерархия сотрудников
Часть раздела Объектно-ориентированное программирование путешествия по Dart на Coddy. Урок 42 из 110.
Задание
ЛегкоДавайте создадим полноценную систему иерархии сотрудников, которая объединит все концепции наследования из этой главы. Вы создадите базовый класс сотрудника и расширите его специализированными ролями, каждая из которых обладает своим уникальным поведением.
Вы организуете свой код в двух файлах:
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и id101 - Создайте
Managerс именем'Bob', зарплатой75000.0, id102и teamSize8 - Создайте
Developerс именем'Carol', зарплатой65000.0, id103и языком'Dart' - Создайте
TeamLeadс именем'David', зарплатой80000.0, id104, языком'Python'и projectCount3 - Выведите результат вызова
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() для каждого сотрудника, по одному в строке
}
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыБиблиотеки и импортВведение в ООПКлассы и объектыКлючевое слово thisМетодыПеременные экземпляраОсновы конструкторовИтоги — Простой калькулятор4Null-безопасность
Введение в Null-безопасностьNullable и Non-Nullable типыОператоры ? и !Ключевое слово Late и Null-безопасностьNull-aware операторыNull-безопасность в классахИтоги — Система профилей пользователей7Абстрактные классы и интерфейсы
Абстрактные классыАбстрактные методыИнтерфейсы в DartНеявные интерфейсыРеализация против наследованияМножественные интерфейсыИтоги — Калькулятор фигур10Коллекции и обобщения
Обзор List, Set, MapТипобезопасные коллекцииОбобщенные классыОбобщенные методыОграничения обобщенийIterable и IteratorИтоги: Обобщенное хранилище13Продвинутые концепции ООП
Композиция против наследованияМетоды расширенияВызываемые классыЗапечатанные классы (Dart 3)Записи (Dart 3)Паттерны и сопоставление (3.0)Перечисления с методами16Проект: Управление библиотекой
Обзор проектаКлассы Book и User2Конструкторы в Dart
Конструктор по умолчаниюИменованные конструкторыСписки инициализацииКонстантные конструкторыФабричные конструкторыПеренаправляющие конструкторыИтоги — Shape Builder5Инкапсуляция
Публичные и приватные членыСоглашение о префиксе _Приватность на уровне библиотекГеттеры и сеттеры: подробный разборСкрытие данныхИтоги — Записи о студентах8Mixins
Введение в MixinsСоздание MixinsИспользование нескольких MixinsКлючевое слово on в MixinsMixin и наследованиеMixin и интерфейсИтоги: Система животных11Специальные методы
Переопределение toString()Переопределение hashCode и ==Интерфейс ComparableМетод call()Переопределение noSuchMethodПовторение — Пользовательская коллекция14Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн ObserverПаттерн Strategy3Свойства классов
Члены экземпляра и статические членыПоля Final и ConstПеременные LateСтатические методы и поляГеттеры и сеттерыИтоги — Менеджер банковского счета6Наследование
Основы наследованияКлючевое слово superПереопределение методовАннотация @overrideКлючевое слово final для классовКонструкторы и наследованиеИтоги: Иерархия сотрудников9Полиморфизм
Основы полиморфизмаПолиморфизм через интерфейсыПроверка типов во время выполненияОператоры is и asКлючевое слово covariantИтоги — Обработчик платежей12Асинхронное ООП
Futures и async/awaitОсновы StreamsКонтроллеры StreamАсинхронные конструкторыАсинхронность в методах классовИтоги — Data Fetcher15Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн КомпоновщикПаттерн РепозиторийПотренируйтесь самостоятельно: Онлайн-компилятор Dart