Cieľom cvičení desiateho týždňa je pozrieť sa na praktické využitie rozhraní, abstraktných tried a metód, balíkov a modifikátorov viditeľnosti.
Abstraktné metódy a triedy
- Diskutujte, ktoré z metód a tried z predchádzajúcich cvičení (napr. v projekte
PlochaTvarov
) by mali byť zmenené na abstraktné a prečo.
- Prediskutujte vzťah abstraktných metód a abstraktných tried a nasledovné "pravidlá" na ľahké zapamätanie si použitia slovíčka
abstract
:
- abstraktná metóda je metóda bez implementácie - tela (na čo sa to využíva?)
- abstraktná trieda je trieda, ktorej inštanciu nemožno vytvoriť (na čo sa to využíva?)
- ak trieda obsahuje aspoň jednu abstraktnú metódu, potom musí byť abstraktná
Využitie rozhraní
- Navrhnite a implementujte spôsob, ako možno pomocou komparátorov utriediť reťazce (referencie na objekty triedy
String
) v poli nie lexikograficky, ale podľa dĺžky reťazca - v prípade reťazcov rovnakej dĺžky rozhoduje lexikografické porovnanie.
- Upravte komparátor tak, aby sa počas triedenia (
Arrays.sort
) vypísali dvojice, ktoré sa porovnávajú.
- Upravte komparátor tak, aby ste vedeli spočítať, koľko porovnaní zrealizoval komparátor (metódy:
resetujPocitadlo()
a getPocetPorovnani()
)
Rozhrania a balíčky
- Na jednom z cvičení sme vytvárali triedu
Bod
, ktorá uchovávala súradnice dvojicu súradníc bodu. Vytvorte túto triedy v defaultnom balíčku.
- Navrhnite triedu
sk.upjs.BodovyPorovnavac
implementujúcu porovnávanie bodov podľa vzdialenosti od zadaného bodu (b1 < b2
ak bod b1
je k nejakému bodu [x, y]
bližšie ako bod b2
)
- Aký problém sa objavil v dôsledku toho, že trieda
Bod
je v defaultnom balíčku a trieda sk.upjs.BodovyPorovnavac
nie? Ako ho môžeme vyriešiť?
Vlastné rozhrania
- Diskutujte a navrhnite, kde a ako by ste vedeli využiť vlastné rozhrania. Niektorý z príkladov skúste implementovať.
Príprava na záverečný test