Zadání úlohy 6. (zadává se v týdnu od 17. listopadu)

V této úloze důkladně procvičíme nejběžnější kontejnery (včetně uspořádaných), iterátory nad nimi a také tvorbu vlastních komparátorů.

Úkolem bude realizovat jednoduchý systémek simulující zasílání zpráv. Vše bude v balíku messaging (cvičící může jméno balíku upřesnit, např. tak, aby obsahovalo vaši identifikaci - login, UČO). Systémek bude obsahovat následují třídy:

Person

osoba, která bude přijímat a odesílat zprávy (Message). K osobě si pamatujeme její jméno a příjmení (řetězce) a odkazy na dvě složky (Folder) na poštu: odeslanou a přijatou. Složky na zprávy se mohou vytvořit ihned s vytvořením osoby. Odeslání zprávy je realizováno jejím vytvořením, naplněním textem (nemusí zadávat přímo uživatel z klávesnice, stačí programově voláním metody), dále pak následuje vložení do složky odeslaných zpráv odesílatele a do složky přijatých zpráv u všech příjemců.

Message

zpráva. Bude obsahovat odkaz na osobu, která ji odeslala (Person) a množinu příjemců (Set), kterým je určena. Dále si při vytvoření zapamatuje aktuální čas (stačí vytvořit a zapamatovat si objekt třídy java.util.Date). Kromě toho ponese pochopitelně také vlastní text zprávy (String).

Folder

složka na poštu. Bude si pamatovat svého vlastníka (Person), bude umět přidat do sebe zprávu a vypsat všechny zprávy jednak v pořadí, v jakém byly přijímány, a také podle příjmení odesílatele (vzestupně).

Demo

demo třída s metodou main, která vytvoří tři lidi. Poté první a druhý člověk pošlou nějaké zprávy třetímu. Následně vypíšeme zprávy odeslané prvním člověkem (v pořadí odeslání) a zprávy doručené třetímu člověku (v abecedním pořadí podle příjmení odesílatele).

MessagesBySenderComparator

třída implementující rozhraní java.util.Comparator. Objekt této třídy předáváme při vytváření uspořádané množiny, do níž se budou vkládat zprávy v pořadí podle příjmení odesílatele. Metoda compareTo(Object o1, Object o2) tedy musí vracet záporné číslo, je-li příjmení osoby o1 před příjmením o2, kladné číslo v případě, že příjmení osoby o2 předchází příjmení o1. Jsou-li obě příjmení stejná, může vrátit kladné nebo záporné číslo, neměl by však vracet nulu, jsou-li zprávy odlišné. Nulu by měl vrátit pouze a jen tehdy, jsou-li celé zprávy, tj. i text zprávy, její čas odeslání a odesílatel stejné. Kdo by si chtěl pohrát, může při shodnosti příjmení řadit sekundárně podle textu zprávy, data odeslání apod. K implementaci metody compare využijte metodu compareTo třídy String.

Možná realizace výše uvedeného zadání znázorněná jako diagram tříd (navržený v Together 6.0).

Pozn: Pokud cvičící zadání modifikuje, je to OK. Tohle je vzorové zadání. Za úlohu získáte opět max. 5 bodů.