INF Innleveringsoppgave 6

Like dokumenter
Obligatorisk oppgave 4 i INF1010, våren 2014: "Leger og resepter" Versjon 1.1

INF Obligatorisk innlevering 5

INF Obligatorisk innlevering 6

IN1010 V19, Obligatorisk oppgave 2

UNIVERSITETET I OSLO

Obligatorisk oppgave 4: Lege/Resept

UNIVERSITETET I OSLO

Faglærerne prøver å besøker eksamenslokalet mellom klokka 15 og 16 for å oppklare eventuelle uklarheter og feil i oppgaveteksten.

UNIVERSITETET I OSLO

INF Ekstrainnlevering

INF Obligatorisk innlevering 7

INF Obligatorisk innlevering 7

Sudokubrettet Et sudokubrett består av n n ruter. Vi bruker følgende begreper i oppgaven:

UNIVERSITETET I OSLO

2 Om statiske variable/konstanter og statiske metoder.

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

UNIVERSITETET I OSLO

Lenkelister, iteratorer, indre klasser. Repetisjonskurs våren 2018 kristijb

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

Kom forberedt til tirsdag. INF1000 Tips til obligatorisk oppgave 4. Noen generelle tips. Oblig4: Komme igang

Sudokubrettet Et sudokubrett består av n n ruter. Vi bruker følgende begreper i oppgaven:

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

UNIVERSITETET I OSLO

IN1010 V18, Obligatorisk oppgave 5

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

Oppsummering. Kort gjennomgang av klasser etc ved å løse halvparten av eksamen Klasser. Datastrukturer. Interface Subklasser Klasseparametre

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

Enkle generiske klasser i Java

Oblig 4 (av 4) INF1000, høsten 2009 Værdata, leveres innen 6. nov. kl

Obligatorisk oppgave 5: Labyrint

UNIVERSITETET I OSLO

Sudokubrettet Et sudokubrett består av n n ruter. Vi bruker følgende begreper i oppgaven:

klassen Vin må få en ny variabel Vin neste alle personvariable (personpekere) i listeklassen må byttes til Vin

< T extends Comparable<T> > Indre klasser mm. «Det du bør ha hørt om før oblig 4»

UNIVERSITETET I OSLO

Post-it spørsmål fra timen (Arv og subklasser)

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

2 Om statiske variable/konstanter og statiske metoder.

INF Seminaroppgaver til uke 3

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

UNIVERSITETET I OSLO

INF1010 siste begreper før oblig 2

UNIVERSITETET I OSLO

Informasjon Prøveeksamen i IN1000 høsten 2018

Obligatorisk oppgave 1 INF1020 h2005

UNIVERSITETET I OSLO

Oppgavesettet består av 7 sider, inkludert denne forsiden. Kontroll& at oppgaven er komplett før du begynner å besvare spørsmålene.

UNIVERSITETET I OSLO

Eksamen IN1010/INF1010 våren 2018

Obligatorisk oppgave 2: Bilhierarki

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

UNIVERSITETET I OSLO

programeksempel Et større En større problemstilling Plan for forelesingen Problemstillingen (en tekstfil) inneholdt ordet "TGA"

UNIVERSITETET I OSLO

Introduksjon til objektorientert programmering

UNIVERSITETET I OSLO

INF1000 Eksamensforberedelser og -tips. Høst 2014 Siri Moe Jensen

Etter uke 6 skal du. Introduksjon til objektorientert programmering. Hva skjedde ~1967? INF1001. Grunnkurs i objektorientert programmering

IN1010 våren januar. Objektorientering i Java

Oppsummering del 2. Læringsmål Viktigste Java-elementer Eksamen Til sist. Læringsmål Hovedpunkter Tilbakemelding Eksamen. IN1010 uke 17 våren 2019

INF Uke 10. Ukesoppgaver oktober 2012

UNIVERSITETET I OSLO

Repitisjonskurs. Arv, Subklasser og Grensesnitt

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

Velkommen til. INF våren 2016

Et større programeksempel. Hvordan løse et reelt problem med en objektorientert fremgangsmåte

INF1010 våren januar. Objektorientering i Java

UNIVERSITETET I OSLO

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk

Eksamensoppgaver 2014

Innhold uke 8. Objekter: Bruk og intern organisering. Beskjeder: Oblig 1 6. Beskjeder: Oblig 7 (og 8)

UNIVERSITETET I OSLO

INF1000 Prøveeksamen Oppgave 7 og 9

Hvordan angripe en større oppgave? (og hva skal jeg gjøre i oblig 7!?)

Objektorientert programmering i Python. Resten av semesteret. Innhold uke 9 Mer komplekse strukturer. Referanser og objekter, inkl Mentimeter spørsmål

MAT-INF 1100: Obligatorisk oppgave 1

Obligatorisk Innlevering 2

INF1010. grensesni-et Comparable<T> grensesni-et Iterable<T> rekursjon

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000

Litt om Javas class-filer og byte-kode

Test 2 OOP. - Prøveeksamen

UNIVERSITETET I OSLO

Lenkelister. Lister og køer. Kopi av utvalgte sider fra forelesningen.

UNIVERSITETET I OSLO

INF1000 Eksamen 2014 (modifisert)

Informasjon Eksamen i IN1000 høsten 2017

Drosjesentralen. I-120: Obligatorisk oppgave 2, 2000

Gjennomgang av eksamen H99

Læringsmål for forelesningen

Programmering Høst 2017

Binære søketrær. Et notat for INF1010 Stein Michael Storleer 16. mai 2013

Gjøre noe i hele treet = kalle på samme metode i alle objekten. Java datastruktur Klassestruktur

INF1010 våren 2017 Onsdag 25. januar. Litt om unntak i Java

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

INF1010, 21. februar Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

Oblig4 - forklaringer. Arne og Ole Christian

INF1000: Forelesning 7. Konstruktører Static

Transkript:

INF1010 - Innleveringsoppgave 6 Frist: Onsdag 16. mars, 10:00 Maks 6 poeng Om obligatorisk oppgave 4, 6 og 7 i INF1010, våren 2016: "Leger og resepter" Du skal jobbe med en problemstilling omkring leger og resepter i 6 uker fra 19. februar til 30. mars og du kan til sammen få maksimum 16 poeng. Den første delen av oppgaven (oblig 4), som du skal jobbe med de første to ukene (maks 4 poeng), skal leveres senest 24. februar kl 10:00. Den 24. februar frigis den andre del av oppgaven (oblig 6). Denne skal leveres senest 16. mars kl 10:00 og gir maks 6 poeng. Den siste delen (oblig 7), er det meningen at du skal begynne å jobbe med 2. mars. Den skal leveres senest 30. mars kl 10:00, og har også maks 6 poeng. Siden disse tre oppgavene bygger på hverandre er det bare mulig å hoppe av underveis. Det er ikke mulig å hoppe på, dvs. at du må ha godkjent 4 for å få godkjent 6, og du må ha godkjent 6 for å få godkjent 7. Du har godkjent en oppgave om du får ett eller flere poeng. I hovedsak består oblig 4 av å lage et klassehierarki, oblig 6 av å lage en del beholdere, og oblig 7 av å sette det hele sammen til slutt til et ordrestyrt program. I oblig 6 og oblig 7 må du kanskje gå tilbake til klassehierarkiet i oblig 4 og gjøre små forandringer. Beholdere til Leger og resepter I denne oppgaven skal dere vise at dere kan bruke grensesnitt, abstrakte klasser, generiske klasser, subklasser, lenkelister og tabeller. Dere skal programmere en del beholdere som skal brukes i oblig 7. Mange av disse beholderene skal kunne brukes til andre formål, men for å ikke gjøre oblig 6 for abstrakt er det kanskje lurt å ha bruken i oblig 7 klart for øyet hele tiden. På gruppene vil dere få hjelp til å lage iteratorer. Når dere implementerer iteratorer behøver dere ikke implementere remove(). 1

De beholderene dere skal programmere i oblig 6 skal i oblig 7 ta vare på alle legemidler, resepter, leger og pasienter. I tillegg skal en lege ha en beholder over alle reseptene vedkommende har skrevet ut, og en pasient skal ha en beholder som inneholder alle pasientenes resepter. Legemidlene skal lagres i et objekt av klassen Tabell, reseptene skal lagres i et objekt av klassen EnkelReseptListe, legene skal lagres i et objekt av SortertEnkelListe og pasientene skal lagres i et objekt av klassen Tabell. Beholderen som inneholder en leges resepter skal være av klassen EldsteForstReseptListe, mens beholderen som inneholder en pasients resepter skal være av klassen YngsteForstReseptListe. Les gjennom hele oppgaven før du starter å svare på noen spørsmål. Du må ha klar oversikt over resten av oppgave 6 før du besvarer oppgavene 6.1. Oppgave 6.1 6.1 A Tegn opp klassehierarket for beholderne. Ikke ta med navn på metoder og variabler. 6.1 B Tegn opp datastrukturen. Tegn alle beholderne, noen legemiddel-objekter, noen lege-objekter, noen pasientobjekter og noen resept-objekter. La det komme klart frem at en resept er med i mange beholdere. Tegn inn public metodene (grensesnittet) i alle beholderene. Ikke ta med andre metoder. Når det er flere like objekter behøver du bare tegne inn all variabler i ett objekt. I oppgave 6.2 og 6.3.a frigjør vi oss fra leger, resepter mm. og definere generelle grensesnitt og klasser for beholdere Oppgave 6.2: Grensesnitt (interface) for beholdere Skriv programmet for det generiske grensesnittet AbstraktTabell. Det skal ikke være noen restriksjoner på hva slags elementer den abstrakte tabellen skal kunne inneholde. AbstraktTabell beskriver en beholder og du skal kunne: Sette et objekt inn i tabellen på en oppgitt plass (indeks). Metoden returnerer sann eller usann avhengig om operasjonen gikk bra eller ikke Finne et objekt basert på en indeks Iterere over listen Skriv programmet for det generiske grensesnittet AbstraktSortertEnkelListe. En slik liste skal bare kunne inneholde elementer som implementerer grensesnittene Comparable (med seg selv) og Lik. En slik liste skal kunne: Sette inn et nytt element (i sortert rekkefølge, minste først) 2

Finne et element basert på en nøkkel av typen String Itereres over, slik at innholdet kan bli listet opp i sortert rekkefølge, minste først Oppgave 6.3: Klasser for beholdere a) Generiske klasser Skriv den generiske klassen Tabell som implementerer AbstraktTabell. Klassen skal lagre alle elementene i en array, og arrayens lengde skal oppgis som parameter til konstruktøren. Hvis du har lyst og tid: Når du setter noe inn i tabellen og det ikke er plass, skal du lage en ny array som er lang nok (innenfor rimelighetens grenser), og så kopiere alle elementene over til den nye arrayen. Skriv den generiske klassen SortertEnkelListe som implementerer AbstraktSortertEnkelListe som en enveisliste. Du skal programmere denne listen selv, ikke bruke klasser fra Java-biblioteket. b) Ikke-generiske klasser Skriv klassen EnkelReseptListe. Klassen EnkelReseptListe skal inneholde en envisliste med en peker til første og en peker til siste element i listen. Klassen skal kunne ta vare på resepter, og en resept må kunne være med i flere objekter av denne klassen. Metodene i klassen skal kunne sette inn en resept og finne en resept basert på reseptnummeret. Hvis resepten som det letes etter ikke finnes i listen, skal det kastes et unntak. Skriv også en iterator over listen. Igjen skal du programmere denne listen selv, ikke bruke klasser fra Java-biblioteket. Skriv subklassene EldsteForstReseptListe og YngsteForstReseptListe. Når du itererer over den første klassen skal du starte med den eldste resepten (den som ble satt inn først) og gå mot yngre (de som ble satt inn sist). Når du itererer i den andre klassen, skal du starte i den yngste enden. Hint: Forskjellen på de to subklassene til klassen EnkelReseptListe kan være bare metoden som setter inn en resept. Utfordring: I både SortertEnkelListe og EnkelReseptListe skal du skrive en iterator. Kan du klare å bruke den samme iteratoren i begge klassene? Da må de to listene kanskje ha de samme nodene? 3

Oppgave 6.4: Enkle enhetstester for alle beholderene Skriv et lite testprogram for hver av klassene Tabell, SortertEnkelListe, EldsteForstReseptListe og YngsteForstReseptListe. Prøv å lage programmene slik at både vanlige tilfeller og noen spesialtilfeller blir testet. Innleveringen på denne oppgaven er tegningene fra oppgave 6.1, alle grensesnittene og klassene, og de fire kjørbare programmene fra oppgave 6.4 4

Krav til innleveringen 1. Klassenavnet og filnavnet skal være identisk. 2. Klassenavn skal skrives med stor forbokstav. 3. Variabelnavn skal ha liten forbokstav. 4. Oppgaven må kunne kompilere og kjøre på IFI sine maskiner. 5..class filer skal ikke leveres. 6. Ikke bruk æ, ø eller å i.java-filene(heller ikke som kommentarer eller utskrift). 7. Filene skal inneholde gode kommentarer som forklarer hva programmet gjør. 8. Programmet skal inneholde gode utskriftssetninger som gjør det enkelt for bruker å forstå. 9. Metodenavn skal skrives med liten forbokstav. 10. Koden skal være riktig indendert. Er du usikker, se Appendix J i Big Java. 11. Hver klasse skal ligge i sin egen.java-fil. Fremgangsmåte for innleveringer i INF1010 1. Lag en fil som heter README.txt. Følgende spørsmål skal være besvart i filen: 1) Hvordan synes du innleveringen var? Hva var enkelt og hva var vanskelig? 2) Hvor lang tid (ca) brukte du på innleveringen? 3) Samarbeidet du med noen under innleveringen? Hvis ja, skriv brukernavn på den/de du samarbeidet med. 4) Var det noen oppgaver du ikke fikk til? Hvis ja: a) Hvilke(n) oppgave er det som ikke fungerer i innleveringen? b) Hvorfor tror du at oppgaven ikke fungerer? c) Hva ville du gjort for å få oppgaven til å fungere hvis du hadde mer tid? 2. Logg inn på Devilry. 3. Lever.java-filene, bilde av klassehierarkiet og README.txt i samme innlevering. 4. Husk å trykke lever og sjekk deretter at innleveringen din er komplett. 5