¨i põhitõed¨istSee peatükk annab sulle kiire ülevaate ¨i põhitõdedest. Ära unusta, et see pole põhjalik ¨i õpik, vaid pigem lühike sissejuhatus ¨i, mida on võimalik lugeda õpikuna. Kui soovid ¨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. ¨ on skeemide loomise keel või täpsemalt öeldes ülesmärkimise keel objektorienteeritud tarkvarasüsteemide kirjeldamiseks, visualiseerimiseks ja dokumenteerimiseks. ¨ 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. ¨ on Object Management Group'i (OMG) kontrolli all olev tarkvara graafiliseks kirjeldamiseks mõeldud tööstusstandard. ¨ on mõeldud objektorienteeritud tarkvara disainiks ja toetab seepärast piiratult teisi programmeerimisparadigmasid. ¨ koosneb paljudest mudeli elementidest, mis esindavad tarkvarasüsteemi erinevaid osi. ¨i elementide abil luuakse skeeme, mis esindavad kindlaid süsteemi osi või vaatepunkte. Umbrello toetab järgmisi skeemitüüpe: kasutusklassiskeemid kujutavad tegijaid (inimesed või teised süsteemi kasutajad), kasutusklasse (süsteemi kasutamise võimalused) ja nendevahelisi relatsiooneklassiskeemid kujutavad klasse ja nendevahelisi relatsioonejärgnevusskeemid kujutavad objekte ja nende poolt sooritatavate meetodite väljakutsete järgnevusikoostööskeemid kujutavad objekte ja nendevahelisi relatsioone, pannes rõhu objektidele, mis osalevad teadete vahetamisesolekuskeemid kujutavad olekuid, olekute muutusi ja sündmusi objektis või süsteemi osastegevusskeemid kujutavad tegevusi ja muutusi ühest tegevusest teise seoses mõnes süsteemi osas toimuvate sündmustegakomponentskeemid kujutavad kõrgetasemelisi programmeerimiskomponente (nt. KParts või JavaBeans)Evitusskeemid kujutavad komponentide eksemplare ja nendevahelisi relatsioone¨i elemendidKasutusklassiskeemKasutusklassiskeemid kirjeldavad protsessis osalevate kasutusklasside ja tegijate vahelisi relatsioone ja sõltuvusi.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, mida süsteem peab tegema, mitte aga — ja ei tohigi öelda —, kuidas tehtu saavutatakse.Kasutusklassiskeemi näidisKasutusklassiskeem Umbrellos
Kasutusklassiskeem Umbrellos
KasutusklassKasutusklass kirjeldab tegijate vaatenurgast süsteemi tegevuste gruppi, mis tagastab konkreetse ja käegakatsutava tulemuse.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). Kasutusklassidega töötades on tähtis meeles pidada mõned lihtsad reeglid: iga kasutusklass on seotud vähemalt ühe tegijagaigal kasutusklassil on olemas algataja (&ie; tegija)Iga kasutusklass juhatab kindla tulemuseni (ärilise väärtusega tulemuseni)Ka kasutusklassidel võivad teiste kasutusklassidega relatsioonid olla. Kolm tüüpilisemat kasutusklasside vaheliste relatsioonide tüüpi on:<<include>> määrab, kas kasutusklass leiab aset teise kasutusklassi sees<<extends>> määrab, et kindlates situatsioonides või mingis punktis (mida kutsutakse laienduspunktiks) laiendab üks kasutusklass teistüldistus 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 TegijaTegija 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. Tegijad ei esinda mitte füüsilisi isikuid või süsteeme, vaid nende rolle. 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 Kasutajatugi ja Müügimees. Kasutusklassi kirjeldusKasutusklassi 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. KlassiskeemKlassiskeemid kujutavad süsteemi moodustavaid klasse ja nendevahelisi suhteid. Öeldakse, et klassiskeemid on staatilised skeemid, sest nad kujutavad klasse, nende meetodeid ja atribuute ning nendevahelisi suhteid: millised klassid teavad millistest klassidest või millised klassid on teiste klasside osadeks, kuid ei kujuta meetodite väljakutseid nende vahel. Klassiskeemi näidisKlassiskeemi kuvamine Umbrellos
Klassiskeemi kuvamine Umbrellos
KlassKlass 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 tüüp, kuid tähtis on märkida, et need kaks ei ole samad ja tüüp on üldisem termin. &UML;is kujutatakse klasse nelinurkadena, millel on klassi nimi ja mis võivad sisaldada ka klassi atribuutide ja operatsioonide nimesid nelinurga kahes eraldi osas. Klass &UML;isKlassi visuaalne esitus &UML;is
Klassi visuaalne esitus &UML;is
Atribuudid&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: + tähistab public atribuuti# tähistab protected atribuuti- tähistab private atribuutiOperatsioonidOperatsioonide (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: + tähistab public operatsiooni# tähistab protected operatsiooni- tähistab private operatsiooniMallidKlassid 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. Klassi sidemedKlassid võivad olla omavahel seotud mitmel moel:ÜldistusPärilus on üks objektorienteeritud programmeerimise baaskontseptsioone, kus klass saab 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.&UML;is seab üldistuse 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. ÜldistusÜldistuse visuaalne esitus &UML;is
Üldistuse visuaalne esitus &UML;is
SidemedSide esindab klasside seoseid ning võtab endas kokku paljude objektidevahelist ühenduse tüüpide semantika ja struktuuri.Side on mehhanism, mis võimaldab objektidel üksteisega suhelda. See kirjeldab ühendust erinevate klasside vahel (ühendust tegelike objektide vahel nimetatakse objektiühenduseks ehk lingiks). 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. &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 (*) maksimumväärtuse asemel tähendab lõpmatust. &UML; sideSideme visuaalne esitus &UML;is
Sideme visuaalne esitus &UML;is
AgregatsioonAgregatsioon on spetsiaalne side, milles kaks klassi pole mitte võrdväärse staatusega, vaid moodustavad tervik-osa 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. &UML;is tähistab agregatsiooni side, millel on tervikupoolses otsas romb. AgregatsioonAgregatsiooniseose visuaalne esitus &UML;is
Agregatsiooniseose visuaalne esitus &UML;is
KompositsioonKompositsioonid on sidemed, mis esindavad väga tugevat 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.&UML;is tähistab kompositsiooni täidetud romb sideme tervikupoolses otsas. KompositsioonKompositsiooni visuaalne esitus &UML;isTeised klassiskeemi elemendidKlassiskeemid võivad lisaks klassidele sisaldada veel mitmeid elemente.Liidesed (interfaces)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.AndmetüübidAndmetüü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.Väärtustikud (enums)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.Paketid (packages)Paketid esindavad nimeruumi programmeerimiskeeles. Skeemidel kasutatakse neid süsteemi osade tähistamiseks, mis sisaldavad enam kui ühe klassi (mõnikord isegi sadu klasse).JärgnevusskeemidJä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.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. Järgnevusskeem&umbrello; järgnevusskeemiga
&umbrello; järgnevusskeemiga
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.KoostööskeemidKoostöö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.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. Koostöö&umbrello; koostööskeemiga
&umbrello; koostööskeemiga
OlekuskeemOlekuskeemid näitavad objekti erinevaid olekuid selle eluea kestel ning stiimuleid, mis põhjustavad objekti oleku muutumise. Olekuskeemid käsitlevad objekte olekumasinatena 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 NetServer olla oma eluea kestel ühes järgmistest olekutest: valmisjälgiminetöötaminepeatatudning sündmused, mis põhjustavad objekti oleku muutuse, on järgmised:objekt luuakseobjekt saab teate jälgidaklient soovib võrguühendustklient katkestab soovisoov täidetakse ja lõpetatakseobjekt saab teate peatudajneOlekuskeem&umbrello; olekuskeemiga
&umbrello; olekuskeemiga
OlekOlekud 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. 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.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. TegevusskeemTegevusskeemid kirjeldavad tegevuste järgnevust süsteemis tegevuste abil. Tegevusskeemid on olekuskeemide erivorm, mis sisaldavad ainult või peamiselt tegevusi. Tegevusskeemi näidis.&umbrello; tegevusskeemiga
&umbrello; tegevusskeemiga
Tegevusskeemid on sarnased protseduuride vooskeemidega, ainult et kõik tegevused on alati selgelt seotud objektidega.Tegevusskeemid on alati seotud klassi, operatsiooni või kasutusklassiga.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).TegevusTegevus 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. Tegevused võivad moodustada hierarhia, mis tähendab, et tegevus võib koosneda mitmest alamtegevusest, mille korral sisenevad ja väljuvad siirded peavad sobima kokku alamtegevuste skeemi sisenevate ja väljuvate siiretega. Abielemendid&UML;is on mõned elemendid, millel pole mudelis reaalset semantilist väärtust, kuid mis aitavad selgitada skeemi osi. Need elemendid on järgmised: TekstireadTekstimärkused ja ankrudKastidTekstiread on abiks skeemile lühikese tekstilise info lisamisel. See on vabalt asetsev tekst, millel ei ole mingit mõju mudelile endale. 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 kuulub konkreetse objekti või situatsiooni juurde. Kastid on vabalt asetsevad nelinurgad, millega võib elemente ühte koondada, et skeem oleks selgem ja arusaadavam. Mudelile endas pole neil mingit tähendust.KomponentskeemidKomponentskeemid 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.Komponentidel võivad olla liidesed (&ie; abstraktsed klassid operatsioonidega), mis võimaldavad komponentidevahelisi sidemeid.EvitusskeemidEvitusskeemid 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).