# &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 aplikiĝ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.

Aktoroj ne reprezentas la 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).