UNIVERZITET U BEOGRADU FAKULTET ORGANIZACIONIH NAUKA ZAVRŠNI RAD KREIRANJE VIZUELNIH ALATA NA NETBEANS PLATFORMI Mentor: Student: Prof dr. Vladan Devedžić Damir Kocić 169/06 Beograd, 2010 godine Sadržaj 1. Uvod......................................................................................................................................................3 2. Pregled relevantnih oblasti...................................................................................................................4 2.1 NetBeans platforma......................................................................................................................4 2.2 Nodes API......................................................................................................................................6 2.3 Visual Library API...........................................................................................................................9 2.4 Common Palette..........................................................................................................................11 3. Zahtevi i analiza...................................................................................................................................12 3.1 Scena...........................................................................................................................................12 3.2 Widget-i.......................................................................................................................................13 3.3 Paleta...........................................................................................................................................13 4. Projektovanje......................................................................................................................................14 4.1 GraphScene.................................................................................................................................14 4.2 NeuralNetworkWidget................................................................................................................15 4.3 Palette.........................................................................................................................................17 5. Implementacija....................................................................................................................................19 5.1 Implementacija scene.................................................................................................................19 5.2 Implementacija widget-a.............................................................................................................24 2.2.1. Implementacija provajdera akcija.......................................................................................29 5.3 Implementacija palete.................................................................................................................34 6. Evaluacija.............................................................................................................................................43 7. Zaključak..............................................................................................................................................45 Literatura.....................................................................................................................................................46 2 1. Uvod Osnovni cilj ovog rada je razvoj vizuelnog alata za rad sa neuronskim mrežama, koji će u isto vreme biti intuitivan i u potpunosti ispuniti potrebe korisnika koji se tek upoznaju sa radom sa neuronskim mrežama. Kako se širi oblast primene neuronskih mreža, tako i interesovanje za neuronske mreže raste. Postoji nekoliko alata za rad sa neuronskim mrežama, Encog, Joone, JNNS. Većina ovih alata ima korisnički interfejs koji nije intuitivan, i korisnicima je teško da se naviknu na rad sa tim alatima. Kako bi se prevazišao ovaj problem, razvijen je korisnički interfejs za aplikaciju zasnovanu na „Neuroph“ framework-u, koji je nalik na interfejse aplikacija koje se danas široko koriste. Krajnji cilj je razvoj aplikacije koja će omogućiti kreiranje i rad sa neuronskim mrežama. Ovaj alat razvijen je kao modul aplikacije koja je zasnovana na NetBeans platformi. NetBeans platforma predstavlja okruženje zasnovano na framework-u koji omogućava kreiranje modularne strukture. Razvijeno rešenje ima veliku ulogu u upoznavanju zainteresovanih korisnika, pre svega studenata koji se bave inteligentnim sistemima, sa neuronskim mrežama. Ovaj alat omogućava korisnicima da na jednostavan način kreiraju neuronske mreže, i izvršavaju određene akcije nad njima, i samim tim se upoznaju sa njihovom strukturom i načinom funkcionisanja. U drugom poglavlju dat je pregled oblasti od ključnog značaja za razvoj vizuelnih alata na NetBeans platformi. U trećem poglavlju definisani su zahtevi i izvršena je analiza korisničkih zahteva. Četvrto poglavlje obuhvata projektovanje strukture alata za vizuelizaciju, koja je objašnjena na primerima dijagrama klasa. U petom poglavlju opisana je implementacija strukture koja je opisana u četvrtom poglavlju, na primerima koda. Šesto poglavlje obuhvata evaluaciju razvijenog alata, i poređenje sa sličnim alatima. U poslednjem poglavlju sagledan je rezultat i mogućnosti daljeg razvoja ovog alata. 3 2. Pregled relevantnih oblasti U ovom poglavlju dat je kratak opis NetBeans platforme i pregled ključnih API-a koji omogućavaju kreiranje vizuelnih alata u aplikacijama zasnovanim na NetBeans platformi. 2.1 NetBeans platforma Veličina i složenost desktop aplikacija koje danas koristimo tokom vremena postajala je sve veća. U isto vreme bilo je potrebno obezbediti fleksibilnost aplikacija, kako bi se mogle lako nadograđivati, pa je bilo poželjno podeliti aplikaciju na više nezavisnih blokova, koji bi na kraju činili jednu modularnu arhitekturu, koja bi se mogla lako nadograđivati. Svi blokovi moraju biti nezavisni, a funkcije koje su definisane u javnim interfejsima moraju biti dostupne ostalim blokovima. NetBeans Platforma predstavlja framework koji omogućava kreiranje složenih desktop aplikacija. Ova platforma obezbeđuje napredni korisnički interfejs, koji omogućava programerima da se fokusiraju na razvoj same logike aplikacije, bez potrebe da sami kreiraju pojedinačne elemente korisničkog interfejsa, što značajno ubrzava razvoj jedne ovakve aplikacije. NetBeans platforma, kao i sve aplikacije razvijene pomoću nje, je podeljena na module. Modul predstavlja kolekciju funkcionalno povezanih klasa. Pored klasa, modul sadrži i interfejs pomoću kojieg drugi moduli komuniciraju sa njim bez direktne zavisnosti. Moduli su opisani pomoću manifest fajlova i podataka u XML fajlovima. Modul predstavlja jednostavnu Java arhivu, koja sadrži: • manifest.mf fajl koji sadrži opis modula i veza sa drugim modulima, • layer.xml fajl, koji opisuje šta je sve kreirano u modulu, • funkcionalno povezane klase, • resurse (ikone, fajlovi sa svojstvima...). Osnovne karakteristike NetBeans platforme: • Sistem modula – modularnost omogućava organizovanje koda u potpuno odvojenim modulima, pri čemu svaki modul može koristiti samo klase iz onih modula prema kojima je definisana zavisnost (dependency). Ovakva organizacija aplikacije je ključna za velike aplikacije koje su razvijane u distribuiranom okruženju, kako kod razvoja, tako i kod održavanja. 4 • Upravljanje životnim ciklusom aplikacije – kao što aplikacioni serveri pružaju servise web aplikacijama i povezuju web module, EJB module... tako i NetBeans runtime container ima zadatak da poveže NetBeans module u jednu Swing aplikaciju. • Podrška za plugin-ove – NetBeans platforma omogućava korisnicima da instaliraju dodatke (plugin-ove) u svoje aplikacije preko Update centra, jer se svi plugin-ovi mogu instalirati, deinstalirati, aktivirati i deaktivirati prilikom izvršavanje same aplikacije. • Servisna infrastruktura – NetBeans platforma obezbeđuje infrastrukturu za registrovanje i pozivanje implementacije servisa, i samim tim smanjuje potrebu za direktnom zavisnošću između modula. Ovim se omogućava visoka povezanost aplikacije bez direktnih veza (zavisnosti ) između modula. • Sistem prozora – Složenije desktop aplikacije zahtevaju više od jednog radnog prozora. Gotov sistem prozora NetBeans platforme omogućava minimizaciju, maksimizaciju i premeštanje prozora u samoj aplikaciji. • Standardizovani UI alat – Swing biblioteka komponenti korisničkog interfejsa predstavlja osnovni UI alat i osnovu svake Netbeans aplikacije. Prednost je lako menjanje izgleda same aplikacije, dodavanje internacionalizacije i Java 2D efekata aplikaciji. • Jedinstveni prezentacioni sloj – NetBeans Nodes API obezbeđuje jedinstveni model za prikazivanje podataka, NetBeans Explorer API i Property Sheet API pružaju nekoliko naprednih swing komponenti za prikazivanje podataka u vidu stabla. Neki od tih komponenti su Property Sheet, Paleta, Menadzer plugin-a i Output window. • Integracija Java Help-a – JavaHelp API je sastavni deo NetBeans platforme. Korisnici mogu da pišu help dokumenta za svaki modul posebno, a ovaj API će ih automatski povezati u jedinstveni set Help dokumenata. API (Application Programming Interface) predstavlja interfejs preko kojeg neka aplikacija komunicira sa skupom metoda koje su definisane u samom API-ju. Reč interfejs pokazuje da API živi između najmanje dva različita subjekta, npr. na jednoj strani je unutrašnja struktura aplikacije, a na drugoj strana aplikacija koja je poziva, ili programer koji razvija jednu aplikaciju i njen API, koji sa druge strane koriste programeri u svojim aplikacijama. Programiranje API-a omogućava različitim timovima, koji se ne poznaju i međusobno ne sarađuju, da razvijaju nezavisne projekte koji mogu međusobno da komuniciraju. NetBeans platforma omogućava lako kreiranje, upravljanje, manipulisanje i prikazivanje podataka, korišćenjem Nodes , Data System i FileSystem API-a. 5 Slika 1 – Arhitektura prikaza podataka u NetBeans platform Na slici 1 je prikazana slojevita arhitektura koju NetBeans platforma koristi za prikaz podataka. Sa slike se vidi da je ključni API za prikazivanje podataka na korisničkom interfejsu Nodes API. 2.2 Nodes API Nodes API kontroliše upotrebu i kreiranje nodova, omogućava akcije i cookies i kontroliše predstavljanje podataka u Explorer prozoru. Nodovi su neposredno odgovorni za vizuelnu reprezentaciju i odgovarajuće ponašanje većine objekata u NetBeans-u. Nodovi ne bi trebalo da se koriste za čuvanje podataka, već samo za njihovo prezentovanje. Podaci se obično čuvaju u data objektima ili u drugim skladištenim mehanizmima. Nodovi predstavljaju žive komponente, jer svaka promena će inicirati promenu prikaza na korisničkom interfejsu. Svaki nod poseduje osobine po kojima se razlikuje od ostalih nodova, to su: • Naziv – svaki nod ima svoj naziv • Opis – koji se može prikazati kao tooltip tekst. • Ikona – po kojoj se nodovi vizuelno razlikuju. • Akcije – koje se pozivaju preko popup menija • Deca – svaki nod može imati više dece • Atributi – koji se mogu podešavati preko Property Sheet-a 6 Najčešće korišćeni tipovi nodova su sledeći: • Data nodovi – ovaj tip nodova zasnovan je na data objektima, jednostavan primer predstavlja reprezentacija XML fajla na disku, moguća je njegova izmena, pregledanje i premeštanje. Java klasa koja nasleđuje JFrame bio bi složeniji primer, koji se sastoji od dva stabla, na jednom bi bile predstavljene klase, metode i polja, a na drugom hijerarhija Swing komponenti. • Data folder nodovi – ovaj tip nodova predstavlja kontejner za data nodove, i analogan je java paketima. • Komponente palete – svaka kategorija na paleti predstavlja nod, a elementi svake kategorije predstavljaju decu nodove. • Breakpoint – svaki breakpoint kojim se definiše tačka pauziranja prilikom debug-ovanja aplikacije predstavlja jedan nod, pa je samim tim folder koji sadrži informacije o svim breakpoint-ima nod roditelj. • Nod projekta – predstavlja nod čija deca predstavljaju različite fajlove i akcije nad njima koje su specifične za dati projekat. Osnovna ponašanja nodova su definisana Node klasom. Na slici 2 prikazane su podklase klase Node. Slika 2 - Hijerarhija Node podklasa 7 • AbstractNode klasa obezbeđuje osnovne osobine Node klase, koristi se za instanciranje noda bez potrebe za implementiranjem i proširivanjem Node klase. • FilterNode je zadužen za kreiranje proxy noda koji delegira pozive metoda do originalnog noda. Ova vrsta nodova se koristi kada je potrebno prikazati podatke na više različitih načina. • BeanNode omogućava kreiranje noda od java objekta. BeanNode će pronaći sva svojstva JavaBean objekta i prikazati ih kao svojstva noda pomoću PropertySheet-a. • IndexedNode omogućava uređivanje elemenata po datim indeksima, odnosno indeksiranje elemenata. • DataNode se koristi za reprezentovanje data objekata. Svaki objekat klase Node poseduje objekat Children, koji obezbeđuje kontejner za podnodove. Objekat Children je odgovoran za kreiranje, uređivanje i strukturu nodova dece. Ovaj objekat se prosleđuje u konstruktoru AbstractNode klase. U najvećem broju slučajeva koristi se Children.Keys, međutim ako ne želimo da nod koji kreiramo ima dalje račvanje i podnodove, u konstruktoru se prosleđuje Children.LEAF. Pored njih na raspolaganju su i druge klase: Children.Array – super klasa za sve Children klase, Children.Map<T> – nodovi se sortiraju u mapu, Children.SortedArray – proširuje Children.Array sa Comparator-om, Children.SortedMap<T> proširuje Children.Map<T> sa Comparator-om. Nodovi omogućavaju dodavanje akcija koje su osetljive na trenutno stanje. DataNode predstavlja akcije DataObjecta koji reprezentuje. DataLoader definiše MIME-specifičan folder u layer fajlu sa metodom actionsContext() gde su akcije registrovane. Kod nodova koji ne predstavljaju objekte klase DataObject pomoću metode getActions() u Node klasi defenišu se akcije konekst menija. Sve promene na nodovima mogu se pratiti pomoću PropertyChangeListener-a, kao i NodeListener-a. Pomoću PropertyChangeListener-a mogu se pratiti promene svojstava nodova korišćenjem getPropertySet() metode, a NodeListener se koristi za informisanje o promenama imena noda, ili izmenama na nodu roditelju ili detetu. 8 2.3 Visual Library API NetBeans Visual Library API predstavlja biblioteku za prikazivanje različitih struktura. U osnovi, ova biblioteka je najpogodnija za prikazivanje grafova. Struktura Visual Library API-a predstavljena je stablom, klasa Widget predstavlja koren tog stabla, odnosno superklasu svih grafičkih komponenti. Slika 3. - Primer widget-a Na slici 3. grafički je prikazana struktura neuronske mreže, svaki deo neuronske mreže: sloj neurona, neuron i veza između neurona, predstavljen je klasom Widget. Na slici se vidi da jedan widget može služiti kao kontejner drugim widget-ima, i svaki “Child Widget” ima poziciju koja zavisi od njegovog roditelja. Klasa Widget koristi se i za definisanje granica i pozadine widget-a. Kao i swing kontejneri i widget-i mogu imati layout koji definiše poziciju njihove dece. Widget predstavlja ekvivalent swing klasi JComponent, pa i sve komponente Visual Library API-a predstavljaju pod-klase klase Widget, od kojih su najbitnije, IconNodeWidget, ImageWidget, LabelWidget, ConnectionWidget, LayerWidget, Scene. • IconNodeWidget – Predstavlja kompozitni widget, koji se sastoji od ImageWidget-a i LabelWidget-a. • ImageWidget – Widget koji omogućava prikazivanje slika na sceni. 9 • LabelWidget – Widget koji omogućava prikazivanje teksta na sceni. • ConnectionWidget – Ovaj widget se koristi za prikazivanje linija veza, i definisanje kontrolnih tačaka koji određuju putanju ovih linija. • LayerWidget – Predstavlja transparentni widget koji služi za organizaciju i grupisanje widget-a na sceni. • Scene – Predstavlja koreni element hijerarhije widget-a na sceni, koji je odgovoran za prikaz kompletne renderovane površine. Osnovna svojstva widget-a : • Svaki widget ima svoj okvir, koji je osnovno definisan klasom EmptyBorder i predstavlja prazan okvir. Izgled okvira može se promeniti pozivanjem metode setBorder(). Okvir je predstavljen interfejsom Border, veliki broj klasa implementira ovaj interfejs, pored klase EmptyBorder, tu su još i klase LineBorder, BevelBorder, DashedBorder, ImageBorder, ResizeBorder, RoundedBorder i SwingBorder. ResizeBorder dodaje svakom widget-u mogućnost menjanja veličine. Postoji i klasa CompositeBorder koja omogućava kombinaciju bilo kojih navedenih klasa. Sami okviri se ne kreiraju direktno već preko klase BorderFactory. • Svakom widget-u može se dodeliti određeni layout, koji je odgovoran za raspored dece widget-a . Postoje četiri vrste layout-a, koji se kreiraju od strane LayoutFactory klase, i dodaju se widget-u pozivanjem setLayout() metode. Absolute layout koji dozvoljava widgetima da se pozicioniraju pozivom metode setPrefferedLocation(), bez automatskog raspoređivanja. Flow layout raspoređuje widget-e sekvencijalno horizontalno ili vertikalno. Card Layout prikazuje samo trenutno aktivan widget dok svi ostali imaju veličinu (0,0) pa su praktično nevidljivi. Metodom getActiveCard() određuje se trenutno aktivni widget. Overlay layout omogućava da se svi widgeti poređaju jedan preko drugog. • Ponašanje widget-a uslovljeno je akcijama koje mu sami dodajemo. Ove akcije su definisane interfejsom WidgetAction. Akcije widget-a kreira klasa ActionFactory. Akcijama svakog widget-a upravlja klasa WidgetAction.Chain. Ova klasa prihvata događaje i prosleđuje ih odgovarajućim akcijama. Pozivanjem metoda addAction() i removeAction() WidgetAction.Chain klasa dodaje i briše akcije koje su dostupne nad widget-om. Klasa WidgetAction.Chain grupiše određene akcije u alate, i pozivanjem metode setActiveTool() aktivira samo one akcije koje su definisane postavljenim alatom, npr. na scenu možemo dodati veliki broj akcija, kao što su zumiranje, pomeranje objekata, drag and drop, i druge, ali ako želimo da korisnicima omogućimo samo drag and drop aktiviraćemo alat koji je zadužen za tu akciju, dok će ostale akcije postati nedostupne. 10
Description: