# &UML; Basics

## About &UML;

Äi tiu Äapitro volas doni rapidan resumon de la fundamentoj de &UML;. Memoru ke Äi tiu ne estas ampleksa seminario pri UML sed tamen konciza enkonduko al UML kiu povas esti legata kiel UML kompendio. Se vi Åatas lerni pli pri la UniÄinta Modelad-Lingvo, aÅ Äenerale pri softvar-analizo kaj -desegno, konsultu unu el la multaj libroj haveblaj pri la temo. Ekzistas ankaÅ multaj seminarioj en la Interreto kiujn vi povas preni kiel deirpunkto.

La UniÄinta Modelad-Lingvo (&UML;) estas skema lingvo aÅ notacio por specifi, bildigi kaj dokumenti modelojn de objekt-orientitaj softvar-sistemoj. &UML; ne estas disvolviÄa metodo, tio signifas ke Äi ne diktas kion fari unue kaj kion poste, aÅ kiel desegni vian sistemon, sed Äi helpas vin bildigi vian desegnon kaj komuniki Äin al aliaj. &UML; estas regata far la Objekt-Mastrumada Grupo (OMG) kaj estas la industria normo por grafike priskribi softvaron.

&UML; estas konceptita por objekt-orientata softvar-desegno kaj nur limigite alpikiÄas al aliaj programadaj paradigmoj.

&UML; konsistas el multaj model-elementoj kiuj reprezentas la diversajn partojn de softvarsistemo. La &UML; elementoj estas uzataj por krei diagramojn kiuj reprezentas certan parton aÅ vidpunkton de la sistemo. La sekvontaj specoj de diagramoj estas subtenataj per &umbrello;:

- Uzkazdiagramoj montras aktorojn (homojn aÅ aliajn uzantojn de la sistemo), uzokazojn (la scenaroj kiam aktoroj uzas la sistemon), kaj iliajn interrilatojn

- Klasdiagramoj montras klasojn kaj ties interrilatojn

- Sinsekvodiagramoj montras objektojn kaj sinsekvon de metod-alvokoj kiujn ili faras Äe aliaj objektoj.

- Kunlabordiagramoj montras objektojn kaj ties interrilaton, emfazante la objektojn kiuj partoprenas en la interÅanÄo de mesaÄoj

- Statodiagramoj montras statojn, statoÅanÄojn kaj eventojn en objekto aÅ en parto de la sistemo

- Aktivecdiagramoj montras aktivecojn kaj la ÅanÄoj de unu aktiveco al alia kune kun la eventoj okazantaj en iu parto de la sistemo

- Komponentaj Diagramoj montras la altnivelajn programkomponantojn (kiel ekz. KParts aÅ Java Beans).

- Sterndiagramoj montras la instancojn de la komponantoj kaj iliajn interrilatojn.

## &UML; Elements

### Uzkazdiagramo

Uzokazaj diagramoj priskribas la rilatojn kaj dependojn inter grupo da Uzkazoj kaj la Aktoroj partoprenantaj en la procedo.

Gravas rimarki ke uzkazdiagramoj ne adekvatas por reprezenti la desegnon, kaj ne povas priskribi la internon de sistemo. Uzkazoskemoj celas faciligi la komunikadon kun la estontaj uzantoj de la sistemo, kaj kun la kliento, kaj estas specife taÅgaj por determini la postulatajn trajtojn kiujn la sistemo havu. Uzkazdiagramoj indikas kion la sistemo faru sed ne kiel tio estu atingata.

An example Use Case diagram. &umbrello; montranta uzkazdiagramon

&umbrello; montranta uzkazdiagramon

#### Uzokazo

Uzokazo priskribas — de la vidpunkto de la aktoroj — grupon da aktivecoj en sistemo kiu produktas konkretan, palpeblan rezulton.

Uzkazoj estas priskriboj de la tipaj interagadoj inter la uzantoj de sistemo kaj la sistemo mem. Ili reprezentas la eksteran interfacon de la sistemo kaj detaligas certforme la postulojn de tio, kion la sistemo plenumu (ja memoru: nur kion, ne kiel).

Traktante uzkazojn, gravas memori kelkajn simplajn regulojn:

- Äiu uzkazo rilatas al almenaÅ unu aktoro

- Äiu uzkazo havas iniciatinton (tio estas aktoro)

- Äiu uzkazo kaÅzas rilatan rezulton (rezulton kun komerca valoro)

Uzkazoj ankaÅ povas havi interrilatojn kun aliaj uzkazoj. La tri plej tipaj specoj de interrilatoj inter uzkazoj estas:

- <<include>> kiu specifigas, ke uzkazo okazas ene de alia uzkazo

- <<extends>> kiu specifigas ke en iuj situacioj, aÅ je iu punkto (nomita etendadpunkto) uzkazo estos etendita per alia.

- Generalization specifigas uzkazo heredas la karakterizaÄµoj de la Super-uzkazo kaj povas superregi iujn aÅ aldoni novajn en simila maniero kiel la heredado inter klasoj.

#### Aktoro

Aktoro estas ekstera ento (ekster la sistemo) kiu, ke interagas kun la sistemo per partopreno (kaj ofte iniciato) de uzokazo. Aktoroj povas esti en vera vivo homoj (ekzemple uzantoj de la sistemo), aliaj komputeraj sistemoj aÅ eksteraj eventoj.

Akrotoj ne reprezentas the fizikajn homojn aÅ sistemojn, sed ilian rolon. Tio signifas, ke kiam persono interrilatas kun la sistemo diversmaniere (supozanta malsamajn rolojn) li estos reprezentata per kelkaj aktoroj. Ekzemple persono kiu asistas klientojn per la telefono kaj peras mendojn de la kliento en la sistemon estus reprezentata per aktoro Subtena Personaro kaj aktoro Vendisto.

#### Uzkazaj Priskriboj

Uzkazaj priskriboj estas tekstaj rakontoj de la uzokazo. Ili kutime estas en formo de noto aÅ dokumento kiu estas iel ligita al la uzkazo, kaj klarigas la procedojn aÅ agadojn kiuj okazas en la uzkazo.

### Klasdiagramo

Klasdiagramoj montras la diversajn klasojn kiuj konsistigas sistemon kaj montras kiel ili rilatas unu al la alia. Klasdiagramoj estas laÅdire senmovaj skemoj Äar ili montras la klasojn, kune kun iliaj metodoj kaj atributoj kaj ankaÅ la senmovaj interrilatoj inter ili: kiu klasoj scias pri aliaj klasoj aÅ kiuj klasoj apartenas al alia klaso, sed ne montras la metod-alvokojn inter ili.

An example of a Class Diagram &umbrello; montranta klasdiagramon

&umbrello; montranta klasdiagramon

#### Klaso

Klaso difinas la atributojn kaj la metodojn de iu aro da objektoj. Äiuj objektoj de Äi tiu klaso (instancoj de la klaso) havas la saman konduton kaj kundividas la saman aron da atributoj (Äiu objekto havas sian propran aron). La termino Tipo estas foje uzata anstataÅ Klaso, sed gravas mencii, ke Äi tiuj du ne estas la sama, kaj Tipo estas pli Äenerala termino.

En UML, Klasoj estas reprezentataj per rektanguloj, kun la nomo de la klaso, kaj ankaÅ povas montri la atributojn kaj operaciojn de la klaso en du aliaj kupeoj ene de la rektangulo.

A Class in &UML; Vida reprezentado de Klaso en &UML;

Vida reprezentado de Klaso en &UML;

##### Atributoj

En &UML;, atributoj estas montrataj kun almenaÅ ilia nomo, kaj ankaÅ povas montri ilian tipon, komencan valoron kaj aliajn trajtojn. Atributoj ankaÅ povas esti montrataj kun ilia videbleco:

- `+` indikas publikan atributon

- `#` indikas protektatan atributon

- `-` indikas privatan atributon

##### Operacioj

Operacioj (metodoj) estas ankaÅ montrataj kun almenaÅ ilia nomo, kaj ankaÅ povas montri siajn parametrojn kaj rezultotipon. Same kiel Atributo, Operacio povas montri sian videblecon:

- `+` indikas publikan operacion

- `#` indikas protektatan operacion

- `-` indikas privatan operacion

##### Åablonoj

Klasoj povas havi Åablonojn, valoro kiu estas uzata por nedifinita klaso aÅ tipo. La Åablontipo estas specifata kiam klaso estas iniciatita (t.s. objekto estas kreata). Åablonoj ekzistas en moderna C++ kaj estos enkondukitaj en Java 1.5 kie ili estos nomataj Generics.

#### Klas-Asocioj

Klasoj povas rilati (asociiÄi unu kun la alia) diversmaniere:

##### Äeneraligo

Heredado estas unu el la fundamentaj konceptoj de Objekt-Orientita Programado, en kiu klaso akiras Äiujn atributojn kaj operaciojn de la klaso de kiu Äi heredas, kaj povas superregi/modifi iujn, kaj ankaÅ povas aldoni pliajn atributojn kaj operaciojn por si mem.

En &UML;, Äeneraligo asocio inter du klasoj metas ilin en hierarkio reprezentanta la koncepton de heredado de devena klaso ekde iu baza klaso. En &UML;, Äeneraligoj estas reprezentataj per linio konektanta la du klasojn, kun sago Äe la flanko de la bazo klaso. Generalisation Vida reprezentado de Äeneraligo en &UML;

Vida reprezentado de Äeneraligo en &UML;

##### Asocioj

Asocio reprezentas interrilaton inter klasoj, kaj esprimas la semantikon kajn strukturon por multaj specoj de konektoj inter objektoj.

Asocioj estas la mekanismo kiu permesas al objektoj la komunikadon inter si. Äi priskribas la konekton inter malsamaj klasoj (la konekto inter la konkretaj objektoj estas nomata objekt-konekto, aÅ ligo.

Asocioj povas havi rolon kiu specifas la intencon de la asocio kaj povas esti unu- aÅ ambaÅdirekta (indiko Äu la du objektoj partoprenantaj la interrilaton povas reciproke sendi mesaÄojn, aÅ Äu nur unu el ili konas la alian). Äiu finaÄµo de la asocio ankaÅ havas valoron de multeco, kiu indikas kiom da objektoj cis la asocio povas rilati al unu objekto sur la alia flanko.

En &UML;, asocioj estas reprezentataj kiel linioj konektantaj la klasojn partoprenantaj la interrilaton, kaj ankaÅ povas montri la rolon kaj la multecon de Äiu el la partoprenantoj. Multeco estas indikata kiel gamo [min..maks] de nenegativaj valoroj, aÅ kiel stelo (`*`), kiu reprezentas senlimecon Äe la maksimuma flanko. &UML; Association Vida reprezento de Asocio en &UML;

Vida reprezento de Asocio en &UML;

##### Agrego

Agrego estas speciala speco de asocio en kiu la du partoprenantaj klasoj ne havas egalan statuson, sed formas iun tuto-parto interrilaton. Agrego priskribas kiel la klaso alprenanta la rolon de la tuto, estas kunmetita de aliaj klasoj, kiuj alprenas la rolon de la partoj. Por Agregoj, la klaso rolanta kiel la tuto Äiame havas multecon de unu.

en &UML;, Agregoj estas reprezentitaj per asocio kiu montras lozanÄon Äe la flanko de la tuto. Aggregation Vida reprezento de Agrega rilato en &UML;

Vida reprezento de Agrega rilato en &UML;

##### KunmetaÄµo

KunmetaÄµo estas asocio kiu reprezentas tre fortan agregon. Äi tiu signifas, ke KunmetaÄµo formas tuto-parto interrilaton ankaÅ, sed la interrilato estas tiel forta ke la partoj ne povas ekzisti solaj. Ili ekzistas nur en la tuto, kaj se la tuto estas detruata la partoj mortas ankaÅ.

En &UML;, kunmetaÄµoj estas reprezentataj per solida lozanÄo Äe la flanko de la tuto.

Composition Vida reprezento de KunmetaÄµo en &UML;

#### Aliaj Klasdiagrameroj

Klasdiagramoj povas enhavi kelkajn aliajn elementojn krom klasojn.

##### Interfaco

Interfacoj estas abstraktaj klasoj, kio signifas ke ne eblas rekte krei instancojn de ili. Ili povas enhavi operaciojn sed neniujn atributojn. Klasoj povas heredi de interfacoj (per realiga asocio) kaj instancoj povas tiam esti farataj de Äi tiuj klasoj.

##### Datumtipo

Datumtipoj estas bazelementoj kiuj estas tipe enkonstruitaj en programlingvo. Oftaj ekzemploj estas entjera kaj bulea tipo. Ili ne povas interrilati kun klasoj sed klasoj povas interrilati kun ili.

##### Nombrigtipo

Nombrigtipo (enum) estas simpla listo de valoroj. Tipa ekzemplo estas nombrigtipo por la tagoj de la semajno. La elementoj de nombrigtipo nomiÄas literaloj. Same kiel datumtipoj, ili ne povas interrilati kun klasoj sed klasoj povas interrilati kun ili.

##### PakaÄµo

PakaÄµo reprezentas nomspacon en programlingvo. En diagramo ili uziÄas por reprezenti partojn de sistemo kiu enhavas pli ol unu klason, eble centojn da klasoj.

### Sinsekvodiagramo

Sinsekvodiagramoj montras la mesaÄ-interÅanÄon (t.e. metod-alvoko) inter kelkaj objektoj en specifa tempe limigita situacio. Objektoj estas instancoj de klasoj. Sinsekvodiagramoj metas specialan emfazon al la ordo kaj la tempoj en kiuj la mesaÄoj estas sendataj al la objektoj.

En Sinsekvodiagramoj objektoj estas reprezentataj per vertikalaj strekitaj linioj, kun la nomo de la objekto supre. La tempa akso estas ankaÅ vertikala, pliiÄanta malsupren, tiel, ke mesaÄoj estas sendita de unu al alia objekto en la formo de sagoj kun la operacinomo kaj eble la efektivaj parametrovaloroj.

Sequence Diagram
&umbrello; montranta Sinsekvodiagramon

&umbrello; montranta Sinsekvodiagramon

MesaÄoj povas esti aÅ sinkronaj, la normala speco de mesaÄvoko kie la rego estas pasata al la alvokata objekto Äis kiam tiu metodo finis ruli, aÅ nesinkronaj kie la kontrolo rekte repasas al la vokanta objekto. Sinkronaj mesaÄoj havas vertikalan skatolon Äe la flanko de la alvokata objekto por montri la fluon de programrego.

### Kunlabordiagramo

Kunlabordiagramoj montras la interagadon okazanta inter la objektoj partoprenantaj en specifa situacio. Äi tiu estas plimalpli la samaj informoj montritaj per Sinsekvodiagramoj sed tiuj lastaj emfazas kiel la interrilatadoj okazas tempe dum la Kunlabordiagramoj pli emfazas la rilatojn inter la objektoj kaj ilian topologion.

En kunlabordiagramo mesaÄoj senditaj de unu objekto al alia estas reprezentataj per sagoj, montrante la mesaÄnomon, parametrojn, kaj la sinsekvon de la mesaÄo. Kunlabordiagramoj speciale taÅgas por montri specifan programfluon aÅ situacion kaj estas unu el la plej bonaj skemotipoj por rapide montri aÅ klarigi certan procedon en la programlogiko.

Collaboration
&umbrello; montranta Kunlabordiagramon

&umbrello; montranta Kunlabordiagramon

### Statodiagramo

Statodiagramoj montras la diversajn statojn de objekto dum sia vivo kaj la stimulojn kiuj kaÅzas ÅanÄiÄojn de Äia stato.

Statodiagramoj elmontras objektojn kiel statmaÅinojn aÅ finiajn aÅtomatojn kiuj povas esti en unu el limigita aro da statoj kaj kiuj povas ÅanÄi sian staton per unu el limigita aro da stimuloj. Ekzemple objekto de tipo NetServer povas esti en unu el la sekvantaj statoj dum sia vivo:

- Preta

- AÅskultanta

- Laboranta

- Haltita

kaj la eventoj kiuj povas kaÅzi statÅanÄojn Äe la objekto estas

- Objekto estas kreata

- Objekto ricevas mesaÄon AÅskultu

- Kliento petas konekton perrete

- Kliento Äesigas peton

- La peto estas efektivigita kaj finis

- Objekto ricevas mesaÄon Haltu

- etc

State Diagram &umbrello; montranta Statodiagramon

&umbrello; montranta Statodiagramon

#### Stato

Statoj estas la konstruelementoj de Statodiagramoj. Stato apartenas al ekzakte unu klaso kaj reprezentas resumon de la valoroj kiujn atributoj de klaso povas alpreni. &UML; Stato priskribas la internan staton de objekto de unu aparta klaso.

Notu ke ne Äiu ÅanÄo en unu el la atributoj de objekto devus esti reprezentita per Stato sed sole tiuj ÅanÄoj kiuj povas grave influi la funkciadon de la objekto.

Ekzistas du specialaj specoj de Statoj: Komenco kaj Fino. Ili estas specialaj tiusence ke neniu evento povas kaÅzi revenon al la Komenco, samkiel neniu evento povas kaÅzi revenon al la Fina stato unufoje ke Äi atingiÄis.

### Aktivecdiagramo

Aktivecdiagramoj priskribas la sinsekvon de agadoj en sistemo pere de Aktivecoj. Aktivecdiagramoj estas speciala formo de Statodiagramoj, kiuj nure (aÅ plejparte) enhavas Aktivecojn.

An example Activity Diagram. &umbrello; montranta Aktivecdiagramon

&umbrello; montranta Aktivecdiagramon

Aktivecdiagramoj estas similaj al proceduraj fludiagramoj, kun la diferenco ke Äiuj aktivecoj estas klare ligataj al objektoj.

Aktivecdiagramoj estas Äiam asociitaj al klaso, operacio aÅ uzkazo.

Aktivecdiagramoj subtenas sinsekvajn kaj ankaÅ paralelajn aktivecojn. Paralela ekzekuto estas reprezentita per DisiÄ/Atend ikonoj, kaj por la aktivecoj rulantaj paralele, ne gravas la ordo en kiu ili estas efektivigataj (ili povas okazi samtempe aÅ unu post la alia).

#### Aktiveco

Aktiveco estas unu paÅo ene de procezo. Unu aktiveco estas unu stato en la sistemo kun interna agado kaj almenaÅ unu deironta transiro. Aktiveco ankaÅ povas havi pli ol unu deirontan transiron se tiuj transiroj havas malsamajn kondiÄojn.

Aktivecoj povas formi hierarkiojn, tio signifas, ke aktiveco povas konsisti el kelkaj detalaktivecoj, en kiu kazo la envenantaj kaj deirantaj transiroj harmoniu kun la envenantaj kaj deirantaj transiroj de la detalskemo.

### Helpelementoj

Estas kelkaj elementoj en &UML; kiuj havas neniun veran semantikan valoron por la modelo, sed helpas klarigi partojn de la diagramo. Äi tiuj elementoj estas

- Tekstlinioj

- Tekstnotoj kaj ties ankroj

- Skatoloj

Tekstlinioj estas utilaj por aldoni mallongan klarigtekston al diagramo. Tio estas libera teksto kaj ne havas signifon al la modelo mem.

Notoj estas utilaj por almeti pli detalajn informojn pri objekto aÅ specifa situacio. Ili havas la grandan avantaÄon ke notoj povas esti ankrataj al &UML; elementoj por montri ke la noto apartenas al specifa objekto aÅ situacio.

Skatoloj estas libere lokataj rektanguloj kiuj estas uzeblaj por kungrupigi elementojn celante pli legeblajn diagramojn. Ili ne havas logikan signifon en la modelo.

### Komponenta Diagramo

Komponentaj Diagramoj montras la softvarajn erojn (aÅ komponantoteknologiojn kiel KParts, CORBA Komponentoj aÅ Java Beans aÅ nur sekcioj de la sistemo kiuj estas klare distingeblaj) kaj la artefaktojn el kiuj ili konsistas kiel ekz. fontkodaj dosieroj, programbibliotekoj aÅ rilataj datumbazoj.

Komponentoj povas havi interfacojn (t.e. abstraktaj klasoj kun operacioj) kio permesas asociojn inter komponentoj.

### Sterndiagramo

Sterndiagramoj montras la rultempajn komponant-instancojn kaj iliajn asociojn. Ili inkluzivas Nodojn kiuj estas fizikaj rimedoj, tipe ununura komputilo. Ili ankaÅ montras interfacojn kaj objektojn (klasinstancojn).