From 95d095d0938e2da8399dfec970b6391f0a3b8225 Mon Sep 17 00:00:00 2001 From: Veritorakka <eemeli302@gmail.com> Date: Wed, 3 May 2023 22:09:30 +0300 Subject: [PATCH] Luokkainvarianttien tekeminen --- .../fi/utu/tech/ooj/exercise2/Asiakas.java | 4 ++++ .../tech/ooj/exercise2/Asiakasrekisteri.java | 4 ++++ .../java/fi/utu/tech/ooj/exercise2/Lasku.java | 5 +++++ .../fi/utu/tech/ooj/exercise2/Laskurivi.java | 18 ++++++++++++++++++ .../java/fi/utu/tech/ooj/exercise2/Tuote.java | 3 +++ .../utu/tech/ooj/exercise2/Tuoteluettelo.java | 4 ++++ 6 files changed, 38 insertions(+) diff --git a/src/main/java/fi/utu/tech/ooj/exercise2/Asiakas.java b/src/main/java/fi/utu/tech/ooj/exercise2/Asiakas.java index f3d1489..1c9ab89 100644 --- a/src/main/java/fi/utu/tech/ooj/exercise2/Asiakas.java +++ b/src/main/java/fi/utu/tech/ooj/exercise2/Asiakas.java @@ -1,6 +1,10 @@ package fi.utu.tech.ooj.exercise2; /** * Asiakas-luokka sisältää tiedot yksittäisestä asiakkaasta. + * Luokkainvariantti: + * Asiakkaan nimi ei saa olla null eikä tyhjä merkkijono. Katuosoitteen, postinumeron, postitoimipaikan ja puhelinnumeron tulee olla ei-null merkkijonoja, joiden pituus on vähintään yksi merkki. + * Postinumeron tulee olla viiden numeron mittainen merkkijono. + * Puhelinnumeron tulee sisältää vain numeroita, välilyöntejä, plus-merkkejä ja/tai miinusmerkkejä. */ public class Asiakas { private String nimi; diff --git a/src/main/java/fi/utu/tech/ooj/exercise2/Asiakasrekisteri.java b/src/main/java/fi/utu/tech/ooj/exercise2/Asiakasrekisteri.java index 179ce70..3c0987a 100644 --- a/src/main/java/fi/utu/tech/ooj/exercise2/Asiakasrekisteri.java +++ b/src/main/java/fi/utu/tech/ooj/exercise2/Asiakasrekisteri.java @@ -6,6 +6,10 @@ import java.util.ArrayList; * Asiakasrekisteri-luokka ylläpitää listaa kaikista asiakkaista. * Se mahdollistaa uusien asiakkaiden lisäämisen rekisteriin sekä * olemassa olevien asiakkaiden hakemisen ja poistamisen rekisteristä. + * Luokkainvariantti: + * Asiakasrekisteriin ei voi lisätä kahta samannimistä asiakasta. + * Tämä tarkoittaa sitä, että jos lisättävä asiakas löytyy jo rekisteristä samalla nimellä, sitä ei voida lisätä uudelleen. + * Tämä invariantti varmistaa sen, että rekisteriin ei tule duplikaattiasiakkaita. */ public class Asiakasrekisteri { private ArrayList<Asiakas> asiakkaat; diff --git a/src/main/java/fi/utu/tech/ooj/exercise2/Lasku.java b/src/main/java/fi/utu/tech/ooj/exercise2/Lasku.java index 708c09c..e2a1019 100644 --- a/src/main/java/fi/utu/tech/ooj/exercise2/Lasku.java +++ b/src/main/java/fi/utu/tech/ooj/exercise2/Lasku.java @@ -2,6 +2,11 @@ package fi.utu.tech.ooj.exercise2; import java.util.ArrayList; +/* + * Luokkainvariantti: + * Jokaisen laskurivin määrän tulee olla vähintään yksi (1) ja tuotekohtaisen alennuksen tulee olla välillä 0.0 ja 100.0 (sisältäen reunat). + * Lisäksi jokaisella laskurivillä tulee olla olemassa oleva Tuote-olio. + */ public class Lasku { private Asiakas asiakas; private ArrayList<Laskurivi> rivit; diff --git a/src/main/java/fi/utu/tech/ooj/exercise2/Laskurivi.java b/src/main/java/fi/utu/tech/ooj/exercise2/Laskurivi.java index 40b2688..229f8fb 100644 --- a/src/main/java/fi/utu/tech/ooj/exercise2/Laskurivi.java +++ b/src/main/java/fi/utu/tech/ooj/exercise2/Laskurivi.java @@ -2,6 +2,11 @@ package fi.utu.tech.ooj.exercise2; /** * Luokka kuvaa yksittäistä riviä laskussa. + * Luokkainvariantti: + * Laskurivin määrän tulee olla vähintään 1. + * Laskurivin tuotteen tulee olla voimassa (eli ei-null). + * Laskurivin tuotteen hinnan tulee olla ei-negatiivinen. + * Laskurivin tuotekohtaisen alennuksen tulee olla ei-negatiivinen ja enintään 100. */ public class Laskurivi { private Tuote tuote; @@ -14,8 +19,21 @@ public class Laskurivi { * @param tuote Laskurivin tuote. * @param maara Laskurivin tuotteiden määrä. * @param alennus Laskurivin tuotekohtainen alennus. + * @throws IllegalArgumentException jos invariantti ei toteudu */ public Laskurivi(Tuote tuote, int maara, double alennus) { + if (maara < 1) { + throw new IllegalArgumentException("Laskurivin määrän tulee olla vähintään 1."); + } + if (tuote == null) { + throw new IllegalArgumentException("Laskurivin tuote ei voi olla null."); + } + if (tuote.getHintaAlv() < 0) { + throw new IllegalArgumentException("Laskurivin tuotteen hinta ei voi olla negatiivinen."); + } + if (alennus < 0 || alennus > 100) { + throw new IllegalArgumentException("Laskurivin tuotekohtaisen alennuksen tulee olla ei-negatiivinen ja enintään 100."); + } this.tuote = tuote; this.maara = maara; this.alennus = alennus; diff --git a/src/main/java/fi/utu/tech/ooj/exercise2/Tuote.java b/src/main/java/fi/utu/tech/ooj/exercise2/Tuote.java index 470ad55..f2757d2 100644 --- a/src/main/java/fi/utu/tech/ooj/exercise2/Tuote.java +++ b/src/main/java/fi/utu/tech/ooj/exercise2/Tuote.java @@ -3,6 +3,9 @@ package fi.utu.tech.ooj.exercise2; /** * Tuote-luokka kuvaa Oy Jekku Ab:n myymää tuotetta. * Luokka sisältää tuotteen nimen, normaalihinnan ja ALV-prosentin. + * Luokkainvariantti: + * Normaalihinta ja ALV-prosentti määrittelevät yhdessä tuotteen kokonaishinnan. + * Kokonaishinta ei voi olla negatiivinen. */ public class Tuote { private String nimi; diff --git a/src/main/java/fi/utu/tech/ooj/exercise2/Tuoteluettelo.java b/src/main/java/fi/utu/tech/ooj/exercise2/Tuoteluettelo.java index 8c70982..3e178a3 100644 --- a/src/main/java/fi/utu/tech/ooj/exercise2/Tuoteluettelo.java +++ b/src/main/java/fi/utu/tech/ooj/exercise2/Tuoteluettelo.java @@ -2,6 +2,10 @@ package fi.utu.tech.ooj.exercise2; import java.util.ArrayList; +/* + * Luokkainvariantti: + * Tuotteiden lukumäärä ei voi olla negatiivinen. + */ public class Tuoteluettelo { private ArrayList<Tuote> tuotteet; -- GitLab