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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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