|
|
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNegorychZyK_BotaN, красиво, но у меня 2 замечания: 1. методы set какбы намекают, что я меняю текущий объект, а не создаю новый 2. вообще говоря, я ведь могу захотеть сделать Код: plaintext 1. перечитай исправленную версию: Код: plaintext 1. ZyK_BotaNчто мне не нравится в моем коде, дак это метод show. я его написал, что-бы короче было. лучше было бы написать два метода showSquare и showRectangleну же, сделай последний шаг, и увидь, что Square и Rectangle - это не родственники совсем! переходи на светлую сторону силы, Люк ;-)) PS а мы даже ещё не добрались до ромба ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2010, 01:46 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
egorychZyK_BotaNegorychZyK_BotaN, красиво, но у меня 2 замечания: 1. методы set какбы намекают, что я меняю текущий объект, а не создаю новый 2. вообще говоря, я ведь могу захотеть сделать Код: plaintext 1. перечитай исправленную версию: Код: plaintext 1. как это не должно? метод setWidth возвращает Прямоугольник, а в исправленной версии появился метод квадрата setSide, пользуйся на здоровья и никаких ошибок. egorych ZyK_BotaNчто мне не нравится в моем коде, дак это метод show. я его написал, что-бы короче было. лучше было бы написать два метода showSquare и showRectangleну же, сделай последний шаг, и увидь, что Square и Rectangle - это не родственники совсем! переходи на светлую сторону силы, Люк ;-)) PS а мы даже ещё не добрались до ромба ))) посмотри на 49-е сообщение. я там избавился от метода show, и теперь классы соответствуют принципу Лисков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2010, 01:50 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaN PS а мы даже ещё не добрались до ромба ))) посмотри на 49-е сообщение. я там избавился от метода show, и теперь классы соответствуют принципу Лисков. для работы с ромбом придется избавиться от Java. в ней нет множественного наследования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2010, 01:54 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaN Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. Предлагаю ещё один великолепный вариант окончательно запутать код: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2010, 01:56 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNпосмотри на 49-е сообщение. я там избавился от метода show, и теперь классы соответствуют принципу Лисков.посмотри лучше ты: для изменения размеров у Square и у Rectangle свои методы, для отображения у Square и Rectangle свои методы, в чём суть наследования теперь, можешь сказать? ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2010, 02:01 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
egorych showSquare( s.setWidth( 10 ) );[/src]и, поскольку, оба класса у нас зачем-то родственники, а как это может работать, setWidth возвращает прямоугольник. egorych Предлагаю ещё один великолепный вариант окончательно запутать код: Код: plaintext Привидение вниз по иерархии было введено по заявкам слушателей: tchingiz у тебя нет обратного преобразования. А в примере Мартина оно неявно требуется, при в начальном обсуждении, когда выполнялось статическое связывание. вот это главное, Код: plaintext Так и у Мартина нет проблемы. Скопировал квадрат в прямоугольник, изменил его ширину и все. это я и сделал, изменил ширину, при этом произошла потеря точности. но тут претензии не ко мне, этот метод был написан для tchingiz. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2010, 02:20 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
egorychZyK_BotaNпосмотри на 49-е сообщение. я там избавился от метода show, и теперь классы соответствуют принципу Лисков.посмотри лучше ты: для изменения размеров у Square и у Rectangle свои методы, для отображения у Square и Rectangle свои методы, в чём суть наследования теперь, можешь сказать? ))) в методы работающие с прямоугольником могут работать и с квадратом, возвращая абсолютно идентичный результат(принцип Лисков). методы работающие с квадратом не могут работать с прямоугольником, что и подтверждает данное выражение: Код: plaintext а зачем еще наследование нужно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2010, 02:23 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
egorych PS а мы даже ещё не добрались до ромба ))) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. выводит: Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2010, 02:50 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaN тогда с потерей точности будет работать. но тогда преобразование нужно делать явно. с потерей точности - да. поэтому в жизни вещественные - целые ( целые - натуральне) есть, а по принципу Лисков их нельзя преобразовать. Они - разные типы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2010, 03:00 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
tchingizZyK_BotaN тогда с потерей точности будет работать. но тогда преобразование нужно делать явно. с потерей точности - да. поэтому в жизни вещественные - целые ( целые - натуральне) есть, а по принципу Лисков их нельзя преобразовать. Они - разные типы. авторПусть q(x) является свойством, верным относительно объектов x некоторого типа T. Тогда q(y) также должно быть верным для объектов y типа S, где S является подтипом типа T. где здесь про перобразование типов от родительского к дочернему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2010, 03:03 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNtchingiz должна быть изменена в Код: plaintext 1. 2. 3. 4. здесь можно подробней? я не понял. то, что получается после применения метода method надо класть в переменную описанную классом ребенка. В цепочке должно быть два преобразования ребенок -> родитель, изменение ребенка, под видом родителя ранее написанными программами родитель -> ребенок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2010, 03:05 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNtchingizZyK_BotaN тогда с потерей точности будет работать. но тогда преобразование нужно делать явно. с потерей точности - да. поэтому в жизни вещественные - целые ( целые - натуральне) есть, а по принципу Лисков их нельзя преобразовать. Они - разные типы. авторПусть q(x) является свойством, верным относительно объектов x некоторого типа T. Тогда q(y) также должно быть верным для объектов y типа S, где S является подтипом типа T. где здесь про перобразование типов от родительского к дочернему? я тебе рассказывал, что оно неявно всплывает. Оно всплывает у Мартина когда он рассматривает первый шаг - после преобразования ребенка в родителя вызывает родительский метод. Метод нарушает инвариант ребенка, что делает невозможным обратное преобразование в ребенка. Потом Мартин, чтобы победить эту проблему вызывает детский метод - динамическое связывание. Заменяет функцию удовлетворяющую аксиомам родителя, на функцию удовлетворяющую аксиомам ребенка. И вот это уже, приводит к тому, что портятся РАНЕЕ НАПИСАННЫЕ ПРОГРАММЫ. Их писали в предположении аксиом родителя. Дизайн по контракту выявляет эту не очевидную трудность - подкласс - это не подтип. Нельзя подставлять переменные как Лисков хочет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2010, 03:12 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
tchingizZyK_BotaN tchingiz должна быть изменена в Код: plaintext 1. 2. 3. 4. здесь можно подробней? я не понял. то, что получается после применения метода method надо класть в переменную описанную классом ребенка. В цепочке должно быть два преобразования ребенок -> родитель, изменение ребенка, под видом родителя ранее написанными программами родитель -> ребенок я допилил класс. теперь можно это сделать так: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2010, 03:13 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
tchingizЖукБотан где здесь про перобразование типов от родительского к дочернему? я тебе рассказывал, что оно неявно всплывает. Оно всплывает у Мартина когда он рассматривает первый шаг - после преобразования ребенка в родителя вызывает родительский метод. Метод нарушает инвариант ребенка, что делает невозможным обратное преобразование в ребенка. Потом Мартин, чтобы победить эту проблему вызывает детский метод - динамическое связывание. Заменяет функцию удовлетворяющую аксиомам родителя, на функцию удовлетворяющую аксиомам ребенка. И вот это уже, приводит к тому, что портятся РАНЕЕ НАПИСАННЫЕ ПРОГРАММЫ. Их писали в предположении аксиом родителя. Дизайн по контракту выявляет эту не очевидную трудность - подкласс - это не подтип. Нельзя подставлять переменные как Лисков хочет. в моем случае не портятся. вот старый код, в котором не знают о подтипе: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. вот код, где используется старый код с объектом нового типа: Код: plaintext 1. 2. 3. 4. 5. результат: Rectangle(2,10); что здесь работает не так? приведи мне отдельно старый код, а потом новый, где нарушается работа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2010, 03:20 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
tchingiz Потом Мартин, чтобы победить эту проблему вызывает детский метод - динамическое связывание. Заменяет функцию удовлетворяющую аксиомам родителя, на функцию удовлетворяющую аксиомам ребенка. посмотри на пример написанный на с++. там нет ни одного виртуального метода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2010, 03:21 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
в принципе это не требуется, это обычное требование к наследованию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2010, 03:28 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNtchingiz Потом Мартин, чтобы победить эту проблему вызывает детский метод - динамическое связывание. Заменяет функцию удовлетворяющую аксиомам родителя, на функцию удовлетворяющую аксиомам ребенка. посмотри на пример написанный на с++. там нет ни одного виртуального метода. на какой пример? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2010, 03:29 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
tchingizв принципе это не требуется, это обычное требование к наследованию. ты про динамическое связывание? для для поддержки принципа Лисков оно и не нужно. оно нужно для нарушения этого принципа. tchingiz это обычное требование к наследованию. где оно записано? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2010, 03:30 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
tchingizZyK_BotaNtchingiz Потом Мартин, чтобы победить эту проблему вызывает детский метод - динамическое связывание. Заменяет функцию удовлетворяющую аксиомам родителя, на функцию удовлетворяющую аксиомам ребенка. посмотри на пример написанный на с++. там нет ни одного виртуального метода. на какой пример? http://sql.ru/forum/actualthread.aspx?tid=800476&pg=3#9674182 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2010, 03:33 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
авторгде оно записано? тебе целую главу вытащить? щас посмотрю. в принципе лисков написано для любой ранее написанной программы (квантор всеобщности), а не для конкретной. Если ты хочешь доказать, что нет таких программ, которые зависнут, то надо их все перебрать. щас посмотрю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2010, 03:37 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
tchingizавторгде оно записано? тебе целую главу вытащить? щас посмотрю. в принципе лисков написано для любой ранее написанной программы (квантор всеобщности), а не для конкретной. Если ты хочешь доказать, что нет таких программ, которые зависнут, то надо их все перебрать. щас посмотрю зачем все. ты мне дай 1 пример старой программы работающей с Прямоугольником, поведение которой измениться при передаче ей квадрата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2010, 03:39 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNtchingiz Потом Мартин, чтобы победить эту проблему вызывает детский метод - динамическое связывание. Заменяет функцию удовлетворяющую аксиомам родителя, на функцию удовлетворяющую аксиомам ребенка. посмотри на пример написанный на с++. там нет ни одного виртуального метода. посмотрел. Ты находишься на шаге 1, после применения метода нельзя выполнить обратное преобразование в квадрат. и? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2010, 03:44 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
tchingiz посмотри на пример написанный на с++. там нет ни одного виртуального метода. посмотрел. Ты находишься на шаге 1, после применения метода нельзя выполнить обратное преобразование в квадрат. и?[/quot] дак старый код не знает о существовании квадрата. (там только ромбы и прямоугольники ) как поломается код? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2010, 03:47 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2010, 03:49 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=36919300&tid=1343356]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
183ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
83ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 540ms |

| 0 / 0 |
