Re[13]: Мнение: объектно-ориентированное программирование — к
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 03.10.19 14:38
Оценка: 1 (1)
Здравствуйте, artelk, Вы писали:

I>>Я про контракт, он уже кривой шо сабля.

A>Нормальный контракт, имя интерфейса просто неоднозначное.
A>Давай аналогичный пример приведу: IList наследует от IEnumerable.

Чем тебя не устраивает пример с IImmutableList ? Вроде все предельно ясно.

Наследование IList от IEnumerable это уточнение, т.к. любой IList, в т.ч. пустой, сохраняет все гарантии доставшиеся в наследство от IEnumerable, а именно — возможность простой итерации.

На самом деле у интерфейса всегда есть семантика. Это не просто какие то названия, это соглашение вида синтаксис->семантика. Проблемы возникают именно из за этой семантики. Если закрыть глаза на семантику, то нет разницы, что от чего наследовать.

Игнорируя семантику можно определить наследник IList где Add удаляет, а не добавляет, и возвращает не позицю, а рандом. А можно ICircle пронаследовать от IRectangle. Никто ведь не запрещает и это не только скомпилируется, но и заработает

A>>>Мой вопрос остается в силе.

I>>Я дал подобный ответ на примере IImmutableList — каким образом расширение интерфейса может всё сломать.
A>Уфф.. давай с другой стороны. Что ты называешь расширением модуля. Когда при наследовании интерфейсов он не расширяется?

Это не мой термин Уточнение — это подмножество некоторого типа. Например — круги определенного цвета. Расширение — объединение множеств. Например множества кругов и прямогольников.
Скажем, уточнением будет наследник IImmutableList, у которого добавится, скажем, immutable операция "GetDistinctItems"
Расширением будет такой наследник IImmutableList, у которого добавится операция "MakeDistinct" с семантикой изменения по месту.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.