⌛⌛ 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 vertailu String-luokan compareTo-funktiolla.

  • Julkiset rakentimet/jäsenfunktiot:

    • Rakennin Attainment(String courseCode, String studentNumber, int grade): alustaa Attainment-olioon rakentimen parametreina saamat kurssikoodin, opiskelijanumeron ja arvosanan.

    • Jäsenfunktiot getCourseCode(), getStudentNumber() ja getGrade(): palauttavat suorituksen kurssikoodin ja opiskelijanumeron (jotka ovat String-merkkijonoja) sekä arvosanan (joka on int-arvo).

    • Jäsenfunktio toString(), joka korvaa yliluokalta Object 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äsenfunktio compare vertailee kahta Attainment-oliota ensisijaisesti kurssikoodin ja toissijaisesti opiskelijanumeron perusteella.

    • Comparator<Attainment> CODE_GRADE_CMP

      • Rajapinnan Comparator<Attainment> toteuttava olio, jonka jäsenfunktio compare vertailee kahta Attainment-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.