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== указатель на первый узел мультисписка))
