UNIVERSITETET I BERGEN Det matematisk-naturvitenskapelige fakultet

Like dokumenter
UNIVERSITETET I BERGEN Det matematisk-naturvitenskapelige fakultet

Tillatte hjelpemidler: alle skrevne og trykte. Antall sider: 2 (+ 1 side vedlegg, bakerst). Oppgave 1 [25%]

EKSAMEN OBJEKTORIENTERT PROGRAMMERING Alle trykte og skrevne. Java API dokumentasjon er tilgjengelig lokalt på hver maskin.

EKSAMEN. Objektorientert programmering

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

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Eksamen i Internetteknologi Fagkode: ITE1526

EKSAMEN I EMNET INF100/INF100-F Grunnkurs i programmering (Programmering 1) Fredag 16. desember 2005 Tid: 09:00 14:00

UNIVERSITETET I OSLO

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

INF Seminaroppgaver til uke 3

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Obligatorisk oppgave 4: Lege/Resept

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Eksamen Objektorientert Programmering 2013

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

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk

LO191D/LC191D Videregående programmering

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

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

HØGSKOLEN I SØR-TRØNDELAG

EKSAMEN. Emne: Algoritmer og datastrukturer

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

Fra problem til program

Løsningsforslag Test 2

UNIVERSITETET I OSLO

Løsningsskisse, eksamen J2EE og distribuerte systemer 19.mai 2004

EKSAMENSOPPGAVE. INF-1100 Innføring i programmering og datamaskiners virkemåte. Ingen. Elektronisk (WiseFlow) Robert Pettersen

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

INF Løsning på seminaropppgaver til uke 8

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

UNIVERSITETET I OSLO

EKSAMEN. Algoritmer og datastrukturer

HØGSKOLEN I SØR-TRØNDELAG

LC191D/LO191D Videregående programmering mai 2010

HØGSKOLEN I SØR-TRØNDELAG

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

UNIVERSITETET I OSLO

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

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

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

Eksamen i fag SIF8005 Programmering. Torsdag 10. mai 2001 kl

INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel )

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

TDT4100 Objektorientert programmering

EKSAMEN med løsningsforslag

Eksamen. Objektorientert Programmering IGR 1372

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Oppgave 1. Sekvenser (20%)

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

TDT4100 Objektorientert programmering

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

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Objektorientert Programmering Ekstraordinær eksamen 2014

Repitisjonskurs. Arv, Subklasser og Grensesnitt

Informasjon Eksamen i IN1000 høsten 2017

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

EKSAMENSOPPGAVE I INF-1100

Sensur-veiledning INF1000 h 2013 (fasit) am - 6. des. 2013

Repetisjon. INF gruppe 13

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

UNIVERSITETET I OSLO

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

UNIVERSITETET I OSLO

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE

2 Om statiske variable/konstanter og statiske metoder.

INF1010. Grensesnittet Comparable<T>

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

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

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

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

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

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

UNIVERSITETET I OSLO

Transkript:

UNIVERSITETET I BERGEN Det matematisk-naturvitenskapelige fakultet Eksamen i emnet INF101/INF101-F - Programmering 2 Tirsdag 27. September 2011, kl. 09-14 Bokmål Tillatte hjelpemidler: alle skrevne og trykte. Antall sider (inkludert vedlegg): 10. Les gjennom og skaff deg oversikt over hele eksamensettet før du begynner å løse det. Når du løser oppgavene kan du benytte resultater fra oppgaver og deloppgaver du ikke har lykkes i å løse. Prosentsatsene ved hver oppgave angir omtrentlig vekt ved sensur. Deloppgaver til en oppgave kan være ulikt vektet. I kodevedleggene er detaljer utelatt fra implementasjonen når disse ikke er relevante. Vedlagte klasser og kontrakter kan gå over flere sider. Oppgave 1 (5%) Skriv noen korte punkter om hvilke innvirkninger tester og testdrevet utvikling har på utviklingsprosessen. Oppgave 2 (40%) Vedlagt kode: IAktivitetsLagrer.java, EnkelFilAktivitetsLagrer.java, TestEnkelFilAktivitetsLagrer.java, Dato.java og Aktivitet.java. Den vedlagte koden er en del av en kalender hvor brukeren kan legge inn aktiviteter. Kontrakten IAktivitetsLagrer definerer metoder for å lagre og hente frem kalenderaktiviteter. EnkelFilAktivitetsLagrer implementerer kontrakten og håndterer lagring av aktiviteter, testet av TestEnkelFilAktivitetsLagrer. (a) Implementér tester for metoden hentaktiviteter(dato dag). Du bør ha minst tre tester, se TestEnkelFilAktivitetsLagrer.java for bruk av Dato og Aktivitet). Du trenger ikke ta hensyn til alle måter metoden kan feile på. (b) I hvilke sammenhenger (generelt sett) er det fornuftig å bruke en kontrakt? Skriv noen få linjer. Foreslå metoder for kontrakten IKalenderVisning som skal sørge for at aktiviteter kan vises til brukeren. Du trenger ikke ta hensyn til om brukeren skal gi input til systemet (feks å opprette nye aktiviteter eller fjerne dem). Kravene til systemet er å kunne se hvilke dager som har aktiviteter, hvilke aktiviteter som finnes for en gitt dag og å kunne se alle detaljer om en aktivitet. (c) Implementer metoden void lagreaktiviteterserialiserttilfil(string filnavn) ved å bruke objektserialisering. Metoden lagrer tilstanden til EnkelFilAktivitetsLagrerobjekter. Du kan bruke metoden writeutf() i ObjectOutputStream for å lagre strenger. (d) Implementér metoden void lesinnserialiserteaktiviteter(string filnavn). side 1 av 10

INF101(F) 27. September 2011 Bokmål (e) Hvilke fordeler og ulemper kan du se ved å bruke objektserialisering fremfor å skrive/lese tekstrepresentasjoner av objektene? Diskutér kort. Oppgave 3 (25%) Se vedlagt kode Aktivitet.java og Dato.java. Listen over aktiviteter i EnkelFilAktivitetsLagrer.java skal være sortert på dato og så på tidspunkt slik at den eldste datoen med det tidligste tidspunktet er sortert først i listen (posisjon 0), og avtalen lengst frem i tid og senest på dagen er sortert på siste posisjon i listen. For å få dette til må både Aktivitet og Dato implementere Comparable-kontrakten på følgende måte: public class Aktivitet implements Comparable<Aktivitet> { public class Dato implements Comparable<Dato> { (a) Implementér metoden(e) i klassene Aktivitet og Dato som trengs for å oppfylle Comparable-kontrakten. (b) Metoden settinnnyaktivitet(aktivitet aktivitet) i EnkelFilAktivitetsLagrer.java skal finne riktig plassering med en effektiv algoritme. Du skal implementere binærsøk for å finne riktig plassering for den nye aktiviteten i listen over aktiviteter, samt sette inn aktiviteten på riktig posisjon. Oppgave 4 (10%) Se vedlagt kode for klassene Person, Ansatt og Student. (a) Hva er effekten av å kjøre følgende kodebit? Kommentér kort styrker, svakheter og eventuelle feil ved koden, samt eventuelle endringer du kunne tenke deg å gjøre. Tenk for eksempel på følgende: hvilken hentpersoninfo()-metode vil kjøres? Hvilken skrivoppsummering()-metode vil kjøres? public Person tildelrolle(string rolle, String navn) { private Person p; if (rolle == STUDENT) { p = new Student(navn, null); p.hentstudieoppmelding(); else { p = new Ansatt(navn, null); p.hentpersoninfo(); p.skrivoppsummering(); (b) Skriv konstruktørene til Student(String navn, ArrayList<Fag> fag) og Ansatt(String navn, Stilling stilling). side 2 av 10

INF101(F) 27. September 2011 Bokmål Oppgave 5 (20%) Se vedlagt kode TekstHendelse.java. Skriv tester for og implementér metoden avgjoerkommando() som avgjør hvilken kommando som skal utføres og kaller riktig metode i henhold til input fra bruker (dette er et hendelsesorientert program med tekstgrensesnitt). Du trenger ikke ta hensyn til hvordan input mottas eller valideres, i testene kan du bruke metoden setvalgt(int i). Gyldig input fra bruker er tallene 1, 2, eller 3, hvor 3 avslutter programmet. All annen input skal gi et unntak. Testene skal vise (på enklest mulig måte) at riktig del av metoden kjører, samt at feilhåndteringen er korrekt. Lykke til. Siv Midtun Hollup side 3 av 10

Vedlegg - oppgave 2 public interface IAktivitetsLagrer { * Henter alle aktiviteter for en gitt dag. * @param dag * @return En liste av aktiviteter, tom hvis dagen ikke har noen aktiviteter public ArrayList<Aktivitet> hentaktiviteter(dato dag); * Lagrer en ny aktivitet. * @param aktivitet * @throws LagringsException * - hvis aktiviteten ikke kunne lagres public int lagreaktivitet(aktivitet aktivitet) throws LagringsException; * Henter en bestemt aktivitet. * @param aktivitetsid * @return Aktiviteten returneres. * @throws LagringsException * - hvis aktivitetsid-en ikke matcher en aktivitet public Aktivitet hentaktivitet(int aktivitetsid) throws LagringsException; * Sletter en bestemt aktivitet. * @param aktivitetsid * @throws LagringsException * - dersom aktivitetsid ikke matcher noen aktiviteter * - dersom slettingen feiler public void slettaktivitet(int aktivitetsid) throws LagringsException; * Oppdaterer en gitt aktivitet med ny informasjon. * @param aktivitet * @throws LagringsException * - dersom aktiviteten finnes ikke i systemet * - dersom aktiteten ikke kunne oppdateres public void oppdateraktivitet(aktivitet aktivitet) throws LagringsException; side 4 av 10

public class EnkelFilAktivitetsLagrer implements IAktivitetsLagrer { private String kalendernavn; ArrayList<Aktivitet> aktiviteter; private int runningid; public EnkelFilAktivitetsLagrer(String kalendernavn) { this.kalendernavn = kalendernavn; this.aktiviteter = new ArrayList<Aktivitet>(); this.runningid = 0; public ArrayList<Aktivitet> hentaktiviteter(dato dag) { ArrayList<Aktivitet> riktigdag = new ArrayList<Aktivitet>(); for (Aktivitet aktivitet : this.aktiviteter) { if (aktivitet.getdag().equals(dag)) { riktigdag.add(aktivitet); return riktigdag; public int lagreaktivitet(aktivitet aktivitet) throws LagringsException { aktivitet.setid(runningid); aktiviteter.add(aktivitet); return this.runningid++; public Aktivitet hentaktivitet(int aktivitetsid) throws LagringsException { public void slettaktivitet(int aktivitetsid) throws LagringsException { public void oppdateraktivitet(aktivitet aktivitet) throws LagringsException { public void lagreaktiviteterserialiserttilfil(string filnavn) { public void lesinnserialiserteaktiviteter(string filnavn) { side 5 av 10

import java.util.arraylist; import junit.framework.testcase; public class TestEnkelFilAktivitetsLagrer extends TestCase { private EnkelFilAktivitetsLagrer lagrer; protected void setup() { lagrer = new EnkelFilAktivitetsLagrer("JobbKalender"); public void testaktivitetkanlagres() { int id = lagrer.lagreaktivitet(new Aktivitet("kodesesjon", "1400", 2.0, new Dato(6, 5, 2011))); assertequals("kodesesjon", lagrer.hentaktivitet(id).gettittel()); side 6 av 10

Vedlegg oppgave 2 og 3 public class Dato implements Comparable<Dato> { private int aar; private int maaned; private int dag; * Oppretter en dato * @param dag * @param maaned * @param aar public Dato(int dag, int maaned, int aar) { this.aar = aar; this.maaned = maaned; this.dag = dag; * @return the aar public int getaar() { return aar; * @return the maaned public int getmaaned() { return maaned; * @return the dag public int getdag() { return dag; side 7 av 10

public class Aktivitet implements Comparable<Aktivitet> { private String tittel; private String starttid; private double lengdeitimer; private Dato dag; private int id; * Oppretter en fersk aktivitet * * @param tittel * @param starttid * @param lengdeitimer * @param dag public Aktivitet(String tittel, String starttid, double lengdeitimer, Dato dag) { this.tittel = tittel; this.starttid = starttid; this.lengdeitimer = lengdeitimer; this.dag = dag; * Oppretter en aktivitet med en gitt id, brukes kun for å gjenopprette * aktiviteter. * * @param id * @param tittel * @param starttid * @param lengde * @param dato public Aktivitet(int id, String tittel, String starttid, double lengde, Dato dato) { this.id = id; this.tittel = tittel; this.starttid = starttid; this.lengdeitimer = lengde; this.dag = dato; side 8 av 10

Vedlegg - oppgave 4 public abstract class Person { String navn; String gateadresse; int id; public Person(String navn) { this.id = hentnyid(); this.navn = navn; private int hentnyid() { public void hentpersoninfo() { public String skrivoppsummering() { return navn + "\n" + gateadresse + "\n"; public class Ansatt extends Person { private Stilling stillingstype; public String skrivoppusmmering() { return navn + "\n" + gateadresse + "\nstilling: " + stillingstype.tostring(); public class Student extends Person { private ArrayList<Fag> fag; public void hentstudieoppmelding() { public String skrivoppsummering() { return navn + "\n" + gateadresse + "\nantall fag dette semesteret: " + fag.size(); side 9 av 10

Vedlegg oppgave 5 public class TekstHendelse { private int valgt = 0; public void hentvalgfrabruker() { // henter variable valgt med informasjon fra brukergrensesnitt public void setvalgt(int verdi) { this.valgt = verdi; public int avgjoerkommando() throws RuntimeException { private void utfoerkommando1() { private void utfoerkommando2() { side 10 av 10