KATONA ÉVA ANA 2.0 ADVANCED NETWORK ANALYSIS

Hasonló dokumentumok
Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Előzmények

Dr. Pétery Kristóf: Word 2003 magyar nyelvű változat

A TÉRINFORMATIKA OKTATÁSA ÉS ALKALMAZÁSI LEHETÕSÉGEI

A TANTÁRGY ADATLAPJA

11. Balra zárt igazítás A bekezdés sorai a bal oldali margóhoz igazodnak. 12. Beillesztés


ETELKA Szolgáltatói Dokumentáció v1.0 RITEK ZRt. 2009

MUNKAANYAG. Angyal Krisztián. Szövegszerkesztés. A követelménymodul megnevezése: Korszerű munkaszervezés

1 Újdonságok a 3D szerkesztő módban

Karbantartás. Az ESZR Karbantartás menüjébentudjuk elvégezni az alábbiakat:

Programozás I. 2. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

PHP5 Új generáció (2. rész)

Üdvözöljük. Solid Edge kezdő lépések 2

JAVA PROGRAMOZÁS 3.ELŐADÁS

Szövegszerkesztés Verzió: 0.051

strings.xml res/values/strings.xml fájlban hozzuk létre a hiányzó string adatforrásainkat A jelenlegi helyett ez álljon: <resources> <string

A SZOFTVERTECHNOLÓGIA ALAPJAI

Operációs rendszerek. A Windows NT felépítése

LÉTESÍTMÉNYGAZDÁLKODÁS. Változáskezelés. Változás Pont Cím Oldal A teljes dokumentáció átírásra került

BEVEZETÉS A SULINET DIGITÁLIS TUDÁSBÁZIS (SDT) HASZNÁLATÁBA

DEBRECENI EGYETEM INFORMATIKAI KAR. Az UML gyakorlati alkalmazásának bemutatása az AutoWorld rendszer tervezésén keresztül

Prezentáció használata

Minden jog fenntartva, beleértve bárminemű sokszorosítás, másolás és közlés jogát is.

Bánsághi Anna 1 of 67

Corel PHOTO-PAINT X5 Maszkolástól nyomtatásig

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.

Az Egálnet Honlapvarázsló használati útmutatója

Grafikus felületek készítése 1.

Szoftverprototípus készítése. Szoftverprototípus készítése. Szoftverprototípus készítése

Újdonságok az ArchiTECH.PC V es verziójában

4. Példa: Másodfokú egyenlet megoldása (program2_1.vi)

és az instanceof operátor

Diplomaterv Portál. Elektronikus szakdolgozat és diplomaterv nyilvántartó és archiváló rendszer. Felhasználói útmutató v11

Feltételes formázás az Excel 2007-ben

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

ArcGIS 8.3 segédlet 6. Dr. Iványi Péter

Karbantartás. Az ESZR Karbantartás menüjébentudjuk elvégezni az alábbiakat:

BAUSFT. Pécsvárad Kft Pécsvárad, Pécsi út 49. Tel/Fax: 72/ ISO-bau. Szigetelés kiválasztó verzió.

DocBook útmutató. Jeszenszky Péter Debreceni Egyetem, Informatikai Kar

ARCHLine.XP Windows. Újdonságok. Felhasználói kézikönyv. ARCHLine.XP 2009 Újdonságok

Jogosultságkezelés felhasználói leírás

TARTÓK STATIKÁJA I. Statikai modell felvétele és megoldása a ConSteel szoftver segítségével (alkalmazási segédlet)

VirtualBox, Debian telepítés

Budapest, oldal

Elektronikus közhiteles nyilvántartások Megvalósítási tanulmány

Helpdesk for ArchiCAD felhasználói kézikönyv


Informatika. Magyar-angol két tanítási nyelvű osztály tanterve. 9. évfolyam

WebSphere Adapters. 6. változat 2. alváltozat. WebSphere Adapter for SAP Software felhasználói kézikönyv 6. változat 2. kiadás

CellCom. Szoftver leírás

Modellalkotás UML-ben

Földfelszín modellezés

Digitális terepmodell modul

Animációk, effektusok

MARC szintaktikai ellenőrző program - MARCEL 1.1 Kocsis Ferenc Völfinger Réka feri@oszk.hu vreka@oszk.hu Országos Széchényi Könyvtár

Adminisztrátori kézikönyv (Ver: )

Szálkezelés. Melyik az a hívás, amelynek megtörténtekor már biztosak lehetünk a deadlock kialakulásában?

Nógrádi PC Suli tanfolyami jegyzete! Kinyomtatni, másolni, sokszorosítani tilos! Kereskedelmi forgalomba nem hozható! TANFOLYAMI JEGYZET

Objektum Orientált Szoftverfejlesztés (jegyzet)

Tevékenységadminisztrációs pillér

TANFOLYAMI AJÁNLATUNK

14.2. OpenGL 3D: Mozgás a modellben

Tanúsítványok használata StarOffice 8 alkalmazásból

1. lecke: Nappali tervezés

Grafikus felületek a programozó szempontjából grafikus elemek absztrakt reprezentációja az egyes elemek tulajdonságait leíró adatstruktúrák.

MODELER FELHASZNÁLÓI KÉZIKÖNYV

Minden jog fenntartva, beleértve bárminemű sokszorosítás, másolás és közlés jogát is.

KID verzióváltás Felhasználói kézikönyv

7. gyakorlat Tervlapok készítése, a terv elektronikus publikálása

PÉLDATÁR BEGYAKORLÓ FELADAT SÍKFESZÜLTSÉGI PÉLDA MEGOLDÁSA VÉGESELEM-MÓDSZERREL

MVC Java EE Java EE Kliensek JavaBeanek Java EE komponensek Web-alkalmazások Fejlesztői környezet. Java Web technológiák

Tartalomjegyzék Általános ismeretek a programról A táblázatok használata Az objektumtípusok áttekintése Részletes leírás Statisztikai jelentés 129

OPTEN Online használati útmutató

Rajzolás PowerPoint 2007 programban

Ismerkedés a Windows Explorer-rel

Mérnöki létesítmények 3D-s modellje

KASZPER Felhasználói dokumentáció

Dr. Pétery Kristóf: Excel 2007 feladatok és megoldások 2.

Nyugat-magyarországi Egyetem Geoinformatikai Kara. Nagy Gábor. Informatika 16. INF16 modul. Az OpenOffice.org

NeoCMS tartalommenedzselő szoftver leírása

Infokommunikáció (PF10IK511L) kérdései

NEPTUN_FDL, META. (Szűrések, dokumentáció) Budapest, 2001

Bevezetés. A WebAccess használatának bemutatása előtt néhány új funkció felsorolása következik:

Dr. Pétery Kristóf: Excel 2003 magyar nyelvű változat

Bánsághi Anna

Sorompó kezelés mérlegműszerrel

Készítette:

AutoCAD MAP DWG mapobject TOPOBASE konvertáló program dokumentáció

Vizuális programozás gyakorlat

SSADM. Az SSADM (Structured System Analysis and Desing Method) egy rendszerelemzési módszertan.

IBM WebSphere Adapters 7. változat 5. alváltozat. IBM WebSphere Adapter for Oracle E-Business Suite felhasználói kézikönyv 7. változat 5.

OBJEKTUMORIENTÁLT TERVEZÉS ESETTANULMÁNYOK. 2.1 A feladat

Alkatrész és munkadíj kedvezmények a DOAS rendszerben

XML sémanyelvek Jeszenszky, Péter

Horgász Napló V Bemutató Verzió. Felhasználói Kézikönyv. Intelligens Fogási Napló Program

Kiegészítő melléklet (elektronikus beszámoló)

CorelCAD 2015 Megjelenítés

PÉLDATÁR BEGYAKORLÓ FELADAT TÉRBELI FELADAT MEGOLDÁSA VÉGESELEM- MÓDSZERREL

Átírás:

KATONA ÉVA ANA 2.0 ADVANCED NETWORK ANALYSIS ÍRTA Katona Éva Elektromágneses Terek Laboratórium 2008. november KONZULENS Dr. Kuczmann Miklós, PhD Egyetemi docens TANULMÁNYOK Széchenyi István Egyetem Műszaki Tudományi Kar Jedlik Ányos Gépész-, Informatikai és Villamosmérnöki Intézet Mérnök Informatikus (BSc) III. évfolyam Villamosmérnöki (BSc) I. évfolyam E-MAIL eva.katona@inbox.com WEB http://maxwell.sze.hu/~vica

TARTALOMJEGYZÉK 1. BEVEZETÉS... 4 2. VÁLTOZÁSOK A PROGRAM STRUKTÚRÁLIS FELÉPÍTÉSÉBEN... 6 2.1. ANACOMPONENTPROTOTYPE CSOMAG... 7 2.2. ANADOCUENT CSOMAG... 8 2.3. ANALYSIS CSOMAG... 8 2.4. DATA CSOMAG...10 2.5. GUI (GRAPHICAL USER INTERFACE) CSOMAG...10 2.6. HELPERS CSOMAG...14 2.7. LOADER CSOMAG...20 2.8. SETTINGS CSOMAG...20 2.9. WORKSHEET CSOMAG...21 2.10. XMLTOOLS CSOMAG...28 3. ÚJRATERVEZÉS (REFACTORING)...29 3.1. KOMPONENS HIERARCHIA...29 3.1.1. ANACOMPONENT...31 3.1.2. NODE...32 3.1.3. CONNECTION...34 3.2. INTERACTION MANAGMENT...35 3.3. TRANSZFORMÁCIÓK...39 4. TERVEZÉSI MINTÁK (DESIGN PATTERNS)...42 4.1. SINGLETON TERVEZÉSI MINTA...42 4.2. REGISTRY PATTERN...43 4.3. MVC (MODEL VIEW CONTROLLER) PATTERN...43-2 -

5. HÁLÓZATOK SZERKESZTÉSE...44 5.1. KOMPONENSEK BESZÚRÁSA, SZELEKCIÓK...44 5.2. VEZETÉKEZÉS, KOMPONENSEK ÖSSZEKÖTÉSE...46 5.3. KOMPONENSEK ÉRTÉKEINEK BEÁLLÍTÁSA...47 6. ANALÍZIS...48 6.1. BESZÚRHATÓ KOMPONENSEK, KARAKTERISZTIKÁK...48 6.1.1. KIRCHHOFF HÁLÓZATOK KOMPONENSEI...48 6.1.2. JELFOLYAM HÁLÓZATOK KOMPONENSEI...55 6.2. CSOMÓPONTI POTENCIÁLOK MÓDSZERE...58 6.2.1. CSOMÓPONTI POTENCIÁLOK, MÁTRIX EGYENLET...55 6.2.2. EGY PÉLDA MEGOLDÁSÁNAK LEVEZETÉSE...61 7. KONKLÚZIÓ...68 BIBLIOGRÁFIA...69-3 -

1. BEVEZETÉS A dolgozat témája egy JAVA nyelven írt hálózatanalízis program, ami rendelkezik egy felhasználóbarát grafikus felülettel (1.1. ÁBRA), és megvalósítja az összes olyan megszokott kényelmi funkciót, amit a többi hálózatanalizáló program is implementál. Továbbá az objektum-orientált fejlesztésnek köszönhetően kihasználja a JAVA nyelv optimális tulajdonságait, a forráskód logikailag szétkülönítethető csomagokra és osztályokra bontását, valamint a nyelv hordozhatóságából és architektúrafüggetlenségéből következő platformfüggetlenséget, amiből következően a program az összes, a JAVA által támogatott operációs rendszer alatt használható. Az programot ANA (Advanced Network Analysis) névre kereszteltem. Fejlesztését 2008. februárjában kezdtem. Azóta a grafikus felhasználói felület jelentős része és a legtöbb kényelmi funkció implementálása, továbbá az első analízis pont, a csomóponti potenciálok, a komponenseken eső feszültségek és folyó áramok, valamint a teljesítményeik számításának integrálása is befejeződött. 1.1. ÁBRA: A PROGRAM GRAFIKUS FELHASZNÁLÓI FELÜLETE A dolgozat a 2008 tavaszi ANA 1.0 Advanced Network Analysis című dolgozat folytatása. Az előző dolgozat témája a program felhasználói, szakterületi, funkcionális és nem funkcionális követelményeinek feltárása, valamint a felhasználói felület alapjainak bemutatása. A nyár folyamán a program struktúrája újratervezés és átalakítás alá került. A régi megvalósítás helyett számos területen optimálisabb megoldások implentációja történt. Változások történtek a komponensek felépítésében, - 4 -

megjelenítésében és tárolásában, valamint a transzformációkban és a szerkesztőfelület eseménykezelésben. A dolgozat első fele ezeket az újításokat tárja fel, majd a második rész az első integrált analízis pontok alapjait és implementációját. - 5 -

2. VÁLTOZÁSOK A PROGRAM STRUKTÚRÁLIS FELÉPÍTÉSÉBEN Egy nagyobb program elkészítésekor törekedni kell az áttekinthető, könnyen módosítható, és továbbfejleszthető kód előállítására. Ennek eléréséez a programokat megfelelően tagolni kell. A tagolásnak már az objektumorientált modellezés és a programtervezés szintjén meg kell nyilvánulnia. Az összetartozó osztályokat ezért a modell és a működés szerint csomagokba kell szervezni. A csomagokból képezhető egy magas szintű zárt egység. Minden csomag egy önálló névteret vezet be, amelyben egyedivé teszi a benne található osztályok szerkezetét. A csomag alkalmas a hozzáférési kategóriák kezelésére, és a csomagszintű hozzáférési kategóriával definiált osztályok, interfészek, metódusok csak a csomagon belül lesznek elérhetőek. A csomagoknak nyelvi szinten a fordítási egységek (osztályok, interfészek) adnak konkrét tartalmat. Egy csomaghoz tartozó fordítási egységben található a csomag forráskódja. Ez a csomagszerkezet hierarchikus hasonlóan az állományok könyvtárszerkezetben való elhelyezéséhez így a csomagok között logikai alá-fölérendeltségi viszony is előfordulhat. Ekkor alcsomagnak nevezzük a csomagban található másik csomagot. Minden csomag teszőleges számú alcsomagot tartalmazhat [13]. Az újratervezés során megváltoztak az osztályok feladatai és felépítése. Számos osztály új vagy kiegészített tevékenységet lát el az előző verzióban szereplő osztályokhoz képest, továbbá számos nagyobb terjedelmű osztály, kisebb logikailag elkülöníthető osztályok létrehozását indokolta. Ennek köszönhetően megváltoztak az osztályok közötti logikai összefüggések és kapcsolatok, ezért a forráskód csomagokra tagolását is át kellett alakítani új, a jelenlegi logikai egységeknek megfelelő modulok hierarchiájára [8]. Ez a fejezet az új csomag-hierarchia fő egységeit írja le (2.1. ÁBRA) a program UML osztály - diagramjainak illusztrálásával, továbbá az osztályok által megvalósított legfontosabb funciókat foglalja össze [10-16], [19]. 2.1. ÁBRA: AZ ÚJ CSOMAG-HIERARCHIA FŐ EGYSÉGEI - 6 -

2.1. ANACOMPONENTPROTOTYPE CSOMAG A programban a hálózatok minden komponenséhez tartozik egy prototípus, ami tartalmazza a komponens tulajdonságait (pl. azonosító, név, ikon), beállításait (pl. típus, érték, láthatóság) és a felhasználói felületen megjelnő grafikus képét. Különböző XML (Extensible Markup Language) fájlok tárolják a komponensek ezen attribútumait. A fejlesztés során az XML használat mellett szólt, hogy az XML dokumentumok közönséges szöveges állományok, melyek könnyen, akár egy egyszerű szövegszerkesztővel is szerkeszthetőek, tovbábbá a programon belül önálló, külön egységket alkotnak (LÁSD 2.4. FEJEZET), így az általuk tárolt adatok könnyen, a programba való belenyúlás nélkül módosíthatóak. Ez azért volt fontos, mert a komponenseken kívül, a grafikus felhasználói felület főbb komponensei (menük, eszköztárak) is XML fájlokban tárolt attribútomok alapján épülnek fel (LÁSD 2.6. FEJEZET), így például egy új menüpont hozzáaadása a program módosítása nélkül megtehető. Az XML fájlokban tárolt prototípus listát és a prototípusokat az ANAComponentPrototypeStore osztály validálja, és ha megfelelő a szintaktika akkor az alábbi osztályok meghívásával betölti a komponenseket. A tulajdonságok, beállítások és a grafiuks képek az ANAComponentPrototype osztály metódusain keresztül érhetők el. Minden prototípus objektum ezen osztály egy példánya. Az objektumok felépítése az alábbi osztályok segítségével történik. Az ANAComponentShapeFactory osztály felépíti a megadott alakzatokból a komponensek grafikus képeit. Az ANAComponentPrototypeFactory osztály pedig felépíti az egyes prototípusok objektumait, beállítja a tulajdonságaikat és az attribútumaikat az XML fájlokban tároltak alapján, valamint az előző osztály hívásával létrehozza és tárolja a grafikus objektumaikat (2.1.1. ÁBRA). 2.1.1. ÁBRA: ANACOMPONENTPROTOTYPE CSOMAG - 7 -

2.2. ANADOCUMENT CSOMAG A program által szerkesztett hálózatok mentését segítik elő az ANADocument csomag osztályai (2.2.1. ÁBRA). A hálózatok tulajdonságait XML file-ok tárolják és egy zip file-ba lesz kimenthető a szerkesztett hálózat *.ana file kiterjesztéssel. Ez a csomag és az általa megvalósítandó funkciók jelenleg is fejlesztés alatt állnak. 2.2.1. ÁBRA: ANADOCUMENT CSOMAG 2.3. ANALYSIS CSOMAG Az analízis funkciók implementálása a garfikus felhasználói felület újratervezése és átalakítása után kezdődött idén szeptemberben. Az Analysis csomag tárolja az analízis pontok logikailag különválasztható csomagjait és ezekben a megvalósító osztályokat (2.3.1. ÁBRA). A hierarchiában a gyökérkönyvtárban található az Analysis absztrakt osztály, mely szülő osztálya az összes analízis osztálynak. A leszármaztatott osztályok ezen osztály start() és finish() metódusát definiálják felül, melyek segítségével a program tudja, hogy mely tevékenységeket kell megvalósítania egy analízis pont elindításakor és befejezésekor. Az objektumorientált fejlesztés során az öröklődés és a többalakúság nagyon fontos szempont. Az ősosztályok összehangolják a leszármazott osztályok működését, vagyis definiálják a közös műveleteket és megadják a szabványos üzenetek prototípusait. Ezzel egy egységben kezelhető osztályhierarchiát adhatnak a programozó kezébe. Az osztályhierarchia legtetején szereplő osztályok szerepe általában az, hogy a leszármazottaknak előírja, hogy milyen üzenetekre válaszoljon. A leszármazott osztályokból létrehozott példányok a keresd az őst elvnek megfelelően megkeresik a hozzájuk tartozó üzenet végrehajtásának definícióját. Sokszor azonban az osztályszerkezet tetején álló osztály a fejlesztendő feladatból kifolyólag csak egy elméleti fogalom, vagyis csak teljesen általános fogalmakkal írható le, azaz hiányoznak belőle a konkrétumok. Az ilyen általános érvényű osztályokhoz absztrakt osztályokat definiálunk. Az absztrakt osztályokban és csakis itt megadhatunk absztrakt metódusokat is. Az absztrakt metódusok törzs nélküli metódus deklarációk. A metódusokat a leszármazott osztályokban kötelező felüldefiniálni, megvalósítani [13]. - 8 -

Minden analízis pont alcsomagában található egy Interactions alcsomag (2.3.1. ÁBRA), mely a szerkesztői felület adott analízis ponthoz tartozó interakcióit valósítja meg (pl. csomóponti potenciáloknál a különböző értékek megjelenítése a dialógus ablakban, a felületen történő egérkattintás esemény célja (komponens vagy vezeték) alapján). Az interakciókezelés az egyik legfontosabb újratervezett modul, melyet a 3.2. FEJEZET egy külön tárgyal. 2.3.1. ÁBRA: ANALYSIS CSOMAG - 9 -

2.4. DATA CSOMAG A Data csomag (2.4.1. ÁBRA) logikailag szétválasztható alcsomagokra osztottan tárolja a programhoz tartozó XML file-okat. 2.4.1. ÁBRA: A DATA CSOMAG ÉS ALCSOMAGJAI Az ANAComponents alcsomag tartalmazza a komponensek XML filejainak szintaktikai deklarációját tartalmazó ANAComponent.dtd file-t, valamint a komponens listát tartalmazó ANAComponents.xml file-t, valamint a jelfolyam-, és a Kirchhoff típusú hálózatok komponenseinek XML file-jait tartalmazó Network és System alcsomagokat. A *.dtd kiterjesztésű fájlok dokumentum típus deklarációk (Document Type Declarations). Egy XML dokumentum elején megadható, hogy az adott dokumentum milyen típusú, vagyis milyen elemek és entity-hivatkozások szerepelhetnek benne. A DTD-kben vannak felsorolva az elemtípusok, megadva az elemek tartalmára vonatkozó szabályokat; és az entity deklarációk. A DTD segítségével a dokumentum ellenőrizhető, a benne leírt szabályokat egy XML editor segítségével be lehet tartatni. A Dialogs alcsomag a dialógus ablakok adatait és összetevőit tartalmazó XML file-okat tárolja, az Images mappa a menük és az eszköztárak felépítéséhez szükséges képeket, végül az utolsó két alcsomag a Menus és ToolBars alcsomag a menük és eszköztárak metaadatait tartalmazza. 2.5. GUI (GRAPHICAL USER INTERFACE) CSOMAG A GUI csomag tárolja a grafikus felhasználói felület objektumait logikailag szétválasztható alcsomagokra osztottan (2.5.1. ÁBRA). - 10 -

2.5.1. ÁBRA: A GUI CSOMAG ALCSOMAGJAI A Dialogs alcsomag tárolja a különböző dialógus ablakok objektumait (2.5.2. ÁBRA). Az objektumokat az XML file-okból a DialogFactory osztály (LÁSD 2.6 FEJEZET) építi fel. 2.5.2. ÁBRA: GUI/DIALOGS CSOMAG A MainWindow alcsomag (2.5.3. ÁBRA) a program főablakának legnagyobb összetevőit tartalmazza, az objektumok draggeléséhez (egérrel való vonszolás) szükséges felületet megvalósító ComponentDragPane osztályt, a program betöltésekor megjelelenő felületet megvalósító WelcomePanel osztályt, valamint a főablak összes objektumát példányosító MainWindow osztályt. - 11 -

2.5.3. ÁBRA: GUI/MAINWINDOW CSOMAG A Menus (2.5.4. ÁBRA), ToolBars (2.5.5. ÁBRA) és StatusBar (2.5.6. ÁBRA) alcsomagok tárolják a program különböző eszköztárait, menüit és az állapotsort megvalósító osztályokat, végül a Worksheets alcsomag (2.5.7. ÁBRA) tárolja a programon belül futó összes munkalap kezelését irányító Worksheets osztályt. - 12 -

2.5.4. ÁBRA: GUI/MENUS CSOMAG 2.5.5. ÁBRA: GUI/TOOLBARS CSOMAG 2.5.6. ÁBRA: GUI/STATUSBAR CSOMAG - 13 -

2.5.7. ÁBRA: GUI/WORKSHEETS CSOMAG 2.6. HELPERS CSOMAG A program számos segéd osztályt használ futás közben. Ezek az osztályok találhatóak a Helpers csomagban az adott funkcióknak megfelelően logikailag elkülönítetten (2.6.1. ÁBRA). 2.6.1. ÁBRA: HELPERS CSOMAG ALCOMAGJAI Az Analysis (2.6.2. ÁBRA) alcsomag reprezentálja az analízis pontok futtatásához szükséges segédfunkciókat. Itt találhatóak meg a matematikai segédeszközök, a mátrixműveleteket (szorzás, konjugált képzés, inverzmátrix képzés, Gauss Jordan elimináció) végző osztályok, valamint a hálózat felépítését és a csomópontok létrehozását segítő LogicalNode és NodeModel osztályok. - 14 -

2.6.2. ÁBRA: HELPERS/ANALYSIS CSOMAG A GUI csomag tartalmazza az Adapters (2.6.3. ÁBRA), Factories (2.6.4. ÁBRA), Graphics (2.6.5. ÁBRA) és Wrappers (2.6.6. ÁBRA) alcsomagokat. Az Adapters (2.6.3. ÁBRA) alcsomag tartalmazza többek között azt az osztályt, amely a Swing eseménykezelését segíti oly módon, hogy számos listener interface-t implementál üres metódusokkal. A specifikus eseménykezelő osztályok pedig ezen metódusok közül definiálják felül azokat amelyeket az adott feladat megkíván. - 15 -

2.6.3. ÁBRA: HELPERS/GUI/ADAPTERS CSOMAG - 16 -

A Wrappers (2.6.4. ÁBRA) alcsomag osztályai a grafikus felület elemeinek (menü, eszköztár) nyújtanak egy olyan interfészt, amelyen keresztül azok egyszerűen, futási időben módosíthatóak. 2.6.4. ÁBRA: HELPERS/GUI/WRAPPERS CSOMAG A Factories alcsomag (2.6.5. ÁBRA) azokat az osztályokat tartalmazza, melyek az XML fájlokból felépítik a fájloknak megfelelő objektumokat, végül a Graphics csomag (2.6.6. ÁBRA) pár interfészt és absztrakt osztályt foglal egységbe, amik a különböző grafikus funkciókat (pl. komponensek transzformációi) segítik. 2.6.5. ÁBRA: HELPERS/GUI/FACTORIES CSOMAG - 17 -

2.6.6. ÁBRA: HELPERS/GUI/GRAPHICS CSOMAG - 18 -

Végül a Utilities alcsomag (2.6.7. ÁBRA) tárolja a program egyéb segítő funkcióit végző osztályokat, mint például az időkezelést végző DateTimeUtils osztályt, a képek betöltését egyszerűen lehetővé tevő ImageLoader osztályt, vagy az ObjectConverter osztályt, ami a beállítások XML file-ban való tárolásához szu kséges objektumokat alakítja sztringgé, illetve betöltéskor a sztringeket objektumokká. 2.6.6. ÁBRA: HELPERS/UTILITIES CSOMAG Az OSDetector osztály az operációs rendszer detektálásában vállal szerepet, konstansai között vannak generikus és specifikált operációs rendszer típust jelölő konstansok (pl. OS_MAC_OS, OS_MAC_OS_X), amelyek úgy vannak definiálva, hogy a specifikus konstansok a generikus konstansokkal bitszintű és művelettel összekapcsolva true értéket adnak. A ResourceLoader osztály bármilyen erőforrás betöltésére képes a JAR (Java ARchieve) file-ból. A JAR fájl egy olyan ZIP fájl, amely a java osztályokat és a hozzájuk tartozó metaadatokat tartalmazza. - 19 -

A program nagyobb és fontosabb objektumainak referenciáit a Refs osztály szolgáltatja, ami segíti ezen objektumok egyszerűbb elérését. 2.7. LOADER CSOMAG A Loader csomag (2.7.1. ÁBRA) tartalmazza a program futtatható osztályát, az ANA osztályt, ami betölti és megjeleníti a grafikus felhasználói interfészt, majd betölti a hálózati elemeket. 2.7.1. ÁBRA: LOADER CSOMAG 2.8. SETTINGS CSOMAG A Settings csomag (2.8.1. ÁBRA) a beállítások eltárolásáért és betöltéséért felelős osztályokat tartalmazza, az alapbeállítások a Settings osztály statikus Setting típusú defaultsettings tömbjében tároltak szerint jönnek létre. A program beállításait az ANASettings osztály kezeli, amely a SetingsManager osztály leszármazottja. Az ANASettings azzal a funkcióval bővíti ki a SettingsManager osztályt, hogy képes betölteni és elmenteni a beállításokat egy XML fájlba. Minden megnyitott munkalaphoz külön SettingsManager példány tartozik, amely a munkalap aktiválásakor szinkronizálja az ANASettings objektumot. Ha a program egy beállítását megváltoztatjuk, pl. menüből vagy egy eszköztárból, akkor az adott beállítás először az ANASettings objektumban változik meg, majd a GUI szinkronizálja az aktív munkalap SettingsManager példányát is. A Settings osztály tárolja a program alapértelmezett beállításait ( Setting objektumait). Minden egyes Setting objektum tartalmaz egy flaget arra vonatkozóan, hogy őt kell-e szinkronizálni, vagy sem. - 20 -

2.8.1. ÁBRA: SETTINGS CSOMAG 2.9. WORKSHEET CSOMAG A Worksheet csomag (2.9.1. ÁBRA) a munkalapok összetevőit és felépítését megvalósító osztályokat tartalmazza, továbbá egy munkalap minden elemét összefogó Worksheet osztályt. 2.9.1. ÁBRA: WORKSHEET CSOMAG CSOMAGJAI - 21 -

Ezen belül a Graph csomag (2.9.2. ÁBRA) tartalmazza a hálózat gráfjának felépítését reprezentáló Graph osztályt és tartalmazza a Components alcsomagot (2.9.2. ÁBRA), amiben a gráf komponenseit reprezentáló osztályok találhatóak. 2.9.2. ÁBRA: WORKSHEET/GRAPH CSOMAG - 22 -

Az abstract GraphComponent osztály tárolja a gráfkomponensek alaptípúsait, melyek a következők lehetnek: PIN (a komponensek kivezetései), COMPONENTGRAPHIC (a komponensek grafiuks képei), ANACOMPONENT (komponensek elemeit összefogó osztály), JUNCTION (csomópont), CONNECTION (vezeték) és LABEL (címke). A GraphComponent osztály leszármazottja a InteractiveComponent osztály, mely tartalmazza a komponsek egymással szembeni prioritásait egy hálózatban, továbbá az ebből származó objektumok képesek a grafikus felületen interakciókat kiváltani (LÁSD 3.2. FEJEZET). Ebből az osztályból származik le a GraphicalComponent osztály mely a transzformálhatóságot és a megjeleníthetőséget biztosítja. A csomag tartalmazza továbbá a Subscription osztályt, melynek segítségével az interaktív komponensek feliratkozhatnak interakciók kiváltására. A Subscription osztály példányai prioritásokkal rendelkeznek és tárolják a megfelelő komponensek geometriai tulajdonságait, amelyek az interakciók detektálására szolgálnak. A komponens hierarchia felépítése és a Subscription -ök is az újratervezett modulok közé tartoznak, így ezekkel a témákkal is külön fejezetek foglalkoznak. A Graph csomagon belül, az ANAComponent csomagban (2.9.4. ÁBRA) találhatóak meg a program komponenseit reprezentáló osztályok (LÁSD 3.1.1. FEJEZET). A Connection (2.9.3. ÁBRA) és a Node (2.9.5. ÁBRA) csomagokban pedig a vezetékeket és a csomópontokat előállító és kezelő osztályok (LÁSD 3.1.2. ÉS 3.1.3. FEJEZET). 2.9.3. ÁBRA: WORKSHEET/GRAPH/COMPONENTS/CONNECTION CSOMAG - 23 -

2.9.4. ÁBRA: WORKSHEET/GRAPH/COMPONENTS/ANACOMPONENT CSOMAG - 24 -

2.9.5. ÁBRA: WORKSHEET/GRAPH/COMPONENTS/NODE CSOMAG A Graphics csomag (2.9.6. ÁBRA) tárolja a DrawArea osztályt, ami a rajzfelületet és a rajzfelületre való rajzolást biztosítja, a Grid osztályt, mely megvalósítja a rácsfelület kirajzolását a szerkesztő felületre, valamint az egérmutató illesztését a rácspontokra, végül a Transformer osztályt, mely a komponensek transzformációit hajtja végre. - 25 -

2.9.6. ÁBRA: WORKSHEET/GRAPHICS CSOMAG A GUI csomag (2.9.7. ÁBRA) osztályai megvalósítják a szerkesztő felület egérrel való görgethetőségét, valamint a Logger ablakot, ami a program számos tevékenységét jeleníti meg. 2.9.7. ÁBRA: WORKSHEET/GUI CSOMAG - 26 -

Az Interactions csomag (2.9.8. ÁBRA) tartalmazza a szerkesztő felület interakció kezelését segítő osztályokat. Ezek az osztályok is az újratervezett részekhez tartoznak, így a részleteit külön fejezet tárgyalja. 2.9.8. ÁBRA: WORKSHEET/INTERACTIONS CSOMAG - 27 -

2.10. XMLTOOLS CSOMAG Az XMLTools csomag (2.10.1. ÁBRA) az XML file-ok betöltésének feladatát látja el. A Java API (Application Programming Interface) alapértelmezett XML feldolgozóját ( Parser ) használja. Ez a Parser validáló típusú, azaz csak olyan XML file-ok feldolgozását végzi el, amelyek tökéletesen megfelelnek az XML szabványainak és az opcionálisan jelenlévő doctype deklarációnak. A használt XML file-okhoz saját készítésű doctype deklarációk tartoznak, melyek a JAR-ban találhatóak. Ezek eléréséhez saját entitás feloldó (entity resolver) osztály létezik ( DTDResolver ). A Parser osztály az XML file-okat a TreeFactory DefaultHandler osztályt felüldefiniáló osztály segítségével dolgozza fel, és egy Tag és PCData objektumokból álló fát készít, amely reprezentálja az XML dokumentumot. Ez a fa később a Child ősosztály és ennek leszármazottjainak ( Tag, PCData ) metódusaival könnyen bejárható. A Tag osztály egy XML taget, a PCData osztály pedig szöveges adatot reprezentál [9]. 2.10.1. ÁBRA: XMLTOOLS CSOMAG - 28 -

3. ÚJRATERVEZÉS (REFACTORING) Az újratervezés (refactoring) az a folyamat, amelnyek során úgy változtatunk meg egy szoftverrendszert, hogy nem változik meg a kód viselkedése, de javul annak belső szerkezete. Ez a kód kitisztításának olyan fegyelmezett módja, ami minimálisra csökkenti a programhibák bekerülésének esélyét. Lényegében az újratervezés során egy már megírt kód felépítését javítjuk. Újratervezés nélkül előbb-utóbb elkerülhetetlenül romlik a program szerkezete. Ahogy a programozók megváltoztatják a kódot rövid távú célok megvalósítása érdekében, vagy a kód szerkezetének teljes átalakítása nélkül -, a kód elveszíti eredeti szerkezetét, és nehezebb lesz felismerni azt a kódot olvasva. Az újratervezés a kód rendbetétele: azért végezzük, hogy eltávolítsunk olyan darabokat, amelyek nem megfelelő helyen vannak. A kód szerkezetének összekuszálódása halmozott károkkal jár: minél nehezebb átlátni a kód szerkezetét, annál nehezebb módosítani a programot, és annál gyorsabban romlik. A rendszeres újratervezés segít formában tartani a kódot. Az újratervezésnél megváltozik a munkafolyamatok egyensúlya: tervezést nem kizárólag a munka elején végzünk, hanem a fejlesztés során folyamatosan. A rendszer építése során jövünk rá, hogyan javítható a szerkezet, és ez olyan felépítéshez vezet, ami a további fejlesztés során is megfelelő marad [18 (3.1. ábra)]. 3.1. ÁBRA: MARTIN FOWLER: REFACTORING Az alábbi fejezet tárgyalja az újratervezett csomagokat. 3.1. KOMPONENS - HIERARCHIA A komponens - hierarchia újratervezését azért kellett véghez vinni, mert a program korábbi verziója kezdetleges megoldásokat használt, melyek sok később felmerülő igényt technikailag nem tudtak kielégíteni. Az új komponens hierarchia egy konzisztensen felépített jól struktúrált model (3.1.1. ÁBRA). - 29 -

3.1.1. ÁBRA: A KOMPONENSEK HIERARCHIÁJA A GraphComponent osztály minden hálózatban szereplő komponens vagy egyéb objektum ősosztálya. Egyedi azonosítókért felelős, valamint különböző objektumokat megkülönböztető típus konstansokat tartalmazza. Ebből az osztályból közvetlenül származik az ANAComponent osztály. Az InteractiveComponent osztály a GraphComponent osztály leszármazottja. Deklarálja a különböző objektumokinterakciós prioritását és lehetővé teszi ennek lekérdezését, valamint tárol egy Subscription osztály referenciát (lásd később). Összefoglalva tehát a leszármazottjai számára lehetővé teszi interakciók kiváltását. - 30 -

A GraphicalComponent osztály az InteractiveComponent osztályból származik és egyetlen absztrakt metódust vezet be, amely egy Transformable interfészt (LÁSD 3.3. FEJEZET) megvalósító osztály elérését teszi lehetővé. Az ebből az osztályból származó osztályok megjelennek a rajzfelületen. 3.1.1. ANACOMPONENT A Graph csomagon belüli ANAComponent csomag (3.1.1.1. ÁBRA) fűzi össze azokat a logikailag szorosan összetartozó osztályokat, amelyekből a hálózatokban felhasználható komponensek állnak. 3.1.1.1. ÁBRA: AZ ANACOMPONENT CSOMAG ÉS OSZTÁLYAI - 31 -

Az ANAComponent osztály az alapvető adatokat és refernciákat tartalmazza egy adott komponensről. A teljesség igénye nélkül, az attribútumokat, a prototípus referenciáját, a cimke tartalmát és a komponens grafikáit ( ANAComponentGraphic ). Az ANAComponentGraphic osztály megvalósítja a Transformable interface-t, amely olyan metódusokat deklarál, amely a célobjektum geometriai transzformációit teszi lehetővé. Mivel egy komponens több grafikát is tartalmazhat (pl. vezérelt források primer és szekunder kapuja) és minden grafikához egyedi alkatrészlábak ( Pin objektumok, LÁSD 3.1.2. FEJEZET) tartoznak, ezért az alkatrészlábak nyilvántartását is ez az osztály végzi. A komponens grafikák alakzatokból ( ANAComponentShape ) épülnek fel, amelyek szintén megvalósítják a Transformable interface-t. Az ANAComponentGraphic osztály ezeket az alakzatokat együttesen transzformálja. Az ANAComponentShape a TransformableShape osztályból származik, ami lehetővé teszi a JAVA alap alakzatainak egyszerű saját középponthoz és egy tetszőleges ponthoz viszonyított transzformációját (LÁSD 3.3 FEJEZET). Minden ANAComponentShape rendelkezik egyéni kitöltőszínnel, vonalszínnel, vonalvastagsággal, stb. A komponensek attribútumait az ANAComponentAttribute osztály kezeli. Az attribútumok beállítása és lekérdezése ezen az osztályon keresztül történik. Minden attribútum rendelkezik típussal, azonosítóval, névvel és értékkel. 3.1.2. NODE A Node csomagban (2.9.5. ÁBRA) azok az osztályok találhatóak amelyek logikialag és/vagy grafikailag csomópontokat reprezentálnak a gráfban vagy a rajzfelületen. Minden ilyen osztály őse a Node osztály, amely egy logikai csomópontot reprezentál, nyilvántartja a hozzá kapcsolódó vezetékeket, valamint definiál három absztrakt metódust, amelyek lehetővé teszik a csomópont rajzfelületen lévő pozíciójának lekérdezését, valamint lekérdezését is, hogy a csomópont megfelelően van-e csatlakoztatva a hálózathoz. A Node osztály a GraphicalComponent leszármazottja, tehát képes interakciókat kiváltani és elkérhető tőle egy transzformálható komponens. A Junction osztály a Node osztály leszármazottja és a vezetékek közti töréspontokat reprezentálja. A Pin absztrakt osztály szintén a Node osztály leszármazottja és a komponensek lábait reprezentálja. Azért absztrakt, mert ez az osztály még nem definiálja a pin alakját, ami lehet pontszerű, vagy egyéb alakzat ( NodePoint és NodeShape ). A Pin osztály polaritással és egyéni címkével rendelkezik, valamint két belső, belőle származó osztályt definiál (3.1.2.1. ÁBRA). - 32 -

3.1.2.1. ÁBRA: A PIN OSZTÁLY ÉS BELSŐ OSZTÁLYAI A Pin.Point belső osztály egy pontszerű alkatrészlábat ír le, amelynek a Transformable adattagja egy NodePoint objektum. A NodePoint objektum egy olyan TransformablePoint (LÁSD 3.3. FEJEZET) leszármazott, amelyen ha transzformációkat hajtunk végre, invalidálja a csomóponthoz kapcsolódó vezetékek grafikus leírását. Erre azért van szükség, mert a programban a rajzolás gyorsításának érdekében gyorsítótárazza a vezetékek alakzatát, amelyet érvényteleníti kell, ha a vezeték valamely végpontját például eltoljuk a rajzfelületen. A Pin.Circle belső osztály egy kör alakú alkatrészlábat reprezentál, amire a jelfolyam hálózatok bizonyos komponenseinél van szükség (pl. összegző -, és szorzócsomópont) amelyekhez előre nem meghatározott számú vezeték kapcsolódhat (3.1.2.2. ÁBRA). Ennek a Transformable adattagja a NodeShape, amely az előbb leírt okok miatt szükséges. 3.1.2.2. ÁBRA: PÉLDA AZ ÖSSZEGZŐCSOMÓPONTOKRA - 33 -

3.1.3. CONNECTION A Connection osztály (3.1.3.1. ÁBRA) egy vezetéket reprezentál amely két Node objektum között teremt logikai kapcsolatot. Ez az osztály felelős a vezeték grafikájának legenerálásáért is, továbbá tárolja a végpontjainak referenciáját és egyéb metódusokat is biztosít, mint például a getsnappingpoint() metódus, amelyet egy koordináta paraméter megadásával meghívva, visszakapjuk azt a pontot, amely eleme a vezeték egyenesének és legközelebb esik az argumentum koordinátájához. Ez a metódus például a vezetékezéshez szükséges, amikor egy vezetéket szeretnénk bekötni egy másik vezetékbe. 3.1.3.1. ÁBRA: A PIN OSZTÁLY ÉS BELSŐ OSZTÁLYAI - 34 -

3.2. INTERACTION MANAGMENT A második programrész amit teljesen újra kellett tervezni, az a szerkesztőfelület interakcióinak kezelése. Erre azért volt szükség, mert rengeteg komplex interakciót kell kezelni (mint például komponensek kijelölése, draggelése, törlése, összekötése) és a korábbi megközelítés ezt nem tette lehetővé. Moduláris, könnyen bővíthető interakciók kezelésére volt szükség. E gondolkodásmd eredménye lett az Interaction (3.2.1. ÁBRA), az InteractionManager (3.2.2. ÁBRA), az InteractionMode (3.2.4. ÁBRA), az InteractionConstants (3.2.5. ÁBRA), az InteractionTrigger és a Subscription osztály, valamint az Implementations csomag (3.2.6. ÁBRA) és osztályai, melyek az Interaction osztályt kiterjesztve, interakciókat implementálnak. 3.2.1. ÁBRA: AZ INTERACTION OSZTÁLY Az InteractionManager osztály (3.2.2. ÁBRA) kezeli a Swing (a JAVA egy alapértelmezett osztálykönyvtára, amely tartalmazza a grafikus felhasználói felület előállítására alkalmas osztályokat, melyekkel gazdag grafikai megoldások és interaktivitások veihetők a fejlesztendő alkalmazásokba) nyers eseményeit, valamint a komponensek által beregisztrált Subscription osztályt. Egy-egy nyers esemény érkezésekor végigiterál a beregisztrált Subscription osztályokon, és megállapítja, hogy az adott eseményre bekövetkező interakciót melyik Subscription által képviselt objektumon kell végrehajtani. Minden Subscription biztosít az InteractionManager számára egy geometriai alakzatot. Egérkattintás esetén például, az InteractionManager megvizsgálja, hogy a kattintás koordinátája mely Subscription -ök geometriai formájába esik bele. Ha több ilyen is van, akkor a Subscription -ök prioritása (LÁSD INTERACTIVECOMPONENT, 3.1. FEJEZET) dönti el, hogy melyik Subscription továbbítódik az Interaction felé. - 35 -

3.2.1. ÁBRA: AZ INTERACTIONMANAGER OSZTÁLY A cél Subscripton megahatározása után a nyers esemény és egyéb aktuális változók értéke (például interakciós mód (3.2.4. ÁBRA), vagy triggerek) alapján az InteractionManager összeállít egy bitvektort, ami a végrehajtandó interakciók kiválasztásához szükséges. Ezután az InteractionManager végigiterál a berigisztrált Interaction objektumokon, és megnézi ( matches() metódus segítségével), hogy azok előredefiniált szignatúrája illik-e az előbb felépített bitvektorra. Amennyiben igen, akkor az aktuális szignatúrát, a nyers eseményt, valamint a cél Subscription -t átadva meghívja az Interaction osztály excecute() metódusát. Egy konkrét interakció implementációja a következő módon történik. Egy új osztályt létrehozva az Interaction osztályt kell leszármaztatni és a konstruktorban az Interaction osztály metódusainak segítségével meg kell határozni az interakciók futtatásához szükséges feltételeket. - 36 -

Egy interakció akkor futhat le, ha minden szükséges feltétel teljesül ( addnecessaryconditions() metódus) és legalább egy elégséges feltétel is teljesül ( addsufficientconditions() metódus) valamint a szükséges kizáró feltételek ( addnecessaryexclusiveconditions() metódus) közül legalább egy nem teljesül és végül az elégséges kizáró feltételek ( addsufficientexclusiveconditions() metódus) közül egyik sem teljesül (3.2.1. ÁBRA). Az interakció által végrehajtandó feladatokat az excecute() metódus felüldefiniálásával deklarálhatjuk. Egy konkrét példa a programból: public ClickSelect() { addnecessarycondition(event_mouse_click); addnecessarycondition(mouse_button_left); addnecessarycondition(mode_click_selection); addsufficientexclusivecondition(destination_empty); } 3.2.3. ÁBRA: EGY INTERAKCIÓ PÉLDÁJA A fenti példa (3.2.3. ÁBRA ) a komponensek kijelölésére szolgáló interakció feltételeit állítja be, melyek a következők: szükséges feltétel: egér kattintás esemény szükséges feltétel: az esemény a bal gombbal történjen szükséges feltétel: az aktuális interakciós mód legyen CLICK_SELECTION kizáró elégséges feltétel: a kattintás üres terülteten történik A fenti példa alapján jól látható, hogy a különböző feltételek azonsításához konstansokat definiál a program, ezek tárolására szolgál az InteractionConstants (3.2.5. ÁBRA) osztály. Bizonyos interakciók csak akkor hajtódhatnak végre, ha az InteractionManager a megfelelő interakciós módban van. Ezek reprezentálására szolgál az InteractionMode enum osztály (3.2.4. ÁBRA). Ez a megoldás lehetővé teszi az interakciók kategorizálását (pl. kijelölés, vezetékezés, analízis). 3.2.4. ÁBRA: INTERACTIONMODE ENUM OSZTÁLY - 37 -

3.2.4. ÁBRA: INTERACTIONCONSTANTS KONSTANSAI Léteznek olyan interakciók is, amelyek kiváltásához összetett eseménysorozat bekövetkezése szükséges (3.2.6. ÁBRA). Ennek lehetővé tételére szükséges az InteractionTriggers enum osztály. Az előkészítő esemény beállítja az adott triggert, majd a kiváltó esemény a trigger jelenléte esetén kiváltja az interakciót magát. 3.2.6. ÁBRA: IMPLEMENTATIONS CSOMAG ÉS OSZTÁLYAI - 38 -

3.3. TRANSZFORMÁCIÓK Az előző implementáció során kiderült, hogy a JAVA alaposztályai ( AffineTransform ) nem tesznek lehetővé közvetlen módon tetszőleges pont körül végzett transzformációkat és az egymás után lévő transzformációk sorrendje nem konzisztens. Azaz, ha például forgatás után végzünk eltolást, akkor az eltolás az eredeti koordináta-rendszer szerint történik. Ez a működés természetesen nem hibás, csak a program elképzelt struktrújába nem illett bele. Ezért történt az alábbi osztályok létrehozása, melyek a Transformable interface (3.3.1. ÁBRA) és azt ezt implementáló TransformablePoint és TransformableShape osztályok. 3.3.1. ÁBRA: TRANSFORMABLE INTERFACE Az interface rögzíti a transzformációs metódust, például forgatás ( rotate() ), tükrözés ( flip() ), valamint tartalmaz pár ezekhez kapcsolódó konstanst is. - 39 -

A TransformablePoint osztály (3.3.2. ÁBRA) egy szabadon transzformálható pontot reprezentál, mely a JAVA beépített Point2D.Double osztályából származik és természetesen megvalósítja a Transformable interface-t. Működése a következő. Egy TransformablePoint objektum öt fontos adatot tárol egyszerre, az eredeti pont és eltolás koordinátáját, a valaha végzett összes transzformáció összesített mátrixát, valamint az ennek megfelelő gyorsítótárazott aktuális pozíciót és eltolást. 3.3.2. ÁBRA: TRANSFORMABLEPOINT OSZTÁLY - 40 -

A TransformablePoint osztályból származik a TransformableShape osztály (3.3.3. ÁBRA), ami ennél fogva szintén megvalósítja a Transformable interface-t. Működése annyiban egészíti ki a TransformablePoint osztályt, hogy eltárol egy eredeti és egy aktuális alakzatot is. 3.3.3. ÁBRA: TRANSFORMABLESHAPE OSZTÁLY - 41 -

4. TERVEZÉSI MINTÁK (DESIGN PATTERNS) Az optimális fejlesztés érdekében a program felhasznál számos tervezési mintát (design pattern), melyek gyakran felmerülő problémák megoldására szolgáltatnak jól bevált, széles körben alkalmazott megoldásokat [17]. 4.1. SINGLETON TERVEZÉSI MINTA A Singleton tervezési minta olyan objektumok létrehozását teszik lehetővé, melyek az egész programon belül egyetlen-egy példányban léteznek. A programon belül ilyen például a MainWindow, az ANASettings (4.1.1. ÁBRA) és az ANAComponentPrototypeStore osztályok. 4.1.1. ÁBRA: ANASETTINGS OSZTÁLY Ennek a mintának többféle megoldása létezik. A program az ún. privátkonstruktoros implementációt használja (4.1.2. ÁBRA), melynek lényege, hogy az egyetlen objektumot az osztályban lévő statikus metóduson keresztül érhetjük el, melyet egy statikus adattag tárol. Az egyetlen objektum létrehozása, a statikus metódus első hívásakor történik a privát konstruktoron keresztül, mely által így az osztály kívűlről nem példányosítható. // SINGLETON DESIGN PATTERN STUFF private static class SingletonHolder { private final static ANASettings instance = new ANASettings(); } public static ANASettings getinstance() { return SingletonHolder.instance; } 4.1.2. ÁBRA: ANASETTINGS SINGLETON DESIGN PATERN - 42 -

4.2. REGISTRY PATTERN Ez a tervezési minta részben magába foglalhatja a Singleton tervezési mintát is, hiszen bizonyos esetekben a Registry tervezési mintának pont az a szerepe, hogy egy az egész programon belül elérhető beállítás jegyzéket biztosítson. A beállítás jegyzékben írhatóak és lekérdezhetőek az adatok. A programban példa erre a pattern-re az ANASettings osztály, mely biztosítja a beállítás jegyzéket és megvalósítja a Singleton tervezési mintát. További Registry objektumokat használ a program a munkalapok lokális tulajdonságainak tárolására. Ezek nyilvánvalóan nem Singleton osztályok. 4.3. MVC (MODEL VIEW CONTROLLER) PATTERN Az MVC minta az adatmodel, a felhasználói interface, illetve a program logika elszeparálásában nyújt segítséget. Ennek megvalósítása a programon belül a Swing használatával teljesül, illetve egy magasabb absztrakciós szintet képvisel a felhasználói interface elemeinek betöltése XML file-okból. - 43 -

5. HÁLÓZATOK SZERKESZTÉSE A következő fejezet a hálózatok szerkesztését mutatja be a program segítségével. A programban szerkeszthetők jelfolyam-, és Kirchhoff - típusú hálózatok egyaránt. A program indítása után választható ki egy dialógus ablakban, hogy milyen típusú munkalapot szeretnénk létrehozni. 5.1. KOMPONENSEK BESZÚRÁSA, SZELEKCIÓK A munkalap megnyitása után a komponenseket beszúrhatjuk menüből és eszköztárból is. Mindkét munkalapon a komponensek típusai a munkalap típusától függően dinamikusan változnak a menüben és az eszköztárban is (5.1.1. ÁBRA, 5.1.2. ÁBRA). 5.1.1. ÁBRA: KIRCHHOFF - TÍPUSÚ HÁLÓZAT KOMPONENSEK BESZÚRÁSA MENÜBŐL 5.1.2. ÁBRA: JELFOLYAM - HÁLÓZAT KOMPONENSEK BESZÚRÁSA MENÜBŐL Az eszköztárból való beszúrás draggeléssel (egérrel való vonszolás) történik. Egér kattintás után a beszúrandó komponens képén az eszköztáron, a komponens képe megjelenik az eszköztár felett és az egér segítségével húzható le a szerkesztő felületre (5.1.3. ÁBRA). Ha az alt billentyűt nyomva tartjuk a komponens draggelése alatt, akkor a komponens nem fog illeszkedni a grid rácspontokhoz, ha nem, akkor automatikusan illeszkedik a komponens kivezetése az elengedéshez számított legközelebbi grid rácsponthoz. - 44 -

5.1.3. ÁBRA: KOMPONENS DRAGGELÉSE MENÜBŐL A program alapvetően három logikai módot tartalmaz, a kijelölés ( SELECTING ), a vezetékezés ( WIRING ) és az analízis ( ANALYZING ) módokat. Az alapértelmezett mód a kijelölés mód. Egy komponens kijelölhető egy szimpla bal egér klikkeléssel. Több komponenst lépésről - lépésre a ctrl billentyű nyomvatartása közben jelölhetünk ki, továbbá az összes komponenst az egér bal gombjának nyomvatartása és húzása közben keletkező téglalap segítségével jelölhetünk ki (5.1.4. ÁBRA). 5.1.4. ÁBRA: AZ EGÉSZ HÁLÓZAT KIJELÖLÉSE Továbbá ha egy komponens, egy vezeték, egy csomópont, vagy egy pin fölé visszük az egér kurzort, akkor a megfelelő komponens körül megjelenik egy vörös, szagatott vonalú kijelölés, amíg az egér fölötte tartózkodik (5.1.5. ÁBRA). 5.1.5. ÁBRA: PILLANATNYI KIJELÖLÉS AZ EGÉRREL - 45 -

5.2. VEZETÉKEZÉS, KOMPONENSEK ÖSSZEKÖTÉSE Ha befejeztük a komponensek elhelyezését a szerkesztő felületen, akkor a komponensek vezetékkel való összekötése következik. Ezt két helyről tehetjük meg, vagy bekapcsoljuk az eszköztáron szereplő vezetékezés gombot, így wiring módba jutunk a programon belül, vagy a hálózaton belül egy komponens lábára kattintva instant wiring módba kerülünk. 5.2.1. ÁBRA: VEZETÉKEZÉS A két opció között az alapvető különbség, hogy míg wiring módban bárhonnan indíthatunk vezetékezést, addig instant wiring módban csak a komponensek pinjeiből, továbbá csomópontokból indíthatunk. Továbbá míg a wiring mód kikapcsolása az eszköztáron ismételt kattintással történik és futása alatt az összes többi szerkesztő opció tiltott, addig az instant wiring mód a vezetékezés befejeztével, vagy a rajzfelületen való kattintással automatikusan kikapcsol. Az egérmutató alatt vörös, szaggatott vonallal kiemelődnek azok a területek, amelyekből vezeték indítható (5.2.1. ÁBRA). Ha először kattintunk a kiindulásként szánt pontra, szaggatott vonalként megjelenik a vezeték a kurzor és a kezdőpont között. Második kattintással tehetjük le a vezetéket a kívánt helyre (szintén vörös, szaggatott), vagy létrehozhatunk egy töréspontot a kattintás helyén, amely új kiindulópontként is funkcinálhat a továbbiakban. A vezetékezés más programokkal ellentétben nem csak függőleges és vízszintes irányban történhet, hanem bármelyik irányba rajzolható vezeték. - 46 -

A szerkesztő felületen opcionálisan bekapcsolható az egér kurzor pozícióját követő két nagy egymást keresztező szaggatott vonal, melyek keresztmetszete, az egér aktuális pozíciója (5.2.1. ÁBRA). 5.3. KOMPONENSEK ÉRTÉKEINEK BEÁLLÍTÁSA A vezetékezés befejezése után következik a komponensek értékeinek beállítása. Ezt egy pop-up ablakban tehetjük meg, amely a megfelelő komponens képén való dupla bal kattintás után jelenik meg a szerkesztő felület felett (5.3.1. ÁBRA). 5.3.1. ÁBRA: EGY KOMPONENS ÉRTÉKÉNEK BEÁLLÍTÁSA Minden komponens rendelkezik alapértelmezett értékkel, amit az ANAComponentAttribute osztály tárol. Az alapértelmezett érték megváltoztatása után az új értéket eltárolja az ANAComponentAttribute és ezután már a megváltoztatott értéket láthatjuk a dialógusablakban. Az értékek beállítása után a kiválasztott analízis pontra kattintva az analízis mód automatikusan elindul. - 47 -

6. ANALÍZIS A következő fejezet bemutatja a hálózatokba integrálható komponenseket, továbbá az első implementált analízis csomagot, és ennek alapjait, melynek segítségével Kirchhoff típusú hálózatokban kiszámolhatók a csomóponti potenciálok, a komponenseken folyó áramok és a rajtuk eső feszültségek, továbbá az egyes komponensek teljesítményei is. 6.1. BESZÚRHATÓ KOMPONENSEK, KARAKTERISZTIKÁK 6.1.1. KIRCHHOFF TÍPUSÚ HÁLÓZATOK KOMPONENSEI A koncentrált paraméterű hálózatok generátort, ellenállást, induktivitást, kapacitást és ágak közötti csatolást tartalmaznak. Ahhoz, hogy a hálózatban áramok folyjanak, feszültségek lépjenek fel az szükséges, hogy a hálózatban egy, vagy több energiaforrás legyen [2]. A FESZÜLTSÉGFORRÁS olyan kétpólus (6.1.1.1. ÁBRA), amelynek feszültsége az ismert u s = u s (t) (6.1.1-1) forrásfeszültség, az ÁRAMFORRÁS pedig olyan kétpólus (6.1.1.1. amelynek árama az ismert ÁBRA), i s = i s (t) (6.1.1-2) forrásáram, tehát karakterisztikájuk: u = u s (6.1.1-3) és i = i s. (6.1.1-4) A források által (a hálózat többi részéből) felvett teljesítmény (itt u és i referenciairánya azonos) ill. p = u s i (6.1.1-5) p = i s u (6.1.1-6) lehet pozitív is és negatív is, a források vagy fogyasztanak vagy termelnek, ezek aktív komponensek [4]. - 48 -

A RÖVIDZÁR olyan kétpólus, amelynek feszültsége nulla, a SZAKADÁS pedig olyan kétpólus, amelynek árama nulla, karakterisztikájuk: rövidzár: 6.1.1.1. ÁBRA: FESZÜLTSÉG-, ÉS ÁRAMFORRÁS KÉPE A PROGRAMBAN u = 0, (6.1.1-7) szakadás: i = 0. (6.1.1-8) A rövidzár és a szakadás a feszültség-, és áramforrások elfajuló esetei. A rövidzár tekinthető speciális feszültségforrásnak (u s = 0), vagy spaciális ellenállásnak (R = 0). A szakadás tekinthető spaeciális áramforrásnak(i s = 0) vagy speciális ellenállásnak (G = 0). Így a programban, ha rövidzárat vagy szakadást szeretnénk a hálózatba integrálni, akkor ezt egy u s = 0 V értékű feszültségforrásal vagy egy i s = 0 A értékű áramforrással tehetjük meg. A rövidzár és a szakadás által felvett teljesítmény ezek passzív és ezen belül nonenergikus kétpólusok. p = 0, (6.1.1-9) A lineáris ELLENÁLLÁS olyan kétpólus (6.1.1.2. ÁBRA), amelynek feszültsége és árama arányos (Ohm törvénye): vagy u = Ri, (6.1.1-10) i = Gu, (6.10.1-11) ahol R az ellenállás rezisztanciája, G pedig a konduktanciája, és G = 1 R. (6.10.1-12) - 49 -

A lineáris ellenállás által felvett teljesítmény p = Ri 2 (6.1.1-13) vagy p = Gu 2, (6.1.1-14) a felvett teljesítmény pozitív, ha R > 0, vagyis a (pozitív) ellenállás mindig fogyasztó, tehát passzív kétpólus [4]. 6.1.1.2. ÁBRA: ELLENÁLLÁS KÉPE A PROGRAMBAN Elemi komponensek összekapcsolásával egyszerű kétpólusokhoz juthatunk. A két legfontosabb a FESZÜLTSÉGGENERÁTOR vagy THÉVENIN - GENERÁTOR (6.1.1.3. ÁBRA), amelynek karakterisztikája u = Ri + u s (6.1.1-15) és az ÁRAMGENERÁTOR vagy NORTON GENERÁTOR (6.1.1.4. ÁBRA), amelynek karakterisztikája i = Gu + i s. (6.1.1-16) 6.1.1.3. ÁBRA: THÉVENIN - GENERÁTOR KÉPE A PROGRAMBAN 6.1.1.4. ÁBRA: NORTON - GENERÁTOR KÉPE A PROGRAMBAN - 50 -

Az 1: n áttételű IDEÁLIS TRANSZFORMÁTOR (IT) két csatolt lineáris rezisztív kétpólus, amelynek egyik karakterisztikája u 1 = nu 2, (6.1.1-17) i 2 = ni 1. (6.1.1-18) Az n áttétel lehet pozitív vagy negatív. Az IT (6.1.1.5. ÁBRA) passzív, sőt nonenergikus komponens, ugyanis az IT által a hálózatból felvett teljesítény p = u 1 i 1 + u 2 i 2 = (nu 2 )i 1 + u 2 ( ni 1 ) = 0. (6.1.1-19) 6.1.1.5. ÁBRA: IDEÁLIS TRANSZFORMÁTOR KÉPE A PROGRAMBAN A VEZÉRELT FORRÁSOK olyan csatolt kétpólusok, amelyek egyik kapujának (primer vagy szekunder) feszültsége vagy árama meghatározza a másik kapu (primer vagy szekunder) feszültségét vagy áramát. A FESZÜLTSÉGVEZÉRELT FESZÜLTSÉGFORRÁS (6.1.1.6. ÁBRA) jellemzője a µ feszültségforrási tényező. Ennek karakterisztikája i 1 = 0, (6.1.1-20) u 2 = µu 1. (6.1.1-21) 6.1.1.6. ÁBRA: FESZÜLTSÉGVEZÉRELT FESZÜLTSÉGFORRÁS KÉPE A PROGRAMBAN - 51 -

A FESZÜLTSÉGVEZÉRELT ÁRAMFORRÁS (6.1.1.7. ÁBRA) jellemzője a g átviteli konduktancia. Ennek karakterisztikája i 1 = 0, (6.1.1-22) i 2 = gu 1. (6.1.1-23) 6.1.1.7. ÁBRA: FESZÜLTSÉGVEZÉRELT ÁRAMFORRÁS KÉPE A PROGRAMBAN Az ÁRAMVEZÉRELT FESZÜLTSÉGFORRÁS (6.1.1.8. ÁBRA) átviteli rezisztancia. Ennek karakterisztikája jellemzője az r u 1 = 0, (6.1.1-24) u 2 = ri 1. (6.1.1-25) 6.1.1.8. ÁBRA: ÁRAMVEZÉRELT FESZÜLTSÉGFORRÁS KÉPE A PROGRAMBAN Az ÁRAMVEZÉRELT ÁRAMFORRÁS (6.1.1.9. ÁBRA) jellemzője az α áramerősítési tényező. Ennek karakterisztikája u 1 = 0, (6.1.1-26) i 2 = αi 1. (6.1.1-27) 6.1.1.9. ÁBRA: ÁRAMVEZÉRELT ÁRAMFORRÁS KÉPE A PROGRAMBAN - 52 -

A vezérelt források aktív komponensek. A µ, g, r és α vezérlési paraméterek pozitív vagy negatív állandók, invariáns esetben az idő függvényei [3]. A vezérelt forrás (FF, FÁ, ÁF, ÁÁ) által felvett teljesítmény p = u 1 i 1 + u 2 i 2 = µu 1 i 2, gu 1 u 2, ri 1 i 2, αi 1 u 2. (6.1.1-28) Az IDEÁLIS (MŰVELETI) ERŐSÍTŐ (6.1.1.10. ÁBRA) a feszültségvezérelt feszültségforrás határesete végtelen feszültségerősítés esetén. Az ideális erősítő egyetlen karakterisztikája Az ideális erősítő aktív komponens. u 1 = 0, (6.1.1-29) i 1 = 0. (6.1.1-30) 6.1.1.10. ÁBRA: AZ IDEÁLIS ERŐSÍTŐ KÉPE A PROGRAMBAN A GIRÁTOR (6.1.1.11. ÁBRA) két karakterisztikája u 1 = ri 2, u 2 = ri 1 ; (6.1.1-31) vagy i 1 = gu 2, i 2 = gu 1 ; (6.1.1-32) ahol r a girációs rezisztancia, g a girációs konduktancia és g = 1 r. (6.1.1-33) A girátor nonenergikus, tehát a hálózatból felvett teljesítménye azonosan nulla. 6.1.1.11. ÁBRA: AZ IDEÁLIS ERŐSÍTŐ KÉPE A PROGRAMBAN - 53 -

A lineáris invariáns KONDENZÁTOR egy olyan kétpólus (6.1.1.12. ÁBRA), amelynek karakterisztikája azaz i C = C u C, (6.1.1-34) i C (t) = C du C (t) dt ahol C a kondenzátor időben állandó kapacitása., (6.1.1-35) A lineáris invariáns TEKERCS egy olyan kétpólus (6.1.1.13. ÁBRA), amelynek karakterisztikája azaz u L = L i L, (6.1.1-36) u L (t) = L di L (t) dt ahol L a tekercs időben állandó induktivitása., (6.1.1-37) A lineáris invariáns kondenzátor, ill. tekercs által felvett teljesítmény p C = u C i C = Cu C u C = d dt p L = u L i L = L i L i L = d dt 1 2 Cu 2 C 1 2 Li 2 L, (6.1.1-38). (6.1.1-39) 6.1.1.12. ÁBRA: A KONDENZÁTOR KÉPE A PROGRAMBAN 6.1.1.13. ÁBRA: A TEKERCS KÉPE A PROGRAMBAN

6.1.2. JELFOLYAM HÁLÓZATOK KOMPONENSEI Egy hálózat komponensek összekapcsolásából áll. Minden kompoenensnek (hálózati elemnek) egy vagy több bemenete és egy vagy több kimenete lehet. A bemenet(ek) és a kimenet(ek) közti kapcsolatot a komponens karakterisztikája adja meg, ami egy függvénykapcsolat a komponens bemeneti változója (változói) és kimeneti változója (változói) között, pl. megadja a kimeneti változót a bemeneti változó függvényében. A hálózat bemenetére a gerjesztést kapcsoljuk, kimenetén pedig a választ várjuk [1]. A programban a jelfolyam hálózatokba a következő jellegzetetes komponensek integrálhatók. A FORRÁS (6.1.2.1. ÁBRA) a hálózat bemenetét, gerjesztését reprezentálja, egyetlen változója az folytonos idejű jel, illetve diszkrét idejű jel, bemenete nincs. s = s(t) (6.1.2-1) s = s[k] (6.1.2-2) A NYELŐ (6.1.2.2. ÁBRA) a hálózat kimenetét, válaszát reprezentálja, bemeneti változója a keresett folytonos idejű jel, illetve diszkrét idejű jel, kimenete nincs. 6.1.2.1. ÁBRA: A FORRÁS KÉPE A PROGRAMBAN y = y(t) (6.1.2-3) y = y[k] (6.1.2-4) 6.1.2.2. ÁBRA: A NYELŐ KÉPE A PROGRAMBAN - 55 -

Az ÖSSZEGZŐCSOMÓPONT (6.1.2.3. ÁBRA) kimenetén a bemenetére érkező jelek összessége jelenik meg, azaz vagy y(t) = s i (t), (6.1.2-5) i y[k] = s i [k]. (6.1.2-6) Tetszőleges számú bemenete lehet és egyetlen kimenete van. Az összegzőcsomópontoknál tehát összekapcsolási kényszer áll fenn, melynek teljesülni kell. i A LINEÁRIS ERŐSÍTŐ (6.1.2.4. ÁBRA) olyan lineáris komponens, amelynek karakterisztikája vagy 6.1.2.3. ÁBRA: AZ ÖSSZEGZŐCSOMÓPONT KÉPE A PROGRAMBAN y(t) = Ks(t), (6.1.2-7) y[k] = Ks[k], (6.1.2-8) ahol K egy időtől független konstans (erősítés), tehát az erősítő invariáns elem. Ha K <1, akkor csillapításról beszélünk. Ha K az idő ismert függvénye (K(t) vagy K[k]), akkor variáns erősítőről van szó. 6.1.2.4. ÁBRA: AZ ERŐSÍTŐ KÉPE A PROGRAMBAN A KÉSLELTETŐ (6.1.2.5. ÁBRA) olyan diszkrét idejű hálózati elem, amely a bemenetére érkező diszkrét idejű jelet egy ütemmel késlelteti, de a kieneti jel és a bementi jel értéke megyegyezik. Ez memóriával bíró, ún. dinamikus elem. - 56 -

6.1.2.5. ÁBRA: AZ KÉSLELTETŐ KÉPE A PROGRAMBAN Az INTEGRÁTOR (6.1.2.6. ÁBRA) olyan folytonos idejű hálózati elem, amelynek kimenetén a bemenetén érkező folytonos idejű jel integrálja jelenik meg. Az integrátor a folytonos idejű hálózatok dinamikus eleme. 6.1.2.6. ÁBRA: AZ INTEGRÁTOR KÉPE A PROGRAMBAN Az NEMLINEÁRIS ERŐSÍTŐ (6.1.2.7. ÁBRA) olyan komponens, melynek karakterisztikája nemlineáris, bemenete és kimenete között az η = φ{ξ} (6.1.2-9) kapcsolat áll fenn, ahol ξ a nemlineáris erősítő bemeneti jele, η pedig a kimeneti jele, φ{ } pedig egy nemlineáris függvénykapcsolat. 6.1.2.7. ÁBRA: AZ NEMLINEÁRIS ERŐSÍTŐ KÉPE A PROGRAMBAN A SZORZÓCSOMÓPONT (6.1.2.8. ÁBRA) kimenetén a bemenetére érkező jelek szorzata jelenik meg, y(t) = s i (t) (6.1.2-10) vagy y[k] = s i [k]. (6.1.2-11) i i - 57 -