Eksamen Objektorientert Programmering 2012

Like dokumenter
Eksamen Objektorientert Programmering 2013

Objektorientert Programmering Ekstraordinær eksamen 2014

Eksamen Objektorientert Programmering 2011

EKSAMEN. Objektorientert programmering

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF Løsning på seminaropppgaver til uke 8

UNIVERSITETET I OSLO

Obligatorisk oppgave 4: Lege/Resept

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

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

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

EKSAMEN 6109 OBJEKTORIENTERT PROGRAMMERING 5609 OBJEKTORIENTERT PROGRAMMERING

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

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

TDT4100 Objektorientert programmering

UNIVERSITETET I BERGEN Det matematisk-naturvitenskapelige fakultet

TDT4100 Objektorientert programmering

EKSAMEN. Emne: Algoritmer og datastrukturer

UNIVERSITETET I OSLO

Kapittel 9: Sortering og søking Kort versjon

INF106 Objektorientert programmering

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring AITeL

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

HØGSKOLEN I SØR-TRØNDELAG

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

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

NB!!! Veldig korte svar er gitt her. Disse burde det vært skrevet mer på ved en eksamen..

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

EKSAMEN med løsningsforslag

EKSAMEN. Algoritmer og datastrukturer

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

Repitisjonskurs. Arv, Subklasser og Grensesnitt

Gjennomgang av eksamen H99

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

INF Seminaroppgaver til uke 3

Eksamen. Objektorientert Programmering IGR 1372

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF Notater. Veronika Heimsbakk 10. juni 2012

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

Høgskoleni østfold NY/UTSATT EKSAMEN

Del 3: Evaluere uttrykk

INF1010 Eksamenstips. Løsningsforslag prøveeksamen del 1.

Løsningsforslag Test 2

Tittel Objektorientert systemutvikling 1. Eksamenstid, fra-til Ant. oppgaver 6

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

UNIVERSITETET I OSLO

INF 1010, vår 2005 Løsningsforslag uke 11

IN1010 våren januar. Objektorientering i Java

LO191D/LC191D Videregående programmering

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

UNIVERSITETET I OSLO

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

Kapittel 8: Sortering og søking

LC191D/LO191D Videregående programmering mai 2010

UNIVERSITETET I OSLO

Dagens tema: Mer av det dere trenger til del 1

UNIVERSITETET I OSLO

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

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

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

Kapittel 9: Sortering og søking Kort versjon

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

HØGSKOLEN I SØR-TRØNDELAG

Algoritmer og Datastrukturer

UNIVERSITETET I OSLO

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

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

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

2 Om statiske variable/konstanter og statiske metoder.

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

Kapittel 9: Sortering og søking Kort versjon

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

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

Programmering i C++ Løsningsforslag Eksamen høsten 2005

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

IN1010 V19, Obligatorisk oppgave 2

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

INF1010 våren januar. Objektorientering i Java

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) Løsningsforslag

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

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

Sortering med Comparable og Comparator

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

Kapittel 8: Sortering og søking INF100

Løsningsforslag EKSAMEN

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

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

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

Kapittel 9: Sortering og søking Kort versjon

INF1010. Grensesnittet Comparable<T>

Transkript:

Eksamen Objektorientert Programmering 2012 Høgskolen i Østfold 2012-05-09 Emnekode Emne ITF10611 Dato 2012-05-09 Eksamenstid 09:00-13:00 Hjelpemidler Faglærer Objektorientert Programmering To A4-ark (fire sider) med egne notater Børre Stenseth Oppgavesettet består av 5 sider inklusive denne forsiden pluss ett vedlegg på 11 sider. Oppgavesettet er delt på 3 oppgaver. Vedlegget er relevante for oppgave 3. For hver oppgave er det angitt hvor stor vekt den blir tillagt i vurdering av besvarelsen. Den endelige karakteren blir satt på bakgrunn av denne vektleggingen kombinert med en helhetlig vurdering av besvarelsen. Du er selv ansvarlig for å kontrollere at oppgavesettet er komplett. Les gjennom alle oppgavene før du begynner å løse dem. Husk å bruke enkle kommentarer i den koden du skriver. Dette kan gi uttelling dersom koden inneholder feil, men at du har tenkt riktig. Lykke til og god sommer 1

1. Begreper (20%) I denne oppgaven skal du bruke dine egne ord og beskrive kort hva du du forstår med de aktuelle begrepene. Du må gjerne bruke korte eksempler hvis det hjelper. 1.a) Hva forstår vi med begrepet immutable? String-objekter er eksempel på en objekter som er immutable. Nevn noen konsekvenser dette har når vi programmerer. 1.b) Forklar bruken av nøkkelordene: try, catch, finally 1.c) Hva er en jar-fil? Hva er hensikten med en jar-fil, hva inneholder den og hvordan kjøres den fra kommandolinja 1.d) Forklar bruken av Java nøkkelordet: instanceof 2

2. Javakode (20%) 2.a) Hva blir utskriften når denne metoden kalles med parameter 9 public void doa(int n){ if(n >= 0){ if(n%2 == 0){ System.out.print(n+" "); doa(n-2); else doa(n-1); 2.b) Hva blir utskriften når denne metoden kalles med parameter 9 public void dob(int n){ if(n >= 0){ dob(n-1); if(n%2 == 0) System.out.print(n+" "); 2.c) Hva er grunnen til at denne koden ikke kompilerer List<String> p=new List<String>(); 2.d) Hva må endres for at denne koden skal kompilere: package apackage; public class test { public int doit(int i){return 2*i; public static void main(string[] args) { int v=doit(2); 2.e) Hva foregår her: jbutton1 = new javax.swing.jbutton(); jbutton1.settext("klikk meg"); jbutton1.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(java.awt.event.actionevent evt){ jbutton1hasbeenclicked(evt); ); Forklar de involverte komponentene og metodene. 3

3. Konstruksjon (60%) Oppgaven går ut på og implementer deler av et trafikkovervåkingssystem. Langs en veistrekning er det montert n fotobokser, der n >=1. Fotoboksene er orienterte slik at de bare fotograferer i en retning. Hver gang det passerer en bil i den aktuelle retningen blir det gjort en observasjon. Fotoboksen lagrer slike observasjoner på fil. En observasjon inneholder, foruten et fotografi, en rekke verdier som er nærmere beskrevet som del av vedlegg. Fotografiet kan du glemme med tanke på den oppgaven du skal løse. Periodisk leses filene fra hver fotoboks og legges i en felles filkatalog. Noen av fotoboksene leverer data som tekst-filer (.txt) med en observasjon pr linje, mens andre leverer observasjonene som XML-filer (.xml) med et observasjon - element for hver observasjon. Du finner eksempel på to slike filer i vedlegg. En bilfører kan bøtelegges dersom kjøretøyet passerer en fotoboks med for høy hastighet eller dersom kjøretøyet har brukt for kort tid mellom to fotobokser (for høy gjennomsnittshastighet). Lovlig hastighet ved alle fotoboksene på veistrekningen er den samme. Det er mange parkeringsplasser og av/på kjøringer langs strekningen så det er ikke sikkert at en bil registreres ved alle fotobokser. Det foreligger et foreløpig forslag til design for en løsning. Dette forslaget består av følgende komponenter: ivegstrekning som er et interface som beskriver den vegstrekningen vi skal kontrollere, med beskrivelse av alle fotoboksene. Observasjon som er en klasse som beskriver en observasjon (en kjøretøypassering). Klassen implementerer Comparable. ikontroll som er et interface som beskriver grensenittet som skal brukes av en framtidig GUI. Kontroll som er et skjelett til en klasse som implementerer ikontroll. FileLoader er en abstract klasse som beskriver hvordan vi kan laste observasjonsfiler XMLFileLoader bygger på (extends) FileLoader og opererer på XML-filer TextFileLoader bygger på (extends) FileLoader og opererer på tekst-filer. Vedlegget viser Java-kode for alle ovenfor nevnte komponenter samt en side som viser dataformatet for de filene en fotoboks legger ut, hhv.txt og.xml filer. Du må lese dette vedlegget før du begynner å programmere for å få med deg alle nødvendige detaljer. Din oppgave er å bygge ut noen av komponentene. Det er beskrevet 12 deloppgaver. Du må løse minst 6 av disse for å få full uttelling i evaluering av oppgaven. Du velger selv hvilke deloppgaver du vil løse. Alle deloppgavene kan løses uavhengig av hverandre. I vedlegget er det markert hvor hver av de aktuelle metodene hører hjemme og det er laget kommentarer som beskriver dem nærmere. Dersom du av en eller annen grunn finner det tjenlig å introdusere noen hjelpemetoder så viser du implementasjonen av disse, som metoder med tilgang private. 4

3.a) Konstruktør for tekst i klassen Observasjon Lag konstruktøren i Observasjon som bygger et objektet fra en tekstlinje. 3.b) Konstruktør for XML i klassen Observasjon Lag konstruktøren i Observasjon som bygger et objekt fra et XML-element. 3.c) Metoden compareto i klassen Observasjon Implementer compareto slik at vi får alle observasjoner i kronologisk rekkefølge når de sorteres. Med kronologisk mener vi altså med stigende registreringstidspunkt. 3.d) Metoden getobservasjoner i klassen XMLFileLoader Implementer denne slik at den laster en XML-fil og konstruerer en liste Observasjoner 3.e) Metoden getobservasjoner i klassen TextFileLoader Implementer denne slik at den laster en Text-fil og konstruerer en liste Observasjoner 3.f) Konstruktør i klassen Kontroll Implementer denne slik at den bruker subklasser av FileLoader og samler sammen alle Observasjoner fra alle filer. 3.g) Metoden alleobservasjonersortert i klassen Kontroll Implementer denne slik at den returnerer en kronologisk liste av Observasjoner 3.h) Metoden observasjonerforenfotoboks i klassen Kontroll Implementer denne slik at den leverer alle Observasjoner fra en bestemt fotoboks, sortert kronologisk 3.i) Metoden snitthastighetvedenfotoboks i klassen Kontroll. Implementer denne slik at den returnerer gjennomsnittsfarten for biler i km/t forbi en fotoboks. 3.j) Metoden bilersompassererforfort i klassen Kontroll Implementer denne slik at den returnerer en liste av biler (registreringsnummere) som passerer en eller flere av fotoboksene med for høy hastighet. 3.k) Metoden bilersomharbruktforkorttid i klassen Kontroll Implementer denne slik at den returnerer en liste av biler (registreringsnummere) som bruker for kort tid mellom to fotobokser. 3.l) Metoden alleobservasjoneravenbil i klassen Kontroll. Implementer denne slik at den returnerer en liste av observasjoner som er gjort av en bil. Lista skal være sortert etter fotoboks id. 5

2. Vedlegg Vedlegg til oppgave 3 ivegstrekning.java Observasjon.java ikontroll.java Kontroll.java FileLoader.java TextFileLoader.java XMLFileLoader.java Dataformater Vedlegget er på 11 sider inklusive denne forsiden 6

ivegstrekning.java package Trafikk; * Interface for implementasjon av en vegstrekning med fotobokser * Fotoboksene har id i stigende rekkefølge i kjøreretningen * Første boks har id 1, neste 2 osv. * @author Administrator public interface ivegstrekning { * Beregner og returnerer minstetiden i sekunder et kjøretøy * kan bruke mellom to fotobokser for en gitt fartsgrense * @param frafotoboksid1 Den ene fotoboksen * @param tilfotoboksid2 Den andre fotoboksen * @param fartsgrense Fartsgrense i km/t * @return Minste lovlige antall sekunder mellom de to fotoboksene. * @throws Exception dersom frafotoboksid1 >= tilfotoboksid2 * eller en av FotoBoxID'ene * er større en antall bokser eller mindre enn 1 public int minstelovligetidisekunder( int frafotoboksid1, int tilfotoboksid2, int fartsgrense) throws Exception; * Returnerer antall fotobokser på strekningen * @return public int antallfotobokser(); 7

Observasjon.java package Trafikk; import org.w3c.dom.element; * En observasjon av en passering av en fotoboks * @author Administrator public class Observasjon implements Comparable{ Fotoboksen der observasjonen er gjort private int fotoboksid; Passeringstid, millisekunder talt fra 1.1.1970 private long passeringstid; Målt hastighet i km/t, avrundet til nærmeste hele verdi private int hastighetkmprtime; Registreringsnummer som er lest av bilen som passerer private String bilid; * Konstruktør for en linje fra en tekstfil * @param enlinje En string som beskriver en observasjon public Observasjon(String enlinje) { Se vedlegg Dataformater for formatet på en tekstlinje -------------skal løses som oppgave A ----------------- * Konstruktør for et element fra en XML-fil * @param E Et XMLElement som beskriver en observasjon public Observasjon(org.w3c.dom.Element E) { Se vedlegg Dataformater for en beskrivelse av et observasjon- element -------------skal løses som oppgave B ----------------- public int getfotoboksid(){return fotoboksid; public long getpasseringstid(){return passeringstid; public int gethastighetkmprtime(){return hastighetkmprtime; public String getregistreringsnummer(){return bilid; * Implementerer kronologisk rekkefølge ( observasjosntidspunkt) * @param obj Object som representerer en Observasjon * @return 1, -1 eller 0 public int compareto(object obj) { -------------skal løses som oppgave C ----------------- * Sjekker om passeringshastigheten i km/t er lovlig * @param fartsgrense Fartsgrensen det måles mot angitt i hele km/t * @return false hvis hastigheten er høyere enn fartsgrensen, * true ellers 8

public boolean lovlighastighet(int fartsgrense){ return hastighetkmprtime <= fartsgrense; public String tostring(){ return bilid+" passerer fotoboks "+fotoboksid+ ":("+ passeringstid+ ") med hastighet "+hastighetkmprtime+"km/t"; 9

ikontroll.java package Trafikk; import java.util.list; * Interface for implementasjoner av kontroll * @author Administrator public interface ikontroll{ * En liste av alle Observasjoner sortert etter observasjonstidspunkt * @return En liste av Observasjoner public List<Observasjon> alleobservasjonersortert(); * En liste av alle Observasjoner for en fotoboks sortert etter * observasjonstidspunkt * @param boksid Fotoboksen vi er interesserte i * @return En liste av Observasjoner public List<Observasjon> observasjonerforenfotoboks(int boksid); * En liste av alle biler som har passert en av fotoboksene * i for høy hastighet * @return En liste av bilid'er public List<String> bilersompassererforfort(); * En liste av alle biler som har brukt for kort tid * mellom to fotobokser * @return En liste av bilid'er public List<String> bilersomharbruktforkorttid(); * Alle observasjoner som er registrert for en bestemt bil * @param bilid for bilen * @return En liste av observasjoner public List<Observasjon> alleobservasjoneravenbil(string bilid ); * Gjennomsnittshastighet i km/t for en fotoboks * @param boksid Identifikasjon av fotoboksen * @return Gjennomsnittshastigheten for alle passeringer public double snitthastighetvedenfotoboks(int boksid); 10

Kontroll.java package Trafikk; import java.io.file; import java.util.arraylist; import java.util.collections; import java.util.comparator; import java.util.list; * Implementsajon av ikontroll * @author Administrator public class Kontroll implements ikontroll{ Alle observasjoner for en vegstrekning i en periode List<Observasjon> Obs; Den aktuelle vegstrekningen ivegstrekning vegstrekning; Den fartsgrensen som skal brukes som bøteleggingsgrense int fartsgrense; * Konstruktør som leser alle.xml og.txt filer * @param catalog Katalogen der alle filene fra fotoboksene ligger * @param vegstrekning Den vegstrekningen vi skal kontrollere * @param fartsgrense Fartsgrense i km/t. Bøtegrense. public Kontroll(File catalog, ivegstrekning vegstrekning,int fartsgrense){ Obs=new ArrayList<>(); this.vegstrekning=vegstrekning; this.fartsgrense=fartsgrense; ------------- skal ferdiggjøres som oppgave F ----------------- alle filer i katalogen catalog skal leses og det skal opprettes Observasjon-objekter som skal legges inn i Obs public List<Observasjon> alleobservasjonersortert() { -------------skal implementeres som oppgave G ----------------- public List<Observasjon> observasjonerforenfotoboks(int boksid) { -------------skal implementeres som oppgave H ----------------- public double snitthastighetvedenfotoboks(int boksid) { -------------skal implementeres som oppgave I ----------------- public List<String> bilersompassererforfort() { -------------skal implementeres som oppgave J ----------------- 11

public List<String> bilersomharbruktforkorttid() { -------------skal implementeres som oppgave K ----------------- public List<Observasjon> alleobservasjoneravenbil(string bilid) { -------------skal implementeres som oppgave L ----------------- 12

FileLoader.java package Trafikk; import java.io.file; import java.util.list; * * @author Administrator public abstract class FileLoader { * Bygg en liste av alle observasjonene som finnes på en fil * @return En liste med observasjoner abstract List<Observasjon> getobservasjoner(file file); 13

TextFileLoader.java package Trafikk; import java.io.bufferedreader; import java.io.file; import java.io.filereader; import java.util.arraylist; import java.util.list; * Arbeider mot en tekstfil med en observasjon pr linje * Tekstfila er kontrollert slik at hver linje inneholder korrekt format * @author Administrator public class TextFileLoader extends FileLoader{ * Bygger en liste med observasjoner. Se vedlegg Dataformater. * @return en liste med observasjoner public List<Observasjon> getobservasjoner(file file) { -------------skal løses som oppgave E ----------------- * Leser tekst fra en fil * @param file Fila som skal leses * @return Teksten som er lest, null hvis noe går galt private String gettextfile(file file){ BufferedReader BR= null; StringBuilder result=new StringBuilder(); try{ BR= new BufferedReader(new FileReader(file)); String line; while((line=br.readline())!= null){ result.append(line);result.append("\n"); BR.close(); catch(exception ex){return null; return result.tostring(); 14

XMLFileLoader.java package Trafikk; import java.io.file; import java.net.url; import java.util.arraylist; import java.util.list; import javax.xml.parsers.documentbuilder; import javax.xml.parsers.documentbuilderfactory; import org.w3c.dom.document; import org.w3c.dom.element; import org.w3c.dom.nodelist; * Arbeider mot en XML-fil med ett observasjons - element * for hver observasjon * XML-fila er kontrollert slik at alle elementene finnes i riktig format * @author Administrator public class XMLFileLoader extends FileLoader{ * Bygger en liste med observasjoner. Se vedlegg Dataformater. * XML-fila inneholder elementer med navn: observasjon * @return En liste med observasjoner public List<Observasjon> getobservasjoner(file file) { -------------skal løses som oppgave D ----------------- * Bygger et XML-dokument (DOM) fra en fil * @param file XML-fila * @return Documentet eller null dersom vi får feil private Document getdomfromfile(file file){ try{ URL url=new URL("file:/"+file.toString()); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder dbuilder=factory.newdocumentbuilder(); return dbuilder.parse(url.tostring()); catch(exception se){return null; 15

Dataformater Eksempel på XML-fil <?xml version="1.0"?> <root> <observasjon fotoboksid="1"> <passeringstid>1335421321264</passeringstid> <hastighet>85</hastighet> <regnummer>aa52347</regnummer> </observasjon> <observasjon fotoboksid="1"> <passeringstid>1335422161261</passeringstid> <hastighet>79</hastighet> <regnummer>aa46702</regnummer> </observasjon> </root> Eksempel på textfil Hver linje er ordnet slik: fotoboksid:passeringstid:hastighet:regnummer 2:1335421861264:67:AD23415 2:1335422881262:90:AD53417 16