Rafał WOJSZCZYK - Modele Inżynierii Teleinformatyki
Transkrypt
Rafał WOJSZCZYK - Modele Inżynierii Teleinformatyki
RAFAŁ WOJSZCZYK [email protected] Katedra Inżynierii Komputerowej Wydział Elektroniki i Informatyki Politechnika Koszalińska PORÓWNANIE SPOSOBÓW REPREZENTACJI WZORCÓW PROJEKTOWYCH Streszczenie: Celem publikacji jest porównanie sposobów reprezentacji wzorców projektowych, które będą umożliwiały ich dalsze analizowanie. W pracy krótko przedstawiono historię wzorców projektowych, zawierając w tym wkład C. Alexandra oraz Bandy Czterech. Wyjaśnione są rodzaje wzorców, cel ich stosowania oraz korzyści z tego wynikające. Przedstawione zostały różne sposoby reprezentacji wzorców projektowych, w tym oparte na grafach i ontologiach. Następnie zostały teoretycznie porównane względem siebie, wraz ze wskazaniem najlepszego sposobu reprezentacji do analizowania wzorców projektowych. Słowa kluczowe: wzorce projektowe, GoF, grafy etykietowane, ontologie 1. Wprowadzenie Obecnie różnego rodzaju wzorce mają bardzo szerokie zastosowanie w wielu nie powiązanych ze sobą dziedzinach, przez co nie powinno utożsamiać się terminu "wzorzec" wyłącznie z informatyką. Przykładowym wzorcem są frazy melodyjne lub wzorce akompaniamentów pianistycznych (z ang. Piano Patterns) w muzyce. Są to wzory pewnych melodii lub akompaniamentów, możliwych do powtórzenia w różnych tonacjach a do tego gwarantujące ich dobre współbrzmienie z tą tonacją. Zapewne w większości przypadków celem użycia tego słowa jest wskazanie idei powtarzającego się problemu i możliwości ponownego użycia rozwiązania do tegoż problemu. Panuje przekonanie, że wspomnianą ideę pierwszy nazwał wzorcem Christopher Alexander w latach siedemdziesiątych XX wieku. 134 Rafał Wojszczyk Christopher Alexander zdefiniował wzorzec słowami: "Każdy wzorzec opisuje pewien regularnie napotykany problem i łączy go z ogólnym opisem jego rozwiązania w sposób, który pozwala stosować to rozwiązanie miliony razy, ale za każdym razem nieco inaczej" [6]. Słowa te dotyczyły budownictwa, lecz są na tyle uniwersalne, że można przenieść ich znaczenie do wielu innych dziedzin, w tym też do programowania. Prace Alexandra skupiały się na definiowaniu i klasyfikacji wzorców. Zaproponował również nieformalny sposób opisu wzorców, składający się z wyjaśnienia kontekstu, problemu i rozwiązania. 2. Wzorce w oprogramowaniu Prace Alexandra wywarły bardzo duży wpływ na informatykę, szczególnie na programowanie. Sam Christopher Alexander miał swój osobisty wkład w tematyce wzorców w informatyce [1]. W samej informatyce za bardzo ważne dzieło uważana jest publikacja E. Gammy i innych "WZORCE PROJEKTOWE Elementy oprogramowania obiektowego wielokrotnego użytku" [7] (tytuł oryginału: "Design Patterns: Elements of Reusable Object-oriented Software"), autorzy nazywani są często Bandą Czterech. Mimo upływu 20 lat od wydania tej pozycji, wciąż jest ona uważana za pewien standard i omawiana przez innych: [10, 11, 12]. Autorom [7] przypisywanych jest wiele zasług za rozpowszechnianie i popularyzację wzorców. Jednakże nie są oni twórcami samych wzorców, czy też zasad stosowania wzorców w programowaniu obiektowym. Ich zasadniczym wkładem jest zebranie i opisanie 23 wzorców. 2.1. Podział wzorców Wieloznaczeniowy charakter słowa wzorzec ma taką wadę, że używając tego słowa, nawet w kontekście programowania, można łatwo wprowadzić rozmówców w błąd. Dlatego warto przedstawić podział [11], bazujący na różnych poziomach abstrakcji i wyjaśnić ich znaczenie: wzorce architektury są to strategie o wysokim poziomie abstrakcji, opisujące poziom integracji komponentów. Do tej grupy zaliczają się między innymi Model-View-Controler oraz Model-View-Presenter. wzorce projektowe obejmują mniejszy zakres niż wzorce architektury, dotyczą poziomu interakcji między klasami lecz wciąż są abstrakcyjne, ponad poziomem implementacji. Do tej grupy zaliczają się między innymi wzorce przedstawione w [7]. Porównanie sposobów reprezentacji wzorców projektowych 135 wzorce implementacyjne, nazywane również idiomami, są to konstrukcje programistyczne używane w konkretnym paradygmacie programowania, są na najniższym poziomie abstrakcji. Do tej grupy zaliczają się między innymi proste instrukcje jak: inkrementacja wartości stałoprzecinkowej, nieskończone pętle. 2.2. Czym jest wzorzec projektowy? Odpowiadając wprost na pytanie z tytułu tego podrozdziału, można powiedzieć, że wzorzec projektowy jest to opis rozwiązania pewnego problemu, który jest powtarzalny. Łatwość przy tym jest taka, że rozwiązanie nie musi być ponownie opracowywane oraz osoba korzystająca z takiego rozwiązania nie musi rozumieć wszystkich jego aspektów, a jedynie wiedzieć jak z niego skorzystać. Oprócz tego wzorce projektowe są w pewnym sensie językiem komunikacji pomiędzy programistami, umożliwiają dzielenie się wiedzą oraz sposobem na udokumentowanie projektu. Poprzez stosowanie odpowiednich nazw bądź adnotacji, każdy nowy programista znający wzorce projektowe, łatwiej zrozumie kod programu, który widzi pierwszy raz. Stosowanie wzorców projektowych jest uznane wśród społeczności programistów za bardzo dobrą praktykę. Sama idea ponownego wykorzystania nie jest niczym nowym. Wiele lat wcześniej, przed popularyzacją wzorców projektowych przez [7], znane były techniki ponownego wykorzystania komponentów, czy po prostu klas. Warto też dodać, czym nie jest wzorzec projektowy - nie jest to gotowa biblioteka lub klasa, którą można bezpośrednio wykorzystać. Każdy wzorzec projektowy wymaga aby to programista wykorzystujący dany wzorzec odpowiednio go zaimplementował. Wzorce projektowe można nazwać "półproduktami". Ponadto nie w każdej sytuacji można zastosować znany wzorzec projektowy. Przyjęło się, że aby pewne rozwiązanie można było nazwać wzorcem musi spełnić regułę trzech. Co oznacza, że rozwiązanie musi zostać wykorzystane w przynajmniej trzech przypadkach bardzo podobnych problemów. 2.3. Klasyfikacja wzorców projektowych Jednym z najważniejszych dokonań Bandy Czterech jest klasyfikacja wzorców projektowych [7]. Klasyfikację tą przedstawia tabela 1. Wzorce konstrukcyjne dotyczą problemów związanych z tworzeniem obiektów. Wzorce strukturalne dotyczą problemów ze składaniem klas lub obiektów. Wzorce operacyjne dotyczą problemów ze współdziałaniem klas lub obiektów oraz podziałem zachowania między nimi. Rafał Wojszczyk 136 Tab. 1. Klasyfikacja wzorców projektowych na podstawie [GoF] Konstrukcyjne Metoda wytwórcza Fabryka abstrakcyjna Budowniczy Prototyp Singleton Strukturalne Adapter Most Kompozyt Dekorator Fasada Pyłek Pełnomocnik Operacyjne Interpreter Metoda szablonowa Łańcuch zobowiązań Polecenie Iterator Mediator Pamiątka Obserwator Stan Strategia Wizytator 3. Nieformalne sposoby reprezentacji wzorców projektowych Wzorce projektowe reprezentowane są bardzo często w sposób nieformalny, tzn. w postaci ogólnego opisu słownego, wzbogaconego diagramami w notacji UML. Takie podejście zostało wykorzystane w [7]. Christopher Alexander do opisu swoich wzorców również stosował sposób nieformalny. Sposób nieformalny zaproponowany przez [7] przedstawia tabela 2. Niewątpliwą zaletą takiego sposobu reprezentacji jest łatwość zrozumienia i przejrzystość. Tym bardziej, że dzieło [7] jest traktowane jako katalog wzorców projektowych. Niestety, zasadniczą wadą takiej reprezentacji jest brak możliwości interpretacji tego zapisu w sposób zrozumiały dla komputera. Jak też wynik przekształcenia zaimplementowanego wzorca projektowego w kodzie programu do reprezentacji nieformalnej, nie ma sensu i nie będzie mógł być poddany dalszej analizie. Oprócz wspomnianych sposobów [7] oraz Alexandra, istnieją też inne sposoby reprezentacji nieformalnej, np. przedstawiona w [6]. Cechą wspólną tych sposobów jest przede wszystkim nazwa, która powinna jednoznacznie nakreślać istotę rozwiązywanych problemów. Według [10] i [11] reprezentacje oparte w znacznym stopniu na języku UML klasyfikują się pomiędzy reprezentacjami nieformalnymi a formalnymi i uznawane są za półformalne. Opis w postaci diagramów klas UML jest jednym z elementów systemu nieformalnego opisanego wcześniej. Mimo wszystko Porównanie sposobów reprezentacji wzorców projektowych 137 taki opis może być niewystarczający do pełnego przedstawienia rozbudowanych wzorców projektowych. Dzieje się tak, ponieważ diagramy klas przedstawiają wyłącznie statyczną strukturę wzorców, podczas gdy wiele z nich charakteryzuje się wieloma właściwościami dynamicznymi. Tab. 2. Opis nieformalny według [7] Nazwa i klasyfikacja Przeznaczenie Inne nazwy Uzasadnienie Warunki stosowania Struktura Elementy Współdziałanie Konsekwencje Implementacja Przykładowy kod Znane zastosowania Powiązane wzorce Zwięzła nazwa określająca jego istotę oraz klasyfikacja zgodnie z podrozdziałem 2.3. niniejszej pracy. Krótkie określenie problemu jaki rozwiązuje dany wzorzec. Inne nazwy pod jakimi jest znany wzorzec. Scenariusz ilustrujący problem projektowy. Opis sytuacji w jakich można zastosować wzorzec. Graficzna reprezentacja wzorca, przeważnie w postaci diagramu klas UML (w [GoF] przedstawione w notacji OMT [GoF, s. 347]. Klasy i obiekty wchodzące w skład wzorca oraz ich wzajemne relacje. Opis współpracy pomiędzy elementami wzorca, w celu zrealizowania odpowiednich zadań. Rezultaty wykorzystania wzorca, problemy oraz konsekwencje z tego wynikające. Opis ważnych zagadnień podczas implementacji. Fragmenty kodu demonstrujące przykładową implementację wzorca. Znane i powielane zastosowania wzorca w istniejących systemach. Opis związków z innymi wzorcami, sugestie, z którymi powinno się stosować dany wzorzec. 4. Reprezentacje formalne Zasadniczą cechą reprezentacji formalnej jest fakt, że może ona zostać poddana analizie i przetwarzaniu komputerowemu. Cechą niekorzystną reprezentacji formalnej jest trudność wprowadzenia, zrozumienia i odczytania tego zapisu przez człowieka. W dalszej części zostały przedstawione reprezentacje formalne oparte na grafach oraz ontologiach. 138 Rafał Wojszczyk 4.1. Reprezentacja grafowa Wychodząc od popularnego opisu wzorców projektowych w postaci diagramu klas UML, można zauważyć, że jest to po prostu graf skierowany [8]. Podstawowym założeniem jest reprezentowanie klas jako wierzchołków a relacji jako krawędzi. Podejście grafowe zostało przedstawione w [SinR13] wraz z rozwinięciem w [13], oraz w [16]. Podstawowe podejście jak w [12] było znane już wcześniej. Elementy w oprogramowaniu przedstawione są jako wierzchołki, a relacje między tymi elementami jako krawędzie. Jak podaje [12] takie podejście jest wystarczające do opisania i rozpoznania niektórych wzorców, np. Fabryka abstrakcyjna. Bardzo mała ilość informacji zawarta w tym podejściu nie pozwala na zaawansowany opis wzorców projektowych. W [13] przedstawione jest rozszerzone podejście względem [12]. Rozszerzenie polega na odpowiednim etykietowaniu wierzchołków i krawędzi. Wierzchołki opisane są poprzez trzy parametry: ilość nadklas, ilość podklas, ilość powiązań. Poprzez ilość nadklas i podklas rozumiane są klasy, z których dziedziczy rozważana klasa oraz z klasy, które dziedziczą z rozważanej klasy. Etykiety krawędzi reprezentują rodzaj relacji pomiędzy klasami, autorzy [13] proponują: 1 - zależność, 2 - generalizacja, 3 - asocjacja skierowana, 4 - agregacja. Przykład takiego opisu przedstawia rysunek 1 i 2. Porównanie sposobów reprezentacji wzorców projektowych 139 Rys. 1. Diagram klas opisujący wzorzec Strategia. Źródło: opracowanie własne na podstawie [13] Rys. 2. Graf etykietowany opisujący wzorzec projektowy Strategia. Źródło: opracowanie własne na podstawie [13] W [16] szczególna uwaga została skupiona na reprezentacji relacji, przez co zakładają użycie większej liczby relacji niż [13]. Ponadto zauważają, że wiele wzorców projektowych ma wspólną cechę związaną z relacjami, tj. występują klasy lub interfejsy abstrakcyjne. W obu przedstawionych podejściach [13] i [16] znaczącą cechą wspólną jest możliwość łatwej transformacji grafu do postaci macierzy. Macierze są typowe dla zastosowań inżynierskich. W obu przypadkach dla każdego rodzaju relacji tworzona jest podobna macierz, a etykietami wierszy oraz kolumn są 140 Rafał Wojszczyk wierzchołki grafów. Wystąpienie danej relacji pomiędzy wierzchołkami grafu oznaczane jest w macierzy odpowiednią wartością (zależne od podejścia), co odpowiada istnieniu relacji pomiędzy elementami wzorca. Reprezentacja w postaci grafów ma swoje wady i zalety. Zaletą jest to, że taki zapis wynika z popularnych diagramów UML, a po odpowiednim przekształceniu informacje reprezentowane są w postaci macierzy. Wada wynikła w trakcie próby weryfikacji w [13], polegającej na wyszukaniu kilku wzorców w grafie. Przedstawione wyniki dla trzech przypadków: pełne dopasowanie, częściowe oraz brak dopasowania (szukany wzorzec nie został odnaleziony w grafie mimo, że występuje). Wystąpienie ostatniego przypadku oznacza, że taka reprezentacja może być niewystarczająca do analizowania komputerowego wzorców projektowych. 4.2. Reprezentacja ontologiczna Termin ontologia wywodzi się z filozofii, gdzie celem ontologii było określenie rzeczywistych bytów świata rzeczywistego [14]. Popularność ontologii w informatyce stale rośnie i jest wykorzystywana do formalnej reprezentacji wiedzy w postaci zbioru pojęć z danej dziedziny i relacji między tymi pojęciami. Podstawową korzyścią ontologii w informatyce jest założenie, że reprezentowana przez nie wiedza jest rozumiana przez komputery. Inną korzyścią jest możliwość łączenia ontologii ze sobą. Opiera się to na idei sieci semantycznych, które wprowadzają standaryzowane metadane służące do opisu danych [3]. Ontologie mogą być opisane za pomocą kilku języków: RDF (od ang. Resource Description Framework), RDFS (od ang. RDF Schema) oraz OWL (od ang. Web Ontology Language) [15]. Semantyka wszystkich wymienionych wywodzi się z języka XML, dzięki czemu są do siebie podobne. Języki te różnią się możliwościami. OWL występuje w trzech odmianach, OWL Full najbardziej ekspresywny (wyrazisty), DL mniej ekspresywny i bardziej wydajny w przetwarzaniu oraz Lite najmniej ekspresywny ale za to najbardziej wydajny w przetwarzaniu. W najgorszym przypadku przetwarzanie OWL Full może być nieskończone. Przez ostatnie lata ontologie zostały kilkukrotnie wykorzystane do reprezentacji wzorców projektowych np. w [2, 5, 9, 10, 11]. Cechami wspólnymi kilku z tych prac jest dostarczenie ontologii opisującej strukturę wzorców projektowych, w niektórych przypadkach również możliwość opisania dodatkowych niestatycznych cech: zachowania, sposób implementacji, wymagania kontekstu [10]. Opis wzorca projektowego Fabryka Abstrakcyjna w podejściu [5] przedstawia rysunek 3. W tym podejściu wykorzystany jest język OWL. Porównanie sposobów reprezentacji wzorców projektowych 141 Rys. 3. Graficzna reprezentacja wzorca projektowego Fabryka Abstrakcyjna opisanego za pomocą ontologii. Źródło: [5] Bardziej rozbudowane podejście przedstawione jest w [9]. Oprócz ontologii opisującej wzorce projektowe, autorzy wprowadzili również taksonomię, opisującą podstawowe elementy z paradygmatu programowania obiektowego: zmienne, stałe, pętle, typy danych i inne. Wprowadzają również ograniczenia opisujące w sposób formalny różne cechy charakterystyczne dla konkretnych wzorców. Możliwe jest następujące opisanie ograniczeń np. dla wzorca projektowego Singleton [9]: 1 - dopuszczalny jest tylko prywatny konstruktor; 2 musi być przynajmniej jedna publiczna metoda, która zwraca typ taki sam jak tworzony Singleton; 3 - publiczna metoda zawsze musi zwracać tą samą instancję obiektu. Oczywiście przytoczone restrykcje mogą, a nawet powinny być opisane w języku formalnym, zrozumiałym dla komputera. W tym przypadku jest to OWL abstract syntax [17]. Istnieją też repozytoria wiedzy o wzorcach projektowych, jak przedstawione w [10]. Celem takiego repozytorium jest szerzenie wiedzy o wzorcach projektowych, nauka i wsparcie w ich wykorzystaniu. Możliwy jest dialog pomiędzy użytkownikiem a systemem zaproponowanym w [10], na zasadzie pytanieodpowiedź (pytania są predefiniowane i istnieje możliwość rozszerzenia tej listy). W tym rozwiązaniu został wykorzystany język RDF, a baza wiedzy została zasilona z innych baz, dzięki możliwości przekształceń danych do RDF. 142 Rafał Wojszczyk 5. Porównanie W poniższej części zaprezentowano porównanie wymienionych wcześniej sposobów reprezentacji wzorców projektowych. Przedmiotem porównania jest reprezentacja nieformalna i formalna. W przypadku ostatniego sposobu zostanie on rozdzielony na dwa podtypy reprezentacji grafowej oraz ontologicznej. W obu przypadkach porównywane cechy będą rozważane dla całych rodzin z tych reprezentacji, ponieważ możliwe jest połączenie cech w celu stworzenia najkorzystniejszego rozwiązania. Porównywane cechy są związane z przedmiotem badań nad wzorcami projektowymi, dokładniej nad weryfikacją ich implementacji. Spełnienie cech w porównaniu zostało określone przez autora na podstawie przeprowadzonej wcześniej analizy reprezentacji wzorców projektowych. Wynik analizy przedstawia tabela 3. Stawiając za cel zautomatyzowane analizowanie wzorców projektowych, konieczne jest odrzucenie reprezentacji innych niż formalne, ponieważ wykorzystanie pozostałych to tego celu znacznie skomplikuje cały proces. Pozostając przy dwóch sposobach reprezentacji, grafowej oraz ontologicznej, należy uwzględnić zakres możliwej analizy. W przypadku wykorzystania reprezentacji grafowej zakres analizy ograniczy się jedynie do aspektów statycznych. Będzie to wystarczające to wykrycia i zweryfikowania (w podstawowym zakresie) przynajmniej kilku wzorców, w pozostałych przypadkach wynik może być niejednoznaczny lub błędny, jak przedstawiono w [12] i [13]. Korzyścią tego podejścia, po przekształceniu do macierzy, jest możliwość wykorzystania ogólnodostępnych programów do obliczeń inżynierskich. Rozważając wykorzystanie reprezentacji ontologicznej zakres analizy rozszerza się w stosunku do grafowej. Zasadniczą różnicą jest możliwość opisania w sposób formalny zachowania wzorców. Dzięki czemu analiza może mieć znacznie szerszy zakres i uwzględniać aspekty, którą są niedostępne przy czysto statycznym podejściu. Następną korzyścią, na rzecz ontologii, jest możliwość opisu w sposób formalny dowolnych aspektów związanych z rozpatrywaną dziedziną wiedzy. Niestety wymienione korzyści, mają też negatywny wydźwięk. Wymagają one prawidłowego opisania w jednym ze wspomnianych języków definiowania ontologii, co zdaje się być bardzo wymagającym zadaniem, aby osiągnąć owe korzyści. Porównanie sposobów reprezentacji wzorców projektowych 143 Tab. 3.Wyniki porównania Cecha\Sposób Nieformalne Grafy Ontologie Nie Tak Tak Nie dotyczy Zależna od ilości elementów W najgorszym przypadku nieskończona Możliwość zautomatyzowanego pozyskania danych na podstawie kodu źródłowego Nie Tak Tak Opis aspektów statycznych Tak Tak Tak Opis zachowania Tak Nie Tak Możliwość opisania charakterystycznych cech, np. występujących tylko w jednym wzorcu Tak Nie Tak Możliwość zautomatyzowanego przekształcenia do innej reprezentacji Nie Tak Tak Przydatność do nauki, łatwość czytania przez człowieka Duża Mała Mała Możliwość reprezentacji modelu referencyjnego Tak Tak Tak Możliwość opisu implementacji Nie Tak Tak Formalna standaryzacja podstawowych elementów Nie Tak, teoria grafów Tak, W3C Możliwość rozbudowy semantyki Tak Nie Tak Możliwość formalnego i spójnego łączenia z innymi zasobami wiedzy Nie Nie Tak Możliwość formalnego analizowania komputerowego Złożoność analizowania 6. Podsumowanie W pracy przedstawiono nieformalne oraz formalne sposoby reprezentacji wzorców projektowych. Następnie dokonano teoretycznej analizy, w oparciu o cechy związane z badaniem implementacji wzorców, a wyniki przedstawiono w postaci porównania. Wykonane porównanie nie wskazuje jednoznacznie najlepszego pod każdym względem sposobu reprezentacji wzorców projektowych. Do poznawania ich oraz nauki sprawdza się od wielu lat sposób nieformalny. Stawiając za cel wyszukiwanie, weryfikowanie czy też podpowiadanie wzorców projektowych, Rafał Wojszczyk 144 powinien zostać wykorzystany sposób formalny. W zależności od zakresu tych działań, należy wybrać pomiędzy reprezentacją grafową, gdy wystarczające będą aspekty statyczne, lub ontologiczną w pozostałych przypadkach. Obierając za cel możliwość pełnego analizowania oprogramowania, w tym weryfikację implementacji wzorców projektowych, pretendentem do takiego zastosowania staje się reprezentacja ontologiczna. Dzięki odpowiedniemu zaprojektowaniu ontologii, która uwzględniałaby cechy związane z paradygmatem programowania obiektowego, możliwe jest zastąpienie w ten sposób reprezentacji grafowej, z jednoczesnym dostarczeniem dodatkowych możliwości, jakie daje uniwersalność ontologii. Literatura 1. 2. 3. 4. 5. 6. 7. 8. Alexander C., The origins of pattern theory: the future of the theory, and the generation of a living world, Journal IEEE Software archive, Volume 16 Issue 5, IEEE Computer Society Press Los Alamitos, CA, USA, 1999 Alnusair A., Zhao T., Yan G., Rule-based detection of design patterns in program code, International Journal on Software Tools for Technology Transfer, Springer Berlin Heidelberg, 2013 Bilski J., Model systemu wieloagentowego korzystającego z danych Sieci semantycznej w projekcie Open Natura 2000, Modele inżynierii teleinformatyki, tom 8, X Krajowa Konferencja Studentów i Młodych Pracowników Nauki, 2013 Dae-kyoo Kim , Robert France , Sudipto Ghosh , Eunjee Song, A UMLBased Metamodeling Language to Specify Design Patterns, Patterns,” Proc. Workshop Software Model Eng. (WiSME) with Unified Modeling Language Conf. 2003 Dietrich J., Elgar C., A formal description of design patterns using OWL, Software Engineering Conference, Australian, 2005 Fowler M. i inni, Architektura systemów zarządzania przedsiębiorstwem – Wzorce projektowe, Helion, Gliwice, 2005 Gamma E. i inni, WZORCE PROJEKTOWE Elementy oprogramowania wielokrotnego użytku, Helion, Gliwice, 2010 Grzanek K., Realizacja systemu wyszukiwania wystąpień wzorców projektowych w oprogramowaniu przy zastosowaniu metod analizy statycznej kodu źródłowego, Dysertacja doktorska, Politechnika Częstochowska, Łódź, 2008 Porównanie sposobów reprezentacji wzorców projektowych 9. 10. 11. 12. 13. 14. 15. 16. 17. 145 Kirasić D., Basch D., Ontology-Based Design Pattern Recognition, Knowledge-Based Intelligent Information and Engineering Systems, Zagreb, Croatia, 2008 Pavlic L. i inni, Improving design pattern adoption with Ontology-Based Design Pattern Repository, Informatica An International Journal of Computing and Informatics, Vol 33, Ljubljana, Slovenia, 2009 Rosengard J.M., Ursu M.F., Ontological Representations of Software Patterns, Knowledge-Based Intelligent Information and Engineering Systems, pages 31-37, Springer Berlin Heidelberg, 2004 Singh Rao R., Gupta M., Design Pattern Detection by Sub Graph Isomorphism Technique, International Journal Of Engineering And Computer Science, Volume 2 Issue 11 Page No. 3101-3105, 2013 Singh Rao R., Gupta M., Design Pattern Detection by Greedy Algorithm Using Inexact Graph Matching, International Journal Of Engineering And Computer Science, Volume 2 Issue 10, 2013 Susłow W., Analiza I modelowanie konceptualne w inżynierii systemów oprogramowania – ujęcie humanistyczne, Wydawnictwo Uczelniane Politechniki Koszalińskiej, Koszalin, 2013 Szymczak M., Modelowanie przy pomocy technologii ontologicznych, Praca Magisterska, Uniwersytet im. Adama Mickiewicza w Poznaniu, 2006 Tsantalis N. i inni, Design Pattern Detection Using Similarity Scoring, IEEE Transactions on Software Engineering (Volume:32, Issue: 11), 2006 http://www.w3.org/TR/2004/REC-owl-semantics-20040210/syntax.html