⌛⌛ Vertailurajapinnat

Tehtävään on saatavilla valmista materiaalia etätietovarastossa (round6/comparison-hakemisto).

Aseta vastauksesi tiedostoon Attainment.java paikallisen tietovarastosi round6/comparison-hakemistossa-

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:

  • 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 ja 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 String toString(), joka korvaa yliluokalta Object 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ä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).

    • Muista esitellä vakiot määreillä public, static ja final.

    • Voit alustaa vakiot 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 esimerkiksi komennolla javac *.java, ja suorita ensimmäinen testi komennolla java ComparisonTest attainments1.txt ja toinen testi komennolla 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.