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

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

A>Да, но семантика IReadOnlyList отличается от предложенного тобой IImmutableList.

Вроде же обсудили это. Что еще непонятно?

I>>Скажем, уточнением будет наследник IImmutableList, у которого добавится, скажем, immutable операция "GetDistinctItems"

I>>Расширением будет такой наследник IImmutableList, у которого добавится операция "MakeDistinct" с семантикой изменения по месту.

A>Так расширение типа или модуля\интерфейса?


Интерфейса. Здесь никакой разницы с типами нет. Интерфейс привязан к семантике, а потому ведет себя как тип. Интерфейсы используют и вне семантики, это не запрещено, собственно там и огребают проблемы.

A>Понятно, что если само "расширение интерфейса" определить как "противоположность уточнению типа", то доказательство твоего утверждения становится тавтологичным.


Цитирую себя "Уточнение — это подмножество некоторого типа. Например — круги определенного цвета. Расширение — объединение множеств. Например множества кругов и прямогольников."

A>Я же предлагаю придерживаться более интуитивного определения "расширения интерфейса" как просто добавление новых методов.


Это "интуитивное" и является причной проблемы.

A>Тогда получается, что при наследовании интерфейсов обычно (за ислючением экзотики с пустыми интерфейсами-наследниками) происходит расширение интерфейса.

A>"Хорошо" это когда такое наследование сопровождается сужением\уточнением типа (тут принято вспоминать LSP, контрактное программирование и т.п.)

Ну да, только что определили интуитивно, и тут же надо учить, как же правильно пользоваться этим интуитивным
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.