powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Выгоды контрактного программирования (design by contract)
25 сообщений из 232, страница 8 из 10
Выгоды контрактного программирования (design by contract)
    #36922324
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglZyK_BotaN,

Есть еще принцип Open-Close, который ты нарушил. Потому твой код ужасен.


Принцип Открытости-Закрытости (Open Close Principle или OCP)

Программные сущности такие как классы, модули и функции должны быть открыты для расширения, но закрыты для изменений.

у меня они как раз открыты для расширения и закрыты для изменения. все ок. где нарушение?
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36922343
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_модtchingiz присвоении t значения любой переменной s: S,
Любой нормальный компилятор обругает такое присваивание :) или хотя-бы предупредит

да нет, там вроде все нормально написано, и компиляторы вроде не ругаются.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36922433
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZyK_BotaNда нет, там вроде все нормально написано, и компиляторы вроде не ругаются.
Переменные ведь разных типов - компилятор предупредит (должен), что будет преобразование.
Плохое определение, вообщем.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36922440
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_модZyK_BotaNда нет, там вроде все нормально написано, и компиляторы вроде не ругаются.
Переменные ведь разных типов - компилятор предупредит (должен), что будет преобразование.
Плохое определение, вообщем.
как это разных? S - подтип. Т - супер тип. соответственно s принадлежит типу Т.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36922459
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZyK_BotaNкак это разных? S - подтип. Т - супер тип. соответственно s принадлежит типу Т.
Это только позволяет компилятору выполнить преобразование. Предупреждение все равно д.б. М.б. это ошибка программиста.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36922468
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_модZyK_BotaNкак это разных? S - подтип. Т - супер тип. соответственно s принадлежит типу Т.
Это только позволяет компилятору выполнить преобразование. Предупреждение все равно д.б. М.б. это ошибка программиста.
можешь назвать о компиляторах каких языков ты говоришь.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36922558
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, у Лисков правильно написано - не присвоение t=s, а подстановка вместо t s.
Т.е. методы t непосредственно применяются к s и при этом их поведение не меняется.
К случаю квадратов и прям-ов это полностью подходит, т.к. методы прям-ов на квадратах либо нормально работают, либо не работают совсем. Но поведение их не меняется.
зы Нужно делать, как в динамических языках - левая часть принимает тип правой. То же и при передаче парметров, т.е. в методы прям-ов передаются квадраты без преобразования типов.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36922625
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZyK_BotaNможешь назвать о компиляторах каких языков ты говоришь.
Последний такой был pl/1. М.б. какой-нить паскаль. Но мне больше нравится подход в динамических языках: переменная принимает тип выражения из правой части.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36922656
Фотография k0rvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaN класс Integral является подтипом класса Real.
как это понимать?
"тип подтипом типа" понимаю,
"класс субклассом класса" понимаю,
"класс подтипом класса" не понимаю =/

ZyK_BotaNили я что-то не понимаю?
скорее что-то путаешь.

ZyK_BotaNпросто в хаскеле нужно явно приводить объект дочернего класса к родительскому.
не совсем, многие классы предоставляют функции преобразования, выполняющиеся автоматически, типа fromInteger, fromEnum, toEnum, etc

ZyK_BotaNя к тому, что имена операций деления и возведения в степень отличаются от целочисленных аналогов.
это [почти] везде где так
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36923567
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
k0rvin
это [почти] везде где так
ну а я это указал для тех, для кого 1/2 = 0 - является интуитивно понятным.

k0rvin
"класс подтипом класса" не понимаю

виноват исправлюсь
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36923717
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
k0rvin
не совсем, многие классы предоставляют функции преобразования, выполняющиеся автоматически, типа fromInteger, fromEnum, toEnum, etc


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

пысы


ДмидекМемберы Siemargl и egorych добавлены в ЗПТ.
Чингиз - традиционный вопрос - ты им сообщишь при оказии или
мне написать письма ? :-)
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36924068
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingiz, понял про ЗПТ, типа спс за доверие.

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

ZyK_BotaN, пример слишком тривиален (и дажи при том ты ромб выбросил, как неудобный=) и неопределены аксиомы, чтобы на нем тренировать.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36924078
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не неудобный ромб, а мы его попросили, ато долго думать при длинном примере.
Его мысль все равно видна будет.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36924085
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargltchingiz, понял про ЗПТ, типа спс за доверие.

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

ZyK_BotaN, пример слишком тривиален (и дажи при том ты ромб выбросил, как неудобный=) и неопределены аксиомы, чтобы на нем тренировать.

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

Пример такой. Написал ты стороннюю коллекцию.
Пусть без ромба. Пусть vector<Rectangle*> (без указателя типы приведутся и потеряются).
Нужно все элементы коллекции скажем, уменьшить вдвое.
Но у тебя Rectangle::setWidth() и Square::setSide()

Чтобы написать коллекцию, тебе придется "открыть" классы и внести в них изменения, добавив общий метод.

Второе нарушение тут.
Код: plaintext
\tSquare(Rectangle r) : Rectangle(r.getHeight(),r.getHeight()),\n\t\tRhomb( 90 , r.getHeight()) {\n\n\t}\n\tSquare(Rhomb r) : Rectangle(r.getSide(),r.getSide()),\n\t\tRhomb( 90 , r.getSide()) 
Появится еще одна фигура - тебе придется переписать и ее наследников по иерархии, чтобы учесть ее ньюансы.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36924234
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglZyK_BotaNи самое главное ты не ответил на вопрос про открытость/закрытость
Речь об этих классах.

Пример такой. Написал ты стороннюю коллекцию.
Пусть без ромба. Пусть vector<Rectangle*> (без указателя типы приведутся и потеряются).
Нужно все элементы коллекции скажем, уменьшить вдвое.
Но у тебя Rectangle::setWidth() и Square::setSide()

Чтобы написать коллекцию, тебе придется "открыть" классы и внести в них изменения, добавив общий метод.

действительно, передача по ссылку все портит. придется запрещать и ссылку.
недаром в с++, так можно
Код: plaintext
const double& c =  1 \n
а так нельзя
Код: plaintext
double& c =  1 
я был не прав, что не заметил такой дыры. Но с++ я выбрал, что-бы показать множ. наследование. а так здесь идут теоретические рассуждения. я заранее предупредил, что объекты должны быть иммутабельны.
у меня вся фишка в иммутабельности, а сдесь она нарушается.
но - это с++ с его выкрутасами, там даже константу можно изменить.
а поломаешь ли ты аналогичный код на java?
если есть здесь опытные с++-ки, подскажите можно ли сделать класс неизменяемых объектов в С++, не потеряв возможность наследоваться.

Siemargl
Второе нарушение тут.
Код: plaintext
\tSquare(Rectangle r) : Rectangle(r.getHeight(),r.getHeight()),\n\t\tRhomb( 90 , r.getHeight()) {\n\n\t}\n\tSquare(Rhomb r) : Rectangle(r.getSide(),r.getSide()),\n\t\tRhomb( 90 , r.getSide()) 
Появится еще одна фигура - тебе придется переписать и ее наследников по иерархии, чтобы учесть ее ньюансы.

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

1. Мне кажется, что ты неверно понимаешь иммутабельность.
2. Иммутабельность часто неудобна в реальной работе, чтобы на ней ставить икону. Кроме того, в С++ иммутабельности нет и в Java вроде бы тоже. (Она есть в D - и если поискать - можно найти статью Брайта, где поясняется отличие C++ const от D immutable)
3. Второе нарушение не относится к принципу о/з.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36924303
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я придумал пример. Геймдев, RTS.
Владелец - поле боя.
Класс 1. Статический тайл. Контракт - всегда валиден.
Класс 2. Динамический тайл. Может быть разрушен. Контракт - не разрушен.
Класс 3. NPC. Может быть заморожен. Контракт - не заморожен.
Класс 4. User's soldier. Может управляться человеком. Контракт - жив, бегает.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36924316
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglZyK_BotaN,

1. Мне кажется, что ты неверно понимаешь иммутабельность.
2. Иммутабельность часто неудобна в реальной работе, чтобы на ней ставить икону. Кроме того, в С++ иммутабельности нет и в Java вроде бы тоже. (Она есть в D - и если поискать - можно найти статью Брайта, где поясняется отличие C++ const от D immutable)
3. Второе нарушение не относится к принципу о/з.

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


2. Иммутабельность часто неудобна в реальной работе.

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

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

Кстати, вспомнил историю из геймдева. Когда игра падала - потому что для свиньи вызывался метод "стрелять", а пистолета - то нету )
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36924341
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaN
Siemargl
3. Второе нарушение не относится к принципу о/з.
можно на пальцах?
а точнее, если не относится к принципу о/з то в чем проблема?
имхо, это не нормально добавлять в иерархию наследования класс, и хотеть, что-бы наследники об этом не знали.
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36924343
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglZyK_BotaN, давай про солдатиков придумывай.

Кстати, вспомнил историю из геймдева. Когда игра падала - потому что для свиньи вызывался метод "стрелять", а пистолета - то нету )
блицкриг?
там еще есть байка:
отнаследовали ракету от летающего аппарата.
и в плохую погоду ракета возвращалась на базу
...
Рейтинг: 0 / 0
Выгоды контрактного программирования (design by contract)
    #36924478
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДмидекМемберы Siemargl и egorych добавлены в ЗПТ.сэнкс, тронут ;-))
...
Рейтинг: 0 / 0
25 сообщений из 232, страница 8 из 10
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Выгоды контрактного программирования (design by contract)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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