Cvičenia: 10. týždeň

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