|
|
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
SiemarglZyK_BotaN, Есть еще принцип Open-Close, который ты нарушил. Потому твой код ужасен. Принцип Открытости-Закрытости (Open Close Principle или OCP) Программные сущности такие как классы, модули и функции должны быть открыты для расширения, но закрыты для изменений. у меня они как раз открыты для расширения и закрыты для изменения. все ок. где нарушение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2010, 12:02 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
_модtchingiz присвоении t значения любой переменной s: S, Любой нормальный компилятор обругает такое присваивание :) или хотя-бы предупредит да нет, там вроде все нормально написано, и компиляторы вроде не ругаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2010, 12:07 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNда нет, там вроде все нормально написано, и компиляторы вроде не ругаются. Переменные ведь разных типов - компилятор предупредит (должен), что будет преобразование. Плохое определение, вообщем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2010, 12:34 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
_модZyK_BotaNда нет, там вроде все нормально написано, и компиляторы вроде не ругаются. Переменные ведь разных типов - компилятор предупредит (должен), что будет преобразование. Плохое определение, вообщем. как это разных? S - подтип. Т - супер тип. соответственно s принадлежит типу Т. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2010, 12:37 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNкак это разных? S - подтип. Т - супер тип. соответственно s принадлежит типу Т. Это только позволяет компилятору выполнить преобразование. Предупреждение все равно д.б. М.б. это ошибка программиста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2010, 12:42 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
_модZyK_BotaNкак это разных? S - подтип. Т - супер тип. соответственно s принадлежит типу Т. Это только позволяет компилятору выполнить преобразование. Предупреждение все равно д.б. М.б. это ошибка программиста. можешь назвать о компиляторах каких языков ты говоришь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2010, 12:44 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
Кстати, у Лисков правильно написано - не присвоение t=s, а подстановка вместо t s. Т.е. методы t непосредственно применяются к s и при этом их поведение не меняется. К случаю квадратов и прям-ов это полностью подходит, т.к. методы прям-ов на квадратах либо нормально работают, либо не работают совсем. Но поведение их не меняется. зы Нужно делать, как в динамических языках - левая часть принимает тип правой. То же и при передаче парметров, т.е. в методы прям-ов передаются квадраты без преобразования типов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2010, 13:08 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNможешь назвать о компиляторах каких языков ты говоришь. Последний такой был pl/1. М.б. какой-нить паскаль. Но мне больше нравится подход в динамических языках: переменная принимает тип выражения из правой части. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2010, 13:23 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaN класс Integral является подтипом класса Real. как это понимать? "тип подтипом типа" понимаю, "класс субклассом класса" понимаю, "класс подтипом класса" не понимаю =/ ZyK_BotaNили я что-то не понимаю? скорее что-то путаешь. ZyK_BotaNпросто в хаскеле нужно явно приводить объект дочернего класса к родительскому. не совсем, многие классы предоставляют функции преобразования, выполняющиеся автоматически, типа fromInteger, fromEnum, toEnum, etc ZyK_BotaNя к тому, что имена операций деления и возведения в степень отличаются от целочисленных аналогов. это [почти] везде где так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2010, 13:31 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
k0rvin это [почти] везде где так ну а я это указал для тех, для кого 1/2 = 0 - является интуитивно понятным. k0rvin "класс подтипом класса" не понимаю виноват исправлюсь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2010, 17:14 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
k0rvin не совсем, многие классы предоставляют функции преобразования, выполняющиеся автоматически, типа fromInteger, fromEnum, toEnum, etc но это ведь происходит без потери точности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2010, 17:41 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
_модZyK_BotaNкак это разных? S - подтип. Т - супер тип. соответственно s принадлежит типу Т. Это только позволяет компилятору выполнить преобразование. Предупреждение все равно д.б. М.б. это ошибка программиста. без преобразования. если рассматривать нормальное наследование, а не эти идиотские примеры, как у нас, то будет понятно, что при наследовании в подкласс добавляются поля. Это увеличение на одну размерность кортежа. При преобразовании ребенка в родителя - это поле надо отбросить. Тогда об обратном преобразовании можно не мечтать, информация утеряна. пысы ДмидекМемберы Siemargl и egorych добавлены в ЗПТ. Чингиз - традиционный вопрос - ты им сообщишь при оказии или мне написать письма ? :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2010, 20:03 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
tchingiz, понял про ЗПТ, типа спс за доверие. Топик скатывается. Предлагаю изобрести более наглядный пример, чем квадратики и поля чисел. ZyK_BotaN, пример слишком тривиален (и дажи при том ты ромб выбросил, как неудобный=) и неопределены аксиомы, чтобы на нем тренировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2010, 20:18 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
не неудобный ромб, а мы его попросили, ато долго думать при длинном примере. Его мысль все равно видна будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2010, 20:25 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
Siemargltchingiz, понял про ЗПТ, типа спс за доверие. Топик скатывается. Предлагаю изобрести более наглядный пример, чем квадратики и поля чисел. ZyK_BotaN, пример слишком тривиален (и дажи при том ты ромб выбросил, как неудобный=) и неопределены аксиомы, чтобы на нем тренировать. двай, изобретай. но что за проблема с аксиомами. и самое главное ты не ответил на вопрос про открытость/закрытость ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2010, 20:27 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNи самое главное ты не ответил на вопрос про открытость/закрытость Речь об этих классах. Пример такой. Написал ты стороннюю коллекцию. Пусть без ромба. Пусть vector<Rectangle*> (без указателя типы приведутся и потеряются). Нужно все элементы коллекции скажем, уменьшить вдвое. Но у тебя Rectangle::setWidth() и Square::setSide() Чтобы написать коллекцию, тебе придется "открыть" классы и внести в них изменения, добавив общий метод. Второе нарушение тут. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2010, 20:55 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
SiemarglZyK_BotaNи самое главное ты не ответил на вопрос про открытость/закрытость Речь об этих классах. Пример такой. Написал ты стороннюю коллекцию. Пусть без ромба. Пусть vector<Rectangle*> (без указателя типы приведутся и потеряются). Нужно все элементы коллекции скажем, уменьшить вдвое. Но у тебя Rectangle::setWidth() и Square::setSide() Чтобы написать коллекцию, тебе придется "открыть" классы и внести в них изменения, добавив общий метод. действительно, передача по ссылку все портит. придется запрещать и ссылку. недаром в с++, так можно Код: plaintext Код: plaintext у меня вся фишка в иммутабельности, а сдесь она нарушается. но - это с++ с его выкрутасами, там даже константу можно изменить. а поломаешь ли ты аналогичный код на java? если есть здесь опытные с++-ки, подскажите можно ли сделать класс неизменяемых объектов в С++, не потеряв возможность наследоваться. Siemargl Второе нарушение тут. Код: plaintext зачем? разве в принципе о/з сказано про то что можно изменять супер классы? я лишь увидел что можно расширять наследников и запрещено ломать родительские классы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2010, 22:13 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaN, 1. Мне кажется, что ты неверно понимаешь иммутабельность. 2. Иммутабельность часто неудобна в реальной работе, чтобы на ней ставить икону. Кроме того, в С++ иммутабельности нет и в Java вроде бы тоже. (Она есть в D - и если поискать - можно найти статью Брайта, где поясняется отличие C++ const от D immutable) 3. Второе нарушение не относится к принципу о/з. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2010, 22:29 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
Я придумал пример. Геймдев, RTS. Владелец - поле боя. Класс 1. Статический тайл. Контракт - всегда валиден. Класс 2. Динамический тайл. Может быть разрушен. Контракт - не разрушен. Класс 3. NPC. Может быть заморожен. Контракт - не заморожен. Класс 4. User's soldier. Может управляться человеком. Контракт - жив, бегает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2010, 22:41 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
SiemarglZyK_BotaN, 1. Мне кажется, что ты неверно понимаешь иммутабельность. 2. Иммутабельность часто неудобна в реальной работе, чтобы на ней ставить икону. Кроме того, в С++ иммутабельности нет и в Java вроде бы тоже. (Она есть в D - и если поискать - можно найти статью Брайта, где поясняется отличие C++ const от D immutable) 3. Второе нарушение не относится к принципу о/з. в джаве ты не сможешь подменить объект переданный по ссылке. там явных ссылок нет. а в с++ можно все . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2010, 22:51 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
SiemarglZyK_BotaN, 2. Иммутабельность часто неудобна в реальной работе. согласен. но в данном случае она обязательна, и иначе иерархия ломается. Siemargl 3. Второе нарушение не относится к принципу о/з. можно на пальцах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2010, 22:54 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaN, давай про солдатиков придумывай. Кстати, вспомнил историю из геймдева. Когда игра падала - потому что для свиньи вызывался метод "стрелять", а пистолета - то нету ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2010, 23:07 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaN Siemargl 3. Второе нарушение не относится к принципу о/з. можно на пальцах? а точнее, если не относится к принципу о/з то в чем проблема? имхо, это не нормально добавлять в иерархию наследования класс, и хотеть, что-бы наследники об этом не знали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2010, 23:08 |
|
||
|
Выгоды контрактного программирования (design by contract)
|
|||
|---|---|---|---|
|
#18+
SiemarglZyK_BotaN, давай про солдатиков придумывай. Кстати, вспомнил историю из геймдева. Когда игра падала - потому что для свиньи вызывался метод "стрелять", а пистолета - то нету ) блицкриг? там еще есть байка: отнаследовали ракету от летающего аппарата. и в плохую погоду ракета возвращалась на базу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2010, 23:09 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=36922625&tid=1343356]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
229ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
73ms |
get tp. blocked users: |
1ms |
| others: | 218ms |
| total: | 566ms |

| 0 / 0 |
