powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Выгоды контрактного программирования (design by contract)
25 сообщений из 232, страница 9 из 10
Выгоды контрактного программирования (design by contract)
    #36924484
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тут люди прямо жить не могут без виртуальных функций
и позднего связывания - динамическая диспетчеризация
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36924486
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingiz_модZyK_BotaNкак это разных? S - подтип. Т - супер тип. соответственно s принадлежит типу Т.
Это только позволяет компилятору выполнить преобразование. Предупреждение все равно д.б. М.б. это ошибка программиста.
без преобразования.
если рассматривать нормальное наследование, а не эти идиотские примеры,
как у нас, то будет понятно, что при наследовании в подкласс добавляются
поля. Это увеличение на одну размерность кортежа.
При преобразовании ребенка в родителя - это поле надо отбросить.
Тогда об обратном преобразовании можно не мечтать, информация утеряна.

дивное единодушие во мнении с классиками
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36924487
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
subsumption -- это правило категоризации, ребенок отнесен к категории (типу) родителя.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36924491
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizZyK_BotaNtchingizZyK_BotaN
тогда с потерей точности будет работать.
но тогда преобразование нужно делать явно.
с потерей точности - да.
поэтому в жизни вещественные - целые ( целые - натуральне) есть,
а по принципу Лисков их нельзя преобразовать. Они - разные типы.

авторПусть q(x) является свойством, верным относительно объектов x некоторого типа T. Тогда q(y) также должно быть верным для объектов y типа S, где S является подтипом типа T.
где здесь про перобразование типов от родительского к дочернему?
я тебе рассказывал, что оно неявно всплывает.
Оно всплывает у Мартина когда он рассматривает первый шаг -
после преобразования ребенка в родителя вызывает родительский метод.
Метод нарушает инвариант ребенка, что делает невозможным обратное преобразование в ребенка.
глава type information, lost and found в теории объектов Карделли целиком посвящена
сохранению всех атрибутов ребенка.
Послкольку они сохраняются, сохраняется возможность обратного преобразования.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36924652
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNв джаве ты не сможешь подменить объект переданный по ссылке. там явных ссылок нет.В Java все объекты - ссылки.

tchingizглава type information, lost and found в теории объектов Карделли целиком посвящена
сохранению всех атрибутов ребенка.
Послкольку они сохраняются, сохраняется возможность обратного преобразования.
В языках, где объекты только в динамической памяти - Java, .NET, D, Delphi проблем потери атрибутов нет. Преобразовывай куда хочешь.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36924745
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tchingizесли рассматривать нормальное наследование, а не эти идиотские примеры,
как у нас, то будет понятно, что при наследовании в подкласс добавляются
поля. Это увеличение на одну размерность кортежа.
При преобразовании ребенка в родителя - это поле надо отбросить.
Тогда об обратном преобразовании можно не мечтать, информация утеряна.

Фокус в том, что никаких (неявных) преобразований типов не д.б. вообще. А вся проблема в ЯП с жесткой типизацией.
Код: plaintext
1.
2.
3.
4.
float a
int b
b= 1    - тип b - int
a=b   - тип a - float что неверно, а д.б. int
Т.е. переменная должна изменять свой тип в соотв. с присвоенным ей выражением. В динамически типизированных ЯП это всегда так. Вот тогда и будет нормальное наследование и истинный полиморфизм. Ф-ия ident(x) -> x возвращает x с сохранением его типа. И тогда методы родителя непосредственно применяются к ребенку, подстраиваясь под его тип. Вот тогда и принцип Лисков заработает.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36924759
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZyK_BotaNу меня вся фишка в иммутабельности
Чисто функциональное программирование действительно снимает все проблемы. Вот только оно никак не согласуется с парадигмой БД, в которой как раз и хранятся изменяющиеся объекты, причем очень разных типов.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36925269
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglZyK_BotaNв джаве ты не сможешь подменить объект переданный по ссылке. там явных ссылок нет.В Java все объекты - ссылки.


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

а в с++, зная адрес объекта, можно его подменить.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36925276
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl
Послкольку они сохраняются, сохраняется возможность обратного преобразования.
В языках, где объекты только в динамической памяти - Java, .NET, D, Delphi проблем потери атрибутов нет. Преобразовывай куда хочешь.[/quot]

на счет Delphi уверен?
а то я когда-то писал на нем, и вроде на стеке объекты создавал. хотя точно не помню.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36925280
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_модZyK_BotaNу меня вся фишка в иммутабельности
Чисто функциональное программирование действительно снимает все проблемы. Вот только оно никак не согласуется с парадигмой БД, в которой как раз и хранятся изменяющиеся объекты, причем очень разных типов.
согласен.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36926015
_модZyK_BotaNу меня вся фишка в иммутабельности
Чисто функциональное программирование действительно снимает все проблемы. Вот только оно никак не согласуется с парадигмой БД, в которой как раз и хранятся изменяющиеся объекты, причем очень разных типов.
С парадигмой тоже не все очевидно.
Создания битемпоральных баз данных - это практически использование иммутабельных объектов.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36926112
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
--------------------------------С парадигмой тоже не все очевидно.
Создания битемпоральных баз данных - это практически использование иммутабельных объектов.
Сложно представить работу такой БД в многопользовательской среде
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36926155
_мод
Сложно представить работу такой БД в многопользовательской среде
А что не так в многопользовательской?
Чем хуже, чем в однопользовательской?
Или ты имел в виду - когда идет много обновлений?
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36926742
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_мод--------------------------------С парадигмой тоже не все очевидно.
Создания битемпоральных баз данных - это практически использование иммутабельных объектов.
Сложно представить работу такой БД в многопользовательской среде

Erlang:
http://ru.wikipedia.org/wiki/CouchDB
http://ru.wikipedia.org/wiki/Mnesia

K:
http://kx.com/
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36928950
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargltchingiz, понял про ЗПТ, типа спс за доверие.

Топик скатывается. Предлагаю изобрести более наглядный пример, чем квадратики и поля чисел.

ZyK_BotaN, пример слишком тривиален (и дажи при том ты ромб выбросил, как неудобный=) и неопределены аксиомы, чтобы на нем тренировать.
для классического примера Мартина я их записал.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36928952
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_модZyK_BotaNкак это разных? S - подтип. Т - супер тип. соответственно s принадлежит типу Т.
Это только позволяет компилятору выполнить преобразование. Предупреждение все равно д.б. М.б. это ошибка программиста.
во первых, S подкласс, T надкласс.
во вторых, не ругаются.
Из подкласса в надкласс присваивать можно. Это не ошибка.
Это такое поведение компиляторов было заложено в них и постулировалось.
А потом начались сомнения и Лисков придумала принцип.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36928953
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglZyK_BotaNв джаве ты не сможешь подменить объект переданный по ссылке. там явных ссылок нет.В Java все объекты - ссылки.

tchingizглава type information, lost and found в теории объектов Карделли целиком посвящена
сохранению всех атрибутов ребенка.
Послкольку они сохраняются, сохраняется возможность обратного преобразования.
В языках, где объекты только в динамической памяти - Java, .NET, D, Delphi проблем потери атрибутов нет. Преобразовывай куда хочешь.
не имеет значения где живут объекты.
Классики (Карделли и Абади в теории объектов) разрешили думать в наивной модели памяти, где переменная, объявленная классом,
- это ссылка на запись. При присвоении и передаче параметров не происходит никакого преобразования значений ( то есть записи).
происходит преобразование вида ссылки
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36928954
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
parameter passing and assignment copy references, not the associated attribute records.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36928959
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingiz_модZyK_BotaNкак это разных? S - подтип. Т - супер тип. соответственно s принадлежит типу Т.
Это только позволяет компилятору выполнить преобразование. Предупреждение все равно д.б. М.б. это ошибка программиста.
во первых, S подкласс, T надкласс.
во вторых, не ругаются.
Из подкласса в надкласс присваивать можно. Это не ошибка.
так уже для порядку


http://www.intuit.ru/department/se/oopbases/14/2.html

Предположим, что для структуры наследования на рисунке вверху объявлены следующие сущности:

Код: plaintext
p: POLYGON; r: RECTANGLE; t: TRIANGLE


Тогда допустимы следующие присваивания:
Код: plaintext
1.
p := r
p := t


Эти команды присваивают в качестве значения сущности, обозначающей многоугольник, сущность, обозначающую прямоугольник в первом случае, и сущность, обозначающую треугольник - во втором.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36928967
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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, неправильно показанный на экране).

Такой результат - объект, не удовлетворяющий инварианту своего класса, т.е. основным, универсальным ограничениям на все объекты такого вида - является одним из самых страшных событий, которые могут случиться во время выполнения программы. Если такая ситуация может возникнуть, то нечего надеяться на верный результат вычисления.

здесь В - ребенок, А - родитель, статическое связывание - ранне связывание == вызов метода родителя
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36929084
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingiz, вот да, именно это я и пытался донести нашему общему другу ZiK_BotaN.

PS используя его технику легко отнаследовать квадрат от круга, например.. Но это же абсурд
PSS tchigiz, красивенько получилось :-))
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36929270
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych
PS используя его технику легко отнаследовать квадрат от круга, например.. Но это же абсурд


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

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

может все же не обязан, но все же может?

здесь я вижу проблему с одним инвариантом - равенство сторон.
но мое решение базировалось на принципе неизменяемых данных, и здесь не может нарушится данный инвариант.

ведь квадрат является прямоугольником? значит мы можем с ним делать все, что делаем с прямоугольником(при этом возможно получая в качестве результата прямоугольник) + мы можем добавить новые методы, которые могут работать только с квадратом.


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

Есть класс прямоугольников, и есть подпрограммы, которые умеют работать только с прямоугольником у которого все стороны равны. Как нам обезопасить использование этих подпрограмм?

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

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


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