- COMP.CS.140
- 6. Luokkahierarkiat
- 6.6 ⌛ Kuviot
⌛ Kuviot¶
Tehtävään on saatavilla valmista materiaalia etätietovarastossa (round6/shapes
-hakemisto).
Tehtävän palautus koostuu Maven-projektista. Sijoita pom.xml
-tiedosto paikallisen tietovarastosi
round6/shapes
-hakemistoon ja tee tähän hakemistoon src/main/java
-niminen alihakemisto.
Tee luokkatiedostot Circle.java, Rectangle.java ja IShapeMetrics.java ja liitä ne
fi.tuni.prog3.shapes
-nimiseen pakkaukseen. Tiedostojesi tulee olla siten hakemistossa
round6/shapes/src/main/java/fi/tuni/prog3/shapes
. Käytämme tässä tehtävässä tapaa nimetä
rajapinta I-etuliitteellä. Tämä on vakiintunut käytäntö esimerkiksi C#-kielessä, ja jotkut
käyttävät sitä myös Javassa.
Tässä tehtävässä kokeillaan rajapinnan toteuttamista muutamalla luokalla. Tee:
Rajapinta
IShapeMetrics
, jossa on:Jäsenmuuttuja
double PI
, joka esittää piin likiarvon viiden desimaalin tarkkuudella.Abstraktit jäsenfunktiot
String name()
,double area()
jadouble circumference()
.
Luokka
Circle
, joka toteuttaa rajapinnanIShapeMetrics
ja tallentaa ympyrän säteendouble
-tyyppisenä arvona. Julkiset jäsenet:Rakennin
Circle(double radius)
, joka asettaa säteen arvon.Jäsenfunktio
String toString()
, joka korvaa yliluokaltaObject
perityn oletusversion. Funktio palauttaa merkkijonon “Circle with radius: x
”, jossax
on säteen arvo kahden desimaalin tarkkuudella. Desimaalierottimena käytetään pistettä. Voit muotoilla merkkijonon haluttuun muotoonString
-luokanformat
-jäsenfunktiolla.Jäsenfunktio
String name()
, joka palauttaa merkkijonon “circle
”.Jäsenfunktio
double area()
, joka palauttaa ympyrän pinta-alan, jonka laskennassa on käytetty piin likiarvoaPI
.Jäsenfunktio
double circumference()
, joka palauttaa ympyrän piirin, jonka laskennassa on käytetty piin likiarvoaPI
.
Luokka
Rectangle
, joka toteuttaa rajapinnanIShapeMetrics
ja tallentaa suorakulmion korkeuden ja leveydendouble
-tyyppisinä arvoina. Julkiset jäsenet:Rakennin
Rectangle(double height, double width)
, joka asettaa pituuden ja leveyden.Jäsenfunktio
String toString()
, joka korvaa yliluokaltaObject
perityn oletusversion. Funktio palauttaa merkkijonon “Rectangle with height x and width y
”, jossax
on suorakulmion korkeus jay
suorakulmion leveys kahden desimaalin tarkkuudella. Desimaalierottimena käytetään pistettä. Voit muotoilla merkkijonon haluttuun muotoonString
-luokanformat
-jäsenfunktiolla.Jäsenfunktio
String name()
, joka palauttaa merkkijonon “rectangle
”.Jäsenfunktio
double area()
, joka palauttaa suorakulmion pinta-alan.Jäsenfunktio
double circumference()
, joka palauttaa suorakulmion piirin.
Automaattiset sekä alla kuvatut testit olettavat, että teet projektitiedostoosi pom.xml
seuraavat määritykset:
artifactId
-elementin arvo onshapes
.version
-elementin arvo on1.0
.maven.compiler.source
jamaven.compiler.target
-elementtien arvo on17
tai pienempi. Tarkistimella on asennettuna Java 17, joten tätä uudempaa versiota ei voi käyttää.Onejar-liitännäisen määritys, jonka
mainClass
-elementin arvo onInterfaceTest
, joka on alla kuvattu valmiina annettu testiluokka.
Toteutuksen testaus¶
Voit testata luokkiasi tiedostossa InterfaceTest.java
annetun valmiin testiohjelman sekä
tiedostoissa output1.txt
ja output2.txt
annettujen esimerkkitulosteiden avulla.
Aseta InterfaceTest.java
Maven-projektisi alihakemiston src/main/java
juureen ja muut
tiedostot Maven-projektisi juurihakemistoon pom.xml
tiedoston seuraksi. Edellä on huomattava,
että InterfaceTest.java
ei sisällä pakkausmääritystä, joten sitä ei siksi aseteta syvempään
alihakemistoon.
Voit tämän jälkeen kääntää ohjelman komennolla mvn package
ja suorittaa ensimmäisen testin komennolla
java -jar target/shapes-1.0.one-jar.jar "4" "5" "6.0" "7.0"
ja toisen testin komennolla
java -jar target/shapes-1.0.one-jar.jar "4 4" "5 2" "6.0 12" "70.0 4"
projektin juurihakemistossa.
Suoritusten pitäisi tuottaa tiedostoissa output1.txt
ja output2.txt
kuvatut tulosteet.
A+ esittää tässä kohdassa tehtävän palautuslomakkeen.