Cvičenia: 11. týždeň

Cieľom cvičení je pozrieť sa na praktické využitie rozhraní, abstraktných tried a metód 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

Na jednom z predošlých cvičení sme implementovali triedu Bod uchovávajúcu x-ovú a y-ovú súradnicu bodu.

  • 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)
  • Vytvorte triedu sk.upjs.ReverznyBodovyPorovnavac, ktorá bude implementovať rozhranie Comparator<Bod> a v rámci konštruktora dostane referenciu na nejaký Comparator<Bod>. Reverzný porovnávač pri metóde compare bude vracať opačnú hodnotu, ako by vrátil v konštruktore referencovaný komparátor.

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