Programovací techniky - Cvičení č. 4


Autor: Martin Lasoň
Organizace: Katedra informatiky FEI VŠB-TU Ostrava
Popis: Cílem tohoto cvičení je základní seznámení s rozhraními a jejich implementací.

Úkoly

  1. Řazení objektů metodou bubble sort. Prostudujte řešený příklad č. 1. Třída Priklad obsahuje statickou metodu bubbleSort, která seřadí prvky pole podle velikosti.

    Metoda bubbleSort pracuje obecně nad libovolnými objekty, které implementují rozhraní Porovnatelny. Metody tohoto rozhraní umožňují porovnávat objekty podle velikosti. Pokud chceme umožnit použití této metody pro nějakou třídu, stačí za klíčovým slovem implements deklarovat, že tato třída implementuje rozhraní Porovnatelny a implementovat všechny požadované metody.

    Příkladem třídy implementující rozhraní Porovnatelny je třída Zlomek převzatá z minulého cvičení a doplněná o implementací rozhraní.

    Hlavní program, metoda main, ukazuje použití metody bubbleSort na řazení zlomků a komplexních čísel. Zajistit, aby řazení komplexních čísel fungovalo, je ovšem už vašim dalším úkolem. Povšimněte si ještě volání statické metody Math.random(), která vygeneruje náhodné číslo z intervalu (0,1). Pro vytvoření náhodného zlomku je vygenerované reálné číslo upraveno na celé číslo z intervalu 1..20.

  2. Rozšíření třídy Complex o implementací rozhraní Porovnatelny. Upravte definici třídy Complex z minulého cvičení tak, aby implementovala rozhraní Porovnatelny, a řešení ověřte na příkladu využívajícím metody bubbleSort k seřazení objektů.
    Pro řazení komplexních čísel použijte jejich absolutní hodnotu - větší komplexní číslo musí mít větší absolutní hodnotu.
  3. Standardní rozhraní Comparable a Comparator. Seznamte se s dokumentací standardních rozhraní Comparable a Comparator z balíku java.lang. Upravte třídy Zlomek a Complex tak, aby implementovaly místo rozhraní Porovnatelny rozhraní Comparable. Vytvořte rovněž třídu ComplexComparator, která umožní porovnat dva objekty typu Complex a vytvořte variantu metody bubbleSort, která pro porovnávání využívá objekt typu Comparator předaný jako další parametr.

    Rozhraní Comparator umožňuje doplnit schopnost porovnávání i do těch tříd, které již existují a jejichž zdrojový text nemáme k dispozici nebo nemůžeme modifikovat. Metoda bubbleSort v tom případě pro porovnání využije předaný objekt typu Comparator (tj. libovolný objekt implementující toto rozhraní).