Cieľom cvičení je pozrieť sa bližšie na vytváranie vlastných tried. Vlastné triedy sme vytvárali už od prvého týždňa (spomeňte si na triedu SmartTurtle
) rozširovaním tried z JPAZ
-u. Počnúc týmto týždňom budeme vlastné triedy vytvárať rozširovaním triedy Object
(tej najzákladnejšej triedy v Jave, každá iná trieda v Jave vznikla práve jej rozšírením). Zároveň sa budeme orientovať na tvorbu tried, ktorých objekty sú určené na uchovávanie komplexných údajov. Ako archetyp pre projekty odporúčane použiť jpaz2-launcher
.
Pri práci s JPAZ
-om (klikanie do plochy, pozícia korytnačky, atď.), či rôznych grafických aplikáciach, by sa nám hodilo mať triedu, v ktorej by sme vedeli uchovávať informácie o jednom bode. V prípade bodu v ploche je takýto bod charakterizovanými svojimi súradnicami (x-ová a y-ová súradnica). Navrhnite a implementujte triedu Bod
, ktorá bude poskytovať:
[100.2, 14.8]
String toString()
void nastav(double x, double y)
void nastav(Bod bod)
boolean rovnakeSuradnice(Bod bod)
double vzdialenostK(double x, double y)
double vzdialenostK(Bod bod)
void posunO(double dx, double dy)
Bod posunutyBod(double dx, double dy)
Čo vypíšu tieto príkazy pred a čo po naprogramovaní metódy toString
? (Vysvetlenie zmeny správania nech ostane na cvičení utajené!)
Na skúmanie objektov triedy Bod
môžete použiť aj ObjectInspector
.
Poznámka: Niektoré korytnačie metódy pracujú (vracajú/akceptujú ako parameter) objekty triedy Point2D
, ktoré sú veľmi podobné objektom triedy Bod
.
Vytvorte triedu ZoznamBodov
, ktorej objekty budú slúžiť na uchovávanie postupnosti bodov. Takáto postupnosť bodov môže vzniknúť napríklad naklikaním do kresliacej plochy. Budeme uchovávať zoznam bodov, nie množinu bodov - t.j. jeden bod môže byť teoreticky do zoznamu vložený viac krát. Objekty triedy ZoznamBodov
nech majú metódy:
int dlzka()
void pridajBod(Bod bod)
Bod dajBod(int index)
void vymaz()
double dlzkaSpojnic()
String toString()
[[10, 10], [12.5, 19], [34, 100.3]]
)
void odoberBod(int index)
Pre fajnšmekrov: Na uloženie bodov budete používať nejaké pole. Pri každom pridaní, či odobraní bodu je treba zmeniť veľkosť poľa (vytvoriť nové pole novej veľkosti). Toto je však časovo náročná operácia. Upravte preto internú implementáciu triedy tak, aby sa interné pole zväčšovalo/zmenšovalo iba po dávkach (napr. po násobkoch 20).
Nie len pre fajnškrov
Do triedy ZoznamBodov
doplňte nasledujúce metódy:
boolean pridajBodAkSaTamNenachadza(Bod bod)
bod
ak sa tam zatiaľ bod s rovnakými súradnicami nenachádza. Ak sa sa tam už bod nachádza (teda sme ho nepridali znova) metóda vráti false
inak metóda vráti true
.
Vytvorte triedu KurzovyListok
, ktorá bude uchovávať aktuálny kurz EUR voči iným menám. Trieda by mala poskytovať metódy:
Rada: zvážte vytvorenie pomocnej triedy, ktorá bude uchovávať dvojicu [mena, kurz]
.
Pridajte metódy na uloženie kurzového lístka do súboru a zo súboru. Navrhnite si vhodný formát, tak aby ste tieto operácie čo najjednoduchšie naprogramovali.
Pre fajnšmekrov: Vytvorte metódu, ktorá načíta kurzový lístok z webovej stránky banky. V prípade, že banka zverejňuje kurz na nákup a predaj, vypočítajte z týchto hodnôt stred (priemer). Na načítanie súboru z webu môžete použiť nižšie uvedenú schému:
Vytvorte triedu Matica
na uloženie 2-rozmerných matíc (2-rozmerné pole zaobalené v objekte) reálnych čísel:
Pri uložení matice do textového súboru odporúčame si do prvého riadku uchovať rozmery matice.
3 4
10 10 20 45
12 1 12 13
5 19 22 3
Informácie o Gaussovej eliminačnej metóde možno nájsť tu (ale určite bola na niektorom z matematických predmetov):
Pri implementácii GEM môžete uvažovať aj variant metódy s parametrom platneStlpce
určujúcim koľko stĺpcov matice je "platných". Môžete si to predstaviť ako pozíciu vertikálnej čiary, keď sa robí GEM ručne - vtedy platí platneStlpce = pocetStlpcov()-1
. Pri počítaní inverznej matice by to bolo platneStlpce = pocetStlpcov()/2
.