<chapter id="uml-basics">
<title
>&UML;i põhitõed</title>
<sect1 id="about-uml">
<title
>&UML;ist</title>
<para
>See peatükk annab sulle kiire ülevaate &UML;i põhitõdedest. Ära unusta, et see pole põhjalik &UML;i õpik, vaid pigem lühike sissejuhatus &UML;i, mida on võimalik lugeda õpikuna. Kui soovid &UML;i või üldse tarkvara analüüsi ja disaini kohta rohkem teada saada, siis kasuta mõnda paljudest samal teemal saadaolevatest raamatutest. Lisaks on paljud alustuseks sobivad õpikud saadaval Internetis. </para>

<para
>&UML; on skeemide loomise keel või täpsemalt öeldes ülesmärkimise keel objektorienteeritud tarkvarasüsteemide kirjeldamiseks, visualiseerimiseks ja dokumenteerimiseks. &UML; ei ole arendusmeetod, mis tähendab, et see ei ütle sulle, mida teha esimesena ja mida järgmisena või kuidas süsteemi disainida, kuid aitab disaini visualiseerida ja teistega edukalt suhelda. &UML; on Object Management Group'i (<acronym
>OMG</acronym
>) kontrolli all olev tarkvara graafiliseks kirjeldamiseks mõeldud tööstusstandard. </para>
<para
>&UML; on mõeldud objektorienteeritud tarkvara disainiks ja toetab seepärast piiratult teisi programmeerimisparadigmasid. </para>
<para
>&UML; koosneb paljudest mudeli elementidest, mis esindavad tarkvarasüsteemi erinevaid osi. &UML;i elementide abil luuakse skeeme, mis esindavad kindlaid süsteemi osi või vaatepunkte. Umbrello toetab järgmisi skeemitüüpe: </para>

<itemizedlist>

<listitem
><para
><emphasis
><link linkend="use-case-diagram"
>kasutusklassiskeemid</link
></emphasis
> kujutavad tegijaid (inimesed või teised süsteemi kasutajad), kasutusklasse (süsteemi kasutamise võimalused) ja nendevahelisi relatsioone</para
> </listitem>

<listitem
><para
><emphasis
><link linkend="class-diagram"
>klassiskeemid</link
></emphasis
> kujutavad klasse ja  nendevahelisi relatsioone</para
> </listitem>

<listitem
><para
><emphasis
><link linkend="sequence-diagram"
>järgnevusskeemid</link
></emphasis
> kujutavad objekte ja nende poolt sooritatavate meetodite väljakutsete järgnevusi</para
> </listitem>

<listitem
><para
><emphasis
><link linkend="collaboration-diagram"
>koostööskeemid</link
></emphasis
> kujutavad objekte ja nendevahelisi relatsioone, pannes rõhu objektidele, mis osalevad teadete vahetamises</para>
</listitem>

<listitem
><para
><emphasis
><link linkend="state-diagram"
>olekuskeemid</link
></emphasis
> kujutavad olekuid, olekute muutusi ja sündmusi objektis või süsteemi osas</para
> </listitem>

<listitem
><para
><emphasis
><link linkend="activity-diagram"
>tegevusskeemid</link
></emphasis
> kujutavad tegevusi ja muutusi ühest tegevusest teise seoses mõnes süsteemi osas toimuvate sündmustega</para
></listitem>

<listitem
><para
><emphasis
><link linkend="component-diagram"
>komponentskeemid</link
></emphasis
> kujutavad kõrgetasemelisi programmeerimiskomponente (nt. KParts või JavaBeans)</para
></listitem>

<listitem
><para
><emphasis
><link linkend="deployment-diagram"
>Evitusskeemid</link
></emphasis
> kujutavad komponentide eksemplare ja nendevahelisi relatsioone</para
></listitem
> 

<listitem
><para
><emphasis
><link linkend="entity-relationship-diagram"
>Olem-seos skeemid</link
></emphasis
> kujutavad andmeid ning andmete vahelisi seoseid ja kitsendusi</para
></listitem
> 

</itemizedlist>

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

<sect1 id="uml-elements"
>  
<title
>&UML;i elemendid</title>
<sect2 id="use-case-diagram">
<title
>Kasutusklassiskeem</title>
<para
>Kasutusklassiskeemid kirjeldavad protsessis osalevate <emphasis
>kasutusklasside</emphasis
> ja <emphasis
>tegijate</emphasis
> vahelisi relatsioone ja sõltuvusi.</para>
<para
>Tähtis on tähele panna, et kasutusklassiskeemid pole mõeldud disaini kujutamiseks ja süsteemi sisestruktuuride kirjeldamiseks. Kasutusklassiskeemid on mõeldud kergendama suhtlemist kliendi ja süsteemi tulevaste kasutajate vahel ning on eriti kasulikud süsteemi funktsionaalsuse väljaselgitamisel. Kasutusklassiskeemid peaksid ütlema, <emphasis
>mida</emphasis
> süsteem peab tegema, mitte aga &mdash; ja ei tohigi öelda &mdash;, <emphasis
>kuidas</emphasis
> tehtu saavutatakse.</para>
<para>
<screenshot>
<screeninfo
>Kasutusklassiskeemi näidis</screeninfo>
	<mediaobject>
	  <imageobject>
	    <imagedata fileref="use-case-diagram.png" format="PNG"/>
	  </imageobject>
	  <textobject>
	    <phrase
>Kasutusklassiskeem Umbrellos</phrase>
	  </textobject>
	  <caption>
	    <para
>Kasutusklassiskeem Umbrellos </para>
	  </caption>
	</mediaobject>
</screenshot>
</para>
<sect3 id="use-case">
<title
>Kasutusklass</title>
<para
>Kasutusklass kirjeldab tegijate vaatenurgast süsteemi tegevuste gruppi, mis tagastab konkreetse ja käegakatsutava tulemuse.</para>
<para
>Kasutusklassid on tüüpilised süsteemi kasutajate ja süsteemi enda vaheliste interaktsioonide kirjeldused. Nad esindavad süsteemi välist liidest ja määravad nõuete kogu selle kohta, mida süsteem peab tegema (ära unusta: ainult mida, mitte kuidas). </para>
<para
>Kasutusklassidega töötades on tähtis meeles pidada mõned lihtsad reeglid: <itemizedlist>
 <listitem
><para
>iga kasutusklass on seotud vähemalt ühe tegijaga</para
></listitem>
 <listitem
><para
>igal kasutusklassil on olemas algataja (&ie; tegija)</para
></listitem>
 <listitem
><para
>Iga kasutusklass juhatab kindla tulemuseni (<quote
>ärilise väärtusega</quote
> tulemuseni)</para>
 </listitem>
 </itemizedlist>
</para>
<para
>Ka kasutusklassidel võivad teiste kasutusklassidega relatsioonid olla. Kolm tüüpilisemat kasutusklasside vaheliste relatsioonide tüüpi on:</para>
<itemizedlist>
<listitem
><para
><emphasis
>&lt;&lt;include&gt;&gt;</emphasis
> määrab, kas kasutusklass leiab aset teise kasutusklassi <emphasis
>sees</emphasis
></para
></listitem>
<listitem
><para
><emphasis
>&lt;&lt;extends&gt;&gt;</emphasis
> määrab, et kindlates situatsioonides või mingis punktis (mida kutsutakse laienduspunktiks) laiendab üks kasutusklass teist</para
></listitem>
<listitem
><para
><emphasis
>üldistus</emphasis
> määrab, et kasutusklass pärib eellasest kasutusklassi omadused ja võib mõnesid omadusi üle kirjeldada või lisada uusi sarnaselt klassidevahelise pärilusega </para>
</listitem>
</itemizedlist>
</sect3>
<sect3 id="actor">
<title
>Tegija</title>
<para
>Tegija on väline olem (süsteemiväline), mis suhtleb süsteemiga, võttes osa (ja sageli algatades) kasutusklassist. Tegijad võivad olla reaalsed inimesed (näiteks infosüsteemi kasutajad), teised arvutisüsteemid või välised sündmused. </para>
<para
>Tegijad ei esinda mitte <emphasis
>füüsilisi</emphasis
> isikuid või süsteeme, vaid nende <emphasis
>rolle</emphasis
>. See tähendab, et kui isik suhtleb süsteemiga erinevatel viisidel (võttes endale erinevaid rolle), siis kujutatakse teda erinevate tegijatena. Näiteks isikut, kes tegeleb telefoni kaudu kasutajatoeteenuse jagamisega ja võtab klientidelt ka süsteemi kasutamiseks tellimusi, peaks kujutama tegijatena <quote
>Kasutajatugi</quote
> ja <quote
>Müügimees</quote
>. </para>
</sect3>
<sect3 id="use-case-description">
<title
>Kasutusklassi kirjeldus</title>
<para
>Kasutusklassi kirjeldused on kasutusklassi tekstilised narratiivid. Kujutatakse tavaliselt märkustena või dokumentidena, mis on kuidagi lingitud kasutusklassi külge ja selgitavad kasutusklassis toimuvaid protsesse või tegevusi. </para>
</sect3>
</sect2
> <!-- use-case-diagram -->

<sect2 id="class-diagram">
<title
>Klassiskeem</title>
<para
>Klassiskeemid kujutavad süsteemi moodustavaid klasse ja nendevahelisi suhteid. Öeldakse, et klassiskeemid on <quote
>staatilised</quote
> skeemid, sest nad kujutavad klasse, nende meetodeid ja atribuute ning nendevahelisi suhteid: millised klassid <quote
>teavad</quote
> millistest klassidest või millised klassid <quote
>on teiste klasside osadeks</quote
>, kuid ei kujuta meetodite väljakutseid nende vahel. </para>
<para>
<screenshot>
<screeninfo
>Klassiskeemi näidis</screeninfo>
	<mediaobject>
	  <imageobject>
	    <imagedata fileref="class-diagram.png" format="PNG"/>
	  </imageobject>
	  <textobject>
	    <phrase
>Klassiskeemi kuvamine Umbrellos</phrase>
	  </textobject>
	  <caption>
	    <para
>Klassiskeemi kuvamine Umbrellos </para>
	  </caption>
	</mediaobject>
</screenshot>
</para>
<sect3 id="class">
<title
>Klass</title>
<para
>Klass defineerib objektide hulga atribuudid ja meetodid. Kõik klassi objektid (klassi eksemplarid) jagavad ühist käitumist ja omavad samasugust hulka atribuute (igal objektil on isiklikud atribuudid). Vahel kasutatakse klassi asemel terminit <quote
>tüüp</quote
>, kuid tähtis on märkida, et need kaks ei ole samad ja tüüp on üldisem termin. </para>
<para
>&UML;is kujutatakse klasse nelinurkadena, millel on klassi nimi ja mis võivad sisaldada ka klassi atribuutide ja operatsioonide nimesid nelinurga kahes eraldi osas. </para>
<para>
<screenshot>
<screeninfo
>Klass &UML;is</screeninfo>
	<mediaobject>
	  <imageobject>
	    <imagedata fileref="class.png" format="PNG"/>
	  </imageobject>
	  <textobject>
	    <phrase
>Klassi visuaalne esitus &UML;is</phrase>
	  </textobject>
	  <caption>
	    <para
>Klassi visuaalne esitus &UML;is </para>
	  </caption>
	</mediaobject>
</screenshot>
</para>
<sect4 id="attribute">
<title
>Atribuudid</title>
<para
>&UML;is kuvatakse vähemalt atribuudi nimi ja võib-olla ka selle tüüp, algväärtus ja muud omadused. Lisaks on võimalik kuvada atribuudi nähtavust: </para>
<itemizedlist>
<listitem
><para
><literal
>+</literal
> tähistab <emphasis
>public</emphasis
> atribuuti</para
></listitem>
<listitem
><para
><literal
>#</literal
> tähistab <emphasis
>protected</emphasis
> atribuuti</para
></listitem>
<listitem
><para
><literal
>-</literal
> tähistab <emphasis
>private</emphasis
> atribuuti</para
></listitem>
</itemizedlist>
</sect4>
<sect4 id="operation">
<title
>Operatsioonid</title>
<para
>Operatsioonide (meetodite) puhul kuvatakse samuti vähemalt nime ja võib-olla ka parameetreid ja tagastustüüpi. Nagu atribuutide puhulgi, saab ka operatsioonide juures näidata nende nähtavust: <itemizedlist>
<listitem
><para
><literal
>+</literal
> tähistab <emphasis
>public</emphasis
> operatsiooni</para
></listitem>
<listitem
><para
><literal
>#</literal
> tähistab <emphasis
>protected</emphasis
> operatsiooni</para
></listitem>
<listitem
><para
><literal
>-</literal
> tähistab <emphasis
>private</emphasis
> operatsiooni</para
></listitem>
</itemizedlist>
</para>
</sect4>

<sect4 id="templates">
<title
>Mallid</title>
<para
>Klassid võivad omada malle, väärtusi, mida kasutatakse määramata klasside või tüüpide asemel. Malli tüüp määratakse alles siis, kui klass algväärtustatakse (&ie; luuakse objekt). Mallid on olemas kaasaegses C++'s ja need hakkavad olema ka Java 1.5's, kus neid kutsutakse geneerikuteks. </para>
</sect4>
</sect3>

<sect3 id="class-associations">
<title
>Klassi sidemed</title>
<para
>Klassid võivad olla omavahel seotud mitmel moel:</para>
<sect4 id="generalization">
<title
>Üldistus</title>
<para
>Pärilus on üks objektorienteeritud programmeerimise baaskontseptsioone, kus klass <quote
>omandab</quote
> kõik atribuudid ja operatsioonid kaasa sellelt eellasklassilt, millest ta pärineb, ning tohib neid üle kirjeldada ja muuta, aga ka lisada uusi atribuute ja operatsioone.</para>
<para
>&UML;is seab <emphasis
>üldistuse</emphasis
> tüüpi side kahe klassi vahel nad hierarhiasse, mis esindab tuletatud klassi baasklassist pärinemise kontseptsiooni. &UML;is tähistab üldistust kaht klassi ühendav sirge, millel on nool baasklassi poolses otsas. <screenshot>
<screeninfo
>Üldistus</screeninfo>
	<mediaobject>
	  <imageobject>
	    <imagedata fileref="generalization.png" format="PNG"/>
	  </imageobject>
	  <textobject>
	    <phrase
>Üldistuse visuaalne esitus &UML;is</phrase>
	  </textobject>
	  <caption>
	    <para
>Üldistuse visuaalne esitus &UML;is </para>
	  </caption>
	</mediaobject>
</screenshot>
</para>
</sect4>

<sect4 id="uml-associations">
<title
>Sidemed</title>
<para
>Side esindab klasside seoseid ning võtab endas kokku paljude objektidevahelist <quote
>ühenduse</quote
> tüüpide semantika ja struktuuri.</para>
<para
>Side on mehhanism, mis võimaldab objektidel üksteisega suhelda. See kirjeldab ühendust erinevate klasside vahel (ühendust tegelike objektide vahel nimetatakse objektiühenduseks ehk <emphasis
>lingiks</emphasis
>). </para>
<para
>Sidemel võib olla roll, mis määrab sideme eesmärgi ja võib olla ühe- või kahesuunaline (märgib, kas kaks seotud objekti võivad teineteisele teateid saata või teab ainult üks teise olemasolu). Sideme mõlemal otsal on ka oma mitmesusväärtus, mis sätestab, mitu objekti sideme antud otsas võib olla seotud ühe objektiga sideme teises otsas. </para>
<para
>&UML;is tähistavad sidemeid sirged, mis ühendavad seotud klasse, need võivad ka näidata rolli ja mõlema osapoole mitmesusväärtust. Mitmesust esitatakse mittenegatiivsete väärtuste vahemikuna [min...maks], kusjuures tärn (<literal
>*</literal
>) maksimumväärtuse asemel tähendab lõpmatust. <screenshot>
<screeninfo
>&UML; side</screeninfo>
	<mediaobject>
	  <imageobject>
	    <imagedata fileref="association.png" format="PNG"/>
	  </imageobject>
	  <textobject>
	    <phrase
>Sideme visuaalne esitus &UML;is</phrase>
	  </textobject>
	  <caption>
	    <para
>Sideme visuaalne esitus &UML;is </para>
	  </caption>
	</mediaobject>
</screenshot>
</para>
</sect4>

<sect4 id="aggregation">
<title
>Agregatsioon</title>
<para
>Agregatsioon on spetsiaalne side, milles kaks klassi pole mitte võrdväärse staatusega, vaid moodustavad <quote
>tervik-osa</quote
> seose. Agregatsioon kirjeldab, kuidas osa, millel on terviku roll, koosneb teistest klassidest (omab teisi klasse), millel on osade roll. Agregatsiooni korral on terviku rollis klassi mitmesus alatu üks. </para>
<para
>&UML;is tähistab agregatsiooni side, millel on tervikupoolses otsas romb. <screenshot>
<screeninfo
>Agregatsioon</screeninfo>
	<mediaobject>
	  <imageobject>
	    <imagedata fileref="aggregation.png" format="PNG"/>
	  </imageobject>
	  <textobject>
	    <phrase
>Agregatsiooniseose visuaalne esitus &UML;is</phrase>
	  </textobject>
	  <caption>
	    <para
>Agregatsiooniseose visuaalne esitus &UML;is </para>
	  </caption>
	</mediaobject>
</screenshot>
</para>
</sect4>
<sect4 id="composition">
<title
>Kompositsioon</title>
<para
>Kompositsioonid on sidemed, mis esindavad <emphasis
>väga tugevat</emphasis
> sidet. See tähendab, et ka kompositsioon kujutab endast tervik-osa seost, kuid see seos on nii tugev, et osad ei saagi omaette eksisteerida. Nad eksisteerivad ainult terviku koosseisus ja kui kaob tervik, kaovad ka osad.</para>
<para
>&UML;is tähistab kompositsiooni täidetud romb sideme tervikupoolses otsas. </para>
<para
><screenshot>
<screeninfo
>Kompositsioon</screeninfo>
	<mediaobject>
	  <imageobject>
	    <imagedata fileref="composition.png" format="PNG"/>
	  </imageobject>
	  <textobject>
	    <phrase
>Kompositsiooni visuaalne esitus &UML;is</phrase>
	  </textobject>
	</mediaobject>
</screenshot
></para>
</sect4>
</sect3
> <!--class-associations-->

<sect3 id="other-class-diagram-items">
<title
>Teised klassiskeemi elemendid</title>
<para
>Klassiskeemid võivad lisaks klassidele sisaldada veel mitmeid elemente.</para>
<sect4 id="interfaces">
<title
>Liidesed (interfaces)</title>
<para
>Liidesed on abstraktsed klassid, mis tähendab, et neist ei saa otseselt eksemplare luua. Nad võivad sisaldada operatsioone, aga mitte atribuute. Klassid võivad olla liideste järglased (realisatsioonisideme kaudu) ning neist skeemidest saab siis luua eksemplare.</para>
<!-- FIXME screenshot -->
</sect4>
<sect4 id="datatype">
<title
>Andmetüübid</title>
<para
>Andmetüübid on primitiivid, mis on tavaliselt lisatud juba programmeerimiskeelde. Tüüpnäiteks on täisarvud ja tõeväärtused. Neil ei saa olla seoseid klassidega, kuid klassidel võivad olla seosed nendega.</para>
<!-- FIXME screenshot -->
</sect4>
<sect4 id="enum">
<title
>Väärtustikud (enums)</title>
<para
>Väärtustikud on lihtsad väärtuste nimekirjad. Tüüpnäide on nädalapäevade väärtustik. Väärtustiku võtmeid nimetatakse literaalideks. Nagu andmetüüpidel, ei saa ka neil olla seoseid klassidega, küll aga klassidel nendega.</para>
<!-- FIXME screenshot -->
</sect4>
<sect4 id="package">
<title
>Paketid (packages)</title>
<para
>Paketid esindavad nimeruumi programmeerimiskeeles. Skeemidel kasutatakse neid süsteemi osade tähistamiseks, mis sisaldavad enam kui ühe klassi (mõnikord isegi sadu klasse).</para>
<!-- FIXME screenshot -->
</sect4>
</sect3>

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

<sect2 id="sequence-diagram">
<title
>Järgnevusskeemid</title>

<para
>Järgnevusskeemid näitavad teadetevahetust (&ie; meetodi väljakutset) mitme objekti vahel teatud ajaliselt piiratud situatsioonis. Objektid on klasside eksemplarid. Järgnevusskeemid rõhutavad erilist teadete objektidele saatmise järjekorda ja aega.</para>

<para
>Järjestusskeemidel esindavad objekte püstised punktiirjooned, mille ülemises otsas seisab objekti nimi. Ka ajatelg on vertikaalne, suurenedes allapoole, ning ühelt objektilt teisele saadetud teateid näidatakse nooltena, millele on lisatud operatsiooni ja parameetrite nimed. </para>

<!-- FIXME update screenshot to show synchronous messages -->
<screenshot>
<screeninfo
>Järgnevusskeem</screeninfo>
	<mediaobject>
	  <imageobject>
	    <imagedata fileref="sequence-diagram.png" format="PNG"/>
	  </imageobject>
	  <textobject>
	    <phrase
>&umbrello; järgnevusskeemiga</phrase>
	  </textobject>
	  <caption>
	    <para
>&umbrello; järgnevusskeemiga </para>
	  </caption>
	</mediaobject>
</screenshot>

<para
>Teated võivad olla sünkroonsed (tavaline teatetüüp, mille korral kontroll läheb väljakutsutavale objektile, kuni meetod on töö lõpetanud) või asünkroonsed (kontroll läheb otse tagasi väljakutsuvale objektile). Sünkroonsetel teadetel on väljakutsutud otjekti poolses otsas püstkast, mis näitab programmi kontrolli kulgu.</para>
</sect2
> <!-- sequence diagrams -->

<sect2 id="collaboration-diagram">
<title
>Koostööskeemid</title>

<para
>Koostööskeemid näitavad teatud situatsioonis osalevate objektide interaktsiooni. See on enam-vähem sama info, mida leiab järgnevusskeemilt, kuid viimaste korral on rõhk asetatud sellele, kuidas interaktsioon toimub, koostööskeemi korral aga objektidevahelistele seostele ja nende topoloogiale.</para>

<para
>Koostööskeemides esindavad ühelt objektilt teisele saadetavaid teateid nooled, mis näitavad teate nime, parameetreid ja teate järgnevust. Koostööskeemid sobivad eriti hästi esitama spetsiifilist programmikulgu või situatsiooni ning need on parim skeemitüüp konkreetse protsessi kiireks demonstreerimiseks või seletamiseks programmiloogikas. </para>

<screenshot>
<screeninfo
>Koostöö</screeninfo>
	<mediaobject>
	  <imageobject>
	    <imagedata fileref="collaboration-diagram.png" format="PNG"/>
	  </imageobject>
	  <textobject>
	    <phrase
>&umbrello; koostööskeemiga</phrase>
	  </textobject>
	  <caption>
	    <para
>&umbrello; koostööskeemiga </para>
	  </caption>
	</mediaobject>
</screenshot>

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

<sect2 id="state-diagram">
<title
>Olekuskeem</title>
<para
>Olekuskeemid näitavad objekti erinevaid olekuid selle eluea kestel ning stiimuleid, mis põhjustavad objekti oleku muutumise. </para
>                              
<para
>Olekuskeemid käsitlevad objekte <emphasis
>olekumasinatena</emphasis
> ehk lõplike automaatidena, mis võivad olla ühes lõplike olekute kogumis ning muuta oma olekut lõpliku stiimulikogumi vahendusel. Nii võib näiteks objekt tüübiga <emphasis
>NetServer</emphasis
> olla oma eluea kestel ühes järgmistest olekutest: </para>
<itemizedlist>
<listitem
><para
>valmis</para
></listitem>
<listitem
><para
>jälgimine</para
></listitem>
<listitem
><para
>töötamine</para
></listitem>
<listitem
><para
>peatatud</para
></listitem>
</itemizedlist>
<para
>ning sündmused, mis põhjustavad objekti oleku muutuse, on järgmised:</para>
<itemizedlist>
<listitem
><para
>objekt luuakse</para
></listitem>
<listitem
><para
>objekt saab teate jälgida</para
></listitem>
<listitem
><para
>klient soovib võrguühendust</para
></listitem>
<listitem
><para
>klient katkestab soovi</para
></listitem>
<listitem
><para
>soov täidetakse ja lõpetatakse</para
></listitem>
<listitem
><para
>objekt saab teate peatuda</para
></listitem>
<listitem
><para
>jne</para
></listitem>
</itemizedlist>
<para>
<screenshot>
<screeninfo
>Olekuskeem</screeninfo>
	<mediaobject>
	  <imageobject>
	    <imagedata fileref="state-diagram.png" format="PNG"/>
	  </imageobject>
	  <textobject>
	    <phrase
>&umbrello; olekuskeemiga</phrase>
	  </textobject>
	  <caption>
	    <para
>&umbrello; olekuskeemiga </para>
	  </caption>
	</mediaobject>
</screenshot>
</para>
<sect3 id="state">
<title
>Olek</title>
<para
>Olekud on olekuskeemide ehituskivid. Olek kuulub täpselt ühte klassi ning esindab väärtuste kokkuvõtet, mida klassi atribuudid võivad omada. &UML;i olek kirjeldab konkreetse klassi objekti seesmist olekut. </para
>                       
<para
>Pane tähele, et mitte kõiki objekti mõne atribuudi muutusi ei esinda olek, vaid ainult neid muutusi, mis mõjutavad märgatavalt objekti käitumist.</para>
<para
>Kaks olekutüüpi on erilised: algus ja lõpp. Need on erilised selle poolest, et ükski sündmus ei saa põhjustada objekti tagasipöördumist algusolekusse ning mitte ükski sündmus ei saa viia objekti välja lõppolekust, kui objekt on sellesse olekusse kord juba jõudnud. </para>
</sect3>

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

<sect2 id="activity-diagram">
<title
>Tegevusskeem</title>
<para
>Tegevusskeemid kirjeldavad tegevuste järgnevust süsteemis tegevuste abil. Tegevusskeemid on olekuskeemide erivorm, mis sisaldavad ainult või peamiselt tegevusi. </para>
<para>
<screenshot>
<screeninfo
>Tegevusskeemi näidis.</screeninfo>
	<mediaobject>
	  <imageobject>
	    <imagedata fileref="activity-diagram.png" format="PNG"/>
	  </imageobject>
	  <textobject>
	    <phrase
>&umbrello; tegevusskeemiga</phrase>
	  </textobject>
	  <caption>
	    <para
>&umbrello; tegevusskeemiga </para>
	  </caption>
	</mediaobject>
</screenshot>
</para>
<para
>Tegevusskeemid on sarnased protseduuride vooskeemidega, ainult et kõik tegevused on alati selgelt seotud objektidega.</para>

<para
>Tegevusskeemid on alati seotud <emphasis
>klassi</emphasis
>, <emphasis
>operatsiooni</emphasis
> või <emphasis
>kasutusklassiga</emphasis
>.</para>

<para
>Tegevusskeemid toetavad nii järgnevaid kui ka paralleelseid tegevusi. Paralleelset täitmist esindavad harunemise/ootamise ikoonid ning paralleelselt kulgevate tegevuste korral pole oluline, millises järjekorras need sooritatakse (neid võib sooritata nii ühel ja samal ajal kui ka üksteise järel).</para>
<sect3 id="activity">
<title
>Tegevus</title>
<para
>Tegevus on protsessi üks konkreetne samm. Üks tegevus on üks olek seesmise tegevusega ja vähemalt ühe väljuva siirdega süsteemis. Tegevustel võib olla ka enam kui üks väljuv siire, kui neil on erinevad tingimused. </para
> 
<para
>Tegevused võivad moodustada hierarhia, mis tähendab, et tegevus võib koosneda mitmest <quote
>alamtegevusest</quote
>, mille korral sisenevad ja väljuvad siirded peavad sobima kokku alamtegevuste skeemi sisenevate ja väljuvate siiretega. </para>

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

<sect2 id="helper-elements">
<title
>Abielemendid</title>
<para
>&UML;is on mõned elemendid, millel pole mudelis reaalset semantilist väärtust, kuid mis aitavad selgitada skeemi osi. Need elemendid on järgmised: </para>
<itemizedlist>
<listitem
><para
>Tekstiread</para
></listitem>
<listitem
><para
>Tekstimärkused ja ankrud</para
></listitem>
<listitem
><para
>Kastid</para
></listitem>
</itemizedlist
>   
<para
>Tekstiread on abiks skeemile lühikese tekstilise info lisamisel. See on vabalt asetsev tekst, millel ei ole mingit mõju mudelile endale. </para
>           

<para
>Märkused on abiks põhjalikuma info esitamisel objekti või konkreetse situatsiooni kohta. Nende suureks eeliseks on see, et märkusi saab ankurdada &UML;i elementide külge ning sel moel näidata, et märkus <quote
>kuulub</quote
> konkreetse objekti või situatsiooni juurde. </para>

<para
>Kastid on vabalt asetsevad nelinurgad, millega võib elemente ühte koondada, et skeem oleks selgem ja arusaadavam. Mudelile endas pole neil mingit tähendust.</para>

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

<sect2 id="component-diagram">
<title
>Komponentskeemid</title>
<para
>Komponentskeemid näitavad tarkvarakomponente (kas komponenttehnoloogiat nagu KParts, CORBA komponendid või Java Beans või siis lihtsalt süsteemi selgesti eristatavaid sektsioone) ning artefakte, mis on tekkinud näiteks lähtekoodifailidest, programmi teekidest või relatsioonilistest andmebaasidest.</para>

<para
>Komponentidel võivad olla liidesed (&ie; abstraktsed klassid operatsioonidega), mis võimaldavad komponentidevahelisi sidemeid.</para>
</sect2>

<sect2 id="deployment-diagram">
<title
>Evitusskeemid</title>

<para
>Evitusskeemid näitavad käitusaja komponentide eksemplare ja nende sidemeid. Nende hulka kuuluvad sõlmed, mis on füüsilised ressursid (tavaliselt üksikarvutid). Nad näitavad ka liideseid ja objekte (klassi eksemplare).</para>

</sect2>

<sect2 id="entity-relationship-diagram">
<title
>Olem-seos skeemid</title>

<para
>Olem-seos skeemid näitavad andmebaasirakenduste kontseptuaalset ülesehitust. Nad kujutavad erinevaid olemeid (kontsepte) infosüsteemis ning nendevahelisi seoseid ja kitsendusi. Olem-seos skeemide laiendusi, mida nimentatakse laiendatud olem-seos skeemideks või täiustatud olem-seos skeemideks, kasutatakse objektorienteeritud ülesehituse põimimsieks olem-seos skeemidesse. </para
> 
<para>
<screenshot>
<screeninfo
>Olem-seos skeemi näidis.</screeninfo>
	<mediaobject>
	  <imageobject>
	    <imagedata fileref="entity-relationship-diagram.png" format="PNG"/>
	  </imageobject>
	  <textobject>
	    <phrase
>Umbrello olem-seos skeemiga</phrase>
	  </textobject>
	  <caption>
	    <para
>Umbrello olem-seos skeemiga </para>
	  </caption>
	</mediaobject>
</screenshot>
</para>
<sect3 id="entity">
<title
>Olem</title>
<para
><emphasis
>Olem</emphasis
> on mis tahes iseseisvalt eksisteeriv reaalse maailma kontsept. See võib olla füüsiline objekt (näiteks arvuti või robot) või kontseptuaalne objekt (näiteks ülikoolikursus). Igal olemil on oma atribuudid, mis kirjeldavad olemi omadusi.</para>
<para
><emphasis
>Märkus:</emphasis
> olem-seos skeemide kujutamiseks puudub standardne tähistamisviis. Erinevates tekstides tähistatakse neid erinevalt. Umbrellos kasutatud laiendatud olem-seos skeemide kontseptid ja tähistamisviis on võetud järgmisest raamatust: <emphasis
>Elmasri R., Navathe S. Fundamentals of Database Systems. 4. tr. Addison Wesley, 2004</emphasis
>. </para>
<para
>Olem-seos skeemis kujutatakse olemeid ristkülikutena, mille kohal on olemi nimi ja mis võivad sisaldada ka olemi atribuute ja ristküliku eraldi osas. </para>
<para>
<screenshot>
<screeninfo
>Olem olem-seos skeemis</screeninfo>
	<mediaobject>
	  <imageobject>
	    <imagedata fileref="entity.png" format="PNG"/>
	  </imageobject>
	  <textobject>
	    <phrase
>Olemi visuaalne esitus olem-seos skeemis</phrase>
	  </textobject>
	  <caption>
	    <para
>Olemi visuaalne esitus olem-seos skeemis </para>
	  </caption>
	</mediaobject>
</screenshot>
</para>
<sect4 id="entity-attribute">
<title
>Olemi atribuudid</title>
<para
>Olem-seos skeemides näidatakse olemi atribuute koos nende nimega selle olemi omaette osas, mille juurde nad kuuluvad. </para>
</sect4>
<sect4 id="constraint">
<title
>Kitsendused</title>
<para
>Kitsendused määravad olem-seos skeemidest kindlaks andmete piirangud infoskeemis. </para>
<para
>Umbrello toetab nelja tüüpi kitsendusi: <itemizedlist>
 <listitem>
    <para
><emphasis
>Primaarvõti:</emphasis
> atribuudid, mis on deklareeritud <emphasis
>primaarvõtmena</emphasis
>, on olemile unikaalsed. Olemil saab olla ainult üks primaarvõti ja ükski selle atribuutidest ei saa olla NULL. </para>
</listitem>
 <listitem>
    <para
><emphasis
>Unikaalne võti:</emphasis
> atribuudid, mis on deklareeritud <emphasis
>unikaalse võtmena</emphasis
>, on olemile unikaalsed. Olemil võib olla mitmeid unikaalseid kitsendusi. Nende atribuudid võivad olla NULL. Unikaalsed võtmed ja primaarvõtmed kirjeldavad unikaalselt tabeli rida (olemit).</para>
 </listitem>
 <listitem>
    <para
><emphasis
>Võõrvõti:</emphasis
> võõrvõti on kahe tabeli viitekitsendus. Võõrvõti kirjeldab ühe (viitava) tabeli veergu või veerge, mis vastavad veerule või veergudele teises (viidatavas) tabelis. Viidatava tabeli veerud peavad moodustama primaar- või unikaalse võtme. </para>
 </listitem>
 <listitem>
     <para
><emphasis
>Kontrollkitsendus:</emphasis
> kontrollkitsendus (ka tabeli kontrollkitsendus) on tingimus, mis defineerib korrektsed andmed kirje lisamisel või selle uuendamisel relatsioonilise andmebaasi tabelis. Kontrollkitsendust rakendatakse tabeli kõigile ridadele. Kitsendus peab olema predikaat. See võib viidata tabeli ühele või mitmele veerule. </para>
     <para
>Näide: hind 
>= 0 </para>
 </listitem>
 </itemizedlist>
</para>
</sect4>
</sect3>
</sect2>
<sect2 id="extended-entity-relationship-concepts">
<title
>Laiendatud olem-skeemi skeemi kontseptid</title>
<sect3 id="specialization">
<title
>Spetsialiseerimine</title>
<para
>Spetsialiseerimine on uute olemite loomise viis juba kirjeldatud olemeid kasutades. Uued ehk tuletatud olemid võtavad üle ehk pärivad olemasolevate olemite ehk baasolemite atribuudid. See on mõeldud olemasolevate andmete korduvkasutamiseks kas üldse ilma muutusteta või väheste muutustega.</para>
<para
>Umbrellos saab valida mittepuutuva ja osaliselt kattuva spetsialiseerimise vahel</para>
 <sect4 id="disjoint-specialization">
   <title
>Mittepuutuv spetsialiseerimine</title>
   <para
>Mittepuutuv spetsialiseerimine määrab, et spetsialiseerimise alamklassid ei tohi puutuda. See tähendab, et olem võib olla maksimaalselt ühe spetsialiseerimise tuletatud olemi liige.</para>
   <para>
   <screenshot>
    <screeninfo
>Mittepuutuvas spetsialiseerimises osalevad olemid</screeninfo>
	<mediaobject>
	  <imageobject>
	    <imagedata fileref="disjoint-specialization.png" format="PNG"/>
	  </imageobject>
	  <textobject>
	    <phrase
>Mittepuutuva spetsialiseerimise visuaalne esitus laiendatud olem-skeemi skeemis</phrase>
	  </textobject>
	  <caption>
	    <para
>Mittepuutuva spetsialiseerimise visuaalne esitus laiendatud olem-skeemi skeemis </para>
	  </caption>
	</mediaobject>
   </screenshot>
    </para>
 </sect4>
 <sect4 id="overlapping-specialization">
   <title
>Osaliselt kattuv spetsialiseerimine</title>
   <para
>Kui tuletatud olemeid ei ole piiratud mittepuutumise nõudega, on tegemist osaliselt kattuva spetsialiseerimisega. See tähendab, et üks ja sama olem võib olla korraga rohkem kui ühe spetsialiseerimise tuletatud olemi liige.</para>
   <para>
   <screenshot>
    <screeninfo
>Osaliselt kattuvas spetsialiseerimises osalevad olemid</screeninfo>
	<mediaobject>
	  <imageobject>
	    <imagedata fileref="overlapping-specialization.png" format="PNG"/>
	  </imageobject>
	  <textobject>
	    <phrase
>Osaliselt kattuva spetsialiseerimise visuaalne esitus laiendatud olem-skeemi skeemis</phrase>
	  </textobject>
	  <caption>
	    <para
>Osaliselt kattuva spetsialiseerimise visuaalne esitus laiendatud olem-skeemi skeemis </para>
	  </caption>
	</mediaobject>
   </screenshot>
  </para>
 </sect4>
 <sect4 id="category">

 <title
>Kategooria</title>
 <para
>Tuletatud olem on <emphasis
>kategooria</emphasis
>, kui see kujutab endast objektide kogumit, mis on kindlate olemi ühenduse alamhulk. Kategooria luuakse, kui tekib vajadus konkreetse ülem/alamklassi seose järele enam kui ühe ülemklassiga, kus ülemklassid esindajad erinevaid olemitüüpe (see sarnaneb mitmese pärilusega objektorienteeritud programmeerimises). </para>
   <para>
   <screenshot>
    <screeninfo
>Kategooriaseoses osalevad olemid</screeninfo>
	<mediaobject>
	  <imageobject>
	    <imagedata fileref="category.png" format="PNG"/>
	  </imageobject>
	  <textobject>
	    <phrase
>Kategooria visuaalne esitus laiendatud olem-skeemi skeemis</phrase>
	  </textobject>
	  <caption>
	    <para
>Kategooria visuaalne esitus laiendatud olem-skeemi skeemis</para>
	  </caption>
	</mediaobject>
   </screenshot>
  </para>
 </sect4>

</sect3>
</sect2>

</sect1
> 
</chapter>
