Emnenavn: Objektorientert programmering. Eksamenstid: 4 timer

Like dokumenter
Høgskoleni østfold NY/UTSATT EKSAMEN

Høgskoleni østfold EKSAMEN

hvordan du ser for deg at oppgaven kan løses, enn å ikke skrive noe i det hele tatt.

Emnenavn: Objektorientert programmering. Faglærer: Lars Emil Knudsen

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

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

Eksamen Objektorientert Programmering 2011

Eksamen Objektorientert Programmering 2013

EKSAMEN. Emne: Webprogrammering med PHP (kont.) Webprogrammering 1 (kont.) Eksamenstid:

Objektorientert Programmering Ekstraordinær eksamen 2014

EKSAMEN ITF Webprogrammering 1 Dato: Eksamenstid: Hjelpemidler: 2 A4 ark (4 sider) med egenproduserte notater (håndskrevne/maskinskrevne)

EKSAMEN. Algoritmer og datastrukturer. Eksamensoppgaven: Oppgavesettet består av 11 sider inklusiv vedlegg og denne forsiden.

Høgskoleni østfold EKSAMEN. ITF10213 Innføring i programmering (Høst 2013)

EKSAMEN. Emne: Algoritmer og datastrukturer

EKSAMEN. Les gjennom alle oppgavene før du begynner. Husk at det ikke er gitt at oppgavene står sortert etter økende vanskelighetsgrad.

EKSAMEN. Algoritmer og datastrukturer

EKSAMEN. Objektorientert programmering

EKSAMEN. Emne: Algoritmer og datastrukturer

EKSAMEN. Dato: 18. mai 2017 Eksamenstid: 09:00 13:00

INF106 Objektorientert programmering

Høgskoleni østfold EKSAMEN. Emne: Innføring i programmering

EKSAMEN (Konvertert fra en gammel PHPeksamen)

Høgskoleni østfold EKSAMEN

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

EKSAMEN Løsningsforslag. med forbehold om bugs :-)

EKSAMEN med løsningsforslag

Gjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7

Hjelpemidler: 4 A4-sider (2 to-sidige ark eller 4 en-sidige ark) med egenproduserte notater (håndskrevne/maskinskrevne)

UNIVERSITETET I OSLO

EKSAMEN. Dato: 28. mai 2018 Eksamenstid: 09:00 13:00

Ny/utsatt EKSAMEN. Dato: 6. januar 2017 Eksamenstid: 09:00 13:00

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

EKSAMEN. Emne: Webprogrammering med PHP (kont.) Webprogrammering 1 (kont.) Eksamenstid:

Høgskoleni østfold EKSAMEN

UNIVERSITETET I OSLO

EKSAMEN (Konvertert fra en gammel PHP-eksamen)

UNIVERSITETET I OSLO

TDT4100 Objektorientert programmering

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Ny/utsatt EKSAMEN. Dato: 5. januar 2018 Eksamenstid: 09:00 13:00

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

lfæ~~~~:::j~~:~l -.~=:~-t::-d I Alle trykte og håndskrevne EKSAMENSOPPGA VE Side l av 5 Eksamenstid:

UNIVERSITETET I OSLO

Emnenavn: Datateknikk. Eksamenstid: 3 timer. Faglærer: Robert Roppestad. består av 5 sider inklusiv denne forsiden, samt 1 vedleggside.

EKSAMEN. Evaluering av IT-systemer. Eksamenstid: kl 0900 til kl 1300

Eksamensoppgave i IFUD1025 Programmering i Java

LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring. Else Lervik, januar 2012.

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

UNIVERSITETET I OSLO

Høgskoleni østfold EKSAMEN. Hjelpem idler: Faglærer: Kåre Sorteberg Ingen hjelpemidler. Monica Kristiansen

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

Tittel Objektorientert systemutvikling 2

Løsningsforslag EKSAMEN

UNIVERSITETET I OSLO

EKSAMEN. Oppgavesettet består av 9 oppgaver med i alt 21 deloppgaver. Ved sensur vil alle deloppgaver telle omtrent like mye.

UNIVERSITETET I OSLO

EKSAMEN. Operativsystemer. 1. Læreboken "A Practical Guide to Red Hat Linux" av Mark Sobell 2. Maks. tre A-4 ark med selvskrevne notater.

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

2 Om statiske variable/konstanter og statiske metoder.

Emnenavn: Matematikk for IT. Eksamenstid: Faglærer: Christian F Heide

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; }

UNIVERSITETET I OSLO

EKSAMEN (Konvertert fra en gammel PHP-eksamen)

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

TDT4100 Objektorientert programmering

EKSAMEN. Algoritmer og datastrukturer. Eksamensoppgaven: Oppgavesettet består av 10 sider inklusiv vedlegg og denne forsiden.

UNIVERSITETET I OSLO

Gjennomgang av eksamen H99

EKSAMEN (Konvertert fra en gammel PHP-eksamen)

UNIVERSITETET I OSLO

KANDIDATEN MÅ SELV KONTROLLERE AT OPPGAVESETTET ER FULLSTENDIG

INF1000: Forelesning 7. Konstruktører Static

UNIVERSITETET I OSLO

Introduksjon til objektorientert programmering

UNIVERSITETET I OSLO

består av 7 sider inklusiv denne forsiden og vedlegg. Kontroller at oppgaven er komplett før du begynner å besvare spørsmålene.

UNIVERSITETET I OSLO

EKSAMEN. Oppgavesettet består av 9 oppgaver med i alt 20 deloppgaver. Ved sensur vil alle deloppgaver telle omtrent like mye.

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

INF1000: Forelesning 7

Eksamen IN1010/INF1010 våren 2018

HØGSKOLEN I SØR-TRØNDELAG

EKSAMEN. Oppgavesettet består av 11 oppgaver med i alt 21 deloppgaver. Ved sensur vil alle deloppgaver telle omtrent like mye.

UNIVERSITETET I OSLO

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk

UNIVERSITETET I OSLO

Transkript:

Høgskoleni Østfold EKSAMEN Emnekode: ITF10611 Dato: 31.mai 2016 Emnenavn: Objektorientert programmering Eksamenstid: 4 timer Hjelpemidler: Faglærer: To A4-ark (fire sider) med egne Per Bisseberg notater Om eksamensoppgaven og poengberegning: Oppgavesettet består av 16 sider inklusiv denne forsiden og vedlegg. Du er selv ansvarlig for å kontrollere at oppgaven er komplett før du begynner å besvare spørsmålene. Det er på hver hovedoppgave angitt hvor mye disse teller av totalen. Karakter fastsettes på grunnlag av en helhetsvurdering av besvarelsen. I oppgavene hvor du blir bedt om å skrive kode anbefales det at du skriver løsningen med java-syntaks. Er du derimot usikker på hvordan du skal besvare en oppgave med kode kan du skrive svaret med egne ord, det er da viktig at du beskriver logikken på en omfattende og detaljert måte. Om en oppgave virker å forutsette at du har løst en tidligere oppgave så kan du forutsette at denne er løst uavhengig om du faktisk har gjort det eller ei. F.eks: om du i en oppgave må benytte metoden: metode() som du skulle ha implementert i en tidligere oppgave, så kan du bare anta at dette er gjort og den fungerer slik det er tenkt. Pass også på å svare på alle oppgaver. Det er bedre å skrive litt i grove trekk hvordan du ser for deg at oppgaven kan løses, enn å ikke skrive noe i det hele tatt, dersom du står fast. Ønsker dere alle en riktig god sommer og lykke til i videre studier. Takk for et virkelig hyggelig siste semester :-) Lykke til! Sensurfrist: 22. juni 2016 Karakterene er tilgjengelige for studenter på Studentweb senest 2 virkedager etter oppgitt sensurfrist.

Oppgave 1 (25%) Disse oppgavene skal besvares kort og presist. Du trenger altså ikke skrive en liten stil på hver av dem, men pass på at du besvarer alt oppgaven spør etter. Det vil bli lagt vekt på at forklaringen er skrevet med dine ord, og at den ikke er avskrift fra andre kilder. Det er fordelaktig å lage eksempler ved kode og/eller illustrasjoner. Oppgave 1.1 Forklar begrepet polymorfi/polymorfisme og eksemplifiser med enkel kode. Forklar begrepet interface/grensesnitt og eksemplifiser med enkel kode Oppgave 1.2 Forklar disse nøkkelordene fra Java final static override Oppgave 1.3 Gjør rede for begrepene aggregering og komposisjon. Underbygg utredningen ved å lage et enkelt UML-diagram og eksemplifiser med kode. 1

Oppgave 2(25%) Analyse av kode. Oppgave 2.1(10%) Disse oppgavene inneholder en eller flere feil som gjør at koden ikke kompilerer. Du skal skrive hva kompileringsfeilen(e) er og skrive koden som skal til for at koden skal kompilere. Oppgave 2.1.1 publicclassa { privatestringkode;; I. publica(stringkode){ this.kode= kode; publicclass B extendsa{ privateint verdi; public B(Stringkode,int verdi){ this.kode= kode; this.verdi= verdi; 2

Oppgave 2.1.2 public interface A { void printtekst(); publicclass B extendsa{ privatestring navn; privatestringtekst; publicb(stringtekst, Stringnavn) { this.tekst= tekst; this.navn= navn; @Override publicvoid printtekst(){ System.out.println(navn + ": " + tekst); 3

Oppgave 2.2(15%) I disse deloppgavene skal du skrive hvilken utskrift koden i mainmetoden resulterer i. Oppgave 2.2.1 publicclass Bil { privatestringmerke; privatestringmodell; public Bil(Stringmerke, Stringmodel) { this.merke= merke; this.modell= model; @Override publicstringtostring(){ returnmerke + " " + modell; // get og set ikke tatt med, men finnesfor alle felt. // main-metode public staticvoid main(string[]args) { ArrayList<Bil>biler = new ArrayList<Bil>(); Bil volvo = new Bil("Volvo","XC90"); biler.add(volvo); Bil volvo2= volvo; biler.add(volvo2); volvo2.setmodell("xc60"); for(bilb: biler){ System.out.println(b); 4

Oppgave 2.2.2 Vi benytter Bil- klassen fra forrige oppgave public staticvoid main(string[]args) { ArrayList<Bil>biler = new ArrayList<Bil>(); biler.add(newbil("volvo","xc90")); biler.add(newbil("ford","mondeo")); biler.add(newbil("bmw","x5")); Collections.sort(biler,new Comparator<Bil>(){ @Override publicint compare(bilbl, Bil b2) { int b1l = b1.getmerke().1ength() + b1.getmode110.1ength(); int b2l = b2.getmerke().1ength() + b2.getmode11().1ength(); returnb2l - b1l; for(bilb: biler){ System.out.println(b); 5

Oppgave2.2.3 public staticclass Bil { privatestringmerke; privatestringmodell; privatekunde solgttil; public Bil(Stringmerke, Stringmodel) { this.merke= merke; this.modell= model; @Override publicstringtostring(){ if(solgttil!= null){ II, return merke+ " " + modell+ else{ returnmerke + " + modell; II Solgttil:" + solgttil; // get og set ikke tatt med, men finnesfor alle felt. public staticclass Kunde{ privatestringfnavn; privatestringenavn; public Kunde(StringfNavn,StringeNavn){ this.fnavn= fnavn; this.enavn= enavn; @Override publicstringtostring(){ returnfnavn + " " + enavn; // get og set ikke tatt med, men finnesfor alle felt. fortsetter på neste side. 6

// main metode public staticvoid main(string[]args) { ArrayList<Bil>biler = new ArrayList<Bil>(); biler.add(newbil("volvo","xc90")); biler.add(newbil("ford","mondeo")); biler.add(newbil("bmw","x5")); biler.add(newbil("lada","niva")); Kunde per = new Kunde("Per","Kakse"); Iterator<Bil>bit = biler.iterator(); while(bit.hasnext()){ Bil b = bit.next(); if(b.getmerke().equals("volvo") && b.getmerke().equals("bmw")){ bit.remove(); for(bilb: biler){ System.out.println(b); 7

Oppgave 3(50%) Vi skal utvikle en prototype for en oppdragsgiver, det private legesenteret «Voivoat». Vi har nettopp begynt utviklingen og vi jobber med å få på plass kjernefunksjonalitet. Vi trenger ikke tenke på persistent lagring på dette tidspunktet, du kan anta at dette allerede er på plass slik at systemet til enhver tid vil holde på lagret informasjon. Vedlagt finner du de klasser vi har så langt. Volvoat trenger et system som: Registrerer ansatte, de har tre ulike typer ansatte. Allmennpraktiserende leger, spesialister og legesekretærer. Registrerer pasienter Registrerer timebestillinger Reglene for systemet er som følger: Main Denne klassen viser et typisk scenario systemet skal støtte, les denne og prøv å få en oversikt om hvordan det henger sammen. Ansatt Alle ansatte registreres med et unikt ansattnummer, for- og etternavn Lege Alle leger registreres i tillegg med en autorisasjonskode fra myndighetene. Sekretær (Sekretar) har ingen ytterligere informasjon. Allmennpraktiserende (AlmPrakt) har ingen ytterligere informasjon. Spesialist Spesialister registrerer i tillegg det medisinske spesialfeltet denne tilhører. Pasient Pasienter skal registreres med fødsels- og personnummer (vi har fått tillatelse fra Datatilsynet), fult navn, full adresse og telefonnummer Vi skal hele tiden oversikt over antall registrerte pasienter Time Alle timebestillinger skal registrere hvilken pasient som har bestilt timen. Hvilken lege som skal behandle pasienten. Dato for timen. Hvilken sekretær som har registrert bestillingen. Når en pasient har møtt til en time, så skal man via systemet kunne legge til de behandlingene som utføres i løpet av timen, med obligatorisk informasjon i form av beskrivelse og pris for behandlingen. Det skal kunne være mulig å utføre flere behandlinger i løpet av en time. Behandling er en fellesbetegnelse for alle tjenester legen yter utover konsultasjon i løpet av timen, f.eks. prøver, sykemelding, medisinsk behandling etc. Prisen for timen skal kunne beregnes ut ifra de behandlingene som er ytt samt en fast konsultasjonspris. Om en pasient ikke møter til timen så blir timens pris tillagt et gebyr i tillegg til den faste konsultasjonsprisen. Register Vi har klassen Register som holder en oversikt over alle registrerte Ansatte, Pasienter og Timer. 8

Oppgave 3.1 Lag et klassediagram, det er ikke nødvendig å ta med felter og metoder kun klassenavn, over alle klassene i systemet hvor du tydelig får frem eventuelle arverelasjoner, implementasjoner og assosiasjoner. Du trenger ikke tegne inn klassen Main. Oppgave3.2 Skriv ferdig konstruktørene i klassene Lege og Spesialist. Klassen Time definerer metoden beregnpris(). Implementer logikk i denne metoden som summerer prisen for denne timen etter reglene som er beskrevet over. I løpet av en time vil en pasient kunne motta alt fra ingen til mange behandlinger, lag en metode som oppretter og lagrer behandlinger for denne timen. Metoden skal hete leggtilbehandling og ta imot relevante parametre. Oppgave3.3 I klassen Time har vi metoden lagkvittering() Denne metoden skal returnere en tekststreng for den aktuelle timen som ser slik ut ser slik ut: Pasientensnavn: Per Sjuk Behandlendelege: Doktormann,Ole Total sum: 1145.98 Tips: «\n» vil lage linjeskift i en String. Oppgave 3.4 vi ønsker å hele tiden ha oversikt over antall unike pasienter som har hatt timer på legesenteret. Selv pasienter som vi ikke har i registeret lenger. Gjør nødvendig endring i koden der du finner det hensiktsmessig for å oppnå dette. Oppgave 3.5 I klassen Register har vi funksjonen ansattrapport() som inneholder nødvendig funksjonalitet for å skrive ut all informasjon om alle ansatte vi har i systemet. Vi ønsker derimot å kunne sortere de ansatte før vi skriver ut informasjonen: Oppgave 3.6 Gjør tillegg/forandring i klassen Ansatt som definerer at den naturlige sorterings-ordenen på Ansattobjekt er alfabetisk (A-Å) på etternavn. Gjør så nødvendig tillegg/forandring i metoden ansattrapport() i klassen Register som garanterer at denne vil skrive ut en sortert liste over ansatte. Vi har fått en forespørsel fra legene om ekstra funksjonalitet, de ønsker seg en måte å se hvor mye penger de har loppet sine pasienter for. Lag en metode i Registrer klassen som returnerer totalsummen en gitt lege har «håvet inn». 9

Vedlegg th oppgave 3 Klasser: Main Trenger ikke være med i oppgave 3.1 UML Ansatt Lege Sekretar Spesialist AlmPrakt Pasient Time Register Vedlegget er på 6 sider inklusive denne siden. 10

Main public class Main { publicstaticvoid main(string[]args) { // Ole begynnerå arbeideved legesenteret AlmPrakt a = new AlmPrakt(1234, "Ole", "Doktormann", "AT1234QXY125"); // Det gjør Hans også Sekretars = new Sekretar(1236,"Hans","Onatopp"); // Per er pjusk Pasientp = new Pasient("25037634158", "Per Sjuk", "Gata1, 1792 Tistedal","91262688"); // Per bestilleren time av Hans for å bli undersøktav Ole // den 31 mai 2016. Time t = new Time(p,a, s, new GregorianCalendar(2016,4,31)); // Per melder sin ankomsttil legesekretæren t.setmott(true); // Per må ta en blodprøvesamt en urinprøve-> 2 behandlinger // NB: Ole har kjøpt seg ny Volvo XC90 t.leggtilbehandling("blodprøve, pas. var vrang ", 499.99); t.leggtilbehandling("tisse gikk bedre for pas.",246); // Per går til legesekretærenhans for å betale t.beregnpris(); // Per får kvitteringav Hans System.out.println(t.lagKvittering()); // Per gråter 11

Ansatt publicabstractclass Ansatt { privateint ansattnr; privatestringfornavn; privatestring etternavn; //konstruktør publicansatt(intansattnr,stringfornavn,stringetternavn) { this.ansattnr= ansattnr; this.fornavn= fornavn; this.etternavn= etternavn; Register.getAnsatte().add(this); // tekstligrepresentasjonav en ansatt @Override public StringtoString(){ returnetternavn+ ", " + fornavn; // anta at get og set metoderfor alle felter finnes. Lege publicabstractclass Lege extendsansatt{ privatestring autkode; // konstruktør public Lege(int ansattnr, String fornavn, String etternavn, String autkode) { // oppgave3.2a // anta at get og set metoderfor alle felter finnes. Sekretar public class SekretarextendsAnsatt{ // konstruktør public Sekretar(intansattNr,Stringfornavn,Stringetternavn){ super(ansattnr,fornavn,etternavn); 12

Spesialist public class SpesialistextendsLege{ privatestring spesfelt; // konstruktør publicspesialist(intansattnr,stringfornavn, Stringetternavn,StringautKode,String spesfelt){ // Oppgave3.2a // anta at get og set metoderfor alle felter finnes.. AhrlPrakt public class AlmPraktextends Lege{ //konstruktør publicalmprakt(intansattnr,stringfornavn,stringetternavn,stringautkode){ super(ansattnr,fornavn,etternavn,autkode); Pasient public class Pasient{ privatestringfpnummer; privatestringfulltnavn; privatestringfulladr; privatestringtlfnummer; // konstruktør public Pasient(StringfpNummer,StringfulltNavn, StringfullAdr,StringtlfNummer){ this.fpnummer= fpnummer; this.fulltnavn= fulltnavn; this.fulladr= fulladr; this.t1fnummer= tlfnummer; Register.getPasienter().add(this); // anta at get og set metoderfor alle felterfinnes.. 13

Time public class Time { // fast konsultasjonspris public staticfinal doublekons_pris= 399.99; // gebyr for å ikke møte til time publicstaticfinal doubleim GEBYR = 859.96; privatepasientpasient; privatelege lege; privatesekretarbestiller; privatecalendardato; privatedouble pris; privatebooleanmott; privatearraylist<behandling> behandlinger= new ArrayList<>(); // konstruktør publictime(pasientpasient,lege lege, Sekretarbestiller, Calendardato) { this.pasient= pasient; this.lege= lege; this.bestiller= bestiller; this.dato= dato; Register.getTimeRegister().add(this); // oppgave3.2c lag metode her publicstring lagkvittering(){ // Oppgave3.3 - logikkher publicvoid beregnpris(){ // oppgave3.2b - logikkher // anta at get og set metoderfor alle felter i klassentime finnes.. // indre klassefor Behandling privateclass Behandling{ privatestring beskrivelse; privatedouble pris; public Behandling(Stringbeskrivelse,double pris) { this.beskrivelse= beskrivelse; this.pris= pris; // anta at get og set metoderfor alle felter i den indre // klassenbehandlingfinnes.. 14

Register public class Register{ privatestaticarraylist<ansatt>ansatte = new ArrayList<>(); privatestaticarraylist<pasient> privatestaticarraylist<time> public staticvoid ansattrapport(){ // oppgave3.5b for(ansatta: ansatte){ System.out.println(a); pasienter= new ArrayList<>(); timeregister= new ArrayList<>(); // oppgave3.6 - lag metodeher // anta at alle listerhar statiskeget metoder... 15