Commit baf4111b authored by Marek Trtik's avatar Marek Trtik
Browse files

iteration-01 assignment

parent 3b867c01
Loading
Loading
Loading
Loading
+45 −5
Original line number Diff line number Diff line
## Zadání iterace 00
## Zadání iterace 01

Upravte `Demo` aplikaci v balíku `cz.muni.fi.pb112.project.demo` tak,
aby vypsala text:  
**Iterace pro seznámení se s objekty a zapouzdřením.**

    Hello, World!
1.  Vytvořte třídu `Vertex2D` reprezentující bod ve 2D prostoru se souřadnicemi *X* a *Y*.
    *   Třída bude v balíčku `cz.muni.fi.pb112.project.geometry` (musíte vytvořit odpovídající balíček).
    *   Třída bude mít dva atributy typu `double`, které budou ukládat hodnoty souřadnic *X* a *Y*.
        Jejich výchozí hodnota bude 0.

        > Atributy by měly mít přesné a popisné názvy, protože se mohou objevit kdekoliv ve třídě. Proto se nedoporučují jednopísmenné názvy. Nicméně písmena *X* a *Y* pro souřadnice jsou rozšířená, takže v tomto konkrétním případě tyto jednopísmenné atributy akceptujeme.

    *   Zatím **nevytvářejte** konstruktory. Konstruktory budeme řešit v další iteraci.
    *   Přidejte do třídy tzv. _gettery_ a _settery_.
        > Zvolte vhodné názvy, které odpovídají názvům vybraných atributů.

    *   Metoda `String getInfo()` vrací formátovaný popis souřadnic podle následujícího příkladu:
        Pro bod se souřadnicemi x=2.1 y=3.45 vrací **11 znaků** (včetně mezery):  
        `[2.1, 3.45]`.
    *   Metoda `double sumCoordinates()` vrací součet souřadnic *X* a *Y*.
    *   Metoda `void move(Vertex2D vertex)` bere jako vstupní parametr jiný 2D bod a posune vrchol o souřadnice `vertex`. Například volání metody `move` nad vrcholem se souřadnicemi `[2, 3]` a se vstupním parametrem `[1, 1]` posune vrchol `[2, 3]` na `[3, 4]`.
    *   Upravte viditelnost atributů a metod tak, aby splňovaly podmínky zapouzdření.

2.  Upravte třídu `Demo` v balíčku `cz.muni.fi.pb112.project.demo` takto:
    *   Odstraňte výpis `Hello, World!`.
    *   Třída vytvoří dva vrcholy se souřadnicemi `[2, 3]` a `[1, 1]`.
        > Nápověda: Třída `Vertex2D` musí být do třídy `Demo` **importována**, protože se nachází v jiném balíčku.

    *   Poté posune první vrchol o souřadnice druhého vrcholu.
    *   Poté vypíše informace o obou vrcholech.
    *   Program vypíše na standardní výstup:

        ~~~~
        [3.0, 4.0]
        [1.0, 1.0]
        ~~~~


3.  Zdokumentujte obě třídy pomocí [_JavaDocu_](https://en.wikipedia.org/wiki/Javadoc).
    * Minimálně musí být zdokumentován autor, účel veřejných metod, vstupní parametry a návratová hodnota.
    * Přítomnost povinných položek Javadocu je kontrolována pluginem *checkstyle*. Obsah je však na vás. Buďte struční, ale důkladní.
    * Pro gettery a settery není nutné psát Javadoc, protože jejich účel a použití jsou zřejmé.


4.  Otestujte svůj kód pomocí jednotkových testů v balíčku **src/test/java**. Po úspěšném otestování odevzdejte do **git**u a nechte zkontrolovat vyučujícím. Odevzdaná iterace musí projít *testy* i *checkstyle*!
    * Jednotkové testy lze spouštět a kontrolu stylu lze provádět v IDE (např. při sestavení kódu).
    * Pokud si nejste jisti, spusťte na příkazové řádce `mvn clean install`.
    * Testy se také spouštějí při odevzdání (push) kódu do **git**u.
Dale uveďte sebe jako autora třídy (tj. vyřešte TODO za `@author`).
+2 −1
Original line number Diff line number Diff line
@@ -12,7 +12,8 @@ import static org.assertj.core.api.Assertions.assertThat;
 */
public class DemoTest {

    private static final String EXPECTED_OUTPUT = "Hello, World!" + System.lineSeparator();
    private static final String EXPECTED_OUTPUT = "[3.0, 4.0]" + System.lineSeparator()
            + "[1.0, 1.0]" + System.lineSeparator();

    @Test
    public void testMainOutput() {
+77 −0
Original line number Diff line number Diff line
package cz.muni.fi.pb112.project.geometry;

import cz.muni.fi.pb112.project.helper.BasicRulesTester;
import org.junit.Before;
import org.junit.Test;

import static org.assertj.core.api.Assertions.within;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;

/**
 * Simple Vertex2D tests.
 * @author Marek Sabo
 */
public class Vertex2DTest {
    private Vertex2D vertex2D;

    private static final double X = -1.2;
    private static final double Y = 2.4;
    private static final double DELTA = 0.001;

    @Before
    public void setUp() {
        vertex2D = createVertex(X, Y);
    }

    private Vertex2D createVertex(double x, double y) {
        Vertex2D v = new Vertex2D();
        v.setX(x);
        v.setY(y);
        return v;
    }

    @Test
    public void attributesAndMethodsAmount() {
        BasicRulesTester.attributesAmount(Vertex2D.class, 2);
        BasicRulesTester.methodsAmount(Vertex2D.class, 7);
    }

    @Test
    public void gettersAndSetters() {
        assertThat(vertex2D.getX()).isEqualTo(X);
        assertThat(vertex2D.getY()).isEqualTo(Y);
    }

    @Test
    public void attributesAre0() {
        Vertex2D v = new Vertex2D();
        assertVertex(v, 0.0, 0.0);
    }

    @Test
    public void getInfo() {
        assertThat(vertex2D.getInfo()).isEqualTo("[" + X + ", " + Y + "]");
    }

    @Test
    public void sumCoordinates() {
        assertThat(vertex2D.sumCoordinates()).isCloseTo(X + Y, within(DELTA));
    }

    @Test
    public void moveVertex() {
        final double XX = -3.3;
        final double YY = -5.5;
        Vertex2D negativeVertex = createVertex(XX, YY);

        vertex2D.move(negativeVertex);

        assertVertex(vertex2D, XX + X, YY + Y);
        assertVertex(negativeVertex, XX, YY);
    }

    private void assertVertex(Vertex2D v, double x, double y) {
        assertThat(v.getX()).isCloseTo(x, within(DELTA));
        assertThat(v.getY()).isCloseTo(y, within(DELTA));
    }
}