Показать сообщение отдельно
Старый 07.08.2018, 10:41
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 1  
Ответить с цитированием
Appleman
 
Аватар для Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 468
По умолчанию Про интерфейсы и их реализации

Друзья, я добрался-таки до интерфейсов (правы были те, кто говорил, что сам поймёшь, когда они тебе понадобятся, а до поры не трогай). Освежил инфу из Мука, GoF и сотоварищи. И один принцип меня запутал. "Наследуйте интерфейсы, а не их реализации", - отлито в граните. А вот как наследование интерфейсов сочетается (и должно ли сочетаться?) с наследованием классов - у меня пока полная каша.

Практическая задача такая. В Модели в менеджере экипировки есть слот используемого предмета (условно то, что взято в руки). Сюда могут попадать экземпляры разных классов. Создаю интерфейс IEquippable, пока всё понятно. При этом у меня есть система статусов, в т.ч. и для предметов (типа "зачарован", или "смазан ядом"). Экипируемый предмет обязан это дело поддерживать. Значит, нужен интерфейс IStatusManager.

Вопросы:
1. Если 2 интерфейса имплементируются одновременно, то я могу записать их через запятую:
Код AS3:
public class SomeClass implements IEquippable, IStatusManager
а могу унаследовать один от другого. Собственно, вопрос, на фига наследовать, если всегда можно перечислять? Вроде и гибкость бОльшая.

2. Предположим, что интерфейсы унаследованы, и один расширяет другой. Как в таком случае рекомендуется организовывать классы, использующие их? Вроде как расширять теми же методами, что описаны в интерфейсах - масло масленое. Как тогда: делать их полностью независимыми или наследовать по каким-то другим критериям, не описанным в интерфейсе? Пока такие конструкции (отдельная линия наследования "по классу" и отдельная "по интерфейсу") в голове просто не умещаются

Спасибо.
__________________
Не сломано - не чини!