powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Выгоды контрактного программирования (design by contract)
25 сообщений из 232, страница 1 из 10
Выгоды контрактного программирования (design by contract)
    #36916999
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обсуждение технологии. Зачем она нужна в практических применениях.
Описание тут
http://ru.wikipedia.org/wiki/Контрактное_программирование

Мое мнение - обязательна для больших проектов, разделения проекта на библиотечную часть и код верхнего уровня.

Альтернативное мнение.
Гаджимурадов РустамP.S. Для несведущих - это всего лишь очередной лозунг.
Маркетинга там в разы больше, чем пользы. А в тех
случаях, когда это действительно нужно, оно, в общем-то,
применялось задолго до появления самого лозунга.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36917011
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, Рустам мастер сам лозунгами бросаться.
В дизайне по контракту совершенно на теоретико множественных пальцах (то есть понятно) рассказывают, почему в примере Роберта Мартина с квадратами и прямоугольниками нельзя делать наследование.
Потому, что сужается область определения функций SetWidth. Нарушается простое формальное правило.
А другие авторы, включая Роберта Мартина, нагоняют мистический ооп туман.


///topic/756625&pg=5#9543547
// http://www.sql.ru/forum/actualthread.aspx?tid=756625&pg=5#9590420
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36917569
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tchingizВ дизайне по контракту совершенно на теоретико множественных пальцах (то есть понятно) рассказывают, почему в примере Роберта Мартина с квадратами и прямоугольниками нельзя делать наследование.

Равенство сторон - это инвариант, который усилен в подтипе. Так что все правильно - квадрат подтип прямоугольника.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36917620
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_модtchingizВ дизайне по контракту совершенно на теоретико множественных пальцах (то есть понятно) рассказывают, почему в примере Роберта Мартина с квадратами и прямоугольниками нельзя делать наследование.

Равенство сторон - это инвариант, который усилен в подтипе. Так что все правильно - квадрат подтип прямоугольника.так же как и подтип ромба. Так чего же выбрать?
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36917750
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
egorychтак же как и подтип ромба. Так чего же выбрать?
А не надо ничго выбирать. Просто методы ромба можно попытаться применить к квадрату.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36917767
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_модegorychтак же как и подтип ромба. Так чего же выбрать?
А не надо ничго выбирать. Просто методы ромба можно попытаться применить к квадрату.
а нафига все эти нагромаждения?
нет никаких методов ни у ромба ни у квадрата ни какого то угольника
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36917933
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych_модtchingizВ дизайне по контракту совершенно на теоретико множественных пальцах (то есть понятно) рассказывают, почему в примере Роберта Мартина с квадратами и прямоугольниками нельзя делать наследование.

Равенство сторон - это инвариант, который усилен в подтипе. Так что все правильно - квадрат подтип прямоугольника.так же как и подтип ромба. Так чего же выбрать?
множественное наследование
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36918017
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNмножественное наследованиеэто чтобы запутаться окончательно :-)) и ещё, до кучи, виртуально отнаследоваться от класса "четырёхугольники"
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36918044
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ViPRosнет никаких методов ни у ромба ни у квадрата ни какого то угольника
Это верно. Есть процедуры/функции, у которых параметры имеют заданный тип (например прямоугольник). Их можно применять к подтипам (к квадратам), но с учетом инвариантов подтипа (равенство сторон).
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36918051
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychZyK_BotaNмножественное наследованиеэто чтобы запутаться окончательно :-)) и ещё, до кучи, виртуально отнаследоваться от класса "четырёхугольники"
уже неявно это сделали.
от читырех угольников и равносторонних фигур отнаследовали ромб.
от равноугольного многоугольника и четырехугольника отнаследовали прямоугольник.
от от ромба и прямоугольника отнаследовали квадрат.

чтобы избежать проблем,
например у четырех угольника можно менять стороны независимо, а у квадрата стороны равные,
объекты нужно сделать иммутабельными.

также при вызове конструктора Rectangle(w = 5, h = 5), будет создан прямоугольник, а не квадрат, аналогично тому что 1.0 - double, а не int.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36918062
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_модViPRosнет никаких методов ни у ромба ни у квадрата ни какого то угольника
Это верно. Есть процедуры/функции, у которых параметры имеют заданный тип (например прямоугольник). Их можно применять к подтипам (к квадратам), но с учетом инвариантов подтипа (равенство сторон).
если ввести понятия иммутабельности, то метод работающий с прямоугольником, не обязан знать о существовании типа квадрат, все по аналогии с примитивными типами double и int.
если в ф-ю корня передать целое число, то она вернет значиние типа double.
так и тут, если метод возвращает модифицированную фигуру(например увеличивает ширину в 2 раза), то никаких проблем не будет.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36918177
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZyK_BotaNметод работающий с прямоугольником, не обязан знать о существовании типа квадрат
конечно, не обязан
ZyK_BotaNесли в ф-ю корня передать целое число, то она вернет значиние типа double.
так и тут, если метод возвращает модифицированную фигуру(например увеличивает ширину в 2 раза), то никаких проблем не будет.
Со значениями функций проблем нет - они возвращают заданный для них тип. Проблемы есть при передаче параметром подтипа вместо заданного типа - может сработать инвариант подтипа и процедура выдаст ошибку.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36918189
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaN,

Иммутабельность тут ни при чем. Начали с проверки инвариантов объекта.

Инварианты могут разными, в зависимости от задачи:
-вариант 1. Все стороны равны.
-вариант 2. Все углы прямые
-вариант 3. Сторон не больше 4х.

Структура инвариантов должна идти строго параллельно со структурой наследования.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36918196
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_модПроблемы есть при передаче параметром подтипа вместо заданного типа - может сработать инвариант подтипа и процедура выдаст ошибку.
я уже выше написал - решение неизменяемость объектов.

или я я заблуждаюсь? укажи мне пример, где будет ошибка.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36918204
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_модСо значениями функций проблем нет - они возвращают заданный для них тип. Проблемы есть при передаче параметром подтипа вместо заданного типа - может сработать инвариант подтипа и процедура выдаст ошибку.
1. Это на уровне языка должно быть определено (забыл термин), что допускается возвращать наследников.
2. Если даже возвращается родительский тип, будет проверен инвариант этого типа. И ошибки не будет.

Если наследуются типы с инвариантами, проверяются все инварианты всех родителей. По очереди.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36918206
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglZyK_BotaN,

Иммутабельность тут ни при чем. Начали с проверки инвариантов объекта.

Инварианты могут разными, в зависимости от задачи:
-вариант 1. Все стороны равны.
-вариант 2. Все углы прямые
-вариант 3. Сторон не больше 4х.

Структура инвариантов должна идти строго параллельно со структурой наследования.

ну у квадрата все стороны равны, какому из инвариантов прямоугольника это противоречит?
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36918231
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaN,

Если наследник - прямоугольник, то подходят 2 и 3.
Если наследник ромб - то 1 и 3.

А кто будет наследником у прямоугольника или ромба???
Тогда может и будет окончательный выбор.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36918241
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglZyK_BotaN,

Если наследник - прямоугольник, то подходят 2 и 3.
Если наследник ромб - то 1 и 3.

чей наследник?

Siemargl
А кто будет наследником у прямоугольника или ромба???

например квадрат.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36918313
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaN,

Я пример приводил, если квадрат - родитель. Ну я думаю, что идею пояснил.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36918373
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZyK_BotaNя уже выше написал - решение неизменяемость объектов.
Это да. Только это уже чисто функциональное программирование.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36918393
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglZyK_BotaN,

Я пример приводил, если квадрат - родитель. Ну я думаю, что идею пояснил.
а, тогда все ок.
квадрат ведь не родитель, а дочерний класс классов ромб и прямоугольник.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36918446
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglИнварианты могут разными, в зависимости от задачи:
-вариант 1. Все стороны равны.
-вариант 2. Все углы прямые
-вариант 3. Сторон не больше 4х.-вариант 4. Величины длины и ширины могут меняться независимо
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36918459
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychSiemarglИнварианты могут разными, в зависимости от задачи:
-вариант 1. Все стороны равны.
-вариант 2. Все углы прямые
-вариант 3. Сторон не больше 4х.-вариант 4. Величины длины и ширины могут меняться независимо
Где тут инвариант = условие для проверки?
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36918483
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglГде тут инвариант = условие для проверки?ну да, не инвариант, но постусловие для соответстующего сеттера
-Изменение ширины не влияет на значение длины
-Изменение длины не влияет на значение ширины
их мы тоже в DbC надо проверять, кмк?
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36918496
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych,

Да. Но это чуть другое из DbC.
-Изменение ширины не влияет на значение длины - это отсутствие побочных эффектов.

А инвариант - это корректность объекта в целом. Т.е. например, инвариантом может допускаться side effect, если после вызова объет остался верен инварианту, например квадратом (пусть и увеличенным вдвое).
...
Рейтинг: 0 / 0
25 сообщений из 232, страница 1 из 10
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Выгоды контрактного программирования (design by contract)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]