книги / Проектирование автоматизированных информационных систем на основе объектно-ориентированного подхода
..pdf/ / # # e n d
T e a c h e r : : T e a c h e r % 4 0 9 D 0 5 C 4 0 1 6 2 _ c o n s t . i n i t i a l i z a t i o n
{
/ / # # b e g i n T e a c h e r : : T e a c h e r % 4 0 9 D 0 5 C 4 0 1 6 2 _ c o n s t . b o d y p r e -
s e r v e = y e s
/ / # # e n d T e a c h e r : : T e a c h e r % 4 0 9 D 0 5 C 4 0 1 6 2 _ c o n s t . b o d y
}
T e a c h e r : : T e a c h e r ( c o n s t T e a c h e r b r i g h t )
/ / # # b e g i n T e a c h e r : : T e a c h e r % 4 0 9 D 0 5 C 4 0 1 6 2 _ c o p y . h a s i n i t
p r e s e r v e = n o
/ / # # e n d T e a c h e r : : T e a c h e r % 4 0 9 D 0 5 C 4 0 1 6 2 _ c o p y . h a s i n i t
/ / # # b e g i n
T e a c h e r : : T e a c h e r % 4 0 9 D 0 5 C 4 0 1 6 2 _ c o p y . i n i t i a l i z a t i o n p r e - s e r v e = y e s
/ / # # e n d
T e a c h e r : : T e a c h e r % 4 0 9 D 0 5 C 4 0 1 6 2 _ c o p y . i n i t i a l i z a t i o n
{
/ / # # b e g i n T e a c h e r : : T e a c h e r % 4 0 9 D 0 5 C 4 0 1 6 2 _ c o p y . b o d y p r e - s e r v e = y e s
/ / # # e n d T e a c h e r : : T e a c h e r % 4 0 9 D 0 5 C 4 0 1 6 2 _ c o p y . b o d y
}
T e a c h e r : : - T e a c h e r ()
{
/ / # # b e g i n T e a c h e r : : - T e a c h e r % 4 0 9 D 0 5 C 4 0 1 6 2 _ d e s t . b o d y p r e -
s e r v e = y e s
/ / # # e n d T e a c h e r : : - T e a c h e r % 4 0 9 D 0 5 C 4 0 1 6 2 _ d e s t . b o d y
}
T e a c h e r & T e a c h e r : : o p e r a t o r = ( c o n s t T e a c h e r & r i g h t )
{
/ / # # b e g i n T e a c h e r : : o p e r a t o r = % 4 0 9 D 0 5 C 4 0 1 6 2 _ a s s i g n . b o d y
p r e s e r v e = y e s
/ / # # e n d T e a c h e r : : o p e r a t o r = % 4 0 9 D 0 5 C 4 0 1 6 2 _ a s s i g n . b o d y
}
i n t T e a c h e r : : o p e r a t o r = = ( c o n s t T e a c h e r & r i g h t ) c o n s t
{
/ / # # b e g i n T e a c h e r : : o p e r a t o r = = % 4 0 9 D 0 5 C 4 0 1 6 2 _ e q . b o d y p r e - s e r v e = y e s
/ / # # e n d T e a c h e r : : o p e r a t o r = = % 4 0 9 D 0 5 C 4 0 1 6 2 _ e q . b o d y
}
i n t T e a c h e r : : o p e r a t o r ! = ( c o n s t T e a c h e r & r i g h t ) c o n s t
{
/ / # # b e g i n T e a c h e r : : o p e r a t o r ! = % 4 0 9 D 0 5 C 4 0 1 6 2 _ n e q . b o d y p r e - s e r v e = y e s
/ / # # e n d T e a c h e r : : o p e r a t o r ! = % 4 0 9 D 0 5 C 4 0 1 6 2 _ n e q . b o d y
}
/ / A d d i t i o n a l D e c l a r a t i o n s
/ / # # |
b e g i n Teacher%409D05C40162. d e c l a r a t i o n s p r e s e r v e = y e s |
||
/ / # # |
e n d |
Teacher%409D05C40162.d e c l a r a t i o n s |
|
/ / # # |
b e g i n |
module%409FC73F0246 . e p i l o g p r e s e r v e = y e s |
|
/ / # # |
e n d module%409FC73F0246. e p i l o g |
Если внимательно посмотреть на полученные результаты, то можно увидеть, что помимо структуры класса при генерации кода были учтены и все существующие отношения класса «Teacher», на пример, отношение наследования (обобщения) от класса «SysUser» (файл «teacher.h»). Полученный файл «teacher» скорее напоминает шаблон для описания методов класса.
13.2.Задания для самостоятельного выполнения
1.Создайте в Rational Rose новый проект.
2.В рамках этого проекта постройте диаграмму классов, пред ставленную на рис. 13.5.
|
Office |
1 |
1..* |
Manager |
|
|
|
||
|
name: String |
|
|
|
Company |
address: String |
|
|
Employee |
name: String |
o - |
|
|
TD: Integer |
address: String |
|
|
- \> 1FO: String |
|
INN: String |
|
|
|
getlnformationO |
|
|
|
|
|
|
Warehouse |
1 |
1..* |
getPhotoQ |
|
Storekeeper |
|||
|
|
|
||
|
|
|
|
num: Integer 1..* address: String
Рис. 13.5. Диаграмма классов, отображающая структуру предприятия
3.Создайте соответствующую диаграмму компонентов для реа лизации классов.
4.Выполните генерацию модели в программный код языка C++.
5.Проанализируйте полученные результаты.
ЗАКЛЮЧЕНИЕ
В заключении хотелось бы еще раз напомнить о том, что любой серьезный проект требует к себе серьезного отношения. Это означа ет, что мы должны понять, что хотим от разрабатываемой системы еще на стадии анализа и проектирования системы, а не на этапе гене рации кода или стадии опытной эксплуатации. Язык, а точнее нота ция UML, представляет собой инструмент, с помощью которого мы можем построить «чертеж» будущей системы, понятный не только всем тем, кто принимает участие в разработке, но и конечному поль зователю системы.
Данное учебное пособие не претендует на полное описание языка UML, но предоставляет читателю возможность взять «быстрый старт» в изучении основ объектно ориентрованного проектирования с использованием UML и закрепить свои знания путем реализации практических примеров в среде Rational Rose.
СПИСОК ЛИТЕРАТУРЫ
1.Буч Г., Рамбо Дж., Джекобсон А. Язык UML. Руководство пользователя. - М.: ДМК, 2000.
2.Леоненков А.В. Самоучитель UML. - СПб.: BHV, 2001.
3.Рамбо Дж. Объектно ориентированное моделирование и про ектирование.-Нью-Джерси: Prentice hall, 1991.
4.Кватрани Т. Визуальное моделирование с помощью Rational Rose 2002 и UML. - Киев: Вильямс, 2003.
5.Смит К. Практическое руководство по созданию гибкого и мас штабируемого программного обеспечения. - Киев: Вильямс, 2003.
6.Игумнов Е. Software Project Manager среднего проекта - кто он? - URL: http://manager.olc.ru/spm/index.htrnl.
Приложение 1
ИСПОЛЬЗОВАНИЕ МОДУЛЯ «RATIONAL ROSE C++ ANALYZER» ДЛЯ ОБРАТНОГО ВОССТАНОВЛЕНИЯ МОДЕЛИ ПО ИСХОДНОМУ КОДУ
Rational Rose предоставляет разработчику возможность восста новления модели по программному коду. За поддержку этой функции отвечает модуль «Rational Rose C++ Analyzer», который представляет собой отдельное приложение. Данный модуль может быть вызван либо из соответствующего пункта меню программ операционной системы Windows, либо непосредственно из приложения Rational Rose посредством выбора пункта «Tools» > «С++»> «Reverse Engi neering» главного меню.
Рассмотрим пример восстановления модели по программному коду. Для этого в любом текстовом редакторе создадим два файла: «Document.h» и «Document.cpp».
Файл «Document.h» будет содержать в себе объявления двух клас сов: «Document» (документ) и «Invoice» (счет-фактура), а файл «Document.cpp» - определения этих классов. При этом класс «Invoice» наследует структуру и методы класса «Document».
Ниже приведено содержимое файлов «Document.h» и «Docu ment.cpp».
Docum ent.h
/ / к л а с с д о к у м е н т а |
|
|
c l a s s D o c u m e n t |
|
|
{ |
|
|
p r i v a t e : |
|
|
c h a r * d o c N u m ; |
/ / н о м е р д о к у м е н т а |
|
c h a r * d o c D a t e ; / / д а т а д о к у м е н т а |
||
c h a r * a u t h o r ; |
/ / а в т о р д о к у м е н т а |
|
p u b l i c : |
|
|
D o c u m e n t ( ) ; |
/ / к о н с т р у к т о р |
|
' D o c u m e n t () ; |
/ / д е с т р у к т о р |
c h a r v o i d c h a r v o i d c h a r v o i d
* g e t _ d o c N u m ( ) ;
s e t _ d o c N u m ( c h a r * v a l u e ) ;
* g e t _ d o c D a t e ( ) ; |
|
s e t _ d o c D a t e ( c h a r |
* v a l u e ) ; |
* g e t _ a u t h o r ( ) ; |
|
s e t a u t h o r ( c h a r |
* v a l u e ) ; |
};
/ / к л а с с с ч е т - ф а к т у р а , н а с л е д о в а н и е о т D o c u m e n t
c l a s s I n v o i c e |
p u b l i c D o c u m e n t |
|
{ |
|
|
p r i v a t e : |
|
|
f l o a t a m o u n t ; |
/ / с у м м а |
|
f l o a t t a x ; |
|
/ / н а л о г |
f l o a t a m o u n t T a x ; / / с у м м а с н а л о г о м p u b l i c :
f l o a t g e t _ v a l u e ( i n t n ) ;
v o i d s e t _ _ v a l u e ( f l o a t a m o u n t , f l o a t t a x ) ; p r o t e c t e d :
Document.cpp
# i n c l u d e < d o c u m e n t . h > D o c u m e n t : : D o c u m e n t ()
U ;
D o c u m e n t : : ~ D o c u m e n t ()
{};
c h a r * D o c u m e n t : : g e t _ d o c N u m () { r e t u r n d o cN u m ;
}
c h a r * D o c u m e n t : : g e t _ d o c D a t e ()
{ r e t u r n d o c D a t e ;
}
c h a r * D o c u m e n t : : g e t _ a u t h o r () { r e t u r n a u t h o r ;
}
v o i d D o c u m e n t : : s e t _ d o c N u m ( c h a r * v a l u e )
{ d o cN u m = v a l u e ;
}
v o i d D o c u m e n t : : s e t _ d o c D a t e ( c h a r * v a l u e )
{ d o cN u m = v a l u e ;
}
v o i d D o c u m e n t : : s e t _ a u t h o r ( c h a r * v a l u e )
{ a u t h o r = v a l u e ;
}
f l o a t |
I n v o i c e : : g e t _ v a l u e ( i n t n ) |
|||
{ i f |
(n == 1) |
r e t u r n |
a m o u n t ; |
|
i f |
(n = = |
2 ) |
r e t u r n |
t a x ; |
i f |
(n = = |
3 ) r e t u r n a m o u n t T a x ; |
};