Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Программирование Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4 5 6 7 8 9 10   вперед  Ctrl      все
 Выгоды контрактного программирования (design by contract)  [new]
Siemargl
Member

Откуда: 010100
Сообщений: 6013
Обсуждение технологии. Зачем она нужна в практических применениях.
Описание тут
http://ru.wikipedia.org/wiki/Контрактное_программирование

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

Альтернативное мнение.
Гаджимурадов Рустам
P.S. Для несведущих - это всего лишь очередной лозунг.
Маркетинга там в разы больше, чем пользы. А в тех
случаях, когда это действительно нужно, оно, в общем-то,
применялось задолго до появления самого лозунга.
24 окт 10, 23:31    [9666338]     Ответить | Цитировать Сообщить модератору
 Re: Выгоды контрактного программирования (design by contract)  [new]
tchingiz
Member

Откуда:
Сообщений: 31437
Ну, Рустам мастер сам лозунгами бросаться.
В дизайне по контракту совершенно на теоретико множественных пальцах (то есть понятно) рассказывают, почему в примере Роберта Мартина с квадратами и прямоугольниками нельзя делать наследование.
Потому, что сужается область определения функций SetWidth. Нарушается простое формальное правило.
А другие авторы, включая Роберта Мартина, нагоняют мистический ооп туман.


//https://www.sql.ru/forum/actualthread.aspx?bid=24&tid=756625&pg=5#9543547
//https://www.sql.ru/forum/actualthread.aspx?tid=756625&pg=5#9590420
24 окт 10, 23:50    [9666374]     Ответить | Цитировать Сообщить модератору
 Re: Выгоды контрактного программирования (design by contract)  [new]
_мод
Guest
tchingiz
В дизайне по контракту совершенно на теоретико множественных пальцах (то есть понятно) рассказывают, почему в примере Роберта Мартина с квадратами и прямоугольниками нельзя делать наследование.

Равенство сторон - это инвариант, который усилен в подтипе. Так что все правильно - квадрат подтип прямоугольника.
25 окт 10, 11:51    [9668236]     Ответить | Цитировать Сообщить модератору
 Re: Выгоды контрактного программирования (design by contract)  [new]
egorych
Member

Откуда: и зачем;
Сообщений: 4739
_мод
tchingiz
В дизайне по контракту совершенно на теоретико множественных пальцах (то есть понятно) рассказывают, почему в примере Роберта Мартина с квадратами и прямоугольниками нельзя делать наследование.

Равенство сторон - это инвариант, который усилен в подтипе. Так что все правильно - квадрат подтип прямоугольника.
так же как и подтип ромба. Так чего же выбрать?
25 окт 10, 12:05    [9668362]     Ответить | Цитировать Сообщить модератору
 Re: Выгоды контрактного программирования (design by contract)  [new]
_мод
Guest
egorych
так же как и подтип ромба. Так чего же выбрать?

А не надо ничго выбирать. Просто методы ромба можно попытаться применить к квадрату.
25 окт 10, 12:56    [9668805]     Ответить | Цитировать Сообщить модератору
 Re: Выгоды контрактного программирования (design by contract)  [new]
ViPRos
Member

Откуда:
Сообщений: 9380
_мод
egorych
так же как и подтип ромба. Так чего же выбрать?

А не надо ничго выбирать. Просто методы ромба можно попытаться применить к квадрату.

а нафига все эти нагромаждения?
нет никаких методов ни у ромба ни у квадрата ни какого то угольника
25 окт 10, 13:01    [9668852]     Ответить | Цитировать Сообщить модератору
 Re: Выгоды контрактного программирования (design by contract)  [new]
ZyK_BotaN
Member

Откуда: Новгород-Северский
Сообщений: 102997
egorych
_мод
tchingiz
В дизайне по контракту совершенно на теоретико множественных пальцах (то есть понятно) рассказывают, почему в примере Роберта Мартина с квадратами и прямоугольниками нельзя делать наследование.

Равенство сторон - это инвариант, который усилен в подтипе. Так что все правильно - квадрат подтип прямоугольника.
так же как и подтип ромба. Так чего же выбрать?

множественное наследование
25 окт 10, 13:40    [9669343]     Ответить | Цитировать Сообщить модератору
 Re: Выгоды контрактного программирования (design by contract)  [new]
egorych
Member

Откуда: и зачем;
Сообщений: 4739
ZyK_BotaN
множественное наследование
это чтобы запутаться окончательно :-)) и ещё, до кучи, виртуально отнаследоваться от класса "четырёхугольники"
25 окт 10, 14:06    [9669648]     Ответить | Цитировать Сообщить модератору
 Re: Выгоды контрактного программирования (design by contract)  [new]
_мод
Guest
ViPRos
нет никаких методов ни у ромба ни у квадрата ни какого то угольника

Это верно. Есть процедуры/функции, у которых параметры имеют заданный тип (например прямоугольник). Их можно применять к подтипам (к квадратам), но с учетом инвариантов подтипа (равенство сторон).
25 окт 10, 14:15    [9669752]     Ответить | Цитировать Сообщить модератору
 Re: Выгоды контрактного программирования (design by contract)  [new]
ZyK_BotaN
Member

Откуда: Новгород-Северский
Сообщений: 102997
egorych
ZyK_BotaN
множественное наследование
это чтобы запутаться окончательно :-)) и ещё, до кучи, виртуально отнаследоваться от класса "четырёхугольники"

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

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

также при вызове конструктора Rectangle(w = 5, h = 5), будет создан прямоугольник, а не квадрат, аналогично тому что 1.0 - double, а не int.
25 окт 10, 14:16    [9669769]     Ответить | Цитировать Сообщить модератору
 Re: Выгоды контрактного программирования (design by contract)  [new]
ZyK_BotaN
Member

Откуда: Новгород-Северский
Сообщений: 102997
_мод
ViPRos
нет никаких методов ни у ромба ни у квадрата ни какого то угольника

Это верно. Есть процедуры/функции, у которых параметры имеют заданный тип (например прямоугольник). Их можно применять к подтипам (к квадратам), но с учетом инвариантов подтипа (равенство сторон).

если ввести понятия иммутабельности, то метод работающий с прямоугольником, не обязан знать о существовании типа квадрат, все по аналогии с примитивными типами double и int.
если в ф-ю корня передать целое число, то она вернет значиние типа double.
так и тут, если метод возвращает модифицированную фигуру(например увеличивает ширину в 2 раза), то никаких проблем не будет.
25 окт 10, 14:21    [9669814]     Ответить | Цитировать Сообщить модератору
 Re: Выгоды контрактного программирования (design by contract)  [new]
_мод
Guest
ZyK_BotaN
метод работающий с прямоугольником, не обязан знать о существовании типа квадрат

конечно, не обязан
ZyK_BotaN
если в ф-ю корня передать целое число, то она вернет значиние типа double.
так и тут, если метод возвращает модифицированную фигуру(например увеличивает ширину в 2 раза), то никаких проблем не будет.

Со значениями функций проблем нет - они возвращают заданный для них тип. Проблемы есть при передаче параметром подтипа вместо заданного типа - может сработать инвариант подтипа и процедура выдаст ошибку.
25 окт 10, 15:00    [9670269]     Ответить | Цитировать Сообщить модератору
 Re: Выгоды контрактного программирования (design by contract)  [new]
Siemargl
Member

Откуда: 010100
Сообщений: 6013
ZyK_BotaN,

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

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

Структура инвариантов должна идти строго параллельно со структурой наследования.
25 окт 10, 15:04    [9670315]     Ответить | Цитировать Сообщить модератору
 Re: Выгоды контрактного программирования (design by contract)  [new]
ZyK_BotaN
Member

Откуда: Новгород-Северский
Сообщений: 102997
_мод
Проблемы есть при передаче параметром подтипа вместо заданного типа - может сработать инвариант подтипа и процедура выдаст ошибку.

я уже выше написал - решение неизменяемость объектов.

или я я заблуждаюсь? укажи мне пример, где будет ошибка.
25 окт 10, 15:06    [9670346]     Ответить | Цитировать Сообщить модератору
 Re: Выгоды контрактного программирования (design by contract)  [new]
Siemargl
Member

Откуда: 010100
Сообщений: 6013
_мод
Со значениями функций проблем нет - они возвращают заданный для них тип. Проблемы есть при передаче параметром подтипа вместо заданного типа - может сработать инвариант подтипа и процедура выдаст ошибку.

1. Это на уровне языка должно быть определено (забыл термин), что допускается возвращать наследников.
2. Если даже возвращается родительский тип, будет проверен инвариант этого типа. И ошибки не будет.

Если наследуются типы с инвариантами, проверяются все инварианты всех родителей. По очереди.
25 окт 10, 15:07    [9670365]     Ответить | Цитировать Сообщить модератору
 Re: Выгоды контрактного программирования (design by contract)  [new]
ZyK_BotaN
Member

Откуда: Новгород-Северский
Сообщений: 102997
Siemargl
ZyK_BotaN,

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

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

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


ну у квадрата все стороны равны, какому из инвариантов прямоугольника это противоречит?
25 окт 10, 15:07    [9670374]     Ответить | Цитировать Сообщить модератору
 Re: Выгоды контрактного программирования (design by contract)  [new]
Siemargl
Member

Откуда: 010100
Сообщений: 6013
ZyK_BotaN,

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

А кто будет наследником у прямоугольника или ромба???
Тогда может и будет окончательный выбор.
25 окт 10, 15:18    [9670499]     Ответить | Цитировать Сообщить модератору
 Re: Выгоды контрактного программирования (design by contract)  [new]
ZyK_BotaN
Member

Откуда: Новгород-Северский
Сообщений: 102997
Siemargl
ZyK_BotaN,

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

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

Siemargl

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

например квадрат.
25 окт 10, 15:21    [9670540]     Ответить | Цитировать Сообщить модератору
 Re: Выгоды контрактного программирования (design by contract)  [new]
Siemargl
Member

Откуда: 010100
Сообщений: 6013
ZyK_BotaN,

Я пример приводил, если квадрат - родитель. Ну я думаю, что идею пояснил.
25 окт 10, 15:43    [9670849]     Ответить | Цитировать Сообщить модератору
 Re: Выгоды контрактного программирования (design by contract)  [new]
_мод
Guest
ZyK_BotaN
я уже выше написал - решение неизменяемость объектов.

Это да. Только это уже чисто функциональное программирование.
25 окт 10, 16:01    [9671067]     Ответить | Цитировать Сообщить модератору
 Re: Выгоды контрактного программирования (design by contract)  [new]
ZyK_BotaN
Member

Откуда: Новгород-Северский
Сообщений: 102997
Siemargl
ZyK_BotaN,

Я пример приводил, если квадрат - родитель. Ну я думаю, что идею пояснил.

а, тогда все ок.
квадрат ведь не родитель, а дочерний класс классов ромб и прямоугольник.
25 окт 10, 16:06    [9671137]     Ответить | Цитировать Сообщить модератору
 Re: Выгоды контрактного программирования (design by contract)  [new]
egorych
Member

Откуда: и зачем;
Сообщений: 4739
Siemargl
Инварианты могут разными, в зависимости от задачи:
-вариант 1. Все стороны равны.
-вариант 2. Все углы прямые
-вариант 3. Сторон не больше 4х.
-вариант 4. Величины длины и ширины могут меняться независимо
25 окт 10, 16:26    [9671392]     Ответить | Цитировать Сообщить модератору
 Re: Выгоды контрактного программирования (design by contract)  [new]
Siemargl
Member

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

Где тут инвариант = условие для проверки?
25 окт 10, 16:31    [9671462]     Ответить | Цитировать Сообщить модератору
 Re: Выгоды контрактного программирования (design by contract)  [new]
egorych
Member

Откуда: и зачем;
Сообщений: 4739
Siemargl
Где тут инвариант = условие для проверки?
ну да, не инвариант, но постусловие для соответстующего сеттера
-Изменение ширины не влияет на значение длины
-Изменение длины не влияет на значение ширины
их мы тоже в DbC надо проверять, кмк?
25 окт 10, 16:39    [9671558]     Ответить | Цитировать Сообщить модератору
 Re: Выгоды контрактного программирования (design by contract)  [new]
Siemargl
Member

Откуда: 010100
Сообщений: 6013
egorych,

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

А инвариант - это корректность объекта в целом. Т.е. например, инвариантом может допускаться side effect, если после вызова объет остался верен инварианту, например квадратом (пусть и увеличенным вдвое).
25 окт 10, 16:45    [9671650]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4 5 6 7 8 9 10   вперед  Ctrl      все
Все форумы / Программирование Ответить