Cvičenie 1 – Úvod do Javy a JPAZ

Cieľom cvičení:

  • zautomatizovať vytváranie projektu a nových tried v prostredí IntelliJ IDEA,
  • naučiť sa vytvárať objekty (inštancie) triedy v metóde main triedy Launcher (vrátane volania metód nad vytvorenými objektmi),
  • vyskúšať si prácu s ObjectInspector-om a základy korytnačej grafiky,
  • naučiť sa vytvárať nové (vlastné) triedy, ktoré rozširujú existujúce triedy o nové metódy.

Pokiaľ to nie je explicitne uvedené, nepredpokladajte, že sa korytnačka nachádza v strede kresliacej plochy (t.j. nepoužívajte center v metódach vytváraných tried – okrem metódy main). Rovnako nepredpokladajte konkrétnu farbu pozadia kresliacej plochy (napr. bielu). Pri riešení úloh použite len konštrukcie, ktoré boli obsahom prvej prednášky.

Katalóg archetypov pre JPAZ2: http://jpaz2.ics.upjs.sk/maven/archetype-catalog.xml

Kam to celé smeruje…

Prvý projekt v IntelliJ IDEA

Podľa videa vytvorte mavenovský projekt v IntelliJ IDEA.

Nastavenia projektu môžu byť nasledovné:

  • Language – Java
  • Build system – Maven
  • JDK – 21 (možno je potrebné stiahnúť)
  • GroupID – sk.upjs.paz
  • ArtifactID – Cvicenia

Nastavenia modulu:

  • Name – Cvicenie01
  • JDK – Project SDK
  • Parent – Cvicenia
  • Catalog – JPAZ (ak tam nie je, je potrebné pridať nový katalóg http://jpaz2.ics.upjs.sk/maven/archetype-catalog.xml)
  • Archetype – jpaz2-archetype-novice

  • Zodpovedajte na otázky:
    • Z koľkých tried sa skladá projekt?
    • Na čo slúži metóda main v triede Launcher?
    • Čo spravia jednotlivé príkazy v metóde main triedy Launcher?
  • S využitím objektu triedy ObjectInspector preskúmajte kresliacu plochu referencovanú premennou sandbox (čo znamená, že premenná referencuje objekt?):
    • Na čo slúži vlasnosť resizable ?
    • Aké iné zaujímavé vlastnosti a metódy majú objekty triedy AnimatedWinPane?
  • Preskúmajte niektoré z metód triedy SmartTurtle, resp. Turtle.
    • Aký je rozdiel medzi moveTo a setPosition?
    • Na čo slúži vlastnosť penDown? Aké hodnoty môže nadobúdať?
    • Na čo slúžia metódy stamp, directionTowards a distanceTo?
    • Aký je rozdiel medzi metódami dot a circle?
    • Aký je rozdiel medzi vlastnosťami penColor a fillColor?
  • Do metódy main pridajte príkazy, ktoré korytnačku referencovanú premennou franklin presunú na súradnice (X: 100, Y: 150) a nastavia farbu kresliaceho pera na modrú.
  • Do metódy main pridajte príkazy a príslušné premenné, ktoré zabezpečia, že sa vytvorí korytnačka triedy Turtle umiestnená v kresliacej ploche na pozícii (X: 200, Y: 150) a referencovaná premennou cecil. Táto korytnačka nech má nastavenú červenú farbu kresliaceho pera a nech je skúmaná ObjectInspector-om.
  • Do metódy main pridajte príkazy a príslušné premenné, ktoré zabezpečia, že sa vytvorí korytnačka triedy SmartTurtle umiestnená v kresliacej ploche a referencovaná premennou albert.
  • Rozdiskutujte otázky:
    • Aký je rozdiel medzi metódami a vlastnosťami objektov referencovaných premennými franklin, cecil a albert?
    • Aký je vzťah medzi triedou SmartTurtle a triedou Turtle?
    • Čím sa z hľadiska použitia líši trieda SmartTurtle a Launcher?
  • Do metódy main pridajte príkazy, ktoré zabezpečia, že modrá korytnačka hneď po spustení programu nakreslí modrý štvorec s dĺžkou strany 75.

V nasledujúcich úlohách využívajte formulku for na opakovanie skupiny príkazov všade, kde sa len dá; nepoužívajte metódy center a setPosition.

  • Naučte korytnačky triedy SmartTurtle metódu square (bez parametrov) na nakreslenie štvorca s dĺžkou strany 75.

1
2
3
public void square() {

}
  • Rozdiskutujte otázku:
    • Aký je rozdiel medzi metódami a vlastnosťami objektov referencovaných premennými franklin, cecil a albert?
  • Naučte korytnačky triedy SmartTurtle metódu triangle, ktorá nakreslí rovnostranný trojuholník so zadanou dĺžkou strany (parameter size).

1
2
3
public void triangle(double size) {

}
  • Naučte korytnačky triedy SmartTurtle metódu rgbTrojuholnik, ktorá nakreslí rovnostranný rgb-trojuholník so zadanou dĺžkou strany. rgb-trojuholník je trojuholník nakreslený kresliacim perom hrúbky 2, pričom jedna jeho strana je červená, druhá zelená a posledná tretia je modrá.

1
2
3
public void rgbTriangle(double size) {

}
  • Naučte korytnačky triedy SmartTurtle metódy na namaľovanie štvorca a obdĺžnika. Zvoľte si vhodné parametre pre jednotlivé metódy.
  • Naučte korytnačky triedy SmartTurtle metódu na namaľovanie domčeka zadaného rozmeru. Využite už vytvorené metódy triangle a square.

1
2
3
public void house(double size) {

}

  • Naučte korytnačky triedy SmartTurtle metódu dashDotDash, ktorá nakreslí nižšie umiestnený obrazec. Metóda nech má jeden parameter length, ktorý určuje vzdialenosť medzi začiatkom prvej a koncom druhej „čiarky“ (pomlčky). Veľkosť bodky nech je nejako proporcionálna k veľkosti nakresleného obrazca (hodnote length). Pozor, metóda musí fungovať korektne aj v prípade inej farby kresliacej plochy, ako je biela.


1
2
3
public void dashDotDash(double length) {

}

Ďalšie úlohy

  • Naučte korytnačky triedy SmartTurtle metódu sun, ktorá nakreslí obrázok žltého slnka s oranžovými lúčmi. Slnko sa skladá z kruhu s polomerom zadaným cez parameter radius. Slnko má 36 lúčov rovnako dlhých ako je polomer slnka. Inšpirujte sa jednoduchou vločkou z prednášky a využite korytnačiu metódu dot.

1
2
3
public void sun(double radius) {

}

  • Naučte korytnačky triedy SmartTurtle metódu pinwheel, ktorá nakreslí jednoduchú 8-lopatkovú vrtuľku so zadanou dĺžkou lopatky (parameter size). Lopatka sa skladá z rovnej čiary zadanej dĺžky a konca dĺžky 10, ktorý zviera s lopatkou uhol 45 135 stupňov. Stred vrtuľky je určený pozíciou korytnačky.


1
2
3
public void pinwheel(double size) {

}
  • Naučte korytnačky triedy SmartTurtle metódu cross, ktorá nakreslí jedným ťahom červený kríž perom hrúbky 2. Kríž sa skladá akoby z 5 štvorcov so zadanou dĺžkou strany.

1
public void cross(double size)

  • S využitím metódy square (túto metódu neupravujte!) naprogramujte metódu squareDrawing pre objekty triedy SmartTurtle, ktorá nakreslí nižšie načrtnutý obrazec. Parametrom metódy squareDrawing nech je rozmer strany štvorca, ktorý tvorí obrazec.


1
2
3
4
5
6
7
8
9
10
public void square(double size) {
    for (int i=0; i<4; i++) {
        this.step(size);
        this.turn(90);
    }
}
   
public void squareDrawing(double size) {

}
  • Vytvorte metódu diamond pre objekty triedy SmartTurtle, ktorá nakresli kosoštvorec na základe dvoch parametrov: uhla, ktorý zvierajú strany kosoštvorca pri pozícii korytnačky a dĺžky strany kosoštvorca. Kosoštvorec nech je nakreslený tak, že korytnačka je na začiatku v jednom z jeho vrcholov a natočená je v smere jeho uhlopriečky. Farba kresliaceho pera nech je červená a hrúbka kresliaceho pera nech je 2. S využitím metódy diamond vytvorte metódu mitsubishi, ktorá nakreslí znak tejto spoločnosti.


1
2
3
4
5
6
7
public void diamond(double angle, double sideLength) {

}
   
public void mitsubishi(double angle, double sideLength) {

}
  • Naučte korytnačky triedy SmartTurtle metódu grid s jedným parametrom typu double zvaným unitSize. Metóda nakreslí mriežku 8 x 8 pričom jedno políčko mriežky je štvorec s rozmerom unitSize x unitSize. Ľavý horný roh nakreslenej mriežky nech je na pozícii (X:10, Y:10).
  • Naučte korytnačky triedy SmartTurtle metódu star4, ktorá nakreslí 4-cípu hviezdu. Hviezda je určená 2 parametrami: dĺžka cípu hviezdy (dĺžka ramena rovnoramenného trojuholníka tvoriaceho cíp hviezdy) a uhol v cípe hviezdy (uhol zvieraný ramenami rovnoramenného trojuholníka tvoriaceho cíp hviezdy).

1
public void star4(double sideLength, double angle)

Čo nebolo na prednáške (povinné)

Na cvičení sa naučíme aj niečo nové, čo nebolo obsahom prednášok.

Vyplnené polygóny

Korytnačka dokáže okrem kreslenia čiar maľovať aj vyplnené objekty. Postup je nasledovný:

  • zavolá sa metóda korytnačky openPolygon(), ktorou sa aktivuje kreslenie vyplneného objektu
  • vykonávajú sa rôzne metódy korytnačky, ktoré ju premiestňujú (hýbu ňou)
  • zavolá sa metóda korytnačky closePolygon(), ktorou sa na základe predchádzajúcej trajektórie pohybu korytnačky namaľuje vyplnený polygón.

1
2
3
4
5
6
7
8
public void filledSquare(double size) {
    this.openPolygon();
    for (int i=0; i<4; i++) {
        this.step(size);
        this.turn(90);
    }
    this.closePolygon();
}

Pri maľovaní vyplnených objektov je dobré hýbať korytnačku s vypnutým kresliacim perom. V opačnom prípade za ňou môže vzniknúť farebná stopa, ktorá sa neodstráni ani namaľovaním vyplneného objektu.

  • Vytvorte metódu, ktorá nakreslí vyplnený 6-uholník so zadanou dĺžkou strany.

Riadky pred triedou

V triede Launcher aj SmartTurtle pred hlavičkou triedy si môžete všimnúť riadky, ktoré vyzerajú nasledovne.


1
2
3
4
5
package sk.paz1a.practicals.task1;

import java.awt.Color;

import sk.upjs.jpaz2.*;

Experimentujte: Čo sa stane ak zmažeme riadok začínajúci slovom import? Po experimente si zodpovedajte otázky:

  • Na čo slúžia tieto riadky?
  • Kto ich tam napísal a kedy?

Pravidlá pre pomenovanie

  • Rozdiskutujte a vysvetlite si pravidlá pre správne vytváranie názvov projektov, tried, metód a ich parametrov.

Pre fajnšmekrov

  • Vytvorte metódy, ktoré nakreslia tieto útvary (stred kvietku nech je aktuálna pozícia korytnačky):

Testovacia úloha – odovzdávanie cez Moodle