⌛⌛ 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 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ä.

Automaattiset sekä alla kuvatut testit olettavat, että teet projektitiedostoosi pom.xml seuraavat määritykset:

  • artifactId-elementin arvo on comparison.

  • version-elementin arvo on 1.0.

  • maven.compiler.source ja maven.compiler.target -elementtien arvo on 17 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 on ComparisonTest, 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.