PJ1 Lesson 7

lab07.zip

1. Vytvořte rozhraní IValuable, které obsahuje metodu getValue():double a naprogramujte si třídu AverageComputer, která má metodu na počítání průměrné hodnoty objektů v seznamu, který dostává jako parametr. Objekty jsou stejného typu – IValuable. Zajistěte to, že budete moci AverageComputer využít pro výpočet průměrného obsahu tvarů – obdelník, elipsa, trojúhelník.

2. V projektu se používá CanvasManager, který řeší některé nedostatky předchozího řešení při vykreslování. Umí zobrazovat všechny objekty, které implementují rozhraní IPaintable. Objekty se začnou vykreslovat po zaregistrování pomocí metody add. Upravte třídu Triangle tak, že umožní práci s mechanismem CanvasManager – pro vykreslování se využije metoda fillPolygon ve třídě MyGraphics.

3. Zapojte vytváření trojúhelníku a elipsy – metoda ManipulationPanelController.createShape.

4. Naimplementujte možnost mazání tvarů.

  1. Pro tyto potřeby vytvořte rozhraní IClickable, které bude obsahovat metodu isInBound(double x, double y):boolean, která vrátí „pravda“, pokud daná souřadnice je uvnitř objektu.
  2. V metodě ManipulationPanelController.mousePressed dodělejte ošetření toho, že je vybráno tlačítko deleteRB tak, že si projdete všechny zaregistrované obrazce (seznam subjects) a pokud objekt bude typu IClickable (ověření pomocí instanceof), tak ověříme, zda jsme na něj kliknuli a případně ho odstraníme.

Rozhraní (interface) – specifikuje operace, které má třída splňovat, a nezabývá se již tím, jak toho bude konkrétně dosaženo.

  • interface obsahuje pouze konstanty a metody bez těla;
  • rozhraní obsahuje vždy pouze veřejné metody.
public interface NameOfInterface {
   // Any number of final, static fields
   // Any number of abstract method declarations
}

Domácí úkol:

Zapojte do aplikace práci s Vašimi obrazci – kreslení, mazání.

Vytvořte třídu, která bude mít naimplementován algoritmus pohybu. Bude obsahovat metodu, která jako parametry dostane objekt, novou pozici, délku a čas v ms. V této metodě bude pak algoritmus, který bude pohybovat objektem z výchozího bodu do koncového po krocích, mezi kterými bude prodleva zadaná jako parametr „čas“. Velikost posunutí (délka vektoru, o který dojde k posunu) v jednom kroku je dána parametrem „délka“. Pro dané potřeby si nadefinujte vhodný typ – rozhraní, které umožňuje zjistit aktuální pozici a nastavit novou pozici.

Poznámka: Metoda implementující pohyb bude vlastně “šablonová metoda” (Template Method), která volá abstraktní metody z rozhraní předávaného objektu

https://www.kozusznik.cz/resources/msps/gof/hires/pat5jfso.htm.

Oproti tomu, jak je definován vzor, je “šablonová metoda” v jiné třídě než volané abstraktní metody.