nazaj na kazalo napredno objektno modeliranje agregacija aggregation zdruzitev je izrazita oblika asociacije pri kateri je zdruzitveni objekt sestavljen iz komponent komponente so deli part of agregata ta je semanticno razsirjen objekt ki je obravnavan kot enota pri mnogih operacijah ceprav je fizicno narejen iz vecih manjsih objektov en sam objekt agregat lahko ima vec delov vsaka part whole relacija je obravnavana kot locena zdruzitev z namenom da poudari podobnost z asociacijo deli lahko ali pa tudi ne obstajajo loceno od agregata torej sami zase prav tako pa se lahko pojavijo v vecih agregatih zdruzitev je prirojeno tranzitivna agregat ima dele ki pa prav tako lahko imajo dele veliko operacij agregata izkazuje tranzitivno zaprtje tranzitive closure tranzitivno zaprtje je pojem iz teorije grafov ce e edge oznacuje vejo in n node vozlisce ter s mnozico vseh povezanih parov z neko vejo potem je s tranzitivno zaprtje mnozica vseh parov vozlisc ki so direktno ali posredno povezani z zaporedjem vej s tako vsebuje vsa vozlisca ki so direktno povezana povezana preko dveh vej treh itd in operira tako na direktnih kot posrednih delih obicajna je tudi rekurzivna zdruzitev zdruzitev vs asociacija zdruzitev je posebna oblika asociacije in ne neodvisen koncept ce sta dva objekta tesno vezana z part whole relacijo je to zdruzitev agregacija ce dva objekta obicajno obravnavamo kot neodvisna pa ceprav sta pogosto povezana je to asociacija nekateri kriteriji glede uporabe agregacije so naslednji ali bi uporabil frazo je del part of ali se nekatere operacije nad celoto avtomaticno nanasajo tudi na njene dele ali se vrednosti nekaterih atributov razsirjajo od celote k vsem ali nekaterim delom ali obstaja nerigorozna asimetricnost asociacije kjer je en razred objektov podrejen drugemu na sliki je podjetje zdruzitev enot te pa so agregacija oddelkov podjetje je posredno agregacija oddelkov podjetje ni agregacija zdruzitev svojih usluzbencev saj so podjetje in osebe neodvisni objekti enakopravnega enakega pomena odlocitev o uporabi agregacije je predmet presoje ter je pogosto poljubna pogosto ni jasno razvidno ali naj asociacijo modeliramo kot agregacijo v veliki meri je ta vrsta negotovosti tipicna za modeliranje modeliranje zahteva zrelo presojo in obstaja le malo uporabnih pravil agregacija vs generalizacija zdruzitev je povsem drugacna kot generalizacija zdruzitev se nanasa na primerke vkljucena sta dva locena objekta eden izmed njiju je del drugega generalizacija se nanasa na razrede in je nacin strukturiranja opisa enega samega objekta tako nadrazred kot podrazred se nanasata na lastnosti enega samega objekta z generalizacijo je objekt istocasno tudi primerek nadrazreda in primerek podrazreda zmesnjava nastopi ker sta tako agregacija kot generalizacija spenjata po drevesu s pomocjo zaradi tranzitivnega zaprtja agregacijsko drevo je sestavljeno iz primerkov objektov ki so vsi deli sestavljenega objekta generalizacija je sestavljena iz razredov ki opisujejo objekt agregacijo pogosto imenujemo a part of relacija generalizacijo pa is kind of ali is a relacija slika ilustrira agregacijo in generalizacijo za primer namizne svetilke part explosion so najbolj znacilen primer agregacije podstavek pokrov stikalo so deli svetilke svetilke lahko klasificiramo v vec razlicnih podrazredov npr fluorescentne in zarece vsak podrazred lahko ima svoje lastne locene dele agregacijo vcasih imenujemo and relationship in generalizacijo or relationship rekurzivni agregati agregacije so lahko fiksne spremenljive ali rekurzivne fiksni agregat ima fiksno strukturo stevilo in tipi poddelov so predefinirani spremenljiv agregat ima koncno stevilo nivojev toda stevilo delov lahko niha varira rekurzivni agregat direktno ali posredno vsebuje primerek iste vrste agregata stevilo potencialnih nivojev pa ni omejeno slika prikazujejo primer racunalniskega programa racunalniski program je agregacija blokov z opcijskimi rekurzivnimi sestavljenimi stavki rekurzija se zakljuci z enostavnimi stavki bloki so lahko gnezdeni poljubno globoko slika prikazuje obicajno obliko rekurzivnega agregata nadrazred in dva podrazreda eden izmed njiju je posredno vozlisce in eno je terminalno vozlisce agregata vmesno vozlisce je skupek primerkov abstraktnega nadrazreda sirjenje propagation of operacij sirjenje propagation tudi trigering prozenje je avtomaticna aplikacija operacije nad mrezo objektov ko je operacija uporabljena pri nekem zacetnem objektu npr premikanje agregata premika njegove dele operacija premakni se razsirja do delov siritev operacij do delov je pogosto dober indikator agregacije slika prikazuje primer sirjenja oseba poseduje vec dokumentov vsak dokument je sestavljen iz odstavkov ki so sestavljeni iz znakov operacija kopiraj se siri z dokumenta na odstavek in znake kopiranje odstavka kopira vse znake v njem operacija se ne siri v obratni smeri odstavek je lahko kopiran ne da bi bil kopiran tudi celoten dokument podobno kopiranje dokumenta kopira tudi vez lastnik toda ne proizvaja kopijo osebe ki je lastnik koncept sirjenja operacij zagotavlja jedrnat in mocan nacin za specificiranje celotne nepretrgane zveze obnasanja operacijo lahko opazujemo kot da starta pri nekem osnovnem objektu ter nato tece od objekta do objekta preko vezi v skladu s pravili sirjenja sirjenje je mozno tudi za ostale operacije kot so shrani unici zakleni prikazi sirjenje je indicirano na objektnem modelu s pomocjo posebne notacije obnasanje sirjenja je omejeno z asociacijo ali agregacijo smerjo in operacijo nakazemo jo z malo puscico in imenom operacije ob udelezeni asociaciji puscica indicira smer sirjenja abstraktni razredi abstraktni razred je razred ki nima neposrednih primerkov toda katerega razredi nasledniki imajo neposredne primerke konkretni razred concrete je razred ki je instatiable to pomeni da lahko ima direktne primerke konkretni razred lahko ima abstraktne podrazrede toda ti morajo imeti konkretne podrazrede konkretni razred je lahko razred na listu drevesa dedovanja le konkretni razredi so lahko v listih drevesa dedovanja slika povzema definicijo abstraktnega in konkretnega razreda pikcasta crta je notacija objektnega modeliranja za konkretizacijo instatiation glej abstraktni razredi organizirajo znacilnosti skupne vecim razredom obicajno je koristno kreirati abstraktni nadrazred da ogradimo razred ki sodeluje v neki asociaciji ali agregaciji nekateri abstraktni razredi se ze po naravi nahajajo v aplikacijski domeni drugi abstraktni razredi so umetno vpeljani kot mehanizem za promoviranje ponovne uporabe kode abstraktni razredi so pogosto uporabljeni za definiranje metod ki naj bi jih podedovali podrazredi na drugi strani pa abstraktni razred definira protokol za operacijo ne da bi zagotovil tudi pripadajoco metodo taksno operacijo imenujemo abstraktna operacija ta definira obliko operacije za katero mora vsak konkretni podrazred definirati svojo lastno implementacijo konkretni razred ne more vsebovati abstraktnih operacij saj bi objekti konkretnega razreda imeli nedefinirane operacije generalizacija kot razsiritev in omejitev restrikcija primerek razreda je tudi primerek vseh prednikov ancestor razreda to je del definicije generalizacije zato morajo biti vse znacilnosti prednikov uporabne tudi nad primerki podrazreda naslednik ne more preprosto opustiti atributa prednika saj v tem primeru ne bi bil resnicen primerek prednika podobno morajo biti operacije nad prednikom uporabne nad vsemi razredi nasledniki podrazred lahko reimplementira operacijo z namenom zagotoviti vecjo ucinkovitost ne more pa spremeniti eksternega protokola podrazred lahko doda nove znacilnosti to imenujemo razsiritev extension podrazred lahko vsebuje omejene atribute prednika to imenujemo restrikcija saj omejuje vrednosti ki jih lahko zavzamejo atributi primerka npr krog je elipsa katere vecja in manjsa akcisa sta enaki poljubne spremembe vrednosti atributov omejenega podrazreda lahko povzrocijo krsitev omejitev kot npr da rezultat ne pripada vec originalnemu podrazredu to z vidika nadrazreda ni problematicno saj je rezultat se vedno veljaven primerek nadrazreda npr krog ki ga neproporcionalno skaliramo po x in y dimenziji ostane elipsa ne pa tudi krog podedovane znacilnosti so lahko v restrikciji preimenovane podedovane akcise kroga morajo biti enake in jih lahko preimenujemo v premer clanstvo v razredu lahko definiramo na dva nacina implicitno s pomocjo pravila ali eksplicitno z nastevanjem pravilo definira pogoj za clanstvo v razredu vsi objekti katerih vrednosti zadovoljijo pravilo pripadajo razredu to je obicajna matematicna uporaba pri eksplicitni definiciji clanstva v razredu moramo na semanticni osnovi onemogociti operacije ki bi pripeljale do neveljavnega clanstva restrikcije implicirajo da podrazred ne sme podedovati vseh operacij svojih prednikov v idealnem svetu bi taksne operacije avtomaticno detektiral ze podporni sistem toda zaenkrat jih mora specificirati nacrtovalec zato moramo za razred krog prepreciti operacijo neenakomernega skaliranje na drugi strani pa objekt deklariran kot elipsa ni omejen da bi ostal krog ceprav so zacasno njegove akcise enake overriding operacije overriding uporabimo iz sledecih razlogov overriding zaradi razsiritve nova operacija je ista kot podedovana operacija razen da doda doloceno obnasanje kar obicajno vpliva na nove atribute podrazreda ta koncept je podpira eiffel redefine in smalltalk super npr okno lahko ima operacijo narisi ki narise meje okna in njegovo vsebino okno lahko ima podrazred imenovan poimenovanookno ki ima tudi operacijo narisi operacijo narisi poimenovanookno lahko implementiramo tako da poklicemo operacijo narisiokno ter nato dodamo kodo ki narise se labelo overriding zaradi restrikcije omejitve nova operacija omejuje protokol kot je zmanjsanje stevila argumentov to je obicajno potrebno da ohranimo podedovano operacijo closed znotraj podrazreda npr nadrazred mnozica lahko ima operacijo dodaj objekt podrazred mnozicaintegerjev bi potem imela bolj restriktivno operacijo dodaj integer overriding zaradi optimizacije implementacija lahko izkoristi prednosti omejitev ki jih pogojuje restrikcija da izboljsa kodo neke operacije to je veljaven pravilen nacin uporabe overridinga prekrivanja metoda mora imeti isti eksterni protokol in rezultat kot stara toda njena interna predstavitev in algoritem se lahko popolnoma razlikujeta npr podrazred mnozicaintegerjev lahko ima operacijo za iskanje maksimalnega integerja metodo za iskanje najvecjega celega stevila v mnoziciintegerjev lahko implementiramo kot zaporedno iskanje podrazred urejenamnozicaintegerjev pa lahko zagotovi ucinkovitejso implementacijo operacije maksimum saj je vsebina mnozice ze urejena overriding zaradi vecje primernosti splosna praksa pri razvoju novih razredov je da poiscemo razred podoben tistemu ki ga zelimo novi razred naredimo kot podrazred ze obstojecega ter override metode ki ne ustrezajo ta ad hoc uporaba dedovanja je semanticno napacna in pripelje do problemov pri vzdrzevanju saj med prednikom in naslednikom ni prirojene relacije boljsi pristop je ta da generaliziramo skupne vidike originalnega in novega razreda v tretji razred od katerega dedujeta oba prej omenjena razreda avtorji omt predlagajo za dedovanje naslednja semanticna pravila sledenje teh pravil omogoca lazje razumevanje programske opreme lazjo razsirljivost ter manjso nagnjenost k napakam vse povprasevalne query operacije operacije ki berejo toda ne spreminjajo vrednosti atributov podedujejo vsi podrazredi vse operacije azuriranje update operacije ki spreminjajo verdnosti atributov podedujejo vse razsiritve operacije azuriranja ki spreminjajo omejene constrained atribute ali asociacije se blokirajo pri restrikcijah npr skaliraj x je dovoljena pri razredu elipsa toda moramo jo blokirati pri razredu krog operacije ne smejo biti prekrite overriden tako da se obnasajo razlicno glede na zunaj vidno manifestacijo kot podedovane operacije vse metode ki implementirajo operacijo morajo imeti isti protokol podedovane operacije lahko dodelamo refiniramo tako da dodamo dodatno obnasanje veckratno dedovanje multiple inheritance veckratno dedovanje omogoca da ima razred vec kot le en nadrazred in da podeduje znacilnosti vseh svojih starsev to omogoci mesanje kombiniranje informacij iz dveh ali vecih izvorov je pa veckratno dedovanje tudi bolj zapletena oblika generalizacije kot enkratno dedovanje slednje namrec pogojuje drevesno hierahijo razredov prednost veckratnega dedovanja je vecja izrazna moc pri specificiranju razredov in vecja moznost ponovne uporabe prav tako pa pribliza objektno modeliranje cloveskemu nacinu razmisljanja slabost je izguba konceptualne in implementacijske preprostosti v principu lahko definiramo cel kup tipov razlicnih mesanih pravil ki naj bi razresila konflikte definirane v razlicnih poteh definicija razred z vec kot enim nadrazredom imenujemo join class znacilnost istega razreda prednika ki se nahaja v vec kot eni poti je podedovana le enkrat nasprotja med paralelnimi definicijami vodijo do dvoumnosti ki morajo biti razresene pri implementaciji na sliki je amfibijsko vozilo tako kopenskovozilo kot vodnovozilo nakljucno veckratno dedovanje accidental preoblikovanja workarounds metapodatki metapodatki metadata so podatki ki opisujejo druge podatke npr definicija razreda je metapodatek modeli so metapodatki saj opisujejo stvari ki jih modeliramo vzorci in metapodatki patterns and metadata razred opisuje mnozico primerkov objektov podane oblike instatiation povezuje razred s pripadajocimi primerki v sirsem smislu vsak vzorec opisuje primer vzorca relacijo med vzorcem in primerom lahko opazujemo kot razsiritev instatiation slika prikazuje primer instatiation janez novak in micka cvek sta primerka razreda oseba pikcasta puscica povezuje primerke z razredom eksplicitni prikaz instatiation je se posebej koristen ko moramo tako primerke kot razrede obravnavati kot objekte npr pri interpreterjih modelirnih orodjih mehanizmih podpore jezikov instatiation je prav tako uporabna za dokumentiranje primerov in testnih primerov vsekakor pa pri vecini problemov razredov in njihovih primerkov ni nujno potrebno prikazovati skupaj npr razmislimo o modelih avtomobilov ki so jih izdelali razlicni proizvajalci kot npr ford mustang v letu ali wolkswagen rabbit vsak modelavtomobila na spodnji sliki opisuje dolocen tip avtomobila vsak modelavtomobila ima svoje lastne atribute in asociacije vsak objekt razreda modelavtomobila opisuje tudi fizicne avtomobile ki jih imajo lastniki npr janez novak lahko ima modrega forda s serijsko stevilko ifabp in rdeci wolkswagen s serijsko stevilko e f vsak avtomobil dobi skupne atribute od modelavtomobila ima pa tudi svoj lasten seznam dolocenih atributov ko so serijska stevilka barva in seznam opcij mozno bi bilo kreirati razred ki bi opisoval vsak tip avtomobila toda seznam modelov se nenehno veca zato je bolje ce razred modelavtomobila obravnavamo kot vzorec delcek metapodatkov ki opisujejo objekte razreda avtomobil razredni deskriptorji class descriptors tudi razrede lahko obravnavamo kot objekte ceprav so metaobjekti in ne objekti realnega sveta objekti razrednih deskriptorjev imajo znacilnosti ter imajo svoje lastne razrede ki jih imenujemo metarazredi razredni atribut class attribute opisuje vrednost skupno celotnemu razredu objektov ne pa podatek svojstven vsakemu primerku razredni atributi so uporabni za hranjenje privzetih informacij za kreiranje novih objektov ali povzetek informacij summary information o primerkih razreda razredna operacija class operation je operacija nad samim razredom najbolj znacilen tip razrednih operacij so operacije za kreiranje novih primerkov razreda operacije za kreiranje objektov morajo biti razredne operacije saj primerek objekt nad katerim operiramo se ne obstaja poizvedovanje ki zagotavlja povzetek informacij za primerke razreda je prav tako razredna operacija slika prikazuje razred window z znacilnostmi razreda katerih ime ima na prvem mestu dolarskim znakom okno ima razredne atribute za mnozico vseh oken mnozico vseh vidnih oken privzeto velikost okna in maksimalno velikost okna okno vsebuje operacije za kreiranje novega objekta okno in iskanje obstojecega okna z najvisjo prioriteto potencialni kljuci candidate keys notacija krogca ki oznacuje stevnost dobro deluje dokler se ukvarjamo s stevnostjo binarnih asociacij pripelje pa do dvoumnosti pri asociacijah visjega reda pri teh je najbolje da dolocimo kandidate za kljuce oz potencialne kljuce potencialni kljuc je minimalna mnozica atributov ki enolicno identificira objekt ali vez pod minimalno razumemo to da ne moremo izlociti nekega atributa iz potencialnega kljuca ter bi ta se vedno razloceval vse objekte in vezi razred ali asociacija lahko ima enega ali vec potencialnih kljucev vsak izmed teh lahko ima razlicno kombinacijo in stevilo atributov id objekta je vedno potencialni kljuc razreda ena ali vec kombinacij povezanih objektov so potencialni kljuci asociacije potencialni kljuc je v modelu dolocen v oklepajih to je notacija objektnega modeliranja za omejitve o katerih govorimo v naslednjem poglavju slika primerja stevnost in potencialne kljuce za binarno asociacijo stevnost prav tako vsebuje idejo eksistencne odvisnosti ali mora objekt sodelovati v asociaciji asociacija mnogo proti mnogo zahteva oba povezana objekta da enolicno identificirata vsako vez ena proti ena asociacija pa ima dva potencialna kljuca od vsakega objekta enega naslednja slika prikazuje ternarno asociacijo ki ima en potencialni kljuc sestavljen iz vseh treh objektov osebe ki so programerji uporabljajo pri projektih nek programski jezik v spodnjem delu slike je prikazano vec vezi niti ena kombinacija le enega ali samo dveh objektov enolicno ne identificira vsako vez poglejmo se en primer ternarne asociacije student ima na univerzi enega mentorja student lahko hodi na vec kot eno univerzo profesor je lahko mentor na vecih univerzah tukaj nam primerki sugerirajo da je student univerza edini potencialni kljuc potencialni kljuc vsebuje le dva od treh povezanih objektov omejitve constraints definicija omejitve so funkcionalne relacije med entitetami objektnega modela izraz entiteta vkljucuje objekte razrede atribute vezi in asociacije omejitev omeji vrednosti ki jih lahko entitete zavzamejo primer placa usluzbencev ne more biti visja kot sefova omejitev med dvema objektoma nobeno okno ne bo imelo vidnega razmerja dolzina sirina manjse kot in vecje kot omejitve lastnosti znotraj enega samega objekta prioriteta dela ne sme porasti omejitev na enem samem objektu skozi cas te primere podaja spodnja slika preproste omejitve lahko postavimo kar v objektne modele kompleksnejse omejitve pa specificiramo v funkcionalnem modelu glej poglavje funkcionalno modeliranje sintaksa omejitev je pri objektnem modeliranju naslednja omejitve so v zavitih oklepajih ter pozicionirane blizu entitete ki jo imenujejo pikcasta crta povezuje vec omejenih entitet uporabimo lahko tudi puscico da povezemo omejeno entiteto z entiteto od katere je odvisna konkretizacija instatiation je vrsta omejitve zato uporabimo omenjeno notacijo omejitve na vezeh stevnost omejuje asociacijo omejuje stevilo objektov povezanih s podanim objektom notacija objektnega modeliranja ima posebno sintakso za prikaz skupnih vrednosti stevnosti natacno ostale vrednosti stevnosti lahko prikazemo kot numericne intervale blizu vloge asociacije notacija ordered indicira da imajo elementi na mnogo strani asociacije eksplicitno zaporedje ki mora biti ohranjeno splosne omejitve splosne omejitve moramo izraziti z naravnim jezikom ali enacbami med prizadetim razredom in omejitvijo potegnemo pikcasto crto ter med oklepaji v komentarjih specificiramo podrobnosti vcasih ni najbolj prakticno risati crte k vsem razredom zato jih tudi ne risemo neka asociacija je lahko podmnozica druge na sliki mora biti predsedujoci komiteja clan komiteja chair of asociacija je podmnozica asociacije member of izpeljani objekti vezi in atributi izplejani objekt derived object je definiran kot funkcija enega ali vec objektov ki so prav tako lahko izpeljani izpeljani objekt je v celoti dolocen z ostalimi objekti konec koncev se drevo izpeljav zakljuci z osnovnimi base objekti izpeljani objekti so v bistvu redundantni lahko pa jih vkljucimo v objektni model da izboljsamo razumevanje obstajajo tudi izpeljane vezi derived links in izpeljani atributi derived attribues notacija izpeljane entite je slash ali diagonalna crta v kotu skatlice razreda asociacije ali pred atributom navesti pa moramo tudi omejitev ki doloca izpeljano vrednost kot vecina notacij objektnega modeliranja je notacija izpeljane vrednosti opcijska naslednja slika prikazuje izpeljano asociacijo in izpeljani razred homomorfizmi homomorfizem homomorphism je preslikava med dvema asociacijama kot to ilustrira spodnja slika npr v katalogu avtomobilskih delov lahko predmet kataloga vsebuje druge kataloske predmete vsak kataloski predmet je dolocen specificiran s stevilko modela ki ustreza tisocim ali milijonom posameznih proizvodnih predmetom vsakemu s svojo serijsko stevilko posamezni predmeti so prav tako sestavljeni vsaka razsiritev fizicnega dela ima isto obliko kot catalog item s parts explosion tree agregacija contains nad predmeti kataloga je homomorfizem zdruzitve vsebuje nad fizicnimi deli taksen homomorfizem med dvemi drevesi je zelo pogost nazaj na kazalo