Strokovne razprave Obnavljanje načrto\anja s pomočjo vzorcev načrtovanja Tomaž Oomajnko, Ivan Rozman, Marjan Heričko Univerza v Mariboru, Fakulteta za elektrotehniko, računalništvo m informatiko Smetanova ulica 17, 2000 Maribor, Slovenija e-mail: {tomai. domajnko, ivan.rozman, marjan.hericko}@uni-mb.si Izvleček Vzorci načrtovanja so deležni velikega zanimanja v svetu razvijalcev objektnih sistemov, saj tvorijo pomemben delež visokonivojskih informacij, ki lahko v veliki meri poenostavijo razumevanje in obvladovanje kompleksnih sistemov. Hkrati pa se razvijalci zavedajo, da za veČino objektnih sistemov ne obstaja dokumentacija, ki bi vzorce načrtovanja eksplicitno izražala. Zato v prispevku predstavljamo pristop, ki omogoča ekstrahiranje informacij o uporabljenih vzorcih. Pristop temelji na natančni in nedvoumno predstavitvi vzorcev načrtovanja. Na podlagi predstavitve vzorcev načrtovanja v prispevku definiramo postopek identifikacije vzorcev načrtovanja v obstoječih sistemih. Pristop zagotavlja identifikacijo vseh vzorcev načrtovanja, ki so biti uporabljeni ob načrtovanju in implementaciji objektnega sistema. To pa je osnova za ekstrakcijo odločitev, ki smo jih izvedli v aktivnostih arhitekturnega načrtovanja, načrtovanja objektov in implementacije. V prispevku podajamo rezultate analize nekaterih objektnih ogrodij in knjižnic razredov, ki potrjujejo, da je možna zanesljiva identifikacija vzorcev načrtovanja in s tem ekstrakcija pomembnih, visokonivojskih informacij iz obstoječe programske kode. Abstract The design patterns present a very important, source of high-level information about the understanding and the control of a complex object system. At the same time the development community realizes that the documentation of the current object systems does not include the information about the use of design patterns to the appropriate extent. Therefore in the ari/c/e we will present the approach to the generation of the information. The approach is based on the rigorous and unambiguous presentation of the design patterns, which will a/so be presented /n the article. The presentation enables a simple and effective implementation of the identification process for any instance of the design pattern, implemented in the object system according to the specification. We present the results of the analysis of a set of object frameworks and object systems confirming the hypothesis that the reliable Identification of design pattern instances is both possible and feasible, providing high-level information about the design and implementation decisions. Uvod Vzorci načrtovanja so bili v svet programskega inženirstva vpeljani v delu [Gamma 1995] kot koncepti, ki povečajo razumevanje objektnih sistemov. Vsak vzorec načrtovanja vsebuje izkušnje in znanje strokovnjakov; predstavlja idejo rešitve problema pri načrtovanju sistemov, ki jo lahko enostavno in učinkovito uporabimo v različnih problemskih situacijah. Gledano bolj splošno, lahko vsak vzorec načrtovanja identificiramo kot arhitekturni element na višjem nivoju abstrakcije kot je nivo razredov [Domajnko 199SaJ. Eden od osnovnih namenov vzorcev načrtovanja je, da so vzorci načrtovanja načrtovalski elementi, ki poenostavljajo aktivnost načrtovanja objektnih sistemov in dvigajo nivo komunikacije v razvojni skupini (Domajnko 1999a]. K temu dodaja tudi največkrat uporabljena predstavitev vzorcev, ki sestoji iz opisa problema, definicije ideje rešitve, lastnosti in omejitve rešitve, določitve terminologije in povezave na različne že uspešno izvedene rešitve s pomočjo njegove uporabe [Domajnko 1997], Vendar pa lahko poenostavljeno razumevanje sistemov s pomočjo vzorcev načrtovanja dosežemo le, če dokumentacija objektnega sistema eksplicitno navaja uporabljene vzorce načrtovanja. Eden od razlogov, ki jih avtorji ugotavljajo, je ta, da s pomočjo vzorcev načrtovanja postopke vzdrževanja ali nadgraditve sistemov izvajamo na višjem nivoju abstrakcije, kar kažejo tudi rezultati v [Domajnko 1999b]. Dejansko pa 2000 - Številkam • letnik Vili i tfjontk hA NFOfi M ATI KA Tomaž Dornajnko. Ivan Rozman, Marjan HeriČko: Obnavljanje načrtovanja s pomočjo vzorcev načrtovanja danes velika večina objektnih sistemov takšne dokumentacije rte vsebuje. Zato bi bilo zelo koristno, če bi lahko v obstoječi programski kodi identificirali primerke vzorcev načrtovanja. Zato bomo v prispevku prikazali predstavitev vzorcev načrtovanja, ki omogoča razvoj podpornega okolja, ki lahko Identificira vsak uporabljeni vzorec načrtovanja, implementiran skladno /, definicijo vzorca načrtovanja. S tem pa tudi možnost, da dopolnimo dokumentacijo objektnih sistemov. Predstavitev vzorcev načrtovanja Na podlagi definicije vzorca načrtovanja iz [Gamma 1995]: »Vzorec je ideja rešitve, ki seje izkazala uporabna t) določenem kontekstu in bi hi hi najverjetneje koristna tudi v drugih kontekstih. Vzorec predstavlja večkratne odločitve strokovnjaka, ki sicer vodijo do različnih rešitev, a vsebujejo določen nivo kakovosti« si poglejmo, kako so vzorci načrtovanja največkrat predstavljeni v literaturi [Gamma 1995, Buschman-n 1996, Domajnko 1998b, Domajnko Tabela 1 prikazuje opisno predsta- vitev. Tabela 1 Opisna predstavitev vzorcev Sekcija Pomen sekcije Ime Identifikator vzorca Namen Definicija problema, ki ga vzorec rešuje in rezultati uporabe vzorca Uporabnost Opis situacije, v kateri lahko vzorec uporabimo Struktura Praviloma razredni diagram, ki predstavlja statično sliko vzorca Udeleženci Seznam razredov, ki so vključeni v uporabo vzorca Sodelovanja Tekstoven opis dinamične komponente vzorca Učinek Podaja stanje ali konfiguracijo sistema po uporabi vzorca Implementacija Napotki za implementacijo vzorca Pravila uporabe Utemeljitev korakov uporabe vzorca Sorodni vzorci Opis statičnih in dinamičnih povezav med vzorci Primeri uporabe Opis uporabo vzorcev v obstoječih sistemih lasno je, da opisna predstavitev vzorcev ni primerna za računalniško podporo. To je vodilo k raziskavi razvoja jezika za opis vzorcev načrtovanja, ki bi dopolnil opis vzorcev načrtovanja in omogočil razvoj računalniške podpore. Jezik za specifikacijo vzorcev načrtovanja (poimenovali smo ga Pati.) je bil zgrajen na podlagi opazovanj elementov, ki tvorijo vodilno misel kateregakoli vzorca načrtovanja. Jezik temelji na predstavitvi elementov modela abstraktne sintakse (model AST), s katero abstrahiramo implementacijske podrobnosti posameznih objektnih programskih jezikov. Na podlagi definiranega modela AST in množice tipov udeležencev 9l={Tj> T2... 1 nfmnožico relacij 9i={R]( R.;.,,Rnjin funkcijo M, ki preslika konstrukte modela AST v T in izraze AST v 9t, definiramo M(p) kot model programa p v modelu AST. Množico osnovnih konstruktov jezika PatL (element e) sestavljajo razredi (razred c) in metode (metoda m)1. Osnovne konstrukte združujemo v množice elementov enakega tipa - enolične množice. Med osnovnimi kon-strukli so definirane osnovne relacije. Osnovne relacije smo definirali na podlagi opazovanja katalogov [Gamma 1995J in [Grand 1998). Edina omejitev osnovnih relacij je, da morajo imeti kanonično implementacijo v več kot ie enem objektnem jeziku. Tabela 2 podaja seznam osnovnih relacij med elementi, gradniki jezika PatL. Tabela 2 Seznam osnovnih relacij Osnovna relacija Pomen relacije razred (c) delna, unarna relacija, ki izraža da je element c razred. dedovanje (clr c?) relacija, ki izraža dedovanje med nadrazredom Cj in podrazredom c2. metoda (m) delna, unama relacija, ki izraža da je element m metoda. abstrakt (e) relacija, ki določa, da je element e abstrakten. definiran V (e, c) relacija, ki izraža da je element e deliniran v razredu c. retum Tip (m, c) relacija, ki izraža da metoda m vrača objekte primerke razreda c. konstruktor (m, c) relacija, določa, da je metoda m konstruktor razreda c. enakoime (m,, m2) relacija, ki izraža, da sta imeni nij in m2 enaki. število argumentov relacija, ki definirana da ima metoda m n (m) = n argumentov. argument (n, m)=c proženje (m1, m5) enojnareferenca (Cj, C;) multireferenca {c1( c2) funkcijska relacija, ki za metodo m presiikuje zaporedno številko argumenta v tip argumenta. relacija, ki izraža, da v telesu metode m, (brez upoštevanja kontrolnih struktur) prihaja do proženja metode rr7:. relacija, ki izraža, da obsta|a objektna referenca v razredu c, do razreda razreda c-j brez ločevanja med kompozicijsko, agregacijsko ali asociacijsko referenco, relacija, ki izraža, da razred en v svoji definiciji vsebuje večštevno referenco do razreda c3 brez ločevanja med kompozicijsko, agregacijsko ali asociacijsko referenco. prirejanje (m, elt c^) relacija, ki izraža, da metoda m priredi referenco razreda do razreda c2. prirejanje po relacija, ki izraža, da metoda mi po (m1( m2, Cj, c2) zaključku izvajanja metode m2 priredi referenco razreda Cj do razreda C2. 1 Množico osnovnih konstnjktov označimo s simbolom E, množico razredov s simbolom C. množico metod pa s simbolom M. 238 i i/>wtf!ml NFO RM ATIKA 2000 ■ številka 4 - letnik VIII Tomaž Dornajnko. Ivan Rozman, Marjan HeriČko: Obnavljanje načrtovanja s pomočjo vzorcev načrtovanja Tabela 3 Seznam izpeljanih relacij izpeljana relacija Definicija relacije enak podpisim^ m2) relacija, ki izraža da imata metoda m1 tn m2 enak podpis. enakpodpis(mvm2) O enakoime(m}, m,) a stargumentov (m,) = s t arg umi; t) to v (m,) a i = starFtimtntovfmit "J [argument ((V«,) == argument (;,«<,)] posredovanje(mv m2) relacija, ki izraža da metoda m2 proži metodo m2, pri tem pa uporabi svoje argumente brez sprememb kot parametre metorte m2, posredovanje^m^, m1) o proženje^,m2) A enakpodp is(m)t m1 ) kreiranjeimj, m2) relacija, ki izraža klic konstruktorske metode m, s sirarn metode rrij. kreirartje{m[,mJ) o proženje (m t, m 2) a kdnstrttktor(m1) produkeija(m,, m2, c) relacija, ki izraža da metoda rrtj kliče metodo m2, ta pa je konstruktor nekega razreda. Hkrati metoda nti ludi vrne kreiran objekt. produkcijami^, , c) kreiranjeintf, mj) A returntip(m^,c) Na podlagi osnovnih relacij lahko definiramo množico izpeljanih relacij, ki imajo večjo izrazno moč, uporabljene osnovne relacije pa zagotavljajo njihovo implementacijo. Tabela 3 podaja seznam izpeljanih relacij in njihovih definicij. Tabela 4 podaja seznam posplošitev osnovnih in izpeljanih relacij, ki dajejo matematično podlagi predstavitve vzorcev načrtovanja s pomočjo jezika Pati., V modelu programa o imenujemo urejeno zaporedje udeležencev di|...ioN v ji kontekst. S pomočjo kontekstov lahko opišemo strukturo poljubnega programa, zapisanega s pomočjo modela AST. Tudi opisna predstavitev vzorcev načrtovanja predstavlja vodilno misel vzorca načrtovanja (osnovno idejo) s pomočjo udeležencev (razredi, metode) in njihovega sodelovanja. Če kontekst « implementira vzorec načrtovanja, bomo v kontekstu Sij zasledili elemente, ki implementirajo udeležence in sodelovanja, ki zagotavljajo implementacijo rešitve vzorca načrtovanja. Tako lahko definiramo, da je kontekst S posplošena oblika primer-ka vzoren n v programu p natanko takrat, če ima vsak aij.^tOpg iz ra ustrezen tip {določen v it) in da ro,...^ sodelujejo, kot je določeno v specifikaciji vzorca it. Tako lahko vodilno misel (osnovno idejo) vzorca načrtovanja zapišemo v obliki sheme, kot jo definira [Computer 1990]. Shema predstavlja popolno in dokončno predstavitev vodilne misli posameznega vzorca in določa udeležence in sodelovanja. Skladno s to definicijo shema sestoji iz deklaracije spremenljivk (predstavljajo udeležence) in množice pred tka tov, ki izražajo relacije med spremenljivkami (izražajo sodelovanje), V formulah uporabljamo relacije med strogo tipiziranimi spremenljivkami naslednjih tipov: ■ Elementarne spremenljivke, ki predstavljajo osnovne konstrukte (razrede in metode). ■ Spremenljivke višjih dimenzij, ki predstavljajo množice. m Spremenljivke hierarhij, ki predstavljajo množico razredov v neki relaciji. Slika 1 prikazuje dve alternativi prikaza predstavitvene sheme vzorcev načrtovanja (s pomočjo grafične sheme ali formule). V vsaki predstavitvi sheme najprej navedemo ime sheme (predstavlja 2000 • številka 4 - letnik VIII r if* imifl i JN FOR M ATI KA Tomaž Dornajnko. Ivan Rozman, Marjan HeriČko: Obnavljanje načrtovanja s pomočjo vzorcev načrtovanja Tabela 4. Posplošitve osnovnih in izpeljanih relacij Vrsta relacije Linama relacija tranzitivna relacija totalna relacija Definicija relacije relacija, definirana nad enim samim elementom v obliki parcialne funkcije. r(JO»V*e X : r(x) tranzitivna relacija je tranzit i vno zaprtje osnovne relacije. ___r*(>,>•) v)v3;: [r*(.v, •)Af(-, v)| relacija med osnovnimi elementi ali množicami, ki prevzema obliko totalne funkcije. _V.v e A' 3ve Y : r(x, v) popotna relacija relacija med množicami relacija, ki prevzema obliko izomorfne preslikave. _r,(Xn<=»V-re X 3ve Y : r{x, v) a Vye Y 3.ve X : r(x, v) rclacija med množicami se prevede na relacijo med elementi množic, r(X.Y)e*Vxe X 3ve Y : r(.v, v) r(jr,y>^r({y}.y); r(X,y)**r(X. {v}) enakost relacij enakost relacij določa, da sta relaciji fj in r2 v množici S izomorfni. enakost^ r;(S) « Vp.^e S : \i\(p,q) <-> r2(p.f)] enaknsr, f J X. Y) « V.v G X V v e Y : [/¡(.v. v) <-> r2 (x. >•)] hierarhija družina rod relacija, ki določa množico razredov v hierarhiji dedovanja. fiicrarhija(h) <=> Vej« e h 3c„ e h : abstrakKc,,) a dedovanje4 (cN, c, j) Relacijo r nad hierarhijo h^H če r ni popolna relacija, definiramo kot: rUi,.S)&rttorenVi^S) r{Š,A,)<=»f(S,i/f/i(//()) r(h,, ) r (listi (li,). korenih-,)) Relacijo rnad hierarhijo h,eH. kjer je je r popolna relacija definiramo kot: />(h .Si) i=> rr rr{SJixti{h ) U koreni h)) fJ.(A,,/i2) » rpOiSiiUi,) U kore»(hJ,listi(h2) U fe/r;;(/;,)) je enolična množica metod z enakim podpisom, ki so definirane v množici razredov C. M, [ZMj-.M^MaM, QM družma(M,C) s Mf. g. enakvmesnik(Ml,MJ) A definiranv(C,M,) a definiranv(C,M,) je enolična množica družin. Množica množic metod {F,} je rod v množici razredov C, tedaj in le tedaj, če je vsaka metoda Fe {F, | družina v podmnožici. CM;. cc} Shema 3 (xj, x2,..,xn) spremenljivke "l'„, * predikati, povezani z operatorjem konjunkgije sheTiiaa (x(,x,...xjHi f] R,(x,.x;,...xm) enolično ime vzorca načrtovanja), nato navedemo seznam spremenljivk (določimo udeleženci' in pri tem upoštevamo strogo tipiziran ost) in na koncu še množico predikatov {definiramo sodelovanje udeležencev), Nad shemami, ki specificirajo posamezne vzorce načrtovanja, definiramo operacije. Operacije predstav-Slika 1 Dve alternativni predstavitvi sheme vzorcev načrtovanja Ijajo uporabo in posplošitev operacij iz jllitiE 1990/5], 240 i^jmiiiinINFORMATIKA 2000-Številka4 - letnik VIII Tomaž Dornajnko. Ivan Rozman, Marjan HeriČko: Obnavljanje načrtovanja s pomočjo vzorcev načrtovanja Tabela 5 Seznam operacij nad shemami Operacija Pomen operacije nad shemo Preimenovanje komponent zagotavlja oblikovanje nove sheme na podiagi obstoječe s pomočjo sistematičnega preimenovanja komponent. Novashema/Osnovna KNovakomponenta/Starakomponenia)*] Dekoracija sheme zagotavlja ločevanje med spremenljivkami m predikati pred in po izvedbi določene akcije. komponenta - označuje komponento! preU izvedbo akcije. komponenta' - označuje dekorirano komponenta. Vključitev sheme zagotavlja možnost ponovne uporabe posameznih shem v kontekstu deklaracij drugih shem. Vključitev sheme u v shemo y definiramo kot1: t u (a„ot1...aM)i->fjRk(au...av) i ,a,,.xtM .fc,«^) h» [XM«u»«V3 * IIrI®A-A) t t Konjunkcija sheme konjunkcijo dveh shem formiramo z združitvijo njunih signatur, identificiranjem skupnih spremenljivk (katerih tipi se morajo ujemati) in združitvijo predikatov. Shema = ShemaA a SheroaB Disjunkcija sheme disjunkcijo shem formiramo z združitvijo njunih signatur: identificiranjem skupnih spremenljivk (tipi se morajo ujemati) in razdniženjem njunih predikatov. Shema = ShemaA v Shema U Negacija sheme negacijo sheme formiramo tako, da ne spreminjamo identificiranih spremenljivk, negiramo pa vse predike. Shema = ShemaA Skrivanje sheme predstavlja mehanizem jezika shem, ki poenostavlja specifikacije. ShemaA \ (komponenta)* Kompozicija shem označuje relacijsko kompozicijo dveh shem. Obe shemi morata zadostiti pogojem spremenljivk v stanju po operaciji. Shema = ShemaA • ShemaB Tabela 5 prikazuje seznam operacij nad shemami. S pomočjo zgrajene osnove jezika PatL si sedaj poglejmo primera definidj poznanih vzorcev načrtovanja. Vedenjski vzorec načrtovanja Ša b lo ti tika metoila definira ogrodje algoritma v operaciji z odlaganjem nekaterih korakov v podrazrede. Vzorec dovoljuje podrazredom ponovno definirati nekatere korake algoritma, brez da bi spreminjali strukturo algoritma. Algoritem: S ahionska metoda Razred +Sat)lonskamctlori5kametoda{) 2000 številka4-letnikVIII iifxmibiuA NFO RM AT I Ki Tomaž Dornajnko. Ivan Rozman, Marjan HeriČko: Obnavljanje načrtovanja s pomočjo vzorcev načrtovanja m definicija vzorca dopušča tudi predifiniranje osnovnih operacij, saj le te po definiciji tvorijo družino znotraj hierarhije razredov, ■ razred Razred je element hierarhije razredov, njegov položaj pa je popolnoma nepomemben. ■ definicija vzorca dopušča tudi definicijo več kot le ene Šablonske metode in več kot le eno implementacijo le te znotraj hierarhije razredov. Vzorec: Šablonskametoda Šablonskametoda e M Osnovnaoperacija e ¡M^ J, Razred e M družina(Osnovnaopcracija, Razred) a proženj^ (Šablonskametoda, Osnovnaoperacija) a de fin i ran vT (Šablonskametoda, Razred) Slika 3 Predstavitev vzorca Šablonskametoda v jeziku P.itL Na podlagi podanih ugotovitev lahko zaključimo, da nove informacije bolj natančno specificirajo osnovno vodilo vzorca načrtovanja (oziroma, dopolnjujejo opisno definicijo vzorca načrtovanja). Kreatorski vzorec Tovarniškametoda definira vmesnik za kreiranje objekta, vendar dopušča po-drazredom, da določijo, iz. katerega razreda bodo izhajali. Vzorec dovoljuje, da razred odloži instancir-anje na podrazrede. Slika 4 prikazuje razredni diagram vzorca, kjer lahko opazimo, da s pomočjo naravnega jezika definiramo dinamično komponento vzorca. Slika 5 prikazuje formalno definicijo vzorca, kjer smo poleg strukture razredov (sedaj povezanih s hierarhijo in ne v neposredno dedovanje) določili tudi dinamično komponento ideje vzorca. S tem smo dodali informacije, ki lahko v veliki meri vplivajo na uporabnost samega vzorca pri rutinski uporabi. / relum new Konkreln ¡produkt)! Sliko 4 Razredni diagram vzorca Tovarniškametoda Vzorec: Tovarniškametoda Tovarniškametoda {M^ }, Krcatorji e Ht1 Produkti e //, (Tovarniškametoda, Kreatorjt) a produkcija (Tovarniškametoda, Produkti) a rektm Tip (Tovarniškametoda, Produkti) a enakost (Tovarniškametoda, Produkti) Slika 5 Razredni diagram vzorca Tovarniškametoda V nadaljevanju si poglejmo še enostavnost implementacije validacije vzorca. Slika 6 prikazuje implementacijo validacije vzorca Šablonskametoda, ki smo ga prej formalno definirali. Kot je moč videti iz primera, je implementacija validacije popolnoma skladna z. definicijo vzorca. To kaže tudi na dejstvo, da je moč generiranje pravil z.a validacijo avtomatizirati s pomočjo enostavnega orodja, ki formalno specifikacijo pretvori v sintakso implementacijskega okolja (v našem primeru ekspertne lupine CLIPS in razširka JF.SS), samo okolje po z vgrajenimi algoritmi poskrbi za izvajanje validacije. V primeru na sliki sicer v bazo dejstev samo dodamo dejstvo, da smo našli primerek vzorca Šablonskametoda, podporno okolje pa mora dodati informacije, ki so potrebne za popolno validacijo vzorca (vsaj udeležence in njihove vloge). (defrule validirajšablonskametoda (razred (naziv ?razred)) (metoda (naziv ?Šablonskametoda)) (metoda (naziv ?Osnovnaoperacija)) {definiranV (razred (naziv ?razred) (metoda (naziv ?Šablonskametoda))) (družina (metoda (naziv ?Šablonskametoda) (razred (naziv ?razred)))) (proženje (metoda (naziv ?Osnovnaoperaoija)) (metoda (naziv ?Šablonskametoda})) - > (assert (vzorec (naziv Šablonskametoda))) ) Slika 6 Primer implementacije validacije vzorca Šablonskametoda Povezano delo Vzorcem je v zadnjem obdobju posvečena precejšnja pozornost tako na posameznih konferencah, kakor tudi v številnih knjižnih izdajah. 1 Ikrati se posamezniki združujejo v skupine uporabnikov vzorcev, katerih primarni cilj je identifikacija in zapis novih vzorcev in nadzor nad obstoječimi vzorci. Konkrelntprodukl ^> Konkretni kreatur + Tovarniška mclo da (j i rpomb i/H NFOR M ATI KA 2000 - Številka 4 letnik VIII Tomaž Dornajnko. Ivan Rozman, Marjan HeriČko: Obnavljanje načrtovanja s pomočjo vzorcev načrtovanja Vzorci programskega inženirstva, še posebej vzorci načrtovanja, so največkrat objavljeni v obliki katalogov, ki predstavljajo delo, v katerem so posamezni elementi neodvisni in nepovezani. Serija knjig PloPD (Pattern Languages oi Program Design) predstavljajo zbirko vzorcev različnih problemskih dometi in formatov, povzetih po PloP (Pattern Languages of Programming) konferencah [PloP 1995, PloP 19%, PloP 1997, PloP 1998]. Prispevke različnih avtorjev lahko razvrstimo v različne domene, kot so vzorci načrtovanja, specializacija obstoječih vzorcev, domensko specifični vzorci, organizacijski in upravljalski vzorci ter jezikovno odvisni vzorci, Trenutno stanje je takt), da obstaja v svetu cela vrsta predlaganih predstavitev vzorcev v opisni obliki, kjer avtorji vzorce opisujejo z vnaprej določeno množico lastnosti, ki onemogočajo formaliziran je uporabe vzorcev. Enega prvih poskusov formalizacije predstavitev vzorcev predstavlja model LayOM [Bosch 1996], ki s pomočjo razširitve klasičnega objektnega modela s konceptoma stanje (state), nivo (layer) zagotavlja predstavitev vzorcev načrtovanja. Izraznost tako nastalega specifikacijskega jezika je prikazana z določanjem omejitev reakcij objektov in protokola sodelovanja objektov. Vendar pa tak pristop omejuje pravila na posamezne objekte, kar zagotavlja podporo omejenemu številu primerov, kjer ni potreben nadzor na višjem nivoju. Pristop zato ni primeren kot osnova za abstrahiranje načrtovalskih odločitev. V [Ducasse 1995] avtorji definirajo nivo abstraktnega pošiljanja sporočil med objekti, kjer je nivo v obliki ko nek to rje v sposoben prestreganja sporočil enega objekta drugemu in s tem zagotavljati neposredno specifikacijo in implementacijo "izvedljivih konektprjev". Avtorji predstavijo tudi pristop k specifikaciji vzorcev načrtovanja, vendar sami podajajo omejitve pristopa, ki je primerna samo za specifikacijo dinamičnih lastnosti vzorcev, medtem ko strukurnih lastnosti ni moč določiti. Helm, Holland in Gangopadhyay v [Helm 90] definirajo pojem jwgodba. Pogodba predstavlja razširitev predikathe logike prvega reda z možnostjo predstavitve funkcijskih klicev, prirejanj in relacij urejanja med njimi (oblikovanje časovnega zaporedja akcij). Kompozicija vedenja, ki je predstavljena v članku, ne definira relacij med razredi (dedovanje, kreiranje, delegacija itd.), te pa so zelo pomemben dejavnik vsakega vzorca načrtovanja. To tudi pomeni, da specifikacija vzorca načrtovanja ne more biti popolna. Lauder in Kent [Lauder 1998] uporabljata notacijo diagramov omejitev, ki temeljo na teoriji množic in določa relacije med razredi in objekti. Iz rezultatov dela ni razvidno, ali lahko diagrami omejitev izražajo tudi funkcionalne relacije med množicami, kar se v vzorcih načrtovanja vsekakor pojavlja. Hkrati je nivo abstrakcije diagramov omejitev prenizek (oziroma, diagrami so preveč podrobni) za specifikacijo zelo kompleksnih vzorcev načrtovanja, oziroma za iskanje načrtovalskih odločitev. Budinsky, Finnie in Yu v [Budinsky 1996] predstavljajo orodje, ki podpira aplikacijo vzorcev načrtovanja in generiranje izvorne kode. Razvijalec določa postopek generacije izvorne kode s posebnim skripl-niin jezikom COGENT, vendar orodje ne podpira poti nazaj - iz izvorne kode ni moč ugotoviti, kateri vzorci so bili uporabljeni. Precej podobno Quintessoft Inc v [Quintessoft 1997] opisuje orodje CA8E, ki je sposobno generirati izvorno kodo v jeziku C+ +. Enako kot v prejšnjem primeru orodje generira izvorno kodo vzorca načrtovanja, ki je ločena od ostalega sistema, povratnih informacij pa orodj ni možno oblikovali iz obstoječe programske kode. Kljub temu, da so danes vzorci načrtovanja kon-strukti, ki so že nekaj let poznani razvijalcem programskih sistemov, pa so raziskave na področju identifikacije vzorcev načrtovanja v obstoječih sistemih precej redke. Kljub Številnim raziskavam na področju povratnega inženirstva pa je namen raziskave drugačen. V raziskavi namreč ne gre za podrobno razumevanje implementacije objektnega sistema, ampak le za ek-strakcijo visokonivojskih informacij iz obstoječe kode. Postopki identifikacije vzorcev načrtovanja Model predstavitve vzorcev načrtovanja zagotavlja enolično in nedvoumno predstavitev vzorcev. S pomočjo modela abstraktne sintakse (ASI) lahko zagotovimo neodvisnost od programskega jezika (vse dokler lahko s pomočjo pregledovalnika izvorne kode generiramo ustrezno predstavitev objektnega sistema s pomočjo modela AST). S pomočjo jezika Pati, lahko vzorce načrtovanja rigorozno definiramo. Na podlagi ugotovitev lahko definiramo naslednje aktivnosti: ■ Aplikacija vzorca je proces, kjer je vzorec n apliciramo v kontekst o) in konkretni elementi co,...(oN prevzamejo vloge sodelujočih iz specifikacije vzorca p. To pomeni, da se posamezni elementi spremenijo na tak način, da zadostijo zahtevam specifikacije vzorca n. Največkrat aplikacije vzorca ne izvajamo v neiniciali žira nem okolju temveč v določenem kontekstu. To pomeni, da prilagajamo in dopolnjujemo konslrukte, ki že obstajajo v kontekstu o). V danem kontekstu a> bomo večkrat identificirali, da posamezni sodelujoči specifikacije vzorca nimajo dejanskega elementa. Takrat pravimo, da je m nepopolni kontekst in implicira, da je potrebno manjkajoče vloge specifikacije vzorca kreirati. V takem primeru aplikacija vzorca rezultira v novih konstruktih, ki zadoščajo pogojem, podanih v specifikaciji vzorca načrtovanja. 2000 ■ številka 4 - letnik VIII iilJombtuA NFO RM AT IKA Tomaž Dornajnko. Ivan Rozman, Marjan HeriČko: Obnavljanje načrtovanja s pomočjo vzorcev načrtovanja ■ V.ilidacija vzorca je proces, ki za podan kontekst dokaz o implementaciji vzorca Stika 7 Proces kreiranja modela objektnega sistema Slika 9 Proces validaeije vzorca načrtovanja Definirani model AST lahko uporabimo za predstavitev poljubnega objektnega sistema, implementi-ranega v objektnem programskem jeziku, za katerega smo razvili pregledovalnik, ki ekstrahira primerne informacije. Objektni sistem, predstavljen s pomočjo modela AST v naslednjem koraku s pomočjo ekstrak-torja dejstev pretvorimo v interno predstavitev, ki je skladna z jezikom PatL (interna predstavitev je odvisna od izbranega okolja, v naši raziskavi smo uporabili ekspertno lupino CLIPS, ki temelji na ogrodjih in njeno Java razširitev JESS). Zato ekstraktor dejstev na podlagi modela programa in definiranih relacij oblikuje bazo znanja v ekspertni lupini. V tem trenutku lahko izvedemo validadjo vzorca načrtovanja. S pomočjo formalne specifikacije vzorcev Slika 8 Proces oblikovanja interne predstavitve Proces identifikacije vzorcev v objektnem sistemu predstavlja le uporabo validaeije posameznega vzorca v objektnem sistemu. Prikazuje proces, kjer iz interne predstavitve poljubnega objektnega sistema pridobimo informacije o vzorcih, ki so implementirani v sistemu . Relacije med vzorci načrtovanja Kot smo zapisali, je klasifikacija vzorcev eden od predpogojev, da bomo tudi v času, ko bo število vzorcev načrtovanja narastlo, lahko s pridom in učinkovito izkoriščali vgrajeno strokovno znanje. S pomočjo formalne definicije vzorcev postane proces identifikacije relacij med vzorci enostaven in determinističen. Enako kot smo definirali posamezne vzorce načrtovanja, lahko definiramo tudi množico relacij med vzorci in z enakim postopkom, kot smo izvajali vali-dacijo vzorca načrtovanja v objektnem sistemu, lahko izvedemo tudi primerjavo vzorcev načrtovanja med seboj. Tabela 6 prikazuje definicijo nekaterih najpomembnejših relacij med vzorci načrtovanja. upoad» INFORMATIKA 2000 Slevilka4 • letnikVIII Tomaž Dornajnko. Ivan Rozman, Marjan HeriČko: Obnavljanje načrtovanja s pomočjo vzorcev načrtovanja Tabela 6 Opisna predstavitev vzorcev Relacija med vzorci Pomen relacije specializira(jt,o) izraža, da vzorec k specializira vzorec o. «■Ol,,^...!^)!-» J^R,(ftAi...its ) I specializirat ji, o)« 3c: c / o[o, / ji, , o, / k, / ji J a {r . }c {r„} uporablja (ti, d) izraža, da vzorec 7t uporablja vzorec o. j a = (atl ,.,av ) specializiram* (ji, o) izraža, da je specifikacija vzorca rr specializirana v specifikaciji vzorca o. _xpe.cializiraiw(7t,Q) ^ specializacijama ,n) nivo razlikovanja je parcialna funkcija, ki za par vzorcev vme razdaljo razlikovanja, (rt, o) H5 N{u} j t iiivoicizlikoviinju(!t M) Slika 10 prikazuje proces ugotavljanja relacij med vzorci. Proces izvedemo s pomočjo aktivnosti aplikacije (uporabe vzorca načrtovanja) v prazen kontekst in aktivnosti identifikacije vzorcev v nastalem kontekstu. Kot lahko vidimo, gre v resnici za aplikacijo kandidatnega vzorca v prazen kontekst. S tem dobimo minimalno implementacijo vzorca in to implementacijo lahko nato preverimo s pomočjo enostavnih pravil -ali zadošča kriterijem kakšne izmed definiranih relacij. Proces aplikacije in preverjanja skladnosti med specifikacijo in implementacijo smo opisali v prejšnjih poglavjih. Rezultati analize objektnih ogrodij Kot osnovo za preverjanje pravilnosti modela in postopka identifikacije vzorcev smo uporabili več različnih specifikacija vzorcev naitovanja M V aplikacija kandldatoega vzorca preverjanje skladnosti specifikaciji! relacije in implemeniacije vzorca 31 specililocija relacij med vzorci i> seznam identificiranih relacij Slika 10. Proces Identifikacije relacij med vzorci načrtovanja 2000-številka 4-letnik VIII 17*imi)i jidNFO R M ATI KA 245 Tomaž Dornajnko. Ivan Rozman, Marjan HeriČko: Obnavljanje načrtovanja s pomočjo vzorcev načrtovanja razrednih knjižnic in objektnih sistemov različne obsega, Zaradi omejenega prostora bomo prikazali rezultate le nekaj vzorcev načrtovanja. Tabela 7 prikazuje seznam objektnih sistemov in programskih jezikov, v katerih so bili implementirani. Za prikaz velikosti sistemov je v tabelo dodanih še nekaj metrik (število razredov, skupno število podatkovnih atributov, skupno število metod, skupno število vseh relacij in število vseh dedovanj). Tabela ii prikazuje rezultate identifikacije vzorcev načrtovanja, izvedenega s pomočjo podpornega okolja. Kot lahko razberemo iz rezultatov, je dejansko število uporabljenih vzorcev precej majhno. Razlogov za to je več, glavni pa ta, da je veliko implementacij vzorcev nepopolnih. Na to kaže tudi dejstvo, da smo, ko smo dovolili majhno odstopanje pri implementaciji vzorca, našli večje število primerkov vzorcev (pri tem se moramo zavedati, da nismo ločevali med vrsto neskladja med definicijo in implementacijo vzorca, kar je lahko v nekaterih primerih privedlo do napačne interpretacije). Ti rezultati so v tabeli navedeni v oklepajih. Drugi razlog pa je ta, da so bili trije sistemi (LEDA, zAPP in jamaEL)zasnovani in implementirani v času, ko vzorci še niso bili splošno poznani. Zato so načrtovalci in implementatorji uporabljali svoje rešitve, ki pa vedno niso enake rešitvam, ki jih ponujajo vzorci načrtovanja. Edini sistem, ki je bil v veliki meri zasnovan s pomočjo vzorcev, je samo podporno okolje PatTool, ki izkazuje tudi največje število identificiranih primerkov vzorcev načrtovanja. Vendarle pa rezultati analize te množice objektnih sistemov kažejo, da je s pomočjo formalne definicije vzorcev načrtovanja možno implementirati podporno okolje, ki je sposobno ekstrahirati visokonivojske podatke iz same programske kode. Zaključek Kot kažejo empirične raziskave tako v industrijskem kot tudi akademskem okolju, so informacije o uporabljenih vzorcih načrtovanja lahko pomembne za proces vzdrževanja in nadgradnje objektnih sistemov, saj omogočajo vi šj en i vojski pogled na objektni sistem, z vgrajenim znanjem pa pomagajo graditi robustnej-še in bolj prilagodljive sisteme. Osnovna naloga raziskave, razvoj jezika za formalni opis vzorcev načrtovanja in njegova uporaba v procesu ekstrakcije visokoni vojski podatkov iz. obstoječe programske kode, je bila v celoti izpolnjena. Hkrati pa smo ugotovili Še nekatere druge prednosti formalne definicije vzorcev, med katerimi je vsekakor najbolj pomembna možnost formalne definicije in deterministične identifikacije relacij med vzorci načrtovanja. Le-ta namreč zagotavlja trden temelj klasifikaciji vzorcev načrtovanja. Le s trdno in enolično določeno klasifikacijo se je namreč moč upreti vse večjemu številu zapisanih vzorcev in se izogniti redundanci in prekrivanju znanja Kot je bilo prikazano v prispevku, je deterministična identifikacija vzorcev načrtovanja v obstoječi Tabela 7 Seznam uporabljenih objektnih sistemov Sistem / Merila Razredi Atributi Metode Relacije Dedovanja GUI framework (Java) 45 187 3652 118 23 PatTool (Java) 72 67 2456 74 8 LEDA (C++) 150 501 4084 242 67 zAPP (C+ + ) 240 1176 3590 298 145 jamaEL {C+ +) 382 2523 3845 723 212 Tabela S Rezultati identifikacije vzorcev načrtovanja Vzorec / Sistem GUI Framevvork PatTool LEDA zAPP jamaEL Tovarn i Skame toda 9 (12)1 34 (34) 12 (16) 0 (14) 0 (0) Obiskovalec 0 (0) 1 (2) 0 (0) 0 (0) 2 (2) Šablonskametoda 1 (3) 4 (4) 0 (6) 2 (2) 6 (6) (terator 2(2) 19 (19) 5 (9) 4 (8) 2 (3) Medlatoir 13 (21) 2 (2) 0 (4) 0(10) 0 (0) Co m p osi te 6 (6) 0 (0) 4 (5) 2 (2) 4 (4) 246 3 Piva števila pomeni število velidiranih primerkov vzorca v programski kodi, medtem ko drtiga številka pomeni število valldiranih vzorcev v programski kodi. kjer je nivo razlikovanja manjši kot 3. i^rrj/fljfliKfOPMATIKA 2000 - Številka A - letnik VIII Tomaž Dornajnko. Ivan Rozman, Marjan HeriČko: Obnavljanje načrtovanja s pomočjo vzorcev načrtovanja programski kodi možna, S pomočjo formalne predstavitve vzorcev načrtovanja je implementacija okolja, ki izkorišča prednosti uporabe vzorcev v razvoju, enostavna in učinkovita. V sklopu nadaljnjega dela je vsekakor potrebno pomisliti na dejstvo, da je danes na voljo vedno več dokumentacije o razvoju sistema, ki bi jo lahko uporabili tudi za ekstrakcijo informacij o uporabljenih vzorcih načrtovanja. Na tem področju je zelo obetaven jezik XM1 kot komunikacijski standard med ČASE in razvojnimi orodji, ki s svojo izrazno močjo v veliki meri poenostavlja ekstrakcijo podatkov iz posameznega programskega jezika v obliko, potrebno za podporno okolje. Poleg tega bo naše nadaljnje delo usmerjeno k razvoju okolja, ki bi podpiralo grafično uporabo vzorcev načrtovanja. To bi po naši presoji prineslo še večjo učinkovitost uporabe vzorcev v proces razvoja in s tem pripomoglo h kakovostnejšemu razvoju programske opreme in še posebej kompleksnih objektnih sistemov. Literatura [Boseti 1996) Sosch J. "Language Support for Design Patterns, Proceedings TOOLS Europe '96, 1996 [Budinsky 1996] Budinsky F. J,. M. A. Finnic, J, M. Vlissides, and P S. Yu (1996). 'Automatic code generation from design patterns". Object Technology Vol. 35, No. 2. 1996 [Computer 1990] Formal Methods, Computer, Vol. 23, No. 9.1990 [Domajnko 1997) DOMAJNKO Tomaž, KOREN Silvo, CELCER Borut, DRVARIČ Ivan. "Uporaba objektnega pristopa na primeru izgradnje informacijske podpore poslovne funkcije v zavarvalništvu, zbornik srečanja Objektna tehnologija v Sloveniji OTS'97, 1997 [Domajnko 1998a] DOMAJNKO. TomaŽ. ROZMAN, Ivan. HERIČKO, Marjan, GV0RK0S. Jozsef. "Vzorci in ponovna uporaba izkušenj", Uporabna informatika (Ljubljana), 1998 [Domajnko 1998b] DOMAJNKO, TomaŽ, JURIČ, Branko-Matjaž, HERIČKO, Marjan, ROZMAN. Ivan, "Vzorci sedanjost ali prihodnost?". Dnevi slovenske informatike, Portorož, 6. - 9. maj 1998. Zbornik posvetovanja, 1998 [Domajnko 1998o] Domajnko Tomaž. Rozman Ivan, Henčko Marjan. Jurič Branko-Matjaž, Beloglavec Simon, "Java in vzorci", Fakulteta za elektrotehniko, računalništvo in informatiko Maribor. Inštitut za informatiko. Center za objektno tehnologijo, 1998 [Domajnko 1999a] DOMAJNKO, Tomaž, JUR1Č, Branko-Matjaž, HERIČKO, Marjan, ROZMAN, Ivan, "Formal based design patterns notation and support environment", 10'" International Conference Information and intelligent systems IIS '99, Varaždin, 1999 [Domajnko 1999b] DOMAJNKO, Tomaž, JURIČ, Branko Matjaž, BELOGLAVEC. Simon, ROZMAN, Ivan, "Design patterns management framework", Applied informatics : proceedings of the Seventeenth IASTED International Conference. Innsbruck. Austria, 1999 [Ducasse 1995] Ducasse Stephane, Mireille Blay-Fornarino, Arine-Mane Pinna. "A REflective Model for First Class Dependencies", Tools 1996, NY, 1995 [Gamma 1995] Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, Design Patterns - Elements of Reusable Object- Oriented Software, Addison-Wesley, Reading, MA, 1995. [Grand 1998] M. Grand, Patterns in Java - volume 1. Wiley, 1998 [Helm 90] Richard Helm, Ian M. Holland, and Dipayan Gangopadhyay, "Contracts: Specifying Behavioral Compositions in Object Oriented Systems", OOPSLA 90 Conference Proceedings, Ottawa, Canada, 1990 [IEEE 1990/5] formal Methods, IEEE Software, Vol. 7, No. 5, 1990 [PloP 1996] Pattern Languages of Programs, Allerton Park, Monticello-lllinois, USA, 1996 [PloP 1997] Pattern Languages of Programs, Allerton Park, Monticello-lllinois, USA, 1997 [PloP 1998] Pattern Languages of Programs. Allerton Park. Monticello-lltirrais, USA, 1998 [PloP 1999] Pattern Languages of Programs, Allerton Park. Monticello-lllinois, USA. 1999 [Ouinressoft 1997] Quintessoft Engineering, Inc. (1997). C+ + Code Navigator 1.1. http://www.quintessoft.com, 1997 ♦ Tomaž Domajnko je raziskovalec na Fakulteti za elektrotehniko, računalništvo in informatiko Univerze v Mariboru, kjer je vpisan v doktorski študij na področju računalništva in informatike. Njegovo raziskovalno delo obsega p o droge objektne tehnologije s poudarkom na izkoriščanju potenciala ponovne uporabe in zagotavljanju trajnosti objektov. Posebno področje njegovih raziskav so vzorci v programskem inženirstvu. * Dr Ivan Rozman je redni profesor Univerze v Mariboru, dekan Fakultete za elektrotehniko, računalništvo m informatiko v Mariboru in ustanovitelj Laboratorija za informacijske sisteme, ki ga vodi še danes. Je avtor številnih publikacij in vodja več raziskovalnih projektov. Diplomiral je na Fakulteti za elektrotehniko v Ljubljani, magistriral in doktoriral pa na Tehniški fakulteti v Mariboru. ♦ Dr Marjan Heričko je docent na Fakulteti z d elektrotehniko, računalništvo in informatiko Univerze v Mariboru. Njegovo raziskovalno delo obsega vse vidike objektne tehnologije s poudarkom na zagotavljanju kakovosti objektnega razvoja programskih s/sferno« Diplomiral, magistriral in doktoriral je na Fakulteti za elektrotehniko, računalništvo in informatiko v Mariboru 2000 številka4-letnikVIII iipombiimIN FOR M ATI KA