powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
25 сообщений из 76, страница 2 из 4
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36938078
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNкакая ф-я принимающая целые числа не может принимать ноль?деление? ;-))
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36938274
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudioZyK_BotaNrstudio
Нужно ему предложить класс Ноль пронаследовать от класса ЦелыеЧисла, а потом сидеть и удивляться, а как это не все методы можно применить к классу Ноль, многие не имеют из них смысла
какая ф-я принимающая целые числа не может принимать ноль?

а какая ф-я принимающая прямоугольник не может принимать квадрат ?

вот и я о том же.

мой вопрос возник в связи с этой фразой :
rstudioа потом сидеть и удивляться, а как это не все методы можно применить к классу Ноль, многие не имеют из них смысла
и "прямоугольник с квадратом" здесь не причем.
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36938349
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudioZyK_BotaNrstudio
Нужно ему предложить класс Ноль пронаследовать от класса ЦелыеЧисла, а потом сидеть и удивляться, а как это не все методы можно применить к классу Ноль, многие не имеют из них смысла
какая ф-я принимающая целые числа не может принимать ноль?

а какая ф-я принимающая прямоугольник не может принимать квадрат ?
для юмористов
Код: plaintext
1.
2.
3.
4.
5.
void LSPV(Rectangle& r){
  r.SetWidth( 5 );
  r.SetHeight( 4 );
  assert(r.GetWidth() * r.GetHeight()) ==  20 );
}
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36938362
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychZyK_BotaNкакая ф-я принимающая целые числа не может принимать ноль?деление? ;-))

в случае целых все будет ок?
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36938374
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNв случае целых все будет ок?если в качестве делимого будет не ноль? - конечно. А что, есть сомнения в этом? ))
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36938413
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizrstudioZyK_BotaNrstudio
Нужно ему предложить класс Ноль пронаследовать от класса ЦелыеЧисла, а потом сидеть и удивляться, а как это не все методы можно применить к классу Ноль, многие не имеют из них смысла
какая ф-я принимающая целые числа не может принимать ноль?

а какая ф-я принимающая прямоугольник не может принимать квадрат ?
для юмористов
Код: plaintext
1.
2.
3.
4.
5.
void LSPV(Rectangle& r){
  r.SetWidth( 5 );
  r.SetHeight( 4 );
  assert(r.GetWidth() * r.GetHeight()) ==  20 );
}


Опять у когото потеют ладошки пронаследовать квадрат от прямоугольника.
Я же выше сказал что прямоугольник не может быть базовым классом для квадрата. Что же он делает в параметрах твоей функции ? Там должен торчать нормальный базовый класс.

вот так вот другое дело
Код: plaintext
1.
2.
3.
void LSPV(Square& r){
  r.SetWidth( 5 );
}
[/quot]
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36938418
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но вообще проблемы ООП прекрасно понимаю

вот здесь я несколько раскрываю свое виденье проблем.

Классы это нечто что должно "лепиться" к данным опираясь на свойства данных.
Тоесть одна группа данных может мигрировать от одного класса к другому.
В RS я это уже реализовываю. Мои классы это динамические группы.
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36938440
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNtchingizкстати, императивную часть и параметризацию схем в рсл не зачем читать для аксиом.

ZyK_BotaN так мы с функциональным стилем покончили? или так написать наследование
прямоугольников из квадратов?

покончили, и наследования не надо.
меня интересует альтернативное решение(ф-му решению с наследованием), решение проблемы с выполнением контракта, что у прямоугольника, передаваемого в качестве параметра, все стороны равны.
вот аксиоматика для обоих типов.
http://www.sql.ru/forum/actualthread.aspx?tid=756625&pg=-1#9543464
аксиома из версии Ректангле
Код: plaintext
1.
2.
3.
  ,[gw_sh]
   all h: UReal, f: Figure:-
            GetWidth(SetHeight(f, h)) = GetWidth(f)
означает незасимость операций задать высоту и взять ширину.
чтобы не задал в высоте, взятие ширины работает одинаково.

аксиома из версии Сквере
Код: plaintext
1.
2.
  ,[gw_sh]
   all h: UReal, f: Figure:- GetWidth(SetHeight(f, h)) = h
 
означает зависимость взятия ширины от задания высоты.
Взять ширину вернет заданную высоту.
эти две аксиомы не совместимы в принципе
--
То есть, записав их вместе, получаем следующую аксиому:
Код: plaintext
1.
2.
3.
4.
   all h: UReal, f: Figure:-
            h =   GetWidth(SetHeight(f, h))   /\ 
                   GetWidth(SetHeight(f, h)) = GetWidth(f)

через приравнивание $GetWidth(SetHeight(f, h))$ получаем


Код: plaintext
1.
   all h: UReal, f: Figure :-  h  = GetWidth(f)

Возьмем в $UReal$ значение $w$, причем $w != h$, после этого, используя
аксиому $gw\_sw$, из любого $f$, у которого ширина была задана
равной $w$, то есть, равного $SetWidth(f1, w)$ извлечем это $w$
Код: plaintext
1.
      h =   GetWidth(f) = GetWidth(SetWidth(f1, w)) = w 
Противоречие. Это означает, что две различные версии аксиом $gw\_sh$ не могут
выполняться вместе.
Отсюда следует, что нет никакой возможности в принципе считать $Square$ подтипом $Rectangle$.
Так же как нельзя считать $Rectangle$ подтипом $Square$.

Можно считать их 'братьями', являющимися подтипом некоторого неполного, неоднозначного типа.
---------
раз под subtyping - выделение типа понимается добавление аксиомы в спецификацию,
то выбрасывание аксиомы из спецификации - это создание надтипа.
выбросив из спецификации противоречивые аксиомы получим тип
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
scheme RealDad =  class
    type                        
      Figure
     ,UReal  =  {| r: Real :- r >  0 . 0  |}  
    value
      SetWidth  : Figure >< UReal -> Figure   
     ,SetHeight : Figure >< UReal -> Figure   
     ,GetWidth  : Figure          -> UReal      
     ,GetHeight : Figure          -> UReal      
    axiom
      [gw_sw]          
        all w: UReal, f: Figure:- GetWidth(SetWidth(f, w)) = w
     ,[gh_sh]          
        all h: UReal, f: Figure:- GetHeight(SetHeight(f, h)) = h
  end

вот к нему можно преобразовывать и объекты Ректангла и объекты Сквере.
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36938442
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudiotchingizrstudioZyK_BotaNrstudio
Нужно ему предложить класс Ноль пронаследовать от класса ЦелыеЧисла, а потом сидеть и удивляться, а как это не все методы можно применить к классу Ноль, многие не имеют из них смысла
какая ф-я принимающая целые числа не может принимать ноль?

а какая ф-я принимающая прямоугольник не может принимать квадрат ?
для юмористов
Код: plaintext
1.
2.
3.
4.
5.
void LSPV(Rectangle& r){
  r.SetWidth( 5 );
  r.SetHeight( 4 );
  assert(r.GetWidth() * r.GetHeight()) ==  20 );
}


Опять у когото потеют ладошки пронаследовать квадрат от прямоугольника.
Я же выше сказал что прямоугольник не может быть базовым классом для квадрата. Что же он делает в параметрах твоей функции ? Там должен торчать нормальный базовый класс.

вот так вот другое дело
Код: plaintext
1.
2.
3.
void LSPV(Square& r){
  r.SetWidth( 5 );
}

0)
это был ответ на твой вопрос, какая функция не может принять. Вот приведенная
и не может принять.
1)
дла особо наблюдательных - может быть базовым классом
, ибо есть программа на с++ которая его так наследует.
2)
о нежелательности такой программы, лет 15 уже как сообщил Роберт Мартин
и это было до того, как ты сказал
Более того, многие прочитали его мнение.
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36938447
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychZyK_BotaNв случае целых все будет ок?если в качестве делимого будет не ноль? - конечно. А что, есть сомнения в этом? ))
к чему тогда было замечание про деление?
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36938449
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudio
Опять у когото потеют ладошки пронаследовать квадрат от прямоугольника.
Я же выше сказал что прямоугольник не может быть базовым классом для квадрата. Что же он делает в параметрах твоей функции ? Там должен торчать нормальный базовый класс.

вот так вот другое дело
Код: plaintext
1.
2.
3.
void LSPV(Square& r){
  r.SetWidth( 5 );
}

1
так вот такая функция, принимающая квадрат,
не будет принимать прямоугольник при динамическом связывании
Код: plaintext
1.
2.
3.
4.
5.
void LSPV(Square& r){
  r.SetWidth( 5 );
  r.SetHeight( 4 );
  assert(r.GetWidth() * r.GetHeight()) ==  16 );
}
2
во вторых,
при наследовании Ректангла от Сквере, просто нельзя подставлять
большую часть объектов от ребенка в переменные от родителя,
ибо у них изначально нарушен инвариант с равенством сторон
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36938457
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingiz
0)
это был ответ на твой вопрос, какая функция не может принять. Вот приведенная
и не может принять.


Как же не может если может, чингиз, я тебя не узнаю.
Если на вход подадут ректенгл с одинаковыми сторонами, она что бросит эксепшин и свернется ?
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36938462
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingiz
1
так вот такая функция, принимающая квадрат,
не будет принимать прямоугольник при динамическом связывании
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
void LSPV(Square& r){
  r.SetWidth( 5 );
  r.SetHeight( 4 );
  assert(r.GetWidth() * r.GetHeight()) ==  16 );
}
[/quot]


Слушай, если ты так будешь писать квадраты они у тебя будут падать без всякого наследования и ректенглов :)))

[src]Square& r = new Square();
 r.SetWidth( 5 );
  r.SetHeight( 4 );

Разделяй что относится к квадрату, а что к ректенглу. У базового класса квадрат может быть определен только r.SetWidth(5). У ректенгла пронаследованого может быть определен еще r.SetHeight(4);. У куба SetLength и тд. Функционал наращиваем а не шпаклюем унивесальный базовый класс а у потомков только его подрезаем.

[src]
2
во вторых,
при наследовании Ректангла от Сквере, просто нельзя подставлять
большую часть объектов от ребенка в переменные от родителя,
ибо у них изначально нарушен инвариант с равенством сторон

Открой для себя виртуальные функции.
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36938463
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с тегами чтото поломалось,

вот сообщение

Слушай, если ты так будешь писать квадраты они у тебя будут падать без всякого наследования и ректенглов

[src]Square& r = new Square();
r.SetWidth(5);
r.SetHeight(4);

Разделяй что относится к квадрату, а что к ректенглу. У базового класса квадрат может быть определен только r.SetWidth(5). У ректенгла пронаследованого может быть определен еще r.SetHeight(4);. У куба SetLength и тд. Функционал наращиваем а не шпаклюем унивесальный базовый класс а у потомков только его подрезаем.
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36938467
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если бы ты читал, не только то, что ты пишешь, то уже знал бы,
что квадраты и прямоугольники уже написаны Мартином.
Обсуждаются трудности наследования на примере тех,
которые уже написаны.
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36938473
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторУ базового класса квадрат может быть определен только r.SetWidth(5). У ректенгла пронаследованого может быть определен еще r.SetHeight(4);

угу.
а у целых можно определить только сложение,
а у пронаследованных вещественных уже умножение ибо
автор"Функционал наращиваем, а не шпаклюем унивесальный базовый класс а у потомков только его подрезаем"
пысы
это был сарказм, если что
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36938484
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizЕсли бы ты читал, не только то, что ты пишешь, то уже знал бы,
что квадраты и прямоугольники уже написаны Мартином.
Обсуждаются трудности наследования на примере тех,
которые уже написаны.

чтото я не понял, кто-то коряво написал а вы тут обсуждаете что с этим делать ?
Понятное дело - переписывать по нормальному.
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36938617
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudiotchingizЕсли бы ты читал, не только то, что ты пишешь, то уже знал бы,
что квадраты и прямоугольники уже написаны Мартином.
Обсуждаются трудности наследования на примере тех,
которые уже написаны.

чтото я не понял, кто-то коряво написал а вы тут обсуждаете что с этим делать ?
Понятное дело - переписывать по нормальному.начальный топик прочитай, в первом сообщении есть ссылка, а то выглядишь сейчас глуповато
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36938618
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNк чему тогда было замечание про деление?там специально было отцитировано, к чему. Функция, принимающая целые, но не принимающая ноль - это деление. Что именно осталось не понятым?
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36938635
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudio
Граждане а как это у вас квадрат наследовал прямоугольник. Сам по себе класс прямоугольника прекрасно выполняет функции квадрата. Наследование обычно идет в сторону расширения возможностей, тоесть прямоугольник может расширить квадрат.

оффтопик

Если отвлечься от обсуждаемого примера, и на секундочку глянуть в начало
ооп, то можно вспомнить, что пытались добиться того, что множество объекта класса ребенка входило бы подмножеством в множество объектов класса родителя.

ссылка на лекцию Мейера, где
он наследовал квадраты от прямоугольников
http://www.intuit.ru/department/se/oopbases/14/1.html
и картинка (если кто читать не может)



наследовать квадраты от прямоугольников это теоретически правильно. А наоборот - нет,
ибо прямоугольники не входят подмножеством во множество квадратов.
Только сумашедший начнет наследовать прямоугольники от квадратов.
(равно как и рациональные от целых )
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36938671
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizнаследовать квадраты от прямоугольников это теоретически правильно. А наоборот - нет,ибо прямоугольники не входят подмножеством во множество квадратов.
Только сумашедший начнет наследовать прямоугольники от квадратов.
(равно как и рациональные от целых )
Не согласен.И Мейер об это не писал.

Наследовать прямоугольник от квадрата можно,
Наследовать рациональные от целых можно.

И то и то ослабляет инвариант.
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36939028
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingiz
наследовать квадраты от прямоугольников это теоретически правильно. А наоборот - нет,
ибо прямоугольники не входят подмножеством во множество квадратов.
Только сумашедший начнет наследовать прямоугольники от квадратов.
(равно как и рациональные от целых )

Я чето не понял твой репертуар чингиз.
Ты говоришь что в теории от прямоугольника можно пронаследовать квадрат,
очевидно руководствуясь этой логикой от квадрата по логике пронаследуешь линию, а от линии точку ?Где такое пишут, дай почитать
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36939051
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
От прамоугольника можно наследоваться квадрату: углы прямые. В качестве расширения добавляется ещё и свойство равенства сторон. Но не наоборот. Квадрат - по определению прамоугольник с равными сторонами. При чём здесь линия, у которой даже углов нет, не понятно.
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36939062
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSergeОт прамоугольника можно наследоваться квадрату: углы прямые. В качестве расширения добавляется ещё и свойство равенства сторон.

а ничо что тогда класс ректенгл у тебя будет абстрактным ?
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36939301
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargltchingizнаследовать квадраты от прямоугольников это теоретически правильно. А наоборот - нет,ибо прямоугольники не входят подмножеством во множество квадратов.
Только сумашедший начнет наследовать прямоугольники от квадратов.
(равно как и рациональные от целых )
Не согласен.И Мейер об это не писал.

Наследовать прямоугольник от квадрата можно,
Наследовать рациональные от целых можно.

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


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