PREGLEDNI ZNANSTVENI PRISPEVKI B Pregled in analiza programskih ogrodij in sorodnih tehnologij Gregor Polančič, Boštjan Šumak Univerza v Mariboru, Fakulteta za elektrotehniko, računalništvo in informatiko, Inštitut za informatiko {gregor.polancic, bostjan.sumak}@uni-mb.si Izvleček V prispevku so predstavljena programska ogrodja, ki danes predstavljajo eno izmed ključnih tehnologij razvoja programske opreme in storitev. Predstavljeni so zgodovina in osnovne značilnosti programskih ogrodij ter položaj, ki ga ta zasedajo med tehnikami ponovne uporabe. Sledi pregled poglavitnih prednosti in slabosti programskih ogrodij in njihovo mesto v procesu razvoja programske opreme, ki je ponazorjeno v obliki procesa. Širokemu spektru uporabe programskih ogrodij je namenjen razdelek, ki navaja vrste in klasifikacije ogrodij. Ker se ogrodja pogosto zamenjujejo s sorodnimi tehnologijami, so v predzadnjem razdelku predstavljene podobnosti in razlike med koncepti in tehnologijami, ki so sorodne oz. komplementarne ogrodjem. Abstract AN INTRODUCTION TO SOFTWARE FRAMEWORKS This article presents a high-level introduction to software frameworks, which nowadays represent a focal technology for software and service development. The history, main characteristics and position of software frameworks in software reuse techniques are presented. Afterwards, the main benefits and drawbacks of using frameworks in the process of software development are explained. The wide scope of software frameworks usage is illustrated by means of defining basic frameworks types and their classifications. In order to avoid the frameworks being mistaken with other software reuse techniques, a complete chapter is assigned to the explanation of similarities and differences with similar or complementary software reuse techniques. 1 UVOD »lani projektov razvoja programske opreme se ubadajo z vedno večjimi konkurenčnimi pritiski, ki vladajo na trgu programske opreme. Ustrezen odziv na vse večjo in kakovostno ponudbo zahteva hiter razvoj novih programskih proizvodov oz. nadgradenj obstoječih proizvodov, širitev ponudbe, zagotavljanje skladnosti s standardi in visoko stopnjo povezljivosti z drugimi proizvodi. Ponovna uporaba je učinkovito sredstvo za doseganje omenjenih ciljev. Ponovna uporaba v programskem inženirstvu je definirana kot primer dejanj, v katerih se enak programski izdelek uporabi v različnih kontekstih. Izmed številnih vrst ponovne uporabe (Leach 1996; Sindre, Conradi & Karlsson 1995) spadajo produktne linije (angl. product line software) med najučinkovitejše in predstavljajo enega izmed kritičnih faktorjev uspeha ponovne uporabe (slika 1). Neuspeh Slika 1: Poglavitni faktorji, ki vplivajo na uspešnost ponovne uporabe (Morisio, Ezran & Tully 2002) Ideja produktnih linij temelji na razvoju družine izdelkov, ki so zgrajeni na enotni programski osnovi (angl. core asset base). Pokazalo se je, da takšen pristop zagotavlja dolgoročne ekonomske prednosti glede na razvoj posameznih izdelkov, kar je razvidno iz ekonomskega modela produktnih linij (Bockle et al. 2004). Produktne linije se najpogosteje implementirajo z razvojem na podlagi programskih ogrodij. Ta omogočijo produktnim linijam enotno podlago s tem, da zagotavljajo generične rešitve za množico podobnih problemov v domeni produktne linije. V nadaljevanju prispevka so podrobneje predstavljena programska ogrodja, njihova zgodovina, položaj v programskem inženirstvu in v procesu razvoja programske opreme. Predstavljene so vrste, prednosti in slabosti ogrodij. V tretjem razdelku so predstavljene tehnologije in koncepti, ki so podobni programskim ogrodjem oz. se dopolnjujejo z njimi. V zadnjem razdelku so podane sklepne misli. 2 PROGRAMSKA OGRODJA Programska ogrodja (v nadaljevanju ogrodja) so nepopolni sistemi, ki vsebujejo gradnike, enotne vsem aplikacijam v produktni liniji, in gradnike, ki jih je mogoče prilagajati in predstavljajo edinstvene dele posameznih aplikacij v produktni liniji (Srinivasan 1999). Ogrodja se razlikujejo od preostalih vrst ponovne uporabe v programskem inženirstvu (programske komponente, knjižnice, načrtovalski vzorci), saj težijo k ponovni uporabi večjih delov programske kode in zasnove na višji ravni (slika 2) (Mo-risio, Romano & Stamelos 2002). V nasprotju z drugimi tehnikami ponovne uporabe programske kode definirajo ogrodja tok izvajanja in zato delujejo kot podlaga na njih temelječih aplikacij. Ogrodja spadajo med učinkovitejše tehnike ponovne uporabe, saj poleg ponovne uporabe programske kode enkapsulira-jo še znanje načrtovanja (Oliveira et al. 2004). Aplikacija Ogrodje Načrtovalski vzorci Razredi in knjižnice Slika 2: Ogrodja in njihova povezava z drugimi tehnikami ponovne uporabe (Sangdon et al. 1999) Ogrodja predstavljajo tehniko ponovne uporabe, zato je njihov glavni cilj dvig produktivnosti v programskem inženirstvu (Mattsson 1996). Z vidika obsega ponovne uporabe se programska ogrodja uvrščajo med tehnike področne ponovne uporabe (angl. domain reuse) oz. ponovne uporabe, ki je namenjena družinam programskih izdelkov (angl. product families). Z vidika zrnatosti se programska ogrodja nahajajo na visokem (grobem) nivoju zrnatosti (glej območje kvadra na sliki 3). Usmerjenost Znanost splošna področja , .. ■ Področje družine izdelkov Slika 3: Umestitev ogrodij v REBOOT-klasifikacijo ponovne uporabe Najpogosteje uporabljena definicija ogrodja je (Johnson & Foote 1988): Ogrodje je množica razredov, ki vključujejo abstrakten načrt rešitve za družino povezanih problemov.1 Večina sodobnih ogrodij je objektno orientiranih (angl. Object-Oriented Framework - OOF) (Krajnc 2006). Definicija objektno orientiranega ogrodja je povzeta po Gamma et al. (Gamma et al. 1995) in se glasi: Ogrodje je množica sodelujočih razredov, ki sestavljajo ponovno uporaben načrt za specifično vrsto programske opreme. Ogrodje določa arhitekturne smernice z razdelitvijo načrta v abstraktne razrede in z definiranjem njihovih odgovornosti in sodelovanj. Razvijalec prilagaja ogrodje za posamezno aplikacijo s povezovanjem primerkov razredov ogrodja. Obstaja še več definicij ogrodij, ki jih je analiziral Mattsson (1996) in na njihovi podlagi oblikoval lastno, generično definicijo ogrodja: Ogrodje predstavlja generično arhitekturo, ki je zasnovana z namenom A framework is a set of classes that embodies an abstract design for solutions to a family of related problems. zviševanja ponovne uporabnosti. Ogrodja vključujejo množico sodelujočih abstraktnih in konkretnih razredov, ki enkapsulirajo obnašanje podedovanih specializacij.2 Ogrodja so torej vzorci, ki vsebujejo zamisel načrta rešitve določene problemske domene in množico gradnikov, ki vsak zase izpolnjujejo posamezno vlogo v ogrodju. Poenostavljeno povedano predstavljajo ogrodja programsko opremo, ki jo lahko programer uporabi, prilagodi in razširi z namenom ustrezati zahtevam končne programske rešitve. Ogrodja (objektno orientirana) temeljijo na uveljavljenih vzorcih in izkoriščajo prednosti treh konceptov objektne paradigme: abstraktnih podatkov (razredov), poli-morfizma in dedovanja. Takšnim ogrodjem so skupne naslednje karakteristike (Johnson & Foote 1988): ■ razredi odjemalci (angl. client classes) - Končne programske rešitve se ogrodju prilegajo na t. i. razširitvenih točkah; ■ sodelovanje objektov (angl. collaboration of objects) - (Abstraktni) razredi ogrodja definirajo model obnašanja (angl. model of interaction). Končne programske rešitve se zato obnašajo po definiranem modelu; ■ zamenjava nadzora (angl. inversion of control) -Model obnašanja ogrodja določa način vključevanja razredov odjemalcev, kar pomeni, da igra ogrodje vlogo glavnega programa (v nasprotju z vključevanjem programskih knjižnic). Koncept je poznan kot »hollywoodsko načelo« (angl. Hollywood principle). 2.1 Zgodovina ogrodij Pojem »programska ogrodja« ni nov, saj se je koncept ogrodij pojavil že v osemdesetih letih prejšnjega stoletja, in sicer v okoljih Smalltalk (Adele 1984) in Apple Inc. (Kurt 1986). Prvo široko uporabljeno ogrodje je bil uporabniški vmesnik Smalltalk-80, znan pod imenom model-pogled-nadzornik (angl. Model-View-Controller) ali krajše MVC. V devetdesetih letih prejšnjega stoletja so se ogrodja iz domene uporabniških vmesnikov razširila na preostale programske domene. Med pomembnejša ogrodja, razvita v devetdesetih, spadajo CommonPoint,3 HotDraw,4 ACE,5 JAWS,6 CORBA (angl. Common Object Request Broker Architecture) in MFC (angl. Microsoft Foundation Classes). Ogrodje MVC je bilo ob ogrodju OWL (angl. Object Windows Library) kar nekaj časa dejansko industrijski standard za razvoj grafičnih aplikacij za osebne računalnike. K razširitvi in uveljavitvi ogrodij v devetdesetih letih je pripomogel tudi programski jezik java. Večina ogrodij za javo nastaja znotraj delovnih skupin v procesu JCP (angl. Java Community Process), ki ga upravlja podjetje Sun. Med ogrodja, ki so nastala v okviru JCP, spadajo EJB (angl. Enterprise JavaBeans), RMI (angl. Remote Method Invocation), AWT (angl. Abstract Window Toolkit), Swing, JFC (Java Foundation Classes), JSP (JavaServer Pages), JSF (angl. JavaServer Faces), Collection Framework, JMF (angl. Java Media Framework) in JAF (angl. JavaBeans Activation Framework). Veliko ogrodij na podlagi jave nastaja tudi v odprtokodnih projektih. Primeri takšnih ogrodij so Struts, Spring, Hybernate, JUnit, Avalon in JCorporate Expresso (Krajnc & Heričko 2004). Med najpomembnejša in najpogosteje uporabljana ogrodja zadnje generacije spadajo Microsoft.NET, Spring, Jakarta Struts, Django, Hybernate, Ruby on Rails in Eclipse framework. Poleg omenjenih ogrodij, ki so javno dostopna, številna podjetja razvijajo še lastna ogrodja (angl. in--house framework). Takšna ogrodja se uporabljajo samo interno in niso namenjena za prodajo ali javno uporabo. V zadnjem času je mogoče zaslediti tudi uporabo ogrodij za razvoj programskih orodij (Krajnc et al. 2005). Primer takšnega orodja je Eclipse IDE. 2.2 Prednosti in slabosti ogrodij Programerji in vodje projektov se za razvoj na podlagi ogrodij odločajo predvsem zaradi: (1) minimizira-nja obsega implementacije, ki je potrebna za razvoj aplikacij, in (2) lažjega obvladovanja znanja domene, v kateri organizacija razvija aplikacije (Mattsson 1996). Prednosti ogrodij so torej: ■ Hitrejši in učinkovitejši razvoj. Z uporabo ogrodja aplikacije nikoli ne gradimo od začetka, temveč ponovno uporabimo programsko kodo oz. storitve, ki jih zagotavlja ogrodje. Ker aplikaci- 2 A (generative) architecture designed for maximum reuse, represented as a collective set of abstract and concrete classes; encapsulated potential behavior for sub-classed specializations. 3 Množica ogrodij za hitrejši razvoj aplikacij. 4 Ogrodje za izgradnjo grafičnih urejevalnikov, napisano v jeziku Smalltalk. 5 ADAPTIVE Communication Environment - objektno orientirano ogrodje, namenjeno za komunikacijsko programsko opremo. 6 Adaptive Web Server - spletni strežnik in ogrodje za izgradnjo drugih vrst strežnikov. je, ki temeljijo na enakem ogrodju, gradimo po ustaljenem vzorcu, se učinkovitost razvoja še dodatno poveča. ■ Boljša kakovost programske opreme. Izvorna koda ogrodij običajno temelji na preizkušenih programskih vzorcih in je zaradi večkratne uporabe izpostavljena obsežnim testiranjem. ■ Ogrodja omogočajo ponovno uporabo izvorne kode in načrtovanja. ■ Omogočajo preusmeritev fokusa s področja sistemskih problemov na področje domene. Sistemski problemi so rešeni v ogrodjih, zato se razvijalcem aplikacij z njimi ni treba ubadati. ■ Zagotavljajo visoko stopnjo medizvedljivosti (angl. interoperability). Aplikacije, ki temeljijo na enakem ogrodju, so si glede arhitekture sorodne. Skupaj s podporo uveljavljenim standardom imajo na ogrodju temelječe aplikacije zagotovljeno visoko stopnjo medsebojne izvedljivosti. Avtorja (Fayad & Schmidt 1997) navajata, da izhajajo prednosti uporabe ogrodij iz naslednjih lastnosti ogrodij: ■ Ponovna uporabnost (angl. reusability). Stopnja ponovne uporabe ogrodja je običajno višja kot pri preostalih tehnikah ponovne uporabe.7 Ogrodja omogočajo ponovno uporabo na nivoju programske kode, vzorcev in opisa konceptov, potrebnih za reševanje določenega problema. Z opisovanjem konceptov definirajo ogrodja slovar za problemsko področje. Razvijalec, ki uporablja ogrodje, vidi problemsko področje prav skozi slovar ogrodja. S tem zagotavljajo ogrodja še ponovno uporabo konceptov analize (Roberts & Johnson 1997). ■ Modularnost (angl. modularity). Ogrodja zvišujejo modularnost programske opreme z ločevanjem vmesnikov od implementacije. Zaradi večje modularnosti je identifikacija napak in sprememb v takšni programski opremi lažja. S tem se: (1) zmanjša napor za razumevanje in vzdrževanje programske opreme in (2) zvišuje kakovost programske opreme. ■ Razširljivost (angl. extensibility). Ogrodja povečujejo razširljivost programske opreme z zagotavljanjem standardnih razširitvenih točk (angl. hook methods). Razširitvene točke zagotavljajo stabilnost vmesnikov ogrodij z njihovimi najpogostejši- mi implementacijami. Zaradi razširitvenih točk so ogrodja lahko hkrati stabilna in razširljiva. Če zgoraj navedene prednosti programskih ogrodij strnemo in finančno ovrednotimo, ugotovimo, da se prednosti uporabe ogrodij povečujejo s številom ponovnih uporab ogrodij, kar ponazarja slika 4. ^prod 12 2.4 13 0.72 Creuse 0.84 Cost comparison 1 4 7 10 13 Number of products 16 Number of products 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Product line development 15.40 16.96 18.52 20.08 21.64 23.20 24.76 26.32 27.88 29.44 31.00 32.56 34.12 35.68 37.24 38.80 Traditional development 0.00 12.00 24.00 36.00 48.00 60.00 72.00 84.00 96.00 108.00 120.00 132.00 144.00 156.00 168.00 180.00 7 Ogrodja predstavljajo tudi do 80 odstotkov kode končnega izdelka (Seddon, Staples, Patnayakuni & Bowtell 1999). Slika 4: Skupni stroški »običajnega razvoja« in razvoja na podlagi produkt-nih linij (Bockle, Clements, McGregor, Muthig, & Schmid 2004) Iz slike 4 je mogoče razbrati, da je za razvoj z uporabo ogrodij (krivulja Product line development) značilen začetni ekonomski deficit, ki nastane zaradi spremembe procesov razvoja (Corg) in razvoja lastnega ogrodja oz. spoznavanja obstoječega (C^^^). Prednosti ogrodij se nato večajo (relativno glede na »tradicionalni razvoj«) s številom ponovnih uporab ogrodja (»number of products«). Potencialne slabosti uporabe ogrodij so (Mattsson 1996; Roberts & Johnson 1997): ■ Zapleten razvoj ogrodij. Razvoj kakovostnega ogrodja je težaven in običajno zahteva bogate izkušnje v arhitekturni zasnovi aplikacij in problemski domeni. ■ Težavno dokumentiranje ogrodij. Zaradi kompleksnosti je ogrodja težko dokumentirati. Če ogrodja niso ustrezno dokumentirana, jih razvijalci aplikacij ne uporabljajo. ■ Težavno zagotavljanje povezljivosti. Ogrodja se nenehno razvijajo in spreminjajo, zato je težavno zagotavljati kompatibilnost s predhodniki in njihovimi primerki. ■ Zmanjšana učinkovitost aplikacij. Splošnost in prožnost ogrodij lahko predstavljata omejitve za razvijalce aplikacij in učinkovitost razvitih aplikacij. ■ Težavno razhroščevanje. Razhroščevanje ogrodij in primerkov ogrodij je težavno, saj pogosto ni mogoče lokalizirati napak (»Ali se napaka pojavlja v ogrodju ali v aplikaciji?«). Prav tako so lahko napake, ki se pojavijo v ogrodju, neodpravljive za uporabnike ogrodij.8 ■ Pomanjkanje standardov. Na področju ogrodij standardi ne obstajajo ali so šele v povojih, kar zmanjšuje njihovo zamenljivost (angl. replaceabi-lity). V zadnjem času se podjetja lotevajo omenjene težave z delovnimi skupinami, v katere so vključena različna podjetja in odprtokodne skupnosti. ■ Odvisnost od programskega jezika. Ker so ogrodja napisana v določenem programskem jeziku, so vezana nanj. Namestitev ogrodja v okolje, ki temelji na drugačnem programskem jeziku, zato ni mogoče. 2.3 Ogrodja v procesu razvoja programske opreme Proces razvoja programske opreme na osnovi ogrodij predstavlja poseben primer procesa razvoja na podlagi ponovno uporabne programske opreme. Procesov oz. modelov razvoja programske opreme na osnovi ogrodij je več (Mattsson 1996). Na sliki 5 so v obliki modela BPMN9 predstavljeni štirje procesi razvoja ogrodij in na ogrodju temelječih aplikacij: Proces razvoja ogrodja, ki temelji na izkušnjah razvoja aplikacij. Takšen proces se začne z razvojem (družin) aplikacij (glej začetna dogodka A). Na podlagi podobnosti med aplikacijami in izkušenj razvijalcev se lahko razvijalci odločijo skupne funkcionalnosti prenesti v ogrodje. Po izdaji ogrodja se nato vse samostojne aplikacije preoblikujejo v aplikacije, ki temeljijo na ogrodju. Izkušnje pri razvoju takšnih aplikacij se nato ponovno prenesejo v razvoj ogrodja in proces se ponovi. Proces razvoja ogrodja, ki temelji na analizi domene. Začetek takšnega procesa predstavlja analiziranje abstrakcij v domeni, ki se nato vključijo v razvoj ogrodja (glej začetna dogodka B). Na osnovi ogrodja se nato začnejo razvijati končne aplikacije. Izkušnje z razvojem končnih aplikacij in odzivi uporabnikov se nato upoštevajo pri vzdrževanju ogrodja. Proces razvoja ogrodja, ki temelji na uporabi vzorcev načrtovanja. Proces se začne z razvojem samostojne aplikacije (glej začetna dogodka A). Na podlagi analiziranja aplikacij se nato z upoštevanjem vzorcev načrtovanja začne razvoj ogrodja. V nadaljevanju se ogrodje posodablja na podlagi izkušenj pri razvoju aplikacij in njihovih uporabnikov. Q A. Začetek razvoja samostojnih aplikacij Razvoj in vzdrževanje aplikacij a B. Začetek razvoja aplikacij z uporabo ogrodja Aplikacije OA. Razvoj ogrodja, ki temelji na izkušnjah aplikacij I OH • ^ B. Razvoj ogrodja, Analiza izkušenj in podobnosti Izdaja aplikacij Nove zahteve .•• Prenehanje razvoja ■ Novo Novo ogrodje Konec razvoja aplikacij Analiza domene Uporaba vzorcev nač^ovanja ki temelji na analizi domene Rain razvoj generičnega ogrodja Razvoj in vzdrževanje ogrodja - n IT Razvoj, ki temelji na vzorcih načrtovanja Ogrodje Prenehanje razvoja Konec razvoja ogrodij Izdaja ogrodja ^TestiranjaT ogrodja na testnih aplikacijah Slika 5: Različni procesi razvoja ogrodja, prikazani v modelu BPMN 8 V primeru lastniških, zaprtokodnih ogrodij. 9 BPMN je akronim za Business Process Modelling Notation. Proces razvoja generičnega ogrodja. Razvoj generičnega ogrodja se začne z analiziranjem domene (glej začetna dogodka B). Na podlagi analize domene se začne razvoj generičnega ogrodja. Testiranje ogrodja se izvede s testnimi aplikacijami, na podlagi katerih se nato izboljšuje ogrodje. Takšen proces je lahko popolnoma neodvisen od razvoja aplikacij. Programskim jezikom sorodna orodja Grafična razvojna okolja Finozrnate komponente Vključitveni objekti Knjižnice razredov Ogrodja bele škatle Ogrodja črne škatle "Trije primerki« -Čas- Slika 6: Evolucija ogrodij, temelječa na vzorcih zasnove (Roberts & Johnson 1997)9 Vzporedno s procesom razvoja in vzdrževanja so ogrodja izpostavljena tudi evoluciji oz. »zorenju« ogrodja. Roberts in Johnson (1997) sta na podlagi vzorcev zasnove ogrodij opredelila stopnje zrelosti ogrodij: ■ Ogrodja bele škatle (angl. white-box framework). Instanciranje takšnega ogrodja temelji na modifikacijah izvorne kode ogrodja in na dedovanju razredov ogrodja. ■ Knjižnice komponent (angl. component library). Razredi, ki so skupni aplikacijam v domeni ogrodja, so v ogrodje vključeni v obliki knjižnic. ■ Vroče točke (angl. hot spots). V takšnih orodjih je koda, ki se pogosto spreminja, ločena od kode, ki se ne spreminja (angl. frozen spots). Zaradi lažjega obvladovanja je koda, ki se spreminja, združena v razredih, ki se najpogosteje razširjajo s kompozicijo. ■ Vključitveni objekti (angl. pluggable objects). Namesto trivialnih podrazredov vsebuje takšno 9 Prvo fazo v vzorcih evolucije ogrodij predstavljajo trije primerki razvoja aplikacij v domeni, v kateri naj bi se razvilo ogrodje. Taksen pristop razvoja ogrodij je skladen s procesom razvoja ogrodja na izkušnjah razvoja aplikacij (slika 4). ogrodje podrazrede, ki jih je mogoče parameteri-zirati. ■ Drobnozrnate komponente (angl. fine-grained components). S ciljem povečanja stopnje ponovne uporabnosti so razredi in knjižnice v takšnih ogrodjih drobnozrnati. ■ Ogrodja črne škatle (angl. black-box frameworks). V takšnih ogrodjih so knjižnice strukturi-rane na osnovi dedovanja, medtem ko se za njihovo povezovanje uporablja kompozicija. ■ Grafična razvojna okolja (angl. visual building tools). Grafična razvojna okolja so v pomoč razvijalcem aplikacij pri specifikaciji in povezovanju objektov v primerkih ogrodja. ■ Programskim jezikom sorodna orodja (angl. language tools). Takšnim ogrodjem so dodana orodja za njihov nadzor izvajanja in pomoč pri razhro-ščevanju. 2.4 Vrste in klasifikacije ogrodij Ogrodja se po svoji zasnovi, obsežnosti in namenu zelo razlikujejo. Čeprav obstajajo najrazličnejše klasifikacije ogrodij, ogrodja najpogosteje delimo na (Johnson & Foote 1988): ■ domenska ogrodja (angl. domain framework) -naslavljajo določene problemske domene (npr. zavarovalništvo, računovodstvo in upravljanje človeških virov), ■ orodna ogrodja (angl. utility framework) - naslavljajo določene programske domene (npr. trajnost podatkov, uporabniški vmesnik in testiranje kod), ■ aplikacijska ogrodja (angl. application framework) - obsežna ogrodja, ki so uporabna za različne problemske domene in naslavljajo številne programske domene. V zadnjem času je vse več poskusov uveljavljanja t. i. organizacijskih ogrodij (angl. enterprise frameworks), ki zaokrožujejo posamezno problemsko domeno poslovanja. Če jih primerjamo z drugimi ogrodji, so organizacijska ogrodja po obsegu večja in bolj kompleksna; v njih so lahko vsebovane najrazličnejše komponente in druga ogrodja. Organizacijska ogrodja vključujejo infrastrukturni, domenski in arhitekturni vidik (Fayad & Hamu 2000). Poleg predstavljene delitve se ogrodja pogosto delijo glede na tip razvoja, in sicer na: (1) odprtoko-dna (angl. open source frameworks), (2) lastniška (angl. proprietary frameworks) in (3) ogrodja, ki so razvita za lastne potrebe (angl. in-house frame- Vroče točke works). Glede na tehniko uporabe lahko ogrodja razvrstimo na ogrodja bele škatle in ogrodja črne škatle. Za ogrodja bele škatle je značilno, da se za doseganje razširljivosti močno opirajo na lastnosti objektivno orientiranih jezikov, kot sta dedovanje ali povezovanje v času izvajanja (angl. dynamic binding). Ogrodja črne škatle podpirajo razširljivost skozi definicijo vmesnikov za komponente, ki jih lahko nato vključimo v ogrodje z uporabo kompozicije objektov. Obstajajo še ogrodja sive škatle in steklene škatle, ki predstavljajo vmesne rešitve (slika 6). Siva škatla Steklena škatla