- COMP.CS.140
- 6. Luokkahierarkiat
- 6.7 ⌛⌛ Vertailurajapinnat
⌛⌛ Vertailurajapinnat¶
Tehtävään on saatavilla valmista materiaalia etätietovarastossa (round6/comparison
-hakemisto).
Tehtävän palautus koostuu Maven-projektista. Sijoita pom.xml
-tiedosto paikallisen tietovarastosi
round6/comparison
-hakemistoon ja tee tähän hakemistoon src/main/java
-niminen alihakemisto.
Tee luokkatiedosto Attainment.java ja liitä se
fi.tuni.prog3.comparison
-nimiseen pakkaukseen. Tiedostojesi tulee olla siten hakemistossa
round6/comparison/src/main/java/fi/tuni/prog3/comparison
.
Tässä tehtävässä kokeillaan erilaisia tapoja toteuttaa vertailufunktio jollekin luokalle. Pohjana
käytetään aiemmasta opiskelijarekisteriä koskevasta tehtävästä tuttua luokkaa Attainment
,
joka kuvaa kurssisuorituksen tallentamalla kurssikoodin, opiskelijanumeron ja arvosanan.
Tässä tehtävässä tehtävällä luokalla Attainment
tulee olla seuraavat ominaisuudet:
Pakkausmääritys
package fi.tuni.prog3.comparison;
Toteuttaa rajapinnan
Comparable<Attainment>
. Käytä Javan Comparable-rajapintaa.Toteuta funktio
compareTo
siten, että se vertailee ensisijaisesti opiskelijanumeroita ja toissijaisesti kurssikoodeja. Tee sekä opiskelijanumeron että kurssikoodin vertailuString
-luokancompareTo
-funktiolla.
Julkiset rakentimet ja jäsenfunktiot:
Rakennin
Attainment(String courseCode, String studentNumber, int grade)
alustaaAttainment
-olioon rakentimen parametreina saamat kurssikoodin, opiskelijanumeron ja arvosanan.Jäsenfunktiot
getCourseCode()
,getStudentNumber()
jagetGrade()
palauttavat suorituksen kurssikoodin ja opiskelijanumeron, jotka ovatString
-merkkijonoja sekä arvosanan, joka onint
-arvo.Jäsenfunktio
String toString()
, joka korvaa yliluokaltaObject
perityn oletusversion. Funktio palauttaa kurssisuoritusta kuvaavan muotoa “kurssikoodi opiskelijanumero arvosana” olevan merkkijonon.
Julkiset luokkavakiot:
Comparator<Attainment> CODE_STUDENT_CMP
Rajapinnan
Comparator<Attainment>
toteuttava olio, jonka jäsenfunktiocompare
vertailee kahtaAttainment
-oliota ensisijaisesti kurssikoodin ja toissijaisesti opiskelijanumeron perusteella.
Comparator<Attainment> CODE_GRADE_CMP
Rajapinnan
Comparator<Attainment>
toteuttava olio, jonka jäsenfunktiocompare
vertailee kahtaAttainment
-oliota ensisijaisesti kurssikoodin ja toissijaisesti kurssiarvosanan perusteella. Kurssiarvosanoja verrataan käänteisesti (tulevat laskevaan järjestykseen).
Muista esitellä vakiot määreillä
public
,static
jafinal
.Voit alustaa vakiot esimerkiksi nimettömillä luokkamäärityksillä.
Automaattiset sekä alla kuvatut testit olettavat, että teet projektitiedostoosi pom.xml
seuraavat määritykset:
artifactId
-elementin arvo oncomparison
.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 onComparisonTest
, joka on alla kuvattu valmiina annettu testiluokka.
Toteutuksen testaus¶
Voit testata luokkiasi tiedostossa ComparisonTest.java
annetun valmiin testiohjelman,
tiedostoissa attainments1.txt
ja attainments2.txt
annettujen testidatojen, ja
tiedostoissa output1.txt
ja output2.txt
annettujen esimerkkitulosteiden avulla.
Aseta ComparisonTest.java
Maven-projektisi alihakemiston src/main/java
juureen ja muut
tiedostot Maven-projektisi juurihakemistoon pom.xml
tiedoston seuraksi. Edellä on huomattava,
että ComparisonTest.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/comparison-1.0.one-jar.jar attainments1.txt
ja toisen testin komennolla
java -jar target/comparison-1.0.one-jar.jar attainments2.txt``projektin juurihakemistossa.
Suoritusten pitäisi tuottaa tiedostoissa ``output1.txt
ja output2.txt
kuvatut tulosteet.
A+ esittää tässä kohdassa tehtävän palautuslomakkeen.