Student s Life Návrhová dokumentace (Design) Lukáš Barák, Jakub Ječmínek, Jaroslav Brchel, Jiří Zmeškal 3.12.2010
Model Specification Page: 2 Obsah Model architektury... 3 Návrhový model... 3 Bussines vrstva (Doménová vrstva)... 3 Datová vrstva... 3 Prezentační vrstva... 4 Balíček "Návrhový model"... 4 Balíček "datoveoperace"... 5 Balíček "grafika"... 6 Balíček "logika"... 6 Model nasazení... 18 PC... 18
Model Specification Page: 3 Model architektury Balíček obsahuje popis logického členění navrhované aplikace na vrstvy, které umožňují snadnou rozšiřitelnost a udržovatelnost aplikace. Jednotlivé vrstvy obsahují další balíčky, do kterých jsou seskupeny třídy, podle jejich logických souvislostí. cmp Model architekt... Prezentační v rstv a Bussines v rstv a (Doménov á v rstv a) Datov á v rstv a Obrázek: 1 Návrhový model Business vrstva (Doménová vrstva) Komponenta obsahuje třídy a komponenty, které realizují požadované chování aplikace z pohledu obchodní logiky. Datová vrstva Komponenta obsahuje třídy a komponenty poskytující technickou podporu pro doménovou vrstvu v podobě persistentního ukládání dat apod.
Model Specification Page: 4 Prezentační vrstva Prezentační vrstva obsahuje třídy a komponenty, které se starájí o prezentování informací uživateli, a které od něho zpátky přebírají požadavky. Tyto požadavky transformují tak, aby odstranily závislost na použité technologii (desktopová aplikace) a předávájí je dále do doménového modelu. Balíček "Návrhový model" Balíček obsahuje popis návrhových tříd, jejich vzájemných vztahů, přiřazení zodpovědností a popis spolupráce pro realizaci požadovaných funkčností. Pro grafickou reprezentaci statického modelu využívá UML diagram tříd, kde jsou jednotlivé třídy doplněny o metody, atributy o datové y (dle zvoleného implementačního jazyka nebo s využitím obecných datových u), konce asociací jsou doplněny o popisy. Pro grafickou reprezentaci dynamického chování využívá UML sekvenční diagramy, UML diagramy spolupráce, UML diagramy aktivit a UML stavové diagramy. class StudentsLife grafika + HlavniOkno Prezentační vrstva aplikace StudentsLife logika + menza + penezenka + rozvrh + Utils + diar Business vrstva aplikace datov eoperace + diar + menza + penezenka + rozvrh Datová vrstva Obrázek: 1
Model Specification Page: 5 Balíček "datoveoperace" Balíček obsahuje třídy datové vrstvy, které nabízejí technickou podporu pro třídy obchodní vrstvy. Jedná se především o datové operace(načítání, ukádání). Balíček "diar" Balíček "menza" Třída "Parser" Třída Parser bude sloužít k načítání dat ze stránek SUZ (jídelníček pro danný den). Datový Poznámky isnacteny boolean Udržuje informaci zda je jídelníček již načtený, nebo ne. jidelak Jidelnicek Jidelnicek který se vyparsuje ze stránek SUZ. getjidelnicek False Tato metoda bude vracet vyparsovaný jídelníček. Parser False Konstruktor třídy Parser. ziskatjidelnicek False Tato mezoda bude sloužit na vyprasování jídelníčku ze stránek SUZ a jeho uložení do instanční proměné jidelak. Třída "Ukladac" Třída ukladač slouží k ukládání dat modulu do xml souboru. Obsahuje metody, které toto ukládání realizují. Datový Poznámky FILE String Soubor do kterého se bude modul ukládat. save False Tato metoda slouží k ukládání informací modulu do xml. list: List<Jidelnicek> Třída "Upravator" Tato třída bude sloužit k načtení dat modulu menza z xml a jejich úpravám.
Model Specification Page: 6 Balíček "penezenka" Balíček "rozvrh" Třída "Nacitac" Třída pro načítání z xml souboru. Třída "Parser" Třída pro parsování html souboru s rozvrhem z KOSu. Třída "Ukladac" Slouží pro ukládání aktuálních dat v modulu. Datový Poznámky FILE Soubor, do ktereho bude ulozen obsah modulu v xml forme. Balíček "grafika" Balíček grafika tvoří prezentační vrstvu aplikace StudentsLife. Je to rozhraní mezi uživatelem a aplikací. Třída "HlavniOkno" Tato třída tvoří základ grafického uživatelského rozhraní mezi uživatelem a aplikací. Balíček "logika" Balíček "Utils" class Utils Obrázek: 2 Třída "Hlidac" Hlidac je rozhraní, které je součástí návrhového vzoru observer. Toto rozhraní sice java obsahuje, ale zde je vytvořeno pro větší přehlednost kódu v rámci teamu.
Model Specification Page: 7 Balíček "diar" class Diar díáře v BL 2 hlavní třídy Kategorie - BarvaKat: int - JmenoKat: char + odstrankategorii(char) : void + vytvorkategorii(int, char) : void + zmenkategorii(boolean, char) : void - Delka: int - Den: int - Hodina: int - Kategorie: char - Mesic: int - Minuta: int - Nazev: char - Rok: int Udalost + odstranudalost(int, int, int, int, int) : void + upravudalost(int, int, int, int, int, int, char, char) : void + vytvorudalost(char, int, int, int, int, int, int, char) : void Obrázek: 3
Model Specification Page: 8 Balíček "menza" class menza ModulMenza - seznam: List<Jidelnicek> + ModulMenza() + pridatjidelnicek(jidelnicek) : void Jidlo - cena: int - hmotnost: int - jeoblibene: boolean - jmenojidla: String + getcena() : int + gethmotnost() : int + getjmenojidla() : String + isoblibene() : boolean + Jidlo(int, String, boolean, int) + setcena(int) : void + sethmotnost(int) : void + setjeoblibene(boolean) : void + setjmenojidla(string) : void Jidelnicek - hlavnijidlo: Jidlo - menza: Menza - moucnik: Jidlo - polevka: Jidlo + gethlavnijidlo() : Jidlo + getmenza() : Mezna + getmoucnik() : Jidlo + getpolevka() : Jidlo + Jidelnicek(Jidlo, Jidlo, Jidlo, Menza) + sethlavnijidlo(jidlo) : void + setmenza(menza) : void + setmoucnik(jidlo) : void + setpolevka(jidlo) : void Menza - adresa: String [1..55] - nazev: String [1..55] - provoznidoba: String [1..55] + getadresa() : String + getnazev() : String + getprovoznidoba() : String + Menza(String, String, String) + setadresa(string) : void + setnazev(string) : void + setprovoznidoba(string) : void OblibenaJidla menza::uprav ator menza::parser - isnacteny: boolean - jidelak: Jidelnicek menza::ukladac - FILE: String = modulmenza.xml {readonly} + getjidelnicek() : Jidelnicek + Parser() - ziskatjidelnicek() : void + save(list<jidelnicek>) : void Obrázek: 4 Třída "Jidelnicek" Každá instance této třídy obsahuje informace o jednom daném jídelníčku. Datový Poznámky hlavnijidlo Jidlo Hlavní jídlo dne menza Menza Informace o mezne pro kterou daný jídelníček platí. moucnik Jidlo Moučník na jídelníčku.
Model Specification Page: 9 Datový Poznámky polevka Jidlo Polévka v denní nabídce gethlavnijidlo False Vrátí hlavní jídlo na jídelníčku. getmenza False Vrátí instanci třídy Menza, která obsahuje informace o menze, pro kterou platí danný jídelníček. getmoucnik False Vrátí moučník z jídelníčku. getpolevka False Vrátí instanci třídy Jidlo obsahující informace o polévce z jídelníčku Jidelnicek False Kontruktor třídy Jidelnicek hlavnijidlo: Jidlo polevka: Jidlo moucnik: Jidlo menza: Menza sethlavnijidlo False Nastaví hlavní jídlo jídelníčku. hlavnijidlo: Jidlo setmenza False Nastaví menzu menza: Menza setmoucnik False Nastaví moučník na jídelníčku moucnik: Jidlo setpolevka False Nastaví polévku na jídelníčku. polevka: Jidlo
Model Specification Page: 10 Třída "Jidlo" Instance této třídy obsahuje informace o jednotlivých jídlech Datový Poznámky cena int Cena jídla. hmotnost int Hmotnost jídla. jeoblibene boolean Informace zda je jídlo oblíbené. jmenojidla String Jméno jídla. getcena False Tato metoda vrací cenu jídla gethmotnost False Tato metoda vrací hmotnost jídla getjmenojidla False Tato metoda vrací jméno jídla isoblibene False Tato metoda vrací informaci zda je jídlo oblíbené Jidlo False Konstruktor třídy Jidlo. hmotnost: int jmenojidla: String jeoblibene: boolean cena: int setcena False Tato metoda nastavuje cenu jídla cena: int sethmotnost False Tato metoda nastavuje hmotnost jídla. hmotnost: int setjeoblibene False Tato metoda nastavuje zda je jídlo oblíbené jeoblibene: boolean
Model Specification Page: 11 setjmenojidla False Tato metoda nastavuje jméno jídla jmenojidla: String Třída "Menza" Tato třída slouží pro popis jednotlivých menz. Datový Poznámky adresa String Adresa menzy nazev String Název menzy provoznidoba String Doba kdy je menza otevřená getadresa False Tato metoda vrací adresu menzy getnazev False Tato metoda vrací název menzy getprovoznidoba False Tato metoda vrací provozni dobu menzy Menza False Konstruktor třídy Menza adresa: String nazev: String provoznidoba: String setadresa False Tato metoda nastavuje adresu menzy. adresa: String setnazev False Tato metoda nastavuje název menzy. nazev: String setprovoznidoba False Tato metoda nastavuje provozni dobu menzy. provoznidoba: String
Model Specification Page: 12 Návratový Poznámky Třída "OblibenaJidla" Tato třída slouží k přidávání/odebírání jídel do kategorie oblíbených. Balíček "penezenka" class penezenka - alert: int = 0 - sum: int Penezenka «column» - polozky: List<Polozka> + getsum() : int + odeberobserver(hlidac) : void + odeberpolozku(polozka) : void + pridejobserver(hlidac) : void + pridejpolozku(polozka) : void + setalert(int) : void + upozorniobserver() : void + vratpolozky() : List Polozka - cena: int - opakovani: char - popis: String - uctovacidatum: Date + Polozka(int, String, Date, char) + setcena(int) : void + setopakovani(char) : void + setpopis(string) : void + setuctovanidatum(date) : void + tostring() : String Obrázek: 5
Model Specification Page: 13 Třída "Penezenka" Hlavní třída modulu s peněženkou Datový Poznámky alert int Obsahuje stav konta, při kterém dojde k upozornění, že je něco v nepořádku. polozky List<Polozka> V tomto atributu jsou drženy veškeré operace peněženky sum int Obsahuje stav konta getsum False Vrátí stav účtu studenta odeberobserver False vymaže hlídače změn h: Hlidac odeberpolozku False Odebere položku ze seznamu p: Polozka pridejobserver False Přidá hlídače změn h: Hlidac pridejpolozku False Přidá položku do seznamu p: Polozka setalert False Nastaví hodnotu, při které bude peněženka upozorňovat, že je stuent u dna. a: int upozorniobserver False Upozorní hlídače změn, že se v jeho vnitřních stavech udála změna vratpolozky False Vrací List položek peněženky.
Model Specification Page: 14 Třída "Polozka" Třída reprezentuje jednotlivou položku v peněžence Datový Poznámky cena int Jednotlivá položka vyjádřena hodnotou opakovani char Znak, podle kterého se bude rozhodovat, jestli se položka účtuje opakovaně - týdně, měsíčně, denně - nebo se jedná o jednorázovou věc popis String Slovní popis položky uctovacidatum Date Datum, kdy byla položka zaúčtována Polozka False Konstruktor vytvářející novou položku c: int p: String d: Date o: char setcena False úprava atributu c: int setopakovani False úprava atributu o: char setpopis False úprava atributu p: String setuctovanidatum False úprava atributu d: Date tostring False Pro získání textové podoby položky
Model Specification Page: 15 Balíček "rozvrh" class rozv... - rozvrh: int Rozv rh + poppolozku(int, int) : void + Rozvrh() : void + setpolozku(polozka) : void Polozka - den: int - hodina: int - predmet: Predmet - tyden: char - ucebna: Ucebna - vyucujici: Vyucujici + Polozka() : void Predmet - jmeno: int - kodpredmetu: int + Predmet() : void Ucebna - kod: int - umisteni: int + setumisteni(string) : void + Ucebna(String) : void Vyucuj ici - email: int - jmeno: int + setemail() : void + Vyucujici() : void Obrázek: 6
Model Specification Page: 16 Třída "Polozka" Obsahuje všechny atributy a objekty, ze kterých se skládá jedna položka rozvrhu (jedna buňka). Datový Poznámky den int Den kdy je predmet v rozvrhu. hodina int Hodina, kdy ma byt položka v rozvrhu. predmet Predmet Predmet, ke kterému se položka váže. tyden char Sudý, nebo lichí. ucebna Ucebna Ucebna, ve které daný predmet probíhá. vyucujici Vyucujici Vyucující, který má danou hodinu na starosti. Polozka False Konstruktor. Třída "Predmet" Trída která sdružuje informace, prípadné schopnosti premetu. Datový Poznámky jmeno int Jméno predmetu. kodpredmetu int Originalni kód predmetu. Predmet False Konstruktor. Třída "Rozvrh" Uchovává strukturu všech předmětů zapsaných v rozvrhu. Datový Poznámky rozvrh int Pole ukazatelu na jednotlivé položky rozvrhu. poppolozku Návratový False Poznámky Rozvrh False Inicializace pole.
Model Specification Page: 17 setpolozku False Zaradí položku do rozvrhu na správné místo. polozka: Polozka Třída "Ucebna" Třída, která uchovává data o učebne. Datový Poznámky kod int Kód ucebny tak, jak je v rozvrhu. umisteni int Presné umístení ucebny. setumisteni False Dodatečné nastavení umístení učebny, srozumitelné studentovi. umisteni: String Ucebna False konstruktor kod: String Třída "Vyucujici" Trída prechovávající informace o vyucujícím. Datový Poznámky email int jmeno int setemail False Přidá k položce email, který se neinicializuje v konstruktoru, protože není obsažen v html rozvrhu z kosu. Vyucujici False Konstruktor obektu položka.
Model Specification Page: 18 Model nasazení Balíček obsahuje popis umístění jednotlivých částí aplikace na jednotlivé fyzické uzly a způsob jejich komunikace. deployment Model nasaz... PC «jar soubor» AplikaceStudentsLife JRE Obrázek: 1 PC Aplikace poběží na standardním PC. JRE Java Runtime Environment pro daný operační systém. Bez této technologie není možné používat aplikaci.