4it115»Videopujcovna

Videopujcovna

UML - videopůjčovna

Zadání

Videopůjčovna chce umožnit rezervaci filmů prostřednictvím Internetu. Videopůjčovna má několik poboček. Součástí projektu je i aplikace pro pracovníky knihovny na vkládání nabízených filmů. Úkolem je nakreslit diagram tříd pro část této aplikace – pro následující případ užití.

Případ užití 1: Přidání nového filmu
Primární aktér: pracovník videopůjčovny
Rozsah: aplikace
Úroveň: uživatelský cíl
Vstupní podmínky: pracovník videopůjčovny má spuštěnou aplikaci se zobrazeným seznamem filmů

Hlavní úspěšný scénář:
1. pracovník videopůjčovny stiskne tlačítko “Přidat film”
2. pracovník videopůjčovny vyplní povinná políčka: “Název filmu”, “Originální název”, “Rok vydání“, “Délka“, “Distributor“
3. pracovník videopůjčovny vybere ze seznamu “Žánry” jeden či více žánrů filmu.
4. pracovník videopůjčovny vybere ze seznamu “Jazyky“ jeden či více jazyků filmu.
5. pracovník videopůjčovny vybere ze seznamu “Titulky“ jeden či více jazyků titulků.
6. pracovník videopůjčovny stiskne tlačítko “Ulož”, uloží záznam do souboru
7. pracovník videopůjčovny postupně vyplní údaje o jednotlivých kopiích filmu:
7.1. Stiskne tlačítko “Přidej kopii“
7.2. Vyplní “Identifikační číslo“ kopie.
7.3. Ze seznamu vybere “Typ média“.
7.4. Vybere ze seznamu “Umístění”, kde je kopie umístěna.
7.5. Stiskne tlačítko “Ulož“ pro uložení kopie do souboru

Rozšíření:
1a. pracovník videopůjčovny vybere existující film ze seznamu, zobrazí se informace o filmu a pracovník pokračuje krokem 7 hlavního scénáře – přidávání kopie,
3a. pracovník videopůjčovny zařadí nový žánr do seznamu

	3a.1 Stiskne tlačítko “Přidat žánr“
	3a.2 Vloží název žánr
	3a.3 Stiskne tlačítko “Ulož žánr“

Řešení s chybami

vp01

  • Názvy tříd by měly být v jednotném čísle - tj. ne Jazyky, Titulky, Žánry, ale Jazyk, Titulek či Žánr,
  • chybí Vám asociace od filmu k žánru, jazyku filmu a jazyku titulků,
  • pracovník používá program - do diagramu tříd nepatří. Uživatelé se kreslí do dynamických diagramů - use-case diagram, sekvenční diagram, ...
  • umístění a typ média nemohou být potomky třídy Kopie
  • třída Kopie nemůže být abstraktní - představuje konkrétní kopii filmu,

vp02

  • názvy tříd v jednotném čísle - u Vás se to týká tříd Zanry, Titulky, Jazyky,
  • třídy Zanry, Titulky a Jazyky nemohou být potomkem třídy Film,
  • ve třídě Film by měl být seznam kopii filmu - tj. od třídy film by měla být asociace s hvězdičkou ke třídě Kopie,
  • u asociace Kopie - Pobočka chybí šipka. Není jasné, ve které třídě bude datový atribut,
  • nevím, kde chce evidovat seznamy žánrů, jazyků filmů, seznamy poboček, seznam typů medií.

vp03

  • nechápete výčtové typy - konstanty v enum nemohou být typu String, ale jsou to instance výčtového typu,
  • názvy tříd i výčtových typů by měly být v jednotném čísle,
  • do návrhového diagramu tříd nepatří popisy asociací, ale jména datových vztahů odpovídajících asociaci,
  • nechápu třídu JazykFilmu v souvislosti s tím, že máte i výčtový typ Jazyky,
  • chybí Vám asociace k výčtovým typům

vp04

  • kopie není potomkem filmu, tam by měla být kompozice od filmu ke kopii s multiplicitou,
  • nevím, kde evidujete seznam dostupných jazyků, seznam žánrů,
  • u třídy Film nevidím rozdíl mezi metody pridajKopiu() a pridajKopiuKFilmu(),
  • u třídy Film je nesmyslná metody pridajFilm() - to chcete k instanci jednoho filmu přidávat další film. Tato metoda by měla být ve třídě, kde se eviduje seznam filmů.
  • obdobně s metodou pridatZaner() ve třídě Zaner

vp05

  • k asociacím se píší jména datových atributů - Vy u nich máte buď jména činností nebo nic,
  • nechápu třídy PridejZanr a PridejFilm - názvy tříd by měly označovat předmět a a ne činnost. U třídy PridejFilm nerozumím datovým atributům - co znamená např. atribut žánr typu ArrayList? Jakého typu jsou prvky tohoto ArrayListu?
  • nevím, kde máte evidovány seznamy dostupných žánrů, jazyků, typů médií či poboček.
  • kopie filmu by měla být jednoho typu v jedné pobočce - pro jsou odpovídající datové atributy ve třídě KopieFilmu typu ArrayList?

vp06

  • v návrhovém diagramu tříd by asociace měly mít šipku a mělo by u nich být napsáno jméno datového atributu, ne pojmenování vztahu. Nyní není jasné, zda Medium obsahuje SeznamMedii či zda SeznamMedii obsahuje Medium.
  • máte třídu Medium, ale ve třídě Kopie je typMedia typu String,
  • nechápu třídu SeznamKopii - ve třídě Film by měl být datový atribut seznamKopii, který bude nejspíš typu Collection s prvky typu Kopie - to se ale napíše jako jméno datové atributu k asociaci mezi třídou Film a Kopie,
  • nechápu třídy SeznamZanru, SeznamJazyku, SeznamTitulku či SeznamMistnosti - to by měly být spíš datové atributy v nějaké třídě,

vp07

  • pracovnik používá program, do diagramu tříd nepatří. Kreslí se do dynamický diagramů - do use-case diagramu, do sekvenčního diagramu, ...
  • tato třída by dle diagramu měla mít i datové atributy pridejFilm či pridejKopii (jsou napsány u asociací) - pod názvy si spíš představuji metody
  • třídy Zanr, Jazyky (příště jednotné číslo) a Titulky (též jednotné číslo) nemohou být potomkem třídy Film,
  • nechápu datový atribut zanr typu ArrayList ve třídě Zanr. Jakého typu budou prvky tohoto ArrayListu? Obdobně je to s datovými atributy ve třídách Jazyky a Titulky.
  • U asociace mezi třídami Film a Kopie máte šipku na obou stranách, ale pouze jeden datový atribut.

vp08

  • Nerozumím třídám SeznamZanru, SeznamJazyku, SeznamTitulků - spíš by to měly být datové atributy v nějaké třídě, nejspíš ve třídě DatabazeFilmu.
  • Chybí Vám seznam dostupných médií a seznam dostupných umístění.
  • Jedna kopie filmu by měla mít pouze jeden typ média a pouze jedno umístění,
  • jazyk titulků je stejný, jako jazyk filmu - stačila jedna třída (Jazyk) a k ní dvě asociace ze třídy Film,
  • metoda pridejKopii by měla být ve třídě Film a ne ve třídě DatabázeFilmu

vp09

  • nevím, kde evidujete seznam dostupných jazyků, seznam dostupných titulků, seznam dostupných umístění, seznam dostupných typů médií.
  • chybí Vám třída TypMédia - bez ní obtížně zrealizujete naplnění seznamu, ze kterého uživatel vybírá,
  • třída SeznamKopii je chybně. Kopie existují k filmu - tj. měla by existovat třída Kopie a film by měl evidovat, jaké jsou dostupné kopie filmu. Tj. měla být být kompozice od Filmu ke Kopii a u ní multiplicita.
  • Ve třídě SeznamKopii má dva datové atributy pojmenované umistení - jeden přímo ve třídě, druhý u asociace ke třídě Umisteni.
  • Není rozdíl mezi jazykem filmu a jazykem titulků - stačila by jedna třída Jazyk a k ní dvě asociace od třídy Film.

vp10

  • pracovník používá program, v diagramu tříd nemá co dělat. Patří do dynamických diagramů jak o je use-case diagram či sekvenční diagram.
  • umístění a pobočka je to samé, tj. ve třídě kopie by neměl být přímo datový atribut umístění, ale od třídy Kopie by měla být asociace ke třídě Pobočka,
  • do návrhového diagramu tříd se nekreslí popisy vztahů,
  • nechápu, proč jste zavedl abstraktní třídu Charakteristika. Co Vám usnadní/umožní?
  • u asociace mezi Filmem a Charaktetistikou Vám chybí multiplicita,
  • nevím, kde evidujete seznam dostupných jazyků, seznam dostupných titulků, seznam dostupných typů médií,
  • názvy tříd se píší v jednotném čísle - u Vás třída Titulky. Netuším, co by měl obsahovat datový atribut titulky v této třídě.

vp11

  • nechápu, proč ve třídě Film máte datový atribut zanr typu String a současně další datový atribut pojmenovaný zanr typu seznam instancí třídy Zanr - ten druhý vyplývá z asociace mezi třídou Film a třídou Zanr. Obdobně jazyk a titulky.
  • Nazvy tříd by měly být v jednotném čísle, tj. místo Titulky pojmenovat třídu JazykTitulků. Ještě vhodnější by bylo mít pouze třídu Jazyk a od třídy Film dvě asociace k této třídě.
  • Typ média se má vybírat ze seznamu - nevím, kde máte seznam dostupných typů média. Obdobně umístění.
  • Třídy pro ukládání do souboru se obvykle do návrhového diagramu tříd nekreslí. Asociace od třídy zaznamDoSouboru jsou divné.
  • do návrhového diagramu tříd se obvykle nekreslí popisy vztahů. Nechápu asociaci od třídy Zanr ke třídě EvidenceZanru.

vp12

  • u asociace Film -> KopieFilmu Vám chybí hvězdička
  • nechápu třídy SeznamJazyku, SeznamTitulku, SeznamZanru. Měla by existovat např. třída Zanr s datovým atributem nazev. Od třídy Film by měla být asociace ke třídě Zanr s tím, že může být více žánrů u filmu. Obdobně jazyk filmu a jazyk titulků - zde by stačila jedna cílová třída, ke kterou povedou dvě asociace.
  • nevím, kde evidujete seznam možných typů médií,
  • nechápu asociaci od třídy PobockaPujcovny ke třídě SeznamFilmu. Správně by měla být asociace obráceně - třída SeznamFilmu by mohla obsahovat datový atribut se seznamem poboček půjčovny. Z tohoto seznamu by poté uživatel programu vybíral umístění kopie.

vp13

  • nechápu datové atributy napsané u asociací mezi třídou Film a ArchivFilmu. Ve třídě Film má být datový atribut ulozFilm typu ArchivFilmu? Či v archivu filmů má být datový atribut vyberFilm typu Film?. Správně by měla být jedna asociace od archivu filmů ke třídě Film s tím, že datový atribut bych pojmenoval seznamFilmu.
  • asociace mezi třídou Film a třídou Nosic je nakreslená správně. Pouze nechápu pojmenování datového atributu - jméno pridejNosic je vhodné tak pro pojmenování metody a ne pro pojmenování seznamu nosičů.
  • asociace od třídy Nosic ke třídám TypyMedii a Pobocky by měly být obráceně.
  • Názvy tříd by měly být v jednotném čísle - tj. ne TypyMedii, Pobocky či Titulky, ale TypMedia, Pobocka či JazykTitulku
  • nevím, kde evidujete seznam dostupných typů médii či seznam existujících poboček - bez seznamů nelze z nich vybírat,
  • u třídy EvidenceZanru nechápu datový atribut nazevZanru. Obdobně u tříd EvidenceJazyku a EvidenceTitulku

vp14

  • nechápete výčtové typy - konstanty v enum nemohou být typu String, ale jsou to instance výčtového typu,
  • názvy tříd i výčtových typů by měly být v jednotném čísle,
  • chybí Vám asociace k výčtovým typům
  • u asociací nemáte šipky,
  • u asociací jste sice formálně psal jména datových atributů, ale dle jmen to jsou popisy vztahů,
  • nechápu, proč máte třídu Žánr, když máte výčtový typ ListŽánrů,
  • žánry nemohou být jako výčtový typ - musí existovat možnost přidávat další žánry. Obdobně i jazyky a pobočky - zde to sice nevyplývá ze zadání, ale je poměrně logické, že se seznam přípustných hodnot může měnit.

vp15

  • do diagramu tříd nepatří pracovník, který program používá - ten se kreslí do dynamických diagramů jako je use-case diagram či sekvenční diagram,
  • u asociací nemáte jména datových atributů, ale názvy činností - např. vybere žánr, uloží žánr do seznamu,
  • název třídy Vyplnit odpovídá činnosti a ne obsahu - zde bych viděl spíš název třídy Film. Nechápu ale poté metodu vyplnitPolicka()
  • Chybí třídy Film a Kopie
  • Nepochopil jsem třídu Seznam, nechápu asociace od této třídy ke třídám umístění a typmedia.

vp16

  • asociace mezi třídou SeznamFilmu a Kopie nemá šipku ani jméno datového atributu,
  • nechápu asociaci od Kopie ke třídě Film - spíš by měla být obráceně, u filmu se eviduje seznam jeho kopii,
  • Názvy tříd by měly být v jednotném čísle, tj. Zanr, Jazyk či JazykTitulku.
  • Nechápu datový atribut titulky typu boolean ve třídě Titulky - u filmu se má evidovat seznam jazyků, v jakých jsou titulky. Jazyk (např. angličtina) nevyjádříte pomocí hodnoty boolean.
  • asociace mezi třídou Film a třídami Zanry, Jazyky a Titulky jsou obráceně,

vp17

  • názvy tříd by měly být v jednotném čísle, tj Zanr, Jazyk či JazykTitulku. Jazyk filmu a jazyk titulků by mohla představovat jedna třída Jazyk a k ní by byly dvě asociace.
  • Naprostá většina asociací má obráceně šipku.
  • nevím, kde evidujete seznam všech umístění, seznam dostupných typů médií, seznam dostupných jazyků. Uživatel by měl z těchto seznamů vybírat.
  • nechápu asociaci mezi třídou SeznamFilmu a třídou Kopie. Seznam kopií by se měl evidovat ve třídě Film.

vp18

  • nechápete výčtové typy - konstanty v enum nemohou být typu String, ale jsou to instance výčtového typu,
  • minimálně žánry nemohou být jako výčtový typ - uživatel programu by nemohl přidávat další žánry. Ani pro jazyky a umístění to není vhodná volba, i když to nevyplývá ze zadání.
  • nechápu, proč máte třídu Zanr, když máte výčtový typ dbZanru - prvky seznamu žánrů ve třídě Film by měly být přímo instance výčtového typu,
  • multiplicitu (hvězdičky atd.) kreslíte k chybnému konci šipky asociace,

vp19

  • to není diagram tříd, ale ER model,

vp20

  • uživatel používá program, do diagramu tříd nepatří. Uživatelé se kreslí do dynamických diagramů jako je use-case diagram či sekvenční diagram.
  • ze zadání vyplývá, že k jednomu filmu může být více kopií - to v diagramu není vyjádřeno,
  • nevím, kde máte seznamy dostupných jazyků , seznamy žánrů, seznamy poboček či seznamy typů médií. Pokud neexistují, tak z nich uživatel nemůže vybírat.
  • nechápu metodu pridatZanr ve třídě Zanr - to chcete ke konkrétnímu žánru přidávat další žánr?

Správné řešení