|
|
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
тут люди прямо жить не могут без виртуальных функций и позднего связывания - динамическая диспетчеризация ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2010, 01:57 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
tchingiz_модZyK_BotaNкак это разных? S - подтип. Т - супер тип. соответственно s принадлежит типу Т. Это только позволяет компилятору выполнить преобразование. Предупреждение все равно д.б. М.б. это ошибка программиста. без преобразования. если рассматривать нормальное наследование, а не эти идиотские примеры, как у нас, то будет понятно, что при наследовании в подкласс добавляются поля. Это увеличение на одну размерность кортежа. При преобразовании ребенка в родителя - это поле надо отбросить. Тогда об обратном преобразовании можно не мечтать, информация утеряна. дивное единодушие во мнении с классиками ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2010, 02:04 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
subsumption -- это правило категоризации, ребенок отнесен к категории (типу) родителя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2010, 02:07 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
tchingizZyK_BotaNtchingizZyK_BotaN тогда с потерей точности будет работать. но тогда преобразование нужно делать явно. с потерей точности - да. поэтому в жизни вещественные - целые ( целые - натуральне) есть, а по принципу Лисков их нельзя преобразовать. Они - разные типы. авторПусть q(x) является свойством, верным относительно объектов x некоторого типа T. Тогда q(y) также должно быть верным для объектов y типа S, где S является подтипом типа T. где здесь про перобразование типов от родительского к дочернему? я тебе рассказывал, что оно неявно всплывает. Оно всплывает у Мартина когда он рассматривает первый шаг - после преобразования ребенка в родителя вызывает родительский метод. Метод нарушает инвариант ребенка, что делает невозможным обратное преобразование в ребенка. глава type information, lost and found в теории объектов Карделли целиком посвящена сохранению всех атрибутов ребенка. Послкольку они сохраняются, сохраняется возможность обратного преобразования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2010, 02:24 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNв джаве ты не сможешь подменить объект переданный по ссылке. там явных ссылок нет.В Java все объекты - ссылки. tchingizглава type information, lost and found в теории объектов Карделли целиком посвящена сохранению всех атрибутов ребенка. Послкольку они сохраняются, сохраняется возможность обратного преобразования. В языках, где объекты только в динамической памяти - Java, .NET, D, Delphi проблем потери атрибутов нет. Преобразовывай куда хочешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2010, 09:09 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
tchingizесли рассматривать нормальное наследование, а не эти идиотские примеры, как у нас, то будет понятно, что при наследовании в подкласс добавляются поля. Это увеличение на одну размерность кортежа. При преобразовании ребенка в родителя - это поле надо отбросить. Тогда об обратном преобразовании можно не мечтать, информация утеряна. Фокус в том, что никаких (неявных) преобразований типов не д.б. вообще. А вся проблема в ЯП с жесткой типизацией. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2010, 09:49 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNу меня вся фишка в иммутабельности Чисто функциональное программирование действительно снимает все проблемы. Вот только оно никак не согласуется с парадигмой БД, в которой как раз и хранятся изменяющиеся объекты, причем очень разных типов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2010, 09:55 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
SiemarglZyK_BotaNв джаве ты не сможешь подменить объект переданный по ссылке. там явных ссылок нет.В Java все объекты - ссылки. я то в курсе. только ты не сможешь подменить объект. ведь нет операции взятия адреса. ты можешь работать с объектом только через публичные методы. а в с++, зная адрес объекта, можно его подменить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2010, 12:56 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
Siemargl Послкольку они сохраняются, сохраняется возможность обратного преобразования. В языках, где объекты только в динамической памяти - Java, .NET, D, Delphi проблем потери атрибутов нет. Преобразовывай куда хочешь.[/quot] на счет Delphi уверен? а то я когда-то писал на нем, и вроде на стеке объекты создавал. хотя точно не помню. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2010, 12:57 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
_модZyK_BotaNу меня вся фишка в иммутабельности Чисто функциональное программирование действительно снимает все проблемы. Вот только оно никак не согласуется с парадигмой БД, в которой как раз и хранятся изменяющиеся объекты, причем очень разных типов. согласен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2010, 12:58 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
_модZyK_BotaNу меня вся фишка в иммутабельности Чисто функциональное программирование действительно снимает все проблемы. Вот только оно никак не согласуется с парадигмой БД, в которой как раз и хранятся изменяющиеся объекты, причем очень разных типов. С парадигмой тоже не все очевидно. Создания битемпоральных баз данных - это практически использование иммутабельных объектов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2010, 16:06 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
--------------------------------С парадигмой тоже не все очевидно. Создания битемпоральных баз данных - это практически использование иммутабельных объектов. Сложно представить работу такой БД в многопользовательской среде ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2010, 16:31 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
_мод Сложно представить работу такой БД в многопользовательской среде А что не так в многопользовательской? Чем хуже, чем в однопользовательской? Или ты имел в виду - когда идет много обновлений? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2010, 16:42 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
_мод--------------------------------С парадигмой тоже не все очевидно. Создания битемпоральных баз данных - это практически использование иммутабельных объектов. Сложно представить работу такой БД в многопользовательской среде Erlang: http://ru.wikipedia.org/wiki/CouchDB http://ru.wikipedia.org/wiki/Mnesia K: http://kx.com/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2010, 22:19 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
Siemargltchingiz, понял про ЗПТ, типа спс за доверие. Топик скатывается. Предлагаю изобрести более наглядный пример, чем квадратики и поля чисел. ZyK_BotaN, пример слишком тривиален (и дажи при том ты ромб выбросил, как неудобный=) и неопределены аксиомы, чтобы на нем тренировать. для классического примера Мартина я их записал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2010, 03:36 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
_модZyK_BotaNкак это разных? S - подтип. Т - супер тип. соответственно s принадлежит типу Т. Это только позволяет компилятору выполнить преобразование. Предупреждение все равно д.б. М.б. это ошибка программиста. во первых, S подкласс, T надкласс. во вторых, не ругаются. Из подкласса в надкласс присваивать можно. Это не ошибка. Это такое поведение компиляторов было заложено в них и постулировалось. А потом начались сомнения и Лисков придумала принцип. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2010, 03:39 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
SiemarglZyK_BotaNв джаве ты не сможешь подменить объект переданный по ссылке. там явных ссылок нет.В Java все объекты - ссылки. tchingizглава type information, lost and found в теории объектов Карделли целиком посвящена сохранению всех атрибутов ребенка. Послкольку они сохраняются, сохраняется возможность обратного преобразования. В языках, где объекты только в динамической памяти - Java, .NET, D, Delphi проблем потери атрибутов нет. Преобразовывай куда хочешь. не имеет значения где живут объекты. Классики (Карделли и Абади в теории объектов) разрешили думать в наивной модели памяти, где переменная, объявленная классом, - это ссылка на запись. При присвоении и передаче параметров не происходит никакого преобразования значений ( то есть записи). происходит преобразование вида ссылки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2010, 03:58 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
parameter passing and assignment copy references, not the associated attribute records. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2010, 04:02 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
tchingiz_модZyK_BotaNкак это разных? S - подтип. Т - супер тип. соответственно s принадлежит типу Т. Это только позволяет компилятору выполнить преобразование. Предупреждение все равно д.б. М.б. это ошибка программиста. во первых, S подкласс, T надкласс. во вторых, не ругаются. Из подкласса в надкласс присваивать можно. Это не ошибка. так уже для порядку http://www.intuit.ru/department/se/oopbases/14/2.html Предположим, что для структуры наследования на рисунке вверху объявлены следующие сущности: Код: plaintext Тогда допустимы следующие присваивания: Код: plaintext 1. Эти команды присваивают в качестве значения сущности, обозначающей многоугольник, сущность, обозначающую прямоугольник в первом случае, и сущность, обозначающую треугольник - во втором. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2010, 04:36 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNegorychназови его makeRectangle() и вопросы уйдут. Если я работаю с только с квадратами, на кой хрен мне сдался прямоугольник??? и да, я понимаю, что код не скомпилится, и я буду долго ломать голову, почему, потом, наконец, залезу с исходник твоего класса, если он у меня есть, или напишу тучу unit-тестов, чтобы выяснить, как работает твой класс. что-бы выяснить как работает мой класс нужно миниммум усилий. нет ни виртуальных ф-й, ни исключительных ситуаций. На месте прямоугольника, квадрат работает точь-в-точь как прямоугольник. - это главный принцип. принцип подстановки Лисков. а то что ты предложил ему противоречит. 1 на месте прямоугольника, квадрат не должен работать в точь-в-точь как прямоугольник. 2 им можно пользоваться точь-в-точь как прямоугольником, но при этом он остается квадратом пысы если он остался квадратом, его можно присвоить обратно назад в переменную, обьявленную как квадрат. если его можно присвоить обратно в переменную, обьявленную как квадрат, то он остался квадратом. то есть, мое предложение о восстановлении является условием тогда и только тогда когда выполняется инвариант типа. Пока явного указания не нашел. Зато нашел в Бертране Мейере (автор программирования по контракту) вот такой текст http://www.intuit.ru/department/se/oopbases/14/9.html Предположим теперь, что к объекту типа B, достижимому через сущность типа A, применяется статическое связывание. При этом из-за того, что соответствующая версия процедуры rA , как правило, не будет поддерживать необходимый инвариант (как, например, depositACCOUNT1 для объектов типа ACCOUNT2 или displayWINDOW для объектов типа BUTTON), будет получаться неверный объект (например, объект класса ACCOUNT2 с неправильным полем balance или объект класса BUTTON, неправильно показанный на экране). Такой результат - объект, не удовлетворяющий инварианту своего класса, т.е. основным, универсальным ограничениям на все объекты такого вида - является одним из самых страшных событий, которые могут случиться во время выполнения программы. Если такая ситуация может возникнуть, то нечего надеяться на верный результат вычисления. здесь В - ребенок, А - родитель, статическое связывание - ранне связывание == вызов метода родителя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2010, 05:25 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
tchingiz, вот да, именно это я и пытался донести нашему общему другу ZiK_BotaN. PS используя его технику легко отнаследовать квадрат от круга, например.. Но это же абсурд PSS tchigiz, красивенько получилось :-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2010, 12:21 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
egorych PS используя его технику легко отнаследовать квадрат от круга, например.. Но это же абсурд дай пример. мне тут обещали, используя мою технику, отнаследовать прямоугольник от квадрата, но я не увидел этого. Моя техника базировалась на том, что квадрат всегда является прямоугольником, наоборот уже не верно. а кругом квадрат не может являться в принципе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2010, 17:37 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
tchingiz 1 на месте прямоугольника, квадрат не должен работать в точь-в-точь как прямоугольник. может все же не обязан, но все же может? здесь я вижу проблему с одним инвариантом - равенство сторон. но мое решение базировалось на принципе неизменяемых данных, и здесь не может нарушится данный инвариант. ведь квадрат является прямоугольником? значит мы можем с ним делать все, что делаем с прямоугольником(при этом возможно получая в качестве результата прямоугольник) + мы можем добавить новые методы, которые могут работать только с квадратом. больше на тему правильности моей иерархии пока спорить не будем, давай найдем ответ на следующую задачу на тему контрактного программирования: Есть класс прямоугольников, и есть подпрограммы, которые умеют работать только с прямоугольником у которого все стороны равны. Как нам обезопасить использование этих подпрограмм? моим решением, является иерархия представленная выше, но у нее есть огромный недостаток - неизменяемость данных. как решить ту же проблему для изменяемых объектов я не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2010, 17:50 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNа кругом квадрат не может являться в принципе. а ты попобуй сжать квадрат в точку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2010, 18:22 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
ViPRosZyK_BotaNа кругом квадрат не может являться в принципе. а ты попобуй сжать квадрат в точку и как это мне поможет? если на то пошло, то я могу точку от квадрата отнаследовать , но не квадрат от круга ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2010, 18:36 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=36924491&tid=1343356]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
217ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
90ms |
get tp. blocked users: |
2ms |
| others: | 243ms |
| total: | 605ms |

| 0 / 0 |
