6_Абстракци и пространства имён
Урок 6 : Абстракция и пространства имён
Абстрактные классы, интерфейсы и пространства имён - инструменты для создания гибкой архитектуры. Практика строится вокруг системы инвентаря.
Теория
- Что такое абстракция в контексте объектно-ориентированного программирования (ООП) и C#?
- Назовите два основных механизма реализации абстракции в C#. Чем они отличаются?
- В чём ключевые различия между абстрактным классом и интерфейсом?
- Чем модификатор
virtualотличается от модификатораabstract? *Что такое полиморфизм и как он связан с абстракцией?- Что такое пространство имён и какова его основная цель?
- Какие существуют способы обращения к объектам из другого пространства имён?
*Что такое pattern matching? Как работают операторыisиis not? Чем полезенswitchсwhen?
Практика
Откройте файл Lesson6.cs для выполнения заданий. Результат выводить в строку консоли.
Все создаваемые классы должны находиться в отдельном пространстве имён.
Задания
* Создайте три типа предметов: Weapon, Armor и Consumable. Они должны иметь общий метод Activate(), реализованный в родительском классе. При этом у Consumable он должен быть переопределён:
- базовый
Activate()просто выводит название предмета в консоль; Consumable.Activate()выводит сообщение об использовании и возвращаетtrue(указывая, что предмет одноразовый и должен быть удалён).
* Создайте список предметов во внешнем классе Inventory и заполните его несколькими разными предметами. Реализуйте активацию предмета по введённому индексу. Список выводить в формате:
[индекс] : {название предмета} : {тип предмета}
Обновлять вывод после каждой активации.
*** Создайте интерфейс IStorable со свойствами:
int StorageSize { get; }- сколько места занимает предмет;bool CanBeStored { get; }- можно ли хранить этот предмет.
Реализуйте интерфейс в классах предметов:
| Класс |StorageSize|CanBeStored|
|---|---|---|
|Weapon| 5 |true|
|Armor| 10 |true|
|Consumable| 1 |true|
В классеInventory:- добавьте приватное поле
List<Item> storageдля хранилища; - реализуйте метод
bool MoveToStorage(int index), который:- проверяет, что предмет по индексу существует и реализует
IStorable; - проверяет, что в хранилище достаточно места (максимум 100 единиц);
- перемещает предмет из основного инвентаря в хранилище;
- возвращает
trueпри успешном перемещении.
- проверяет, что предмет по индексу существует и реализует
- реализуйте метод
bool MoveFromStorage(int index)для обратного перемещения.
** Реализуйте управление инвентарём по следующей схеме:
- Выбор инвентаря:
1 - Основной,2 - Хранилище - Выбор действия:
- Если Основной:
1 - Активировать предмет,2 - Попытаться сложить в хранилище - Если Хранилище:
1 - Попытаться взять предмет
- Если Основной:
Реализуйте небольшой размер хранилища, чтобы не все предметы в него поместились - это покажет работу проверки вместимости.