- COMP.CS.140
- 6. Luokkahierarkiat
- 6.7 ⌛⌛ Vertailurajapinnat
⌛⌛ Vertailurajapinnat¶
Aseta vastauksesi tiedostoon Attainment.java kansiossa Round6/comparison. Muista nyhtää ``student_template_project``sta materiaalit.
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 tallettamalla kurssikoodin, opiskelijanumeron ja arvosanan.
Tässä tehtävässä toteutettavalla luokalla Attainment
tulee olla seuraavat ominaisuudet:
Toteuttaa rajapinnan
Comparable<Attainment>
.Toteuta funktio
compareTo
siten, että se vertailee ensisijaisesti opiskelijanumeroita ja toissijaisesti kurssikoodeja. Tee sekä opiskelijanumeron että kurssikoodin vertailuString
-luokancompareTo
-funktiolla.
Julkiset rakentimet/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
toString()
, joka korvaa yliluokaltaObject
perityn oletusversion. Funktio palauttaa kurssisuoritusta kuvaavan muotoa “kurssikoodi opiskelijanumero arvosana\n” olevan merkkijonon (lisäys tehtävänantoon 9.2: lopussa on rivinvaihtomerkki).
Julkiset staattiset vakiojäsenmuuttujat (eli omaavat määreet
public
static
final
):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).
Voit alustaa jäsenmuuttujat CODE_STUDENT_CMP
ja CODE_GRADE_CMP
esimerkiksi nimettömillä
luokkamäärityksillä.
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 nämä
tiedostot sekä omat luokkatoteutuksesi samaan hakemistoon, käännä ohjelma esim. tapaan
javac *.java
, ja suorita ensimmäinen testi tapaan
java ComparisonTest attainments1.txt
ja toinen testi tapaan
java ComparisonTest attainments2.txt
. Suoritusten pitäisi
tuottaa tiedostoissa output1.txt
ja output2.txt
kuvatut tulosteet.
A+ esittää tässä kohdassa tehtävän palautuslomakkeen.