JaGrLib: Cviceni cislo 1

Struktura knihovny JaGrLib

Domovska stranka knihovny JaGrLib. Nektere dokumenty jsou v anglictine, pro potrebu vyuky na MFF jsou tam i cesky psane stranky (jednu z nich prave ctete).

Užitečné návody jsou shromážděny na této stránce.

Automaticky vygenerovana dokumentace je umistena v adresari docs.

Knihovna je umistena v 9 adresarich (knihovnach - "packages" v terminologii Javy):

cz.cuni.jagrlib
cz.cuni.jagrlib.gui
cz.cuni.jagrlib.gui.comp
cz.cuni.jagrlib.iface
cz.cuni.jagrlib.obscure
cz.cuni.jagrlib.piece
cz.cuni.jagrlib.reg
cz.cuni.jagrlib.testing
cz.cuni.jagrlib.worker
cz.cuni.jagrlib.xml
Adresare se zdrojovymi soubory jsou umisteny primo v koreni JaGrLib. Prelozene kody (class soubory) jsou pro vetsi prehlednost ukladany do vedlejsi hierarchie adresaru oznacene "classes" nebo "class".

cz.cuni.jagrlib je hlavni package knihovny. Sem se davaji globalne pouzitelne moduly, datove struktury a hlavni programy (spustitelne tridy). Pozor - nemely by se sem davat modularizovane tridy (potomci Piece)!

cz.cuni.jagrlib.gui obsahuje komponenty pro graficke uzivatelske prostredi (GUI). Ma zatim jednu vnorenou knihovnu.

cz.cuni.jagrlib.reg a cz.cuni.jagrlib.xml obsahuji komponenty nove verze registracni databaze (resp. jeji ukladani do XML).

cz.cuni.jagrlib.iface obsahuje "protokoly" (v Jave interface), pres ktere spolu jednotlive moduly komunikuji. Mely by tu byt pouze abstraktni interface, zadne konkretni implementace!

cz.cuni.jagrlib.piece obsahuje mnozinu vsech verejnych modulu ("modularizovanych komponent", potomku Piece) knihovny. Spravce knihovny sem postupne bude pridavat dalsi moduly vypracovane v minulych letech..

cz.cuni.jagrlib.obscure obsahuje moduly, ktere muzete pouzivat, ale nejsou zverejneny jejich zdrojove soubory. Repository obsahuje zasifrovane verze zdrojaku (nesmeji se prekladat), ale spravne .class soubory.

cz.cuni.jagrlib.testing slouzi k pridavani novych studentskych modulu. Vsechny vase nove moduly pridavejte do tohoto adresare!

cz.cuni.jagrlib.worker obsahuje moduly, ktere ridi praci cele sestavy (implementujici interface Worker).

Vyvojove prostredi

Knihovna je vyvijena pro verzi "Java 2" (tj. JDK >= 1.6). Vsechny dnesni bezne distribuce (JDK i IDE) jsou pro tuto verzi k dispozici (dokonce na nekolika platformach, coz neni u jinych jazyku bezne).

NetBeans IDE je hezke vyvojove prostredi, zcela zdarma. Bezi pod ruznymi operacnimi systemy.

Eclipse IDE je univerzalni modularni IDE vhodne zvlast pro jazyk Java (je zdarma). Na Internetu je mozne najit velke mnozstvi pridavnych modulu (plugins) do tohoto IDE.

Sun JDK. Zdarma se da pouzivat i pro komercni aplikace ("Standard edition"). V soucasne dobe je k dispozici verze 1.6.0_xx (podzim 2008). Pozn: neobsahuje zadne IDE, je to soustava radkovych utilitek. Na SunJDK jsou vetsinou zalozeny i jine vyvojarske nastroje.


Filozofie knihovny

Knihovna je koncipovana maximalne modularne. To znamena, ze jakekoli algoritmy nebo datove struktury, ktere by se daly vicenasobne vyuzit, jsou formalne MODULY. Modul je potomek tridy Piece (viz), ktery muze byt napojen na ostatni moduly a spolupracovat s nimi.

Propojovani modulu se deje pomoci tzv zasuvek (Plug) a kanalu (Channel). Zjednodusene receno: zasuvka je misto, kam lze pripojit jiny modul (nebo moduly), definuje se typ pripojeni (formalne pomoci Javovskeho interface), povinnost pripojit minimalne jeden modul (mandatory), apod.
Kanal je vlastni propojka mezi dvema moduly (resp. mezi jejich dvemi kompatibilnimi zasuvkami). Na obrazku se kresli zasuvky jako male obloucky a kanaly se znazornuji sipkami; casto s pripsanymi Javovskymi interface. Smer sipky udava smer volani metod v Jave (teoreticky mohou byt kanaly tez obousmerne, tj. realizuje se pres ne Javovske volani obema smery, zatim vsak takove kanaly nebyly nikdy pouzity..).

Priklad modulu na kresleni usecek:

Vlastni kresleni usecky v modulu LineBresenham probiha uvnitr metody drawLine(). Vystup (jednotlive pixely usecky) se zapisuje do napojeneho objektu s protokolem BitMask. Kvuli uspore casu i vetsi prehlednosti kodu se v metode drawLine() pouze jednou (na zacatku) vytvori odkaz na vystupni objekt, ten se potom opakovane pouziva. Kostra kreslici rutiny:

public void drawLine ( int x1, int y1, int x2, int y2 )
throws BadInterfaceException {

  BitMask out = (BitMask)getInterface(PL_OUTPUT,IFACE+"BitMask");

  ...

    out.setPixel(x1,y1);
  ...

}

Pouzita metoda getInterface() vyhleda modul pripojeny pres danou zasuvku a navic zkontroluje, zda ma ten spravny typ (zde: zda implementuje interface BitMask).

Knihovna JaGrLib se sklada z jadra obsahujiciho mnozinu potrebnych podpurnych objektu (Piece, Plug, Channel, ..) a zakladni operace pro praci s nimi. Cely zbytek systemu je rozdelen na jednotlive moduly (tj. potomky tridy Piece).

Aby se daly jednotlive moduly testovat, je nutne vytvorit pro ne testovaci programy (hlavni programy) a obalit je mnozstvim jinych (vestavenych) modulu - tj. pripravit prostredi, ve kterem ma novy (testovany) modul pracovat. Priklad - zacleneni modulu LineBresenham do testovaciho programu Main00 (na diagramu neni znazornen cely testovaci program, pouze ta jeho cast, ktera se sklada z modulu):

 Dalsi informace lze najit v návodech nebo kuchařce. Na cvicenich muze byt podan i podrobnejsi ustni vyklad!


[Nasledujici cviceni]  [JaGrLib home-page]  [CGG at MFF UK]

Copyright (c) 2002-2009 Josef Pelikán, last change: $Date: 2013-11-22 23:47:16 +0100 (Fri, 22 Nov 2013) $