Итоги: Иерархия сотрудников
Часть раздела Объектно-ориентированное программирование путешествия по Dart на Coddy — урок 42 из 110.
Задание
ЛегкоДавайте создадим полноценную систему иерархии сотрудников, которая объединит все концепции наследования из этой главы. Вы создадите базовый класс сотрудника и расширите его специализированными ролями, каждая из которых обладает своим уникальным поведением.
Вы организуете свой код в двух файлах:
employee.dart: Определите здесь вашу иерархию сотрудников:- Базовый класс
Employeeсо свойствамиString name,double salaryиint id. Включите конструктор и методgetDetails(), который возвращает'[name] (ID: [id]) - Salary: $[salary]' - Класс
Manager, который расширяетEmployeeи добавляет свойствоint teamSize. Используйте супер-параметры для унаследованных полей. Переопределите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, Team: 8 members
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 с name 'Alice', salary 50000.0 и id 101
// TODO: Создайте Manager с name 'Bob', salary 75000.0, id 102 и teamSize 8
// TODO: Создайте Developer с name 'Carol', salary 65000.0, id 103 и language 'Dart'
// TODO: Создайте TeamLead с name 'David', salary 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
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн КомпоновщикПаттерн Репозиторий