Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаба №2 МОЭВМ.doc
Скачиваний:
14
Добавлен:
01.05.2014
Размер:
293.38 Кб
Скачать

1.4. Перечисление имён классов объектов

Используемые стереотипы:

<<закрытый>> -

<<открытый>> -

<<имя_класса>> CPoint

<<имя_класса>> CPiece

<<имя_класса>> CHead

<<имя_класса>> CBody

<<имя_класса>> CShlic

<<имя_класса>> CEdge

<<имя_класса>> CImage

<<имя_класса>> CNImage

<<имя_класса>> CElem

<<имя_класса>> CList

CPoint

- float x

- float y

- const unsigned int id

- static unsigned int counter

- static unsigned int counter_all

+CPoint(const float x, const float y)

+~CPoint()

+ void SetXY(float x,y)

+ void GetXY(float &x, float &y)

+ void MoveTodXdY (const float dx, const float dy)

+ unsigned int GetID ( ) const

CPiece

- СPointP1,P2

- const unsigned int id

- static unsigned int counter

- static unsigned int counter_all

+CPiece (const CPoint P1, const CPoint P2);

+~CPiece()

+void SetPoint1 (const CPoint P0)

+void SetPoint2 (const CPoint P0)

+CPoint GetPoint1 ( ) const

+CPoint GetPoint2 ( ) const

+void MoveTodXdY (float dx, float dy)

+ unsigned int GetID ( ) const

CHead

- float R

- CPoint P

- CShlic shlic

- const unsigned int id

- static unsigned int counter

- static unsigned int counter_all

+CHead (const CPoint P, const CShlic S, const float R)

+~CHead()

+void SetR(const float x)

+void SetP(const CPoint x)

+void SetShlic(const CShlic &p)

+void GetR(float &x)

+CPoint GetP()

+ CShlic GetShilc()

+void MoveTodXdY(float dx, float dy)

+ unsigned int GetID ( ) const

CBody

- floatHt

- float W

- CPoint P

- float N

- CList L

- const unsigned int id

- static unsigned int counter

- static unsigned int counter_all

+CBody (const CPoint P, const float Ht, const float W, const float N);

+~CBody()

+void SetPoint (const CPoint P0)

+void SetHeight (const float x)

+void Set Width (const float x)

+CPoint GetPoint ( )

+float x GetHeight ( )

+float x Get Width ( )

+CList* GetList ( )

+void MoveTodXdY (float dx, float dy)

+ unsigned int GetID ( ) const

CHead

- CPoint P1

- CPoint P2

- CListL

- const unsigned int id

- static unsigned int counter

- static unsigned int counter_all

+ void SetPoint1 (const CPoint P0)

+ void SetPoint2 (const CPoint P0)

+ CPoint GetPoint1 ( ) const

+ CPoint GetPoint2 ( ) const

+ void MoveTodXdY (const float dx, const float dy)

+ unsigned int GetID ( ) const

CShlic

- СPointP1,P2

- const unsigned int id

- static unsigned int counter

- static unsigned int counter_all

+CShlic (const CPoint P1,const CPoint P2);

+~CShlic()

+void SetPoint1 (const CPoint P0)

+void SetPoint2 (const CPoint P0)

+CPoint GetPoint1 ( ) const

+CPoint GetPoint2 ( ) const

+void MoveTodXdY (float dx, float dy)

+ unsigned int GetID ( ) const

CElem

- Data* data

- CElem* next

- const unsigned int id

- static unsigned int counter

- static unsigned int counter_all

+CElem();

+~CElem();

+ void SetNext (const CElem* p_elem)

+ void SetData (const Data* p_data0)

+ CElem* GetNext ( ) const

+ Data* GetData ( ) const

+ unsigned int GetID ( ) const

CEdge

- СPiece P1, P2

- float Ho

- const unsigned int id

- static unsigned int counter

- static unsigned int counter_all

+CEdge (const CPiece P0, const float Ho)

+~CEdge()

+ void SetP1 (const CPiece P)

+ void SetP2 (const CPiece P)

+ void SetHeight (const CPoint P)

+ CPoint GetP ( )

+ float x GetHeight ( )

+ void MoveTodXdY(float dx, float dy)

+ unsigned int GetID ( ) const

CImage

- СHead head

- CBody body

- CEdge edge

- CList Points

-BOOL IsTwisted

- const unsigned int id

- static unsigned int counter

- static unsigned int counter_all

+CImage();

+~CImage();

+ void SetHead(const СHead &h)

+ void SetBody(const CBody &b)

+ void SetEdge(const CEdge &e)

+ СHead GetHead()

+ CBody GetBody()

+ CEdge GetEdge()

+ PrintImage ( )

+ void MoveTodXdY (const float dx, const float dy)

+ vaidAddPointToList(CPoint&P)

+ void Twirl ()

+ void Unscrew ()

+ unsigned int GetID ( ) const

CList

- CElem *pbeg

- CElem *pend

- const unsigned int id

- static unsigned int counter

- static unsigned int counter_all

+CList();

+~CList();

+ CElem* begin ( ) const

+ void add_back (CElem* p_elem)

+ void erase ( )

+ unsigned int GetID ( ) const

CNImage

- CMList mlist

- const unsigned int id

- static unsigned int counter

- static unsigned int counter_all

+CNImage();

+~CNImage();

+ CList* GetPtrToList () const

+ void AddImage(CImage* p_image)

+ void DelImage(const unsigned int index)

+ void PrintNImage ( ) const

+ void MoveTodXdY (const float dx, const float dy)

+ unsigned int GetID ( ) const

1.4.Проектирование классов объектов на языке С++ на основе контрактов

Описания классов «Элемент», «Линейный список», «Мультиэлемент», «Мультисписок» приведены в отчете к лабораторной работе №1.

Класс «Острие»

Название

Предусловия

Постусловия

1

CEdge

P10 = точка левой вершины основания с вещественными координатами

P20 = точка правой вершины основания с вещественными координатами

Ho= высота острия, вещ-е число >0

P1 =P10

P2 =P20

Ho=Ho0

2

~CEdge

P10 = точка левой вершины основания с вещественными координатами

P20 = точка правой вершины основания с вещественными координатами

Ho= высота острия, вещ-е число >0

экземпляр класса разрушен

3

SetPoint1

P10 = точка левой вершины основания с вещественными координатами

P1 =P10

4

SetPoint2

P20 = точка правой вершины основания с вещественными координатами

P2=P20

5

SetHeight

Ho0 = высота острия, вещ-е число >0

Ho=Ho0

6

GetPoint1

P1 = точка левой вершины основания с вещественными координатами

P10=P1

7

GetPoint2

P2 = точка правой вершины основания с вещественными координатами

P20=P2

8

GetHeight

Ho= высота острия, вещ-е число >0

Ho0=Ho

9

GetList

атрибут класса CElem:

CElem* next

CElem* GetNext

10

GetID

(id Є Z) &(id > 0)

GetID = id

11

MoveTodXdY

(dx Є R) & (dy Є R)

P1->x = P1->x + dx

P1->y = P1->y + dy

P2->x = P2->x + dx

P2->y = P2->y + dy

Инвариант:

(P.P1.xЄR)&&(P.P1.yЄR)&& (P.P2.xЄR)&&(P.P2.yЄR)&&(P.P1.x<P.P2.x)&&(P.P1.y==P.P2.y)&&(HoЄR)&&(Ho>0)&& (ID>0), гдеR– множество вещественных чисел.

Класс «Головка»

Название

Предусловия

Постусловия

1

CHead

P0 = точка центра полукруга с вещественными координатами

R0 = радиус, вещественное число,>0

P=P0

R=R0

2

~ CHead

P= точка центра полукруга с вещественными координатами

R= радиус, вещественное число,>0

экземпляр класса разрушен

3

SetPoint

P0 = точка центра полукруга с вещественными координатами

P=P0

4

SetR

R0 = радиус, вещественное число,>0

R=R0

5

GetPoint

P= точка центра полукруга с вещественными координатами

P0=P

6

GetR

R= радиус, вещественное число,>0

R0=R

7

GetList

атрибут класса CElem:

CElem* next

CElem* GetNext

8

GetID

(id Є Z) &(id > 0)

GetID = id

9

MoveTodXdY

(dx Є R) & (dy Є R)

P1->x = P1->x + dx

P1->y = P1->y + dy

Инвариант:

(P.xЄR)&&(P.yЄR)&&(RЄR)&&(R>0)&&(shlic.P1.x==shlic.P2.x==P.x)&&

( shlic.P1.y == P.y+R)&&( shlic.P2.y< shlic.P1.y)&&( shlic.P2.y>P.y)&& (ID>0), где R – множество вещественных чисел.

Класс «Тело»

Название

Предусловия

Постусловия

1

CBody

P= точка середины верхней стороны с вещественными координатами

W= ширина, вещественное число, >0

Ht= высота, вещественное число, >0

P1 =P10

W=W0

Ht=Ht0

2

~ CBody

P= точка середины верхней стороны с вещественными координатами

W= ширина, вещественное число, >0

Ht= высота, вещественное число, >0

экземпляр класса разрушен

3

SetPoint

P0 = точка середины верхней стороны с вещественными координатами

P=P0

4

SetHeight

W0 = ширина, вещественное число, >0

W=W0

5

SetWidth

Ht0 = высота, вещественное число, >0

Ht=Ht0

6

GetPoint

P= точка середины верхней стороны с вещественными координатами

P0=P

7

GetWidth

W= ширина, вещественное число, >0

W=W0

8

GetHeight

Ht= высота, вещественное число, >0

Ht=Ht0

9

MoveTodXdY

(dx Є R) & (dy Є R)

P1->x = P1->x + dx

P1->y = P1->y + dy

Инвариант:

(P.x Є R)&&( P.y Є R)&& (Ht Є R)&&(Ht>0) && (W Є R)&&(W>0)&&(Pt1.x == P.x-W/2) &&(Pt2.x == P.x+W/2) &&(Pt1.y == P.y-t*Ht/N) &&(Pt2.y == P.y-(t+1)*Ht/N)&& (ID>0),

где R– множество вещественных чисел.Pt1 –левая точкаt-го отрезка резьбы,Pt2 – правая точкаt-го отрезка резьбы.t=0..(N-1)

Класс «Изображение»

Название

Предусловия

Постусловия

1

CImage

-

first = 0

2

~CImage

first= указаетль на начало списка характерных точек, или 0

экземпляр класса разрушен

3

InsElem

first= указатель на начало списка характерных точек, или 0

first= указаетль на начало списка характерных точек.

4

ClrImage

first= адрес ячейки памяти, указывающей на начало списка характерных точек, или 0

first = 0

5

PrintImage

first= указаетль на начало списка характерных точек, или 0

firsta = firstb

6

GetID

(id Є Z) &(id > 0)

GetID = id

7

MoveTodXdY

(dx Є R) & (dy Є R)

Pn->x = Pn->x + dx

Pn->y = Pn->y + dy

8

Twirl ()

Pn– характерные точки изображения с вещественными координатами

IsTwisted = false

Pn->x = Pn->x

Pn->y = Pn->y - Ht

IsTwisted = true

9

Unscrew ()

Pn– характерные точки изображения с вещественными координатами

IsTwisted = true

Pn->x = Pn->x

Pn->y = Pn->y + Ht

IsTwisted = false

Инвариант:

(head.P == body.P)&&(head.shlic.P1.x == body.P.x)&&(edge.P.P1.x == body.P.x-W/2) &&(edge.P.P2.x == body.P.x+W/2) &&(edge.P.P1.y == edge.P.P2.y == body.P.y-Wt)&&(ID>0)

Класс «Набор изображений»

Название

Предусловия

Постусловия

1

CNImage

-

mlist = пустой указатель

2

~CNImage

mlist= указатель на начало мультисписка или пустой указатель

экземпляр класса разрушен

3

AddImage

mlist= указатель на начало мультисписка или пустой указатель

mlist= указатель на начало мультисписка

4

DelImage

mlist= указатель на начало мультисписка

mlist= указатель на начало мультисписка или пустой указатель

5

PrintImage

mlist= указатель на начало мультисписка или пустой указатель

mlist a = mlist b

6

GetID

(id Є Z) & (id > 0)

GetID = id

7

MoveTodXdY

(dx Є R) & (dy Є R)

P->x = P->x + dx

P->y = P->y + dy

для всех изображений

Инвариант:(ID>0)&&((mlist==NULL)||(mlist== указатель на первый узел мультисписка))

13