summaryrefslogtreecommitdiffstats
path: root/tde-i18n-ru/docs/tdesdk/umbrello/uml_basics.docbook
blob: 66664c0b653d01999eb4c83dd8677417a0538e4e (plain)
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
<chapter id="uml-basics">
<title
>Основы &UML;</title>
<sect1 id="about-uml">
<title
>О языке &UML;</title>
<para
>Данный раздел предоставит вам небольшой обзор основ &UML;. Он не является учебником по &UML;, и если вы хотите узнать побольше об &UML; или в целом о планировании разработки программного обеспечения, обратитесь к одной из многих книг по данной теме. В Интернете есть много учебных пособий, можете начать с них. </para>

<para
>Унифицированный язык моделирования (&UML;) является языком диаграмм или обозначений для спецификации, визуализации и документации модели объектно-ориентированных программных систем. &UML; не является методом разработки, то есть он не определяет последовательность действий при разработке программного обеспечения. Он помогает описать свою идею и взаимодействовать с другими разработчиками системы. &UML; управляется Object Management Group (OMG) и является промышленным стандартом, описывающим модели программного обеспечения. </para>
<para
>&UML; создан для применения в разработке объектно-ориентированного программного обеспечения, и с некоторыми ограничениями может применяться для других парадигм программирования. </para>
<para
>&UML; состоит из множества модельных элементов, которые представляют различные компоненты разрабатываемой системы. Элементы &UML; используются для создания диаграмм, которые описывают определённую часть системы или точку зрения на неё. &umbrello; поддерживает следующие типы диаграмм: </para>

<itemizedlist>

<listitem
><para
><emphasis
><link linkend="use-case-diagram"
>Диаграммы вариантов использования</link
></emphasis
> отображают действующих лиц (людей или пользователей системы), варианты использования (сценарии использования системы) и их взаимодействие.</para
> </listitem>

<listitem
><para
><emphasis
><link linkend="class-diagram"
>Диаграммы классов</link
></emphasis
> отображают классы и взаимодействие между ними.</para
> </listitem>

<listitem
><para
><emphasis
><link linkend="sequence-diagram"
>Диаграммы последовательностей</link
></emphasis
> отображают объекты и их взаимодействие, выделяя хронологию обмена сообщениями между объектами.</para
> </listitem>

<listitem
><para
><emphasis
><link linkend="collaboration-diagram"
>Диаграммы взаимодействия</link
></emphasis
> отображают объекты и их взаимодействие, выделяя объекты, которые участвуют в обмене сообщениями.</para>
</listitem>

<listitem
><para
><emphasis
><link linkend="state-diagram"
>Диаграммы состояния</link
></emphasis
> отображают состояния, изменения состояний и события в объектах или компонентах системы.</para
> </listitem>

<listitem
><para
><emphasis
><link linkend="activity-diagram"
>Диаграммы активности</link
></emphasis
> отображают активность, состояния и изменения состояний объектов, а также события, возникающие в компонентах системы.</para
></listitem>

<listitem
><para
><emphasis
><link linkend="component-diagram"
>Диаграммы компонентов</link
></emphasis
> показывают компоненты верхнего уровня (такие как KParts или Java Beans).</para
></listitem>

<listitem
><para
><emphasis
><link linkend="deployment-diagram"
>Диаграммы выпуска</link
></emphasis
> показывают экземпляры компонентов и их взаимоотношения.</para
></listitem
> 

</itemizedlist>

</sect1
>   <!-- about-uml -->

<sect1 id="uml-elements"
>  
<title
>Элементы &UML;</title>
<sect2 id="use-case-diagram">
<title
>Диаграмма вариантов использования</title>
<para
>Диаграммы вариантов использования описывают взаимоотношения и зависимости между группами <emphasis
>вариантов использования</emphasis
> и <emphasis
>действующих лиц</emphasis
>, участвующими в процессе.</para>
<para
>Важно понимать, что диаграммы вариантов использования не предназначены для отображения проекта и не могут описывать внутреннее устройство системы. Диаграммы вариантов использования предназначены для упрощения взаимодействия с будущими пользователями системы, с клиентами, и особенно пригодятся для определения необходимых характеристик системы. Другими словами, диаграммы вариантов использования говорят о том, <emphasis
>что</emphasis
> система должна делать, не указывая <emphasis
>сами</emphasis
> применяемые методы.</para>
<para>
<screenshot>
<screeninfo
>Пример диаграммы вариантов использования.</screeninfo>
	<mediaobject>
	  <imageobject>
	    <imagedata fileref="use-case-diagram.png" format="PNG"/>
	  </imageobject>
	  <textobject>
	    <phrase
>Диаграмма вариантов использования</phrase>
	  </textobject>
	  <caption>
	    <para
>Диаграмма вариантов использования </para>
	  </caption>
	</mediaobject>
</screenshot>
</para>
<sect3 id="use-case">
<title
>Вариант использования</title>
<para
><emphasis
>Вариант использования</emphasis
> описывает, с точки зрения действующего лица, группу действий в системе, которые приводят к конкретному результату.</para>
<para
>Варианты использования являются описаниями типичных взаимодействий между пользователями системы и самой системой. Они отображают внешний интерфейс системы и указывают форму того, что система должна сделать (именно что, а не как). </para>
<para
>При работе с вариантами использования важно помнить несколько простых правил: <itemizedlist>
 <listitem
><para
>Каждый вариант использования относится как минимум к одному действующему лицу</para
></listitem>
 <listitem
><para
>Каждый вариант использования имеет инициатора</para
></listitem>
 <listitem
><para
>Каждый вариант использования приводит к соответствующему результату (результату с <quote
>бизнес-значением</quote
>).</para>
 </listitem>
 </itemizedlist>
</para>
<para
>Варианты использования также могут взаимодействовать с другими вариантами использования. Три наиболее часто встречающихся типа взаимодействия между вариантами использования приведены ниже:</para>
<itemizedlist>
<listitem
><para
><emphasis
>&lt;&lt;включение&gt;&gt;</emphasis
> указывает, что вариант использования встраивается <emphasis
>в</emphasis
> другой вариант использования;</para
></listitem>
<listitem
><para
><emphasis
>&lt;&lt;добавление&gt;&gt;</emphasis
> указывает, что в определённых ситуациях или в некоторой точке (называемой точкой расширения) вариант использования будет расширен другим;</para
></listitem>
<listitem
><para
><emphasis
>&lt;&lt;обобщение&gt;&gt;</emphasis
> указывает, что вариант  использования наследует характеристики <quote
>родительского</quote
> варианта использования и может переопределить некоторые из них или добавить новые, подобно наследованию в классах. </para>
</listitem>
</itemizedlist>
</sect3>
<sect3 id="actor">
<title
>Действующее лицо</title>
<para
>Действующее лицо является внешним источником (не элементом системы), который взаимодействует с системой через вариант использования. Действующие лица могут быть как реальными людьми (например, пользователями системы), так и другими компьютерными системами или внешними событиями. </para>
<para
>Действующие лица представляют не <emphasis
>физических</emphasis
> людей или системы, а их <emphasis
>роли</emphasis
>. Эти означает, что когда человек взаимодействует с системой различными способами (предполагая различные роли), он отображается несколькими действующими лицами. Например, человек, работающий в службе поддержки и принимающий от клиентов заказы, будет отображаться в системе как <quote
>участник отдела поддержки</quote
> и <quote
>участник отдела продаж</quote
>. </para>
</sect3>
<sect3 id="use-case-description">
<title
>Описание варианта использования</title>
<para
>Описания вариантов использования являются текстовыми пояснениями варианта использования. Они обычно принимают форму заметки или документа, который каким-то образом прикрепляется к варианту использования и описывает процесс или активность, который имеет место быть в варианте использования. </para>
</sect3>
</sect2
> <!-- use-case-diagram -->

<sect2 id="class-diagram">
<title
>Диаграмма класса</title>
<para
>Диаграммы классов отображают различные классы, из которых состоит система, и их взаимодействие между собой. Диаграммы классов являются <quote
>статичными</quote
> диаграммами, потому что они отображают классы вместе с их методами и атрибутами, так же как и статические взаимодействия между ними: какие классы <quote
>знают</quote
> о каких классах или какие классы <quote
>являются частью</quote
> других классов, но не отображают обмен сообщениями между классами. </para>
<para>
<screenshot>
<screeninfo
>Пример диаграммы класса</screeninfo>
	<mediaobject>
	  <imageobject>
	    <imagedata fileref="class-diagram.png" format="PNG"/>
	  </imageobject>
	  <textobject>
	    <phrase
>Диаграмма класса</phrase>
	  </textobject>
	  <caption>
	    <para
>Диаграмма класса </para>
	  </caption>
	</mediaobject>
</screenshot>
</para>
<sect3 id="class">
<title
>Класс</title>
<para
>Класс определяет атрибуты и методы набора объектов. Все объекты класса (называемые экземплярами) имеют одинаковое поведение и одинаковый набор атрибутов (у каждого объекта - собственный набор атрибутов). Иногда вместо класса используется термин <quote
>тип</quote
>, но важно понимать, что эти термины неодинаковы. Термин <quote
>Тип</quote
> имеет более общий смысл. </para>
<para
>В &UML; классы представлены прямоугольниками с именем класса, которые могут отображать атрибуты и операции класса, помещённые внутри прямоугольника. </para>
<para>
<screenshot>
<screeninfo
>Класс в &UML;</screeninfo>
	<mediaobject>
	  <imageobject>
	    <imagedata fileref="class.png" format="PNG"/>
	  </imageobject>
	  <textobject>
	    <phrase
>Визуальное представление класса в &UML;</phrase>
	  </textobject>
	  <caption>
	    <para
>Визуальное представление класса в &UML; </para>
	  </caption>
	</mediaobject>
</screenshot>
</para>
<sect4 id="attribute">
<title
>Атрибуты</title>
<para
>В &UML; атрибуты отображаются как минимум их названием, но также могут показывать свой тип, начальное значение и другие свойства. Атрибуты также могут отображаться с указанием их области видимости: </para>
<itemizedlist>
<listitem
><para
><literal
>+</literal
> отмечает <emphasis
>public</emphasis
> атрибуты;</para
></listitem>
<listitem
><para
><literal
>#</literal
> отмечает <emphasis
>protected</emphasis
> атрибуты;</para
></listitem>
<listitem
><para
><literal
>-</literal
> отмечает <emphasis
>private</emphasis
> атрибуты.</para
></listitem>
</itemizedlist>
</sect4>
<sect4 id="operation">
<title
>Методы</title>
<para
>Методы (операции) также отображаются как минимум их названием, но также могут показывать свои параметры и возвращаемый тип. Подобно атрибутам, методы имеют область видимости: <itemizedlist>
<listitem
><para
><literal
>+</literal
> отмечает <emphasis
>public</emphasis
> операции;</para
></listitem>
<listitem
><para
><literal
>#</literal
> отмечает <emphasis
>protected</emphasis
> операции;</para
></listitem>
<listitem
><para
><literal
>-</literal
> отмечает <emphasis
>private</emphasis
> операции.</para
></listitem>
</itemizedlist>
</para>
</sect4>

<sect4 id="templates">
<title
>Шаблоны</title>
<para
>Классы могут иметь шаблоны, значение которых используется для неуказанного класса или типа. Тип шаблона указывается при инициализации класса (то есть, при создании объекта). Шаблоны используются в современном C++ и будут введены в Java 1.5, где будут обозначаться как Generics. </para>
</sect4>
</sect3>

<sect3 id="class-associations">
<title
>Ассоциации классов</title>
<para
>Классы могут взаимодействовать друг с другом различными способами:</para>
<sect4 id="generalization">
<title
>Обобщение</title>
<para
>Наследование является основной концепцией объектно-ориентированного программирования, в которой класс <quote
>получает</quote
> все атрибуты и методы наследуемого класса и может переопределять/модифицировать некоторые из них, имея возможность добавлять собственные атрибуты и методы.</para>
<para
>В &UML; ассоциация <emphasis
>обобщения</emphasis
> между двумя классами помещает их в иерархию, представляющую концепцию наследования производного класса от базового. В &UML; обобщения отображаются в виде линии, соединяющей два класса, со стрелочкой у базового класса. <screenshot>
<screeninfo
>Обобщение</screeninfo>
	<mediaobject>
	  <imageobject>
	    <imagedata fileref="generalization.png" format="PNG"/>
	  </imageobject>
	  <textobject>
	    <phrase
>Визуальное представление обобщения в &UML;</phrase>
	  </textobject>
	  <caption>
	    <para
>Визуальное представление обобщения в &UML; </para>
	  </caption>
	</mediaobject>
</screenshot>
</para>
</sect4>

<sect4 id="uml-associations">
<title
>Ассоциации</title>
<para
>Ассоциации отображают взаимодействия между классами и определяют общую семантику и структуру многих типов <quote
>связей</quote
> между объектами.</para>
<para
>Ассоциации являются механизмом, который позволяет объектам взаимодействовать с друг другом. Они описывают связи между различными классами (связи между объектами называются соединениями объектов или <emphasis
>ссылками</emphasis
>. </para>
<para
>Ассоциации могут иметь роль, которая определяет назначение ассоциации и может быть одно- или двунаправленной, показывая, могут ли взаимодействующие объекты обмениваться сообщениями, или только один объект может отсылать сообщения. Каждый конец ассоциации имеет описание множественности, которое указывает, какое количество объектов на этой стороне ассоциации может взаимодействовать с одним объектом на другой стороне. </para>
<para
>В &UML; ассоциации отображаются в виде линии, соединяющей взаимодействующие классы, и могут показывать роль и количество объектов с каждой стороны. Множественность отображается в виде диапазона [мин..макс] неотрицательных значений, звёздочка (<literal
>*</literal
>) в качестве максимального значения обозначает бесконечность. <screenshot>
<screeninfo
>&UML;-ассоциации</screeninfo>
	<mediaobject>
	  <imageobject>
	    <imagedata fileref="association.png" format="PNG"/>
	  </imageobject>
	  <textobject>
	    <phrase
>Визуальное представление ассоциации в &UML;</phrase>
	  </textobject>
	  <caption>
	    <para
>Визуальное представление ассоциации в &UML; </para>
	  </caption>
	</mediaobject>
</screenshot>
</para>
</sect4>

<sect4 id="aggregation">
<title
>Объединение</title>
<para
>Объединения являются специальным типом ассоциаций, в котором два участвующих класса не равнозначны по статусу, но создают взаимодействие типа <quote
>часть-целое</quote
>. Объединение описывает, как класс, играющий роль целого, создаётся из других классов, играющих роль частей. Для объединений класс, выступающий в роли целого, всегда имеет множественность, равную единице. </para>
<para
>В &UML; объединения отображаются в виде линии с ромбом на стороне целого, соединяющей взаимодействующие классы. <screenshot>
<screeninfo
>Объединение</screeninfo>
	<mediaobject>
	  <imageobject>
	    <imagedata fileref="aggregation.png" format="PNG"/>
	  </imageobject>
	  <textobject>
	    <phrase
>Визуальное представление объединения в &UML;</phrase>
	  </textobject>
	  <caption>
	    <para
>Визуальное представление объединения в &UML; </para>
	  </caption>
	</mediaobject>
</screenshot>
</para>
</sect4>
<sect4 id="composition">
<title
>Композиция</title>
<para
>Композиция является ассоциацией, которая представляет <emphasis
>очень тесное</emphasis
> объединение. Это означает, что Композиция формирует взаимодействия типа <quote
>часть-целое</quote
>, но эти взаимодействия настолько сильные, что части не могут существовать сами по себе. Они существуют только внутри целого, и при уничтожении целого уничтожаются и части.</para>
<para
>В &UML; композиции отображаются в виде линии с закрашенным ромбом на стороне целого, соединяющей взаимодействующие классы. </para>
<para
><screenshot>
<screeninfo
>Композиция</screeninfo>
	<mediaobject>
	  <imageobject>
	    <imagedata fileref="composition.png" format="PNG"/>
	  </imageobject>
	  <textobject>
	    <phrase
>Визуальное представление композиции в &UML;</phrase>
	  </textobject>
	</mediaobject>
</screenshot
></para>
</sect4>
</sect3
> <!--class-associations-->

<sect3 id="other-class-diagram-items">
<title
>Другие элементы диаграммы класса</title>
<para
>Диаграммы классов могут содержать другие элементы внутри классов.</para>
<sect4 id="interfaces">
<title
>Интерфейсы</title>
<para
>Интерфейсы являются абстрактными классами, следовательно, объекты данных классов не могут быть созданы напрямую. Они могут содержать методы, но не атрибуты. Классы могут наследоваться от интерфейсов (через ассоциацию реализации), и полученные объекты затем могут использоваться при составлении диаграмм.</para>
<!-- FIXME screenshot -->
</sect4>
<sect4 id="datatype">
<title
>Типы данных</title>
<para
>Типы данных являются примитивами, которые обычно встроены в язык программирования. Яркими примерами могут служить целые и логические типы. Они могут не иметь отношения к классам, но классы могут использовать их.</para>
<!-- FIXME screenshot -->
</sect4>
<sect4 id="enum">
<title
>Перечисления</title>
<para
>Перечисления представляют собой простой список значений. Примером перечисления является перечисление дней недели. Подобно типам данных, они могут использоваться в классах.</para>
<!-- FIXME screenshot -->
</sect4>
<sect4 id="package">
<title
>Пакеты</title>
<para
>Пакеты представляют собой пространства имён в языке программирования. В диаграмме они используются для представления частей системы, которые содержат более одного класса (число классов может превышать несколько сотен).</para>
<!-- FIXME screenshot -->
</sect4>
</sect3>

</sect2
> <!-- class diagram -->

<sect2 id="sequence-diagram">
<title
>Диаграммы последовательностей</title>

<para
>Диаграммы последовательностей показывают обмен сообщениями (то есть вызовы методов) между различными объектами в специфической, ограниченной по времени, ситуации. Диаграммы последовательностей специально выделяют порядок и времена отсылки сообщений объектам.</para>

<para
>В диаграммах последовательностей объекты представляются вертикальными прерывистыми линиями с именем объекта наверху. Временная ось также направлена сверху вниз. Таким образом, сообщения, посылаемые от одного объекта к другому, отображаются стрелками с указанием операции и параметров. </para>

<!-- FIXME update screenshot to show synchronous messages -->
<screenshot>
<screeninfo
>Диаграмма последовательности</screeninfo>
	<mediaobject>
	  <imageobject>
	    <imagedata fileref="sequence-diagram.png" format="PNG"/>
	  </imageobject>
	  <textobject>
	    <phrase
>Диаграмма последовательности</phrase>
	  </textobject>
	  <caption>
	    <para
>Диаграмма последовательности </para>
	  </caption>
	</mediaobject>
</screenshot>

<para
>Сообщения могут быть либо синхронными, когда управление передаётся вызываемому объекту вплоть до момента окончания его работы, либо асинхронными, когда управление сразу же возвращается вызывающему объекту. Синхронные сообщения обозначаются вертикальным прямоугольником на стороне вызываемого объекта для отображения передачи управления в программе.</para>
</sect2
> <!-- sequence diagrams -->

<sect2 id="collaboration-diagram">
<title
>Диаграммы взаимодействий</title>

<para
>Диаграммы взаимодействий показывают взаимодействия между объектами, участвующими в конкретной ситуации. Это более или менее повторяет информацию, отображаемую диаграммами последовательностей, но там основной упор делается на то, как взаимодействия проявляются во времени, а здесь выделяются связи между объектами и их топологией.</para>

<para
>На диаграммах взаимодействий сообщения, пересылаемые от одного объекта к другому, представляются в виде стрелок с указанием имени, параметров и последовательности сообщений. Диаграммы взаимодействий наиболее удачно подходят для отображения процесса работы программы или какой-либо ситуации, а также является лучшим типом диаграмм для демонстрации или объяснения какого-либо процесса в логике программы. </para>

<screenshot>
<screeninfo
>Взаимодействие</screeninfo>
	<mediaobject>
	  <imageobject>
	    <imagedata fileref="collaboration-diagram.png" format="PNG"/>
	  </imageobject>
	  <textobject>
	    <phrase
>Диаграмма взаимодействия</phrase>
	  </textobject>
	  <caption>
	    <para
>Диаграмма взаимодействия </para>
	  </caption>
	</mediaobject>
</screenshot>

</sect2
> <!-- collaboration diagrams -->

<sect2 id="state-diagram">
<title
>Диаграмма состояния</title>
<para
>Диаграммы состояний показывают различные состояния объекта в течение его времени жизни и причины, вызывающие их смену. </para
>                              
<para
>Диаграммы состояний рассматривают объекты как <emphasis
>конечные автоматы</emphasis
>, которые могут быть в одном из нескольких конечных состояний. Конечные состояния могут изменяться с помощью конечного набора причин. Например, объект типа <emphasis
>NetServer</emphasis
> может находиться в одном из следующих состояний: </para>
<itemizedlist>
<listitem
><para
>Готовность</para
></listitem>
<listitem
><para
>Ожидание</para
></listitem>
<listitem
><para
>Обработка</para
></listitem>
<listitem
><para
>Остановка</para
></listitem>
</itemizedlist>
<para
>а события, которые могут привести к смене объектом своего состояния, это:</para>
<itemizedlist>
<listitem
><para
>Создание объекта</para
></listitem>
<listitem
><para
>Объект принял ожидаемое сообщение</para
></listitem>
<listitem
><para
>Клиент запросил соединение по сети</para
></listitem>
<listitem
><para
>Клиент прервал запрос</para
></listitem>
<listitem
><para
>Запрос выполнен</para
></listitem>
<listitem
><para
>Объект получил завершающее сообщение</para
></listitem>
<listitem
><para
>и так далее</para
></listitem>
</itemizedlist>
<para>
<screenshot>
<screeninfo
>Диаграмма состояния</screeninfo>
	<mediaobject>
	  <imageobject>
	    <imagedata fileref="state-diagram.png" format="PNG"/>
	  </imageobject>
	  <textobject>
	    <phrase
>Диаграмма состояния</phrase>
	  </textobject>
	  <caption>
	    <para
>Диаграмма состояния </para>
	  </caption>
	</mediaobject>
</screenshot>
</para>
<sect3 id="state">
<title
>Состояние</title>
<para
>Состояния являются ключевыми элементами диаграмм состояний. Состояния принадлежат ровно одному классу и представляют собой совокупность значений, которые могут принимать атрибуты класса. В &UML; состояние описывает внутреннее состояние объекта одного определённого класса. </para
>                       
<para
>Следует отметить, что не стоит отображать на диаграмме состояний все состояния, отображайте только важные состояния, которые значительно влияют на работу объекта.</para>
<para
>Существуют два особых типа состояний: начало и конец. И вот почему: нет такого события, которое заставит объект возвратиться в состояние начало, если он из него вышел; нет такого события, которое заставит объект выйти из состояния конец, если он в него вошёл. </para>
</sect3>

</sect2
> <!-- state diagrams -->

<sect2 id="activity-diagram">
<title
>Диаграмма действий</title>
<para
>Диаграммы действий описывают последовательность действий в системе с помощью действий. Диаграммы действий являются специальной формой диаграмм состояний, только в основном содержат действия. </para>
<para>
<screenshot>
<screeninfo
>Пример диаграммы действий</screeninfo>
	<mediaobject>
	  <imageobject>
	    <imagedata fileref="activity-diagram.png" format="PNG"/>
	  </imageobject>
	  <textobject>
	    <phrase
>Диаграмма действий</phrase>
	  </textobject>
	  <caption>
	    <para
>Диаграмма действий </para>
	  </caption>
	</mediaobject>
</screenshot>
</para>
<para
>Диаграммы действий подобны процедурным диаграммам потока, с той разницей, что все действия напрямую присоединены к объектам.</para>

<para
>Диаграммы действий всегда ассоциируются с <emphasis
>классами</emphasis
>, <emphasis
>методами</emphasis
> или <emphasis
>вариантами действий</emphasis
>.</para>

<para
>Диаграммы действий поддерживают как последовательные, так и параллельные действия. Параллельное выполнение представляется с помощью пиктограмм Fork/Wait. Для действий, выполняющихся параллельно, порядок, в котором они выполняются, не имеет значения (они могут выполняться одновременно или друг за другом).</para>
<sect3 id="activity">
<title
>Действие</title>
<para
>Действие представляет собой один шаг процесса. Одно действие представляет одно состояние системы с внутренним действием и, как минимум, с одним результатом действия. Действия могут иметь более одного результата, если они происходят при разных условиях. </para
> 
<para
>Действия могут формировать иерархию, это означает, что действие может быть составлено из нескольких <quote
>мелких</quote
> действий. В этом случае входящие и исходящие переходы должны соответствовать входящим и исходящим переходам на детализированной диаграмме. </para>

</sect3>
</sect2
> <!-- activity diagram -->

<sect2 id="helper-elements">
<title
>Вспомогательные элементы</title>
<para
>Существует несколько вспомогательных элементов в &UML;, которые не имеют реального семантического значения для модели, но помогают внести ясность в диаграмму. Перечислим их: </para>
<itemizedlist>
<listitem
><para
>Текстовые строки</para
></listitem>
<listitem
><para
>Текстовые заметки и якоря</para
></listitem>
<listitem
><para
>Контейнеры</para
></listitem>
</itemizedlist
>   
<para
>Текстовые строки удобно использовать для добавления краткой текстовой информации в диаграмму, это свободно прикрепляемый текст, который ничего не значит для модели. </para
>           

<para
>Текстовые заметки следует использовать для добавления более детальной информации об объекте или о специфической ситуации. Текстовые заметки могут быть прикреплены к элементам &UML;. </para>

<para
>Контейнеры являются свободными прямоугольниками, которые могут быть использованы для группирования элементов диаграмм. Они не несут никакой смысловой нагрузки для модели.</para>

<!-- FIXME, screenshot -->
</sect2
> <!-- helper elements -->

<sect2 id="component-diagram">
<title
>Диаграммы компонентов</title>
<para
>Диаграммы компонентов отображают компоненты программного обеспечения (компонентные технологии, такие как KParts, CORBA или Java Beans или просто разделы системы, ясно отличающиеся друг от друга) и сущности, из которых они возникли, например, файлы с исходным кодом, библиотеки или таблицы баз данных.</para>

<para
>Компоненты обладают интерфейсами (то есть абстрактными классами с методами), которые позволяют создавать ассоциации между компонентами.</para>
</sect2>

<sect2 id="deployment-diagram">
<title
>Диаграммы выпуска</title>

<para
>Диаграммы выпуска отображают объекты, созданные во время выполнения программы, и их ассоциации. Они включают в себя узлы, которые являются физическими ресурсами, обычно одиночными компьютерами. Они также отображают интерфейсы и объекты.</para>

</sect2>

</sect1
> 
</chapter>