powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
25 сообщений из 76, страница 1 из 4
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36929562
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNtchingiz,

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

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

моим решением, является иерархия представленная выше, но у нее есть огромный недостаток - неизменяемость данных. как решить ту же проблему для изменяемых объектов я не знаю.
/topic/800476&pg=7#9681990
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36929564
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNegorych
PS используя его технику легко отнаследовать квадрат от круга, например.. Но это же абсурд


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

Моя техника базировалась на том, что квадрат всегда является прямоугольником, наоборот уже не верно.
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36929565
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
во первых, почему в твоем коде функции showШото не засунуты в свой класс под именем show?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    void showRectangle(Rectangle r) {
		std::cout << "Rectangle(" << r.getWidth() << "," << r.getHeight() << ")" << std::endl;
	}

	void showSquare(Square s) {
		std::cout << "Square(" << s.getWidth() << ")" << std::endl;
	}
}


...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36929634
Зимаргл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну сколько раз по одному месту на стене....

Где аксиоматика классов? Нет аксиоматики - нет контрактов и нет программы.
Контракт - это описаниие кто и что обязуется выполнить.

ЗЫ. Сижу на горе с ноутбуком =)

ЗЫ2. Мультик был советский - два чела смотрят с разных сторон на предмет:
1й - круг!!!
2й - квадрат!!!
....
А предмет - цилиндр.
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36929823
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizво первых, почему в твоем коде функции showШото не засунуты в свой класс под именем show?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    void showRectangle(Rectangle r) {
		std::cout << "Rectangle(" << r.getWidth() << "," << r.getHeight() << ")" << std::endl;
	}

	void showSquare(Square s) {
		std::cout << "Square(" << s.getWidth() << ")" << std::endl;
	}
}




в моем случае эти функции не принадлежат типу, а используют его.
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36930234
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с восстановлением ребенка, который делает вид, что он родитель к ребенку мы уже разобрались?
/topic/800476&pg=3#9674202
в исходном принципе действительно не заметно.
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36930246
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
                таблица названий аксиом


            setWidth    setHeight  .  Rectangle
getWidth    gw_sw       gw_sh      .  gw_r
getHeight   gh_sw       gh_sh      .  gh_r
....................................         
getSpace    gs_sw       gs_sh         gs_r
                                    



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


Код: plaintext
1.
2.
3.
4.
5.
            setWidth    setHeight  .  Rectangle
getWidth    gw_sw       gw_sh      .  gw_r
getHeight   gh_sw       gh_sh      .  gh_r
....................................         
getSpace                        
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36930262
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аксиоматика для Мартина
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
scheme Rectangle =  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
     ,[gw_sh]
        all h: UReal, f: Figure:- getWidth(setHeight(f, h)) = getWidth(f)
     ,[gh_sh]          
        all h: UReal, f: Figure:- getHeight(setHeight(f, h)) = h
     ,[gh_sw]
        all w: UReal, f: Figure:- getHeight(setWidth(f, w)) = getHeight(f)
  end





Расширили аксиоматикой для ЗБотана
Код: 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.
/*
                таблица названий аксиом


            setWidth    setHeight  .  Rectangle
getWidth    gw_sw       gw_sh      .  gw_r
getHeight   gh_sw       gh_sh      .  gh_r
....................................         
getSpace                        

*/

Rectangle

scheme ZBRectangle = extend  Rectangle with class
    value
      getSpace  : Figure          -> UReal  
     ,Rectangle : UReal >< UReal  -> Figure

    axiom
      [gw_r ]
        all w:UReal, h:UReal :-  getWidth(Rectangle(w,h)) = w
     ,[gh_r ]
        all w:UReal, h:UReal :-  getHeight(Rectangle(w,h)) = h
     ,[gspace ]          
        all f:Figure         :-  getSpace(f) = getHeight(f)*getWidth(f)

  end

...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36930270
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
ZBRectangle

scheme ZBSquare =  extend  ZBRectangle with class
    value
      Square    : UReal           -> Figure   
     ,setSide   : Figure >< UReal -> Figure   
    axiom
      [square]          
        all side: UReal             :- Square(side)           = Rectangle(side, side)
     ,[setSide]
        all newSide: UReal, f:Figure:- setSide(f, newSide) = Square(newSide)
  end
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36930288
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
где отличия от Мартина?

его первый пример, чуть переделанный под функциональный стиль. воид заменил на тип
Код: plaintext
1.
2.
3.
4.
5.
Rectangle * f (Rectangle * r)
{
   r->setWidth( 32 );
   return r;
}

использование в фукнциональном стиле

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
schema ZBSUsage  = class
 value
    f : Figure -> Figure   
    f( f)             is setWidth(r, 32 )

   ,isSquare : Figure -> Bool
/*  isSquare ((w,h))       is  if w           = h               then true else false end */

    isSquare (f)          is  if getWidth(f) = getHeight(f)  then true else false end


   ,squareAfterF: Figure -> Bool
    squareAfterF (fi)               is  isSquare(f(fi))

end



вызов

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

ребенок -> родитель,
изменение ребенка, под видом родителя ранее написанными программами
родитель -> ребенок

выглядит так
Код: plaintext
1.
2.
3.
4.
5.
6.
/*
         newRebenok : X-> Rebenok;
         rebenokMetod: Rebenok >< Z -> Rebenok;
         roditelMetod : Roditel >< Y -> Roditel;
 
*/
   rebenokMetod(roditelMetod(newRebenok(x),y), z);
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36931759
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingiz,

Это что за язык?

Тяжеловато читается, в общем понятно, но надо бы синтаксис.
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36932114
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Introduction to RAISE
Chris George
March 2002

http://agp1.hx0.ru/arts/report249.pdf

Алгебраическое проектирование класса

http://www.softcraft.ru/design/classdesign/
авторКурс «Формальная спецификация и верификация программ» 2010-2011 уч.г.


2010 | 2009 | 2008

Лекторы: проф., доктор физ.-мат. наук Петренко А. К., канд. физ.-мат. наук Хорошилов А. В.
Продолжительность: 36 часов лекции, 36 часов семинары, 72 часа самостоятельная работа.
Аудитория: студенты 5 курса кафедр СП, АСВК и АЯ.
Лекции по средам на первой паре (8:45 - 10:30) в аудитории П-8.

http://sp.cmc.msu.ru/courses/fmsp/
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36935779
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingiz,

Нет, я не готов на такие жертвы - столько читать из чистой computer science ради квадратосрача (
...
Рейтинг: 0 / 0
Re: Выгоды контрактного программирования (design by contract) квадратосрач2 +
    #36936032
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargltchingiz,

Нет, я не готов на такие жертвы - столько читать из чистой computer science ради квадратосрача (

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

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

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

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

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

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

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

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


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