Arvutiteaduse instituut
  1. Kursused
  2. 2019/20 kevad
  3. Objektorienteeritud programmeerimine (LTAT.03.003)
EN
Logi sisse

Objektorienteeritud programmeerimine 2019/20 kevad

  • Kodutööd ja praktikumid
  • Loengud
  • Kursuse korraldus
  • IDE juhendid
  • Silumisest
  • Edasijõudnute rühm

6. praktikum - kontrolltöö näidisülesanne

NB! Näidisülesande lahendamine on küllaltki töömahukas. Tegelikult tuleb kontrolltöös lühem ülesanne, milles kõiki näidisülesandes toodud asju ei nõuta.

Kontrolltöö üldreeglid

Automaattestimise võimaldamiseks peavad kõik klassid asuma kindlas paketis ja kõik Java failid peavad olema kindla kodeeringuga. Antud juhul lepime kokku, et klassid asuvad vaikepaketis (st. failide alguses ei ole package direktiivi) ja failide kodeering on UTF-8. Kodeeringu määramise juhise leiate 4. praktikumi materjali algusest.

Raamatukogust saab laenutada erinevaid teoseid - raamatuid ja ajakirju. Teoseid laenutatakse erinevateks tähtaegadeks vastavalt tähisele: roheline tähis – 24 tunniks (ehk 1 päevaks), tähis puudub – 14 päevaks, kollane – 30 päevaks ja sinine – 60 päevaks. Kui teoseid tähtajaks tagasi ei vii, tuleb hakata maksma viivist vastavalt korraldusele: 30 ja 60 päeva laenutus – 0.05 eurot teose kohta iga ületatud päeva eest, 14 päeva laenutus – 0.15 eurot teose kohta iga ületatud päeva eest, 24 tunni laenutus – 2 eurot teose kohta iga ületatud päeva eest. Tavaliselt tuuakse kõik teosed tähtajaks tagasi, aga mõned tegelased kipuvad tähtaegu täielikult ignoreerima. Kirjutame programmi, mis otsib laenutuste nimekirjast väga suurte viivistega laenutusi ja kõige suurema viivisega laenutaja ja väljastab neile hoiatusi.

Laenutuste andmed on kirjas failis järgmises formaadis:

Aksel Telgmaa, Matemaatika VI klassile; kollane; Joosep Kask; 125
Kodu ja aed/2013,10; kollane; Teele Tamm; 59
Oskar Luts, Kevade; sinine; Teele Tamm; 39
Artur Jürisson, Eesti-inglise õigussõnaraamat; puudub; Jaan Aruhein; 224
Juhani Püttsepp, Peipsimaa kaart; roheline; Joosep Kask; 22
Kroonika/2010,15; puudub; Joosep Kask; 4

Failis on igal real teose kirjeldus, teose tähis, laenutaja nimi ja laenutatud päevade arv. Eraldajaks on semikoolon koos tühikuga. Raamatute puhul on kirjelduseks autori nimi, koma koos tühikuga ja raamatu pealkiri. Ajakirjade puhul on kirjelduseks pealkiri, kaldkriips, aasta number, koma ja ajakirja number. Võib eeldada, et kui kirjelduses kaldkripsu pole, siis tegu on raamatuga.

Kontrolltöö seisneb teoste tagastamist arvestava programmi koostamises. Programm peab vastama alltoodud nõuetele (isegi kui need kummalised tunduvad). Programm peab sisaldama abstraktse klassi Teos, liidest Kontrollija, klasse Ajakiri, Raamat, ViiviseHoiataja, SuurimaViiviseLeidja ning peaklassi. Peaklassis loetakse sisse teoste nimekiri ja kasutatakse viivise kontrollijaid, et hilinejatele hoiatusi saata. Peaklassis testitakse ka erinevate isendimeetodite tööd. Kõikide klasside kõik isendiväljad peavad olema privaatsed.

1. Liides Kontrollija sisaldab void-tüüpi meetodit salvestaViivis, mis võtab parameetriteks laenutaja nime (String), teose kirjelduse (String) ja viivise suuruse (double).

2. Klass ViiviseHoiataja realiseerib liidest Kontrollija.

  1. Klassis peab olema ühe double argumendiga konstruktor, mille abil saab määrata lubatud viivise.
  2. Meetod salvestaViivis peab argumendiks saadud laenutaja nime meelde jätma, kui viivis ületab lubatud viivise piiri ja kui seda nime pole veel salvestatud.
  3. Meetod getHoiatatavadLaenutajad peab tagastama listi kõigi nende laenutajate nimedega, kelle viivise suurus ületab lubatud piiri.

3. Klass SuurimaViiviseLeidja realiseerib liidest Kontrollija.

  1. Klassis peab olema void-tüüpi parameetriteta meetod saadaHoiatus, mis prindib ekraanile kõige suurema viivisega laenutaja nime ja tema poolt laenutatud teose kirjelduse.
  2. Mälu kokkuhoiu mõttes ei tohiks SuurimaViiviseLeidja jätta meelde rohkem andmeid, kui on tarvis suurima viivisega inimesele hoiatuse saatmiseks (see tähendab, et ViiviseHoiataja ning SuurimaViiviseLeidja peaks meetodi salvestaViivis realiseerima erinevalt.) (Vihje: jäta alati meelde vaid suurima viivise andmed.)

4. Abstraktsel klassil Teos peab olema konstruktor teose kirjelduse (String), teose tähise (String), laenutaja (String) ja päevade arvu (int) määramiseks.

  1. Klassis on abstraktne boolean-tüüpi meetod kasHoidlast, mis näitab, kas teost on vaja tellida hoidlast.
  2. Samuti on parameetriteta int-tüüpi isendimeetod laenutusaeg, mis tagastab selle teose laenutusaja (ehk mitmeks päevaks teost tähise järgi on lubatud laenutada). Kui tähis on erinev kui roheline, kollane, sinine, puudub, siis tagastatakse 0.
  3. Samuti on klassis double-tüüpi parameetriteta meetod päevaneViivis, mis tagastab vastavalt tähisele sobiva viivise ühe tähtaega ületanud päeva kohta.
  4. Samuti on klassis void-tüüpi meetod arvutaViivis, mis võtab parameetriks Kontrollija isendi. Tähtaja ületanud laenutuse korral arvutab meetod viivise suuruse ja laseb kontrollijal selle salvestada (salvestaViivis).
  5. Samuti on klassis Teos meetod toString, mis aitab kogu teadaolevat infot teose ja selle laenutamise kohta sobivalt kujundada. Muuhulgas peab olema näidatud, kas teost on vaja tellida hoidlast.
  6. Klass Teos realiseerib liidest Comparable<Teos>, kusjuures compareTo meetod realiseeritakse nii, et teoseid võrreldakse kirjelduse alusel.

5. Klass Raamat on klassi Teos alamklass. Klassis on konstruktor vajaliku info määramiseks ja vähemalt järgmised meetodid.

  1. Meetod kasHoidlast, mis tagastab true, kui raamatu tähis on kollane või sinine, vastasel juhul tagastatakse false.
  2. Meetod toString, mis tagastab ülemklassi toString tulemuse koos märkusega, et tegemist on raamatuga.

6. Klass Ajakiri on klassi Teos alamklass. Klassis on konstruktor vajaliku info määramiseks ja vähemalt järgmised meetodid.

  1. Meetod kasHoidlast, mis tagastab true, kui ajakiri ilmus aastal 2000 või varem, vastasel juhul tagastatakse false.
  2. Meetod toString, mille ülekatmisel on rakendatud ülemklassi meetodit toString lisades märkuse selle kohta, et tegemist on ajakirjaga.

7. Peaklass peab olema nimega Peaklass. Klassis peab olema staatiline avalik meetod loeTeosed tagastustüübiga List<Teos>, mis võtab argumendiks failinime ja tagastab selles failis olevad laenutuste andmed. Meetod võib visata erindi (st. meetodi signatuuris võib olla throws Exception). Teoste faili formaat on ülalpool toodud. Teoste arv failis ei ole teada (programm peaks töötama suvalise (ka tühja) failiga). Kui failist lugemist ei õnnestu programmeerida, siis kirjutatagu selles meetodis vastav list programmi sisse (vähendab tulemust 2 punkti võrra).

Peameetodis tehakse järgmised tegevused.

  • Rakendatakse vastavat staatilist meetodit, et lugeda failist teoste andmed.
  • Sorteeritakse teoseid vastavalt meetodis compareTo kirjeldatud järjekorrale (listi sorteerida saab kasutades meetodit java.util.Collections.sort(List<T> list)).
  • Luuakse ViiviseHoiataja (lubatud viivis 0.2€) ja SuurimaViiviseLeidja isendid.
  • Kutsutakse iga teose peal arvutaViivis, andes parameetriks ViiviseHoiataja isendi. Pärast kõigi viiviste arvutamist prindi välja ViiviseHoiatajasse kogunenud laenutajate nimed.
  • Kutsutakse iga teose peal arvutaViivis, andes parameetriks SuurimaViiviseLeidja isendi. Pärast kõigi viiviste arvutamist saada suurima viivise omanikule hoiatus (kasutades vastavat SuurimaViiviseLeidja meetodit).
  • Sobivates kohtades näidata isendite infot ja meetodite töö tulemusi ekraanil.

Andmete fail on aadressil http://kodu.ut.ee/~marinai/laenutus.txt. Salvestage see oma arvutisse. Fail on kodeeringus UTF-8. Vajadusel tutvuge klassi Scanner konstruktoriga, mis võimaldab kodeeringut näidata.

Mittekompileeruva programmi eest punkte ei saa.

  • Arvutiteaduse instituut
  • Loodus- ja täppisteaduste valdkond
  • Tartu Ülikool
Tehniliste probleemide või küsimuste korral kirjuta:

Kursuse sisu ja korralduslike küsimustega pöörduge kursuse korraldajate poole.
Õppematerjalide varalised autoriõigused kuuluvad Tartu Ülikoolile. Õppematerjalide kasutamine on lubatud autoriõiguse seaduses ettenähtud teose vaba kasutamise eesmärkidel ja tingimustel. Õppematerjalide kasutamisel on kasutaja kohustatud viitama õppematerjalide autorile.
Õppematerjalide kasutamine muudel eesmärkidel on lubatud ainult Tartu Ülikooli eelneval kirjalikul nõusolekul.
Courses’i keskkonna kasutustingimused