PJ1 Lesson 8

lab08.zip

1. Vytvořte rozhraní IResizable, která bude umožňovat získání a nastavení velikosti daného objektu. Vytvořte rozhraní ITransformable, která bude zároveň IResizable a IMovable.

2. Zapojte posouvač do GUI.

3. Pro třídu MyDate umožněte porovnání objektů dle hodnot instančních proměnných – je nutno překrýt metodu equals.

4. Pro třídy reprezentující tvary dodělejte společného předka abstraktní třídu AbtractShape, která bude obsahovat společné vlastnosti – možnost nastavení polohy(bude IMovable) a že je IPaintable .

5. Procvičte si generika – vytvořte třídu s jedním generickým parametrem.

public class Test<T> {
   private T var;

   public T get(){
      return this.var;
   }

   public void set(T t){
      this.var=t;
      System.out.println("var="+var+";");
      System.out.println("var is "+var.getClass()+";");
   }

   public static void main(String args[]){

      Test<String> type = new Test<String>();
      type.set("Text");
      //type.set(10);

      Test type1 = new Test(); //raw type
      type1.set("Text"); //valid
      type1.set(10); //valid and autoboxing support
   }
}

Generický kód využívá parametrizované typy (generický typ T <T>), které jsou nahrazeny konkrétními typy v době použití kódu. Princip generik je znám také z jiných jazyků a především z jazyka C++.

Domácí úkol:

Vytvořte třídu Transformer, jejíž instance budou pracovat s objekty, které jsou ITransformable, prostřednictvím metody transform, která jako parametr dostane objekt pro transformaci, souřadnice a faktor zvětšení (hodnota typu double, která při hodnotě menší než 1 bude znamenat zmenšení). Tato metoda pak provede animovaný přesun objektu spolu s plynulým zvětšením(zmenšením) na požadovaný faktor.

Vytvořte generickou třídu zásobník, která bude mít metody push, pop, size – využijte třídu ArrayList.

Bonus (za 1 bod): Použití třídy Transformer zapojte do GUI – vytvořte tlačítko a editační políčko pro zadání faktoru zvětšení. Dále vytvořte obslužnou metodu pro tlačítko a v ní na novém vlákně použijte Transformer – viz použití posouvače (úkol 2).