Итоги — Иерархия сотрудников
Часть раздела Объектно-ориентированное программирование путешествия по C# на Coddy — урок 24 из 70.
Задание
ЛегкоДавайте создадим систему иерархии сотрудников, которая объединит все концепции наследования из этой главы. Вы создадите структуру компании, в которой различные типы сотрудников имеют общие атрибуты, но рассчитывают свои бонусы по-разному.
Вы организуете свой код в четырех файлах:
Employee.cs: Определите базовый классEmployeeв пространстве именCompany. У каждого сотрудника естьName(string) иSalary(decimal). Создайте конструктор, который принимает оба значения. Добавьтеvirtualметод с именемCalculateBonus(), который по умолчанию возвращает 10% от зарплаты. ПереопределитеToString(), чтобы он возвращал"{Name} - ${Salary}".Manager.cs: Определите классManagerв пространстве именCompany, который наследуется отEmployee. У менеджеров есть дополнительное свойствоTeamSize(int). Конструктор должен принимать имя, зарплату и размер команды, используяbaseдля инициализации родительского класса. ПереопределитеCalculateBonus(), чтобы он возвращал 15% от зарплаты плюс $50 за каждого члена команды. ПереопределитеToString(), чтобы он возвращал"{Name} - ${Salary} (Manager, Team: {TeamSize})".Developer.cs: Определите классDeveloperв пространстве именCompany, который наследуется отEmployee. У разработчиков есть свойствоProgrammingLanguage(string). Конструктор принимает имя, зарплату и язык программирования. ПереопределитеCalculateBonus(), чтобы он возвращал 12% от зарплаты. ПереопределитеToString(), чтобы он возвращал"{Name} - ${Salary} (Developer, {ProgrammingLanguage})".Program.cs: В основном файле создайте по одному экземпляру каждого типа сотрудников, используя входные данные. Сохраните все три объекта в массиве ссылокEmployee, чтобы продемонстрировать полиморфизм. Пройдите циклом по массиву и выведите результатToString()каждого сотрудника, а затем их бонус.
Вы получите восемь входных данных:
- Имя базового сотрудника
- Зарплата базового сотрудника
- Имя менеджера
- Зарплата менеджера
- Размер команды менеджера
- Имя разработчика
- Зарплата разработчика
- Язык программирования разработчика
Выведите информацию о каждом сотруднике и его бонус в следующем формате:
{ToString result}
Bonus: ${CalculateBonus result}Например, если входные данные: John, 50000, Sarah, 80000, 5, Mike, 70000 и C#, вывод должен быть следующим:
John - $50000
Bonus: $5000
Sarah - $80000 (Manager, Team: 5)
Bonus: $12250
Mike - $70000 (Developer, C#)
Bonus: $8400Обратите внимание, как каждый тип сотрудника рассчитывает бонусы по-разному, но при этом вы можете обрабатывать их все через один массив Employee. В этом и заключается сила сочетания наследования с полиморфизмом!
Попробуйте сами
using System;
using Company;
class Program
{
public static void Main(string[] args)
{
// Считать входные данные базового сотрудника
string empName = Console.ReadLine();
decimal empSalary = Convert.ToDecimal(Console.ReadLine());
// Считать входные данные менеджера
string mgrName = Console.ReadLine();
decimal mgrSalary = Convert.ToDecimal(Console.ReadLine());
int teamSize = Convert.ToInt32(Console.ReadLine());
// Считать входные данные разработчика
string devName = Console.ReadLine();
decimal devSalary = Convert.ToDecimal(Console.ReadLine());
string progLang = Console.ReadLine();
// TODO: Создать одного Employee, одного Manager и одного Developer
// TODO: Сохранить всех троих в массив Employee для демонстрации полиморфизма
// TODO: Пройти циклом по массиву и вывести ToString() и бонус каждого сотрудника
// Формат:
// {результат ToString}
// Bonus: ${результат CalculateBonus}
}
}
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыПространства имен и директивыВведение в классы и объектыКлючевое слово 'this'Методы и параметрыПоля и свойстваКонструкторыИнициализаторы объектовИтоги — Простой калькулятор4Наследование
Основы синтаксиса наследования (:)Ключевое слово 'base'Ключевые слова Virtual и OverrideЗапечатанные классыБазовый класс 'object'Итоги — Иерархия сотрудников7Продвинутые возможности
Перегрузка операторовИндексаторы (this[])Переопределение ToString()Методы расширенияПовторение — Пользовательский список10Паттерны проектирования. Часть 1
Введение в паттерны проектированияПотокобезопасный SingletonПаттерн FactoryПаттерн Observer (События)Паттерн Strategy13Финальные испытания
Платформа для онлайн-обученияКомпонент игрового персонажаСервис аренды транспорта2Свойства и статические члены
Автоматически реализуемые свойстваСвойства только для чтения и записиСтатические поля и методыСтатические классыЧлены в виде выражений5Полиморфизм и интерфейсы
Полиморфизм: компиляция vs выполнениеИнтерфейс vs абстрактный классМножественные интерфейсыЯвные интерфейсыUpcasting и DowncastingИтоги: Калькулятор фигур8Продвинутые концепции ООП
Композиция вместо наследованияGenerics (классы и методы)Делегаты и событияАтрибуты и рефлексияIDisposable и оператор usingОсновы Dependency Injection11Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн Компоновщик3Архитектура классов
Экземплярные и статические данныеКлючевые слова 'readonly' и 'const'Опорные поляПовторение — Менеджер банковских счетов6Инкапсуляция
Модификаторы доступаСвойства для инкапсуляцииРеализация скрытия данныхПаттерны неизменяемостиИтоги — Записи студентов9Переменное количество аргументов
Ключевое слово 'params'Необязательные параметрыИменованные аргументыПерегрузка методов