JaGrLib: Cviceni cislo 1

Organizace

Doporucuji zucastnit se alespon uvodniho cviceni, kde dostanete mnozstvi informaci a muzete se ihned zeptat na pripadne nejasnosti! Ucast na dalsich cvicenich je nepovinna, ale doporucovana. Casto se tam budou probirat (formou strucne prednasky) klicove myslenky a principy knihovny JaGrLib.

Cviceni se kona kazdych 14 dnu, v ELABu je na tu dobu rezervovano 90 minut. Po pripadnem uvodnim vykladu je zbytek cviceni vyhrazen na individualni konzultace, predvadeni zapoctovych uloh, apod.

Pokud se chcete zucastnit konkretniho cviceni a nemuzete prijit v obvyklou dobu, podivejte se na muj rozvrh a najdete si tam ekvivalent.

Zapocet v Jave

Preferovana forma zapoctu je vypracovat 2 ulohy (moduly) do JaGrLibu. Jedna uloha (seznamovaci) muze byt i velmi jednoducha, druha by mela mit alespon obtiznost C. Seznam uloh je k nahlednuti zde.

Na strance cviceni z pocitacove grafiky jsou aktualni informace o cvicenich. Aby si mnoho studentu nevybiralo stejne ulohy, davam omezeni na maximalne 5 studentu resicich jednu ulohu. Pokud vas napadne nejaky dalsi zajimavy ukol, ktery neni na WWW, rad ho s vami proberu. Zamailujte mi na Josef.Pelikan@mff.cuni.cz nebo se mi ozvete primo na cvicenich.

Odevzdavani zapoctovych uloh: nejlepsi je predvest mi je primo na cvicenich nebo v konzultacnich hodinach v ELABu. Jinak za mnou musite prijit do kancelare na Male Strane a prinest s sebou vase zdrojaky (staci ty, ktere jste sami napsali/modifikovali).

Jen nerad prijimam ulohy mailem: urcite musite vzit jenom vami napsane/modifikovane zdrojaky, zazipovat je (ZIP, gzip, apod) a prilozit podrobny navod, zvlast, pokud je potreba s programy delat neco nestandardniho (v aktualnim adresari musi byt nejake datove soubory apod.). Pamatujte, ze maily si stahuji modemem za tarify Ceskeho Telecomu! A nemuzete predpokladat, ze mam nejake presne specifikovane vyvojove prostredi (napr. jBuilder 7). Musi to jit spustit i pod cistym JDK 1.4.x!

Alternativy

Jen v nejnutnejsich pripadech (zaklady Javy se nemuzete naucit apod.) povoluji delat zapocet v Pascalu nebo C++. Predem vsak upozornuji, ze alternativni zapocty nejsou z me strany zadnym zpusobem podporovany! Sami se musite postarat o to, aby jste meli nainstalovano prislusne vyvojove prostredi, pri odevzdavani uloh mi musite prinest (NE POSILAT MAILEM) binarni soubory spustitelne na cistych Windows (2000/XP).

Temata: zde neplati seznam uloh pro JaGrLib. Muzete si nekde najit stare seznamy uloh pro Turbo-Pascal a podle toho si vybrat. Na Novellskem serveru by ty starsi veci mely byt v adresari "...\VYUKA\PELIKAN".


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). Kopie (mirror) nekterych dulezitych komponent je umistena na Novellskem svazku "...\VYUKA\PELIKAN\JaGrLib".

Knihovna je v neustalem (pomalem :D) vyvoji, takze se snadno muze stat, ze narazite na nejake nesrovnalosti/chyby. V takovem pripade velmi pomuzete me i svym kolegum, kdyz mne budete co nejdrive informovat. Nevadi mi, kdyz to bude plany poplach, horsi by bylo, kdyby nejaka chyba byla zbytecne cely semestr neopravena a spousta vasich kolegu by s tim mela potize..

Zdrojaky jsou komentovany systemem javadoc. To znamena, ze tam najdete spoustu komentaru, ve kterych se popisuje semantika jednotlivych trid, metod, promennych, parametru apod. Je treba, aby vsichni prispevatele dodrzovali tyto zvyklosti a komentovali take sve nove soubory. Zvlast bych chtel pripomenout, ze je treba (pro prip. pozdejsi kontakt) uvest v kazdem souboru svoje jmeno a e-mail - v komentari @author.

Automaticky vygenerovana dokumentace je umistena v adresari docs.

Knihovna je umistena v 4 hlavnich adresarich (packages v terminologii Javy):

cz.cuni.jagrlib
cz.cuni.jagrlib.gui
cz.cuni.jagrlib.iface
cz.cuni.jagrlib.piece
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" (takovy system podporuje implicitne mj. i jBuilder IDE).

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 bude obsahovat komponenty pro graficke uzivatelske prostredi (GUI). Zatim tam neni nic.

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 modulu ("modularizovanych komponent", potomku Piece) knihovny. Sem budete pridavat vase zapoctove ulohy (pozn: ke kazdemu naprogramovanemu modulu bude samozrejme treba udelat i testovaci hlavni program umisteny v cz.cuni.jagrlib).

Vyvojove prostredi

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

Borland JBuilder. "Personal" edition je zdarma ke stazeni a smi se pouzivat pro jakekoli nekomercni aplikace. Pozn: pro beh IDE potrebujete pomerne silny pocitac, rozumne minimum je procesor 1GHz a 256MB RAM.

Sun JDK. Zdarma se da pouzivat i pro komercni aplikace ("Standard edition"). V soucasne dobe je k dispozici verze 1.4.1 (podzim 2002). Pozn: neobsahuje zadne IDE, je to soustava radkovych utilitek. Na SunJDK jsou zalozeny i vsechny jine vyvojarske nastroje (snad s vyjimkou Microsoftskych).


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 kucharce. Na cvicenich muze byt podan i podrobnejsi ustni vyklad!


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

Copyright (c) 2002-2003 Josef Pelikán, last change: 17.10.2003