IN1010 V19, Obligatorisk oppgave 2

Like dokumenter
Obligatorisk oppgave 4: Lege/Resept

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

INF Innleveringsoppgave 6

Seminaroppgaver IN1010, uke 2

Repitisjonskurs. Arv, Subklasser og Grensesnitt

IN1010 V18, Obligatorisk oppgave 5

IN1000 Obligatorisk innlevering 7

Obligatorisk oppgave 5: Labyrint

INF Løsning på seminaropppgaver til uke 8

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs

Informasjon Eksamen i IN1000 og IN1001 høsten a) 1 poeng. 1b) 1 poeng. Tid. Oppgavene. Tillatte hjelpemidler. 30. november kl. 14.

Obligatorisk oppgave 2: Bilhierarki

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

INF Obligatorisk innlevering 5

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

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

class Book { String title; } class Dictionary extends Book { int wordcount; } class CartoonAlbum extends Book { int stripcount; }

Obligatorisk oppgave 1: Regneklynge

Informasjon Prøveeksamen i IN1000 høsten 2018

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

INF Obligatorisk innlevering 7

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

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I

Eksekveringsrekkefølgen (del 1) Oppgave 1. Eksekveringsrekkefølgen (del 2) Kommentar til oppgave 1. } // class Bolighus

INF Obligatorisk innlevering 6

INF1000 Prøveeksamen Oppgave 7 og 9

Eksamensoppgaver 2014

UNIVERSITETET I BERGEN Det matematisk-naturvitenskapelige fakultet

UNIVERSITETET I OSLO

TDT4100 Objektorientert programmering

2 Om statiske variable/konstanter og statiske metoder.

UNIVERSITETET I OSLO

Objektorientert programmering i Python

OO-eksempel. Modellen ser slik ut: Studenter + antstudenter : int = 0

INF1010 våren januar. Objektorientering i Java

Arv. Book book1 = new Book(); book1. title = "Sofies verden" class Book { String title; } class Dictiona ry extends Book {

EKSAMEN I FAG TDT4100 Objekt-orientert programmering. Fredag 3. juni 2005 KL

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

IN1010 våren januar. Objektorientering i Java

INF100 INNLEVERING 3 HØSTEN 2004

INF1000 Eksamen 2014 (modifisert)

UNIVERSITETET I OSLO

Kapittel 7: Mer om arv

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

UNIVERSITETET I OSLO

Forklaring til programmet AbstraktKontoTest.java med tilhørende filer Konto.java, KredittKonto.java, SpareKonto.java

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

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

Antall sider (inkl. forsiden): 7. Alle trykte og håndskrevne

MAT-INF 1100: Obligatorisk oppgave 1

UNIVERSITETET I OSLO

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I Løsningsforslag

IN1010 våren 2018 Tirsdag 15. mai. Repetisjon av subklasser og tråder. Stein Gjessing Institutt for informatikk Universitetet i Oslo

Algoritmer og datastrukturer Eksamen

Løse reelle problemer

2 Om statiske variable/konstanter og statiske metoder.

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

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

Test 2 OOP. - Prøveeksamen

INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først)

MAT-INF 1100: Obligatorisk oppgave 1

UNIVERSITETET I OSLO

TOD063 Datastrukturer og algoritmer

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

Gjennomgang av eksamen H99

UNIVERSITETET I OSLO

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

Eksamen IN1010/INF1010 våren 2018

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

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

IN Seminaroppgaver til uke 11

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

Eksamen. Objektorientert Programmering IGR 1372

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

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

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

Objektorientert design av kode. Refaktorering.

Innhold. INF1000 Høst Unified Modeling Language (UML) Unified Modeling Language (UML)

Oblig 4Hybelhus litt mer tips enn i oppgaven

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

INF Uke 10. Ukesoppgaver oktober 2012

Introduksjon til objektorientert programmering

Leksjon 7. Filer og unntak

IN Notat om I/O i Java

EKSAMEN I INF244: OBJEKTORIENTERT PROGRAMVAREUTVIKLING I BACHELORSTUDIET I IT OG INFORMASJONSSYSTEMER BACHELORSTUDIET I IT OG ENTREPRENØRSKAP

UNIVERSITETET I OSLO

Transkript:

IN1010 V19, Obligatorisk oppgave 2 Innleveringsfrist: Tirsdag 26.02 kl 23.59 Introduksjon I de obligatoriske oppgavene fremover skal du lage et system som holder styr på leger, pasienter, resepter og legemidler. I denne første oppgaven skal du opprette objekter og skrive klasser for legemidler, resepter og leger og gjøre relevante tester av disse. Det forventes at du skriver ryddig og lesbar kode, og det anbefales at du skriver fornuftige kommentarer underveis slik at du selv har oversikt over hvordan de forskjellige delene av programmet fungerer. Notat om ID Noen av objektene i denne obligen skal kunne identifiseres ved en ID. Med ID menes her et unikt, ikke-negativt heltall. Det første objektet som opprettes av en bestemt klasse skal ha id = 0, det andre id = 1, det tredje id = 2, osv. Merk at ID-ene ikke er unike på tvers av alle klassene, men hvert objekt av en bestemt type skal ha en id som ingen andre objekter av den samme klassen har. Det vil si at ingen legemidler har samme ID, og ingen resepter har samme ID, men en resept og et legemiddel kan ha samme ID. Del A: Legemidler og Preparater Legemidler deles inn i tre kategorier, som kalles Preparat A, Preparat B, eller Preparat C. Et preparat har et navn, en ID og en pris. I tillegg må vi for alle preparater kunne vite hvor mye virkestoff (mg) det inneholder totalt. Prisen og virkestoffet skal lagres som flyttall. Et legemiddel skal være en av subtypene Preparat A, narkotisk, Preparat B, vanedannende, eller Preparat C, vanlig legemiddel. Det er stor forskjell på legemidler av disse tre typene, men i denne oppgaven skal vi bare ta hensyn til følgende krav for de forskjellige typene legemidler: Preparat A har et heltall som sier hvor sterkt narkotisk det er. Preparat B har et heltall som sier hvor vanedannende det er. Preparat C har ingen tilleggsegenskaper (annet enn klassens navn). A1: Tegn klassehierarkiet beskrevet ovenfor. Du trenger bare å ha med navn på klasser og sammenhengen mellom disse. Lever tegningen som en bildefil eller som PDF. A2: Skriv klassene Legemiddel, PreparatA, PreparatB og PreparatC. De tre sistnevnte klassene arver den førstnevnte. Konstruktøren til Legemiddel (og dermed også PreparatC )

skal ta inn String navn, double pris og double virkestoff (i den rekkefølgen). Konstruktørene til PreparatA og PreparatB skal i tillegg ta inn int styrke. Legemiddel skal ha metodene hentid, hentnavn, hentpris og hentvirkestoff som returnerer de relevante verdiene. I tillegg skal klassen ha metoden settnypris. PreparatA har i tillegg metoden hentnarkotiskstyrke, mens PreparatB har metoden hentvanedannendestyrke. A3: Skriv et testprogram TestPreparat. I denne klassen skal du opprette ett objekt av hver av subklassene du har skrevet. Deretter skal du gjøre enkle enhetstester der du tester alle egenskapene til en instans før du går videre og gjør det samme for neste instans. A4 (frivillig, men sterkt anbefalt): Overskriv tostring() metoden i Preparatene slik at du lett kan skrive ut all tilgjengelig informasjon om objektene. Tips 1: For hver test bør du beskrive en forventning til resultatet av testen, slik at du gir utskrift til brukeren avhengig av om du fikk forventet resultat eller ikke. Tips 2: Det kan være lurt å skille ut testene i statiske metoder inne i TestPreparat -klassen. Relevante Trix-oppgaver: 3.02, 3.03, 3.04 & 4.10 Del B: Resepter En Resept har en ID. I tillegg skal en resept ha en referanse til et legemiddel, en referanse til den legen som har skrevet ut resepten, og ID-en til den pasienten som eier resepten. En resept har et antall ganger som er igjen på resepten (kalles reit). Hvis antall ganger igjen er 0, er resepten ugyldig. I denne oppgaven skal vi forholde oss til ulike typer resepter. De to hovedkategoriene er hvite og blå resepter. Hvite resepter Hvite resepter har i seg selv ingen nye egenskaper (utover et annet klassenavn). Derimot finnes det to subtyper av hvit resept: Militærresepter og P-resepter. Militærresepter utgis til vernepliktige i tjeneste. Som en forenkling sier vi at militærresepter alltid gir en 100% rabatt på prisen til et legemiddel. P-resepter gir unge en rabatt på prevensjonsmidler. Denne rabatten er statisk og gjør at brukeren betaler 108 kroner mindre for legemiddelet. Merk at brukeren aldri kan betale mindre enn 0 kroner. I tillegg til rabatten har P-resepter den egenskapen at de alltid utskrives med 3 reit.

Blå resepter Det er stor forskjell på vanlige (hvite) og blå resepter (blant annet er utstedelsen av en blå resept forbundet med en del kontroller), men igjen skal vi gjøre en forenkling og si at bare prisen som betales er forskjellig: Blå resepter er alltid sterkt subsidiert, og for enkelhets skyld sier vi her at de har 75% rabatt slik at pasienten må betale 25% av prisen på legemidlet. B1: Tegn klassehierarkiet beskrevet ovenfor. Du trenger bare å ha med navn på klasser og sammenhengen mellom disse. Lever tegningen som en bildefil eller som PDF. B2: Skriv klassen Resept og dens subklasser. Konstruktøren i Resept skal ta inn et Legemiddel legemiddel, en Lege utskrivendelege, en int pasientid og int reit (i den rekkefølgen). Merk: Vi skal ikke kunne opprette en instans av selve klassen Resept, kun av subtypene. Klassen Resept skal ha følgende metoder som henter relevant data: hentid, hentlegemiddel (henter tilhørende Legemiddel), hentlege (henter utskrivende Lege), hentpasientid og hentreit. I tillegg skal klassen ha følgende metoder: public boolean bruk : Forsøker å bruke resepten én gang. Returner false om resepten alt er oppbrukt, ellers returnerer den true. abstract public String farge : Returnerer reseptens farge. Enten hvit eller "blaa". abstract public double prisaabetale : Returnerer prisen pasienten må betale. B3: Skriv et program TestResepter der du oppretter instanser av de forskjellige klassene. Du vil også trenge å opprette noen objekter av klassen Legemiddel for å gjøre dette. B4 (frivillig, men sterkt anbefalt): Overskriv tostring() metoden i resept objektene slik at du lett kan skrive ut all tilgjengelig informasjon om objektene. Tips: Du vil også ha behov for en instans av klassen Lege. Selv om du ikke har skrevet denne klassen enda kan du opprette en forenklet (tom) versjon av Lege foreløpig. På samme måte som i Del A skal du nå gjøre enhetstester av instanser av de forskjellige klassene. For hver instans holder det at du tester egenskapene som er implementert forskjellig fra reseptens foreldreklasse. Relevante Trix-oppgaver: 4.01, 4.02, 4.03 & 4.11. Del C: Leger Merk: Relevante temaer for å løse del C undervises først onsdag 13. februar.

Konstruktøren i Lege tar kun inn en String med legens navn. Lege skal ha en metode for å hente ut et navn og skrive ut en resept. Noen leger er Spesialister. Spesialister har fått godkjenningsfritak til å skrive ut resept på narkotiske legemidler. Å ha godkjenningsfritak kan gjelde for andre enn leger, så dette skal implementeres som et grensesnitt (interface). Alle som har godkjenningsfritak, har en kontroll ID, som kan hentes ut for å sjekke at godkjenningsfritaket ikke blir misbrukt. Spesialist skal arve fra Lege og skal i tillegg implementere følgende grensesnitt (dette grensesnittet må du legge ved som en fil i innleveringen din): public interface Godkjenningsfritak { public int hentkontrollid (); Lege skal ha metoden Resept skrivresept(legemiddel legemiddel, int pasientid, int reit) throws UlovligUtskrift, som lager et reseptobjekt med legemiddel, pasientid, og en referanse til samme legen, og returnerer det. Du kan velge selv hva slags resept som skrives ut. Om en vanlig lege prøver å skrive ut et narkotisk legemiddel (altså av typen PreparatA ), kastes unntaket UlovligUtskrift : public class UlovligUtskrift extends Exception { UlovligUtskrift ( Lege l, Legemiddel lm){ super( Legen +l.hentnavn()+ har ikke lov til å skrive ut + lm.hentnavn()); (denne klassen må også legges til i besvarelsen din ) C1: Tegn klassehierarkiet beskrevet ovenfor (inkludert grensesnittet). Du trenger ikke å ta med metoder eller annet innhold i klassene/grensesnittet. Lever tegningen som en bildefil eller som PDF. C2: Skriv klassene Lege og Spesialist som beskrevet over. Konstruktøren i Spesialist skal i tillegg til navn også ta imot en int kontrollid. C3 (frivillig, men sterkt anbefalt): Overskriv tostring() metoden i Lege og Spesialist slik at du lett kan skrive ut all tilgjengelig informasjon om objektene. Relevante Trix-oppgaver: 5.03 & 5.04. Del D: Integrasjonstest I denne delen skal du lage et hovedprogram som gjør det vi vil kalle en minimal integrasjonstest - vi skal altså teste hvordan de forskjellige delene av systemet fungerer sammen. Hovedprogrammet skal gjøre følgende:

Opprette minimum en instans av hver eneste klasse og la disse inneholde nødvendige referanser til andre objekter. Skrive ut relevant informasjon om hvert enkelt objekt. (Her vil det lønne seg å ha overskrevet tostring() metoden i alle klassene du har skrevet). (frivillig, men anbefalt): La integrasjonstesten lese inn data fra en fil. Bruk filformatet som er gitt i vedlegget. I tillegg skal du lage en datastrukturtegning som illustrerer objektene og deres tilstand når du har kjørt dette testprogrammet. Ved behov, se notatet om datastrukturer eller repeter Trix-oppgaver fra oblig 1. Vedlegg Filformat for innlesing av fil: # Legemidler (navn, type, pris, virkestoff [, styrke]) Predizol, a, 450, 75, 8 Paralgin Forte, b, 65, 400, 5 Placebo Pianissimo, c, 10, 0 Ibux, c, 240, 200 # Leger (navn, kontrollid / 0 hvis ikke ) Dr. Cox, 0 Dr. Wilson, 0 Dr. House, 12345 Dr. Hillestad Lovold, 0 # Resepter (type, legemiddelnummer, legenavn, persid, [reit]) blaa, 1, Dr. Cox, 2, 3 hvit, 2, Dr. Hillestad Lovold, 3, 10000 prevensjon, 0, Dr. House, 1 militaer, 3, Dr. Hillestad Lovold, 3, 2