Høgskoleni østfold EKSAMEN

Like dokumenter
Høgskoleni østfold NY/UTSATT EKSAMEN

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

Emnenavn: Objektorientert programmering. Eksamenstid: 4 timer

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

Eksamen Objektorientert Programmering 2011

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

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

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

Eksamen Objektorientert Programmering 2013

Objektorientert Programmering Ekstraordinær eksamen 2014

EKSAMEN. Algoritmer og datastrukturer

EKSAMEN. Objektorientert programmering

EKSAMEN. Emne: Algoritmer og datastrukturer

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

EKSAMEN med løsningsforslag

EKSAMEN. Emne: Algoritmer og datastrukturer

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

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

Høgskoleni østfold EKSAMEN

Høgskoleni østfold EKSAMEN

EKSAMEN (Konvertert fra en gammel PHPeksamen)

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

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

UNIVERSITETET I OSLO

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

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

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

LO191D/LC191D Videregående programmering

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

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

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

INF106 Objektorientert programmering

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

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

TDT4100 Objektorientert programmering

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

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

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

Løsningsforslag EKSAMEN

TDT4100 Objektorientert programmering

ANTDAGER = 358; I Ifra nyttår 08 til 08 1ed julaften

INF Seminaroppgaver til uke 3

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

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

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

EKSAMEN (Konvertert fra en gammel PHP-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.

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

Eksamensoppgave i TDT4100 Objektorientert programmering med Java

OPPGAVE 5b og 8b Java Kode

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

EKSAMEN (Konvertert fra en gammel PHP-eksamen)

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

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

Repitisjonskurs. Arv, Subklasser og Grensesnitt

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

Eksamen Oppgave a) public class DayTime { public final int hours, minutes;

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

BOKMÅL Side 1 av 5. KONTERINGSEKSAMEN I FAG TDT4102 Prosedyre og objektorientert programmering. Onsdag 6. august 2008 Kl

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Eksamensoppgave i TDT4100 Objektorientert programmering med Java

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

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

TDT4100 Objektorientert programmering

TDT4100 Objektorientert programmering

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

UNIVERSITETET I OSLO

Høgskoleni østfold EKSAMEN. Dato: Eksamenstid: kl til kl. 1200

HØGSKOLEN I SØR-TRØNDELAG

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

EKSAMEN (Konvertert fra en gammel PHP-eksamen)

Leksjon 6. Objekt. Evt. importsetninger. public class Klasse { Konstruktør. Objektmetoder. Innkapsling (private): set-og get-metoder

UNIVERSITETET I OSLO

Gjennomgang av eksamen H99

Eksamen Objektorientert Programmering 2012

Kapittel 7: Mer om arv

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.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; }

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

Les gjennom hele oppgavesettet før du begynner å besvare deloppgavene.

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

EKSAMEN. Emnekode: Emne: Matematikk for IT ITF Eksamenstid: Dato: kl til kl desember Hjelpemidler: Faglærer:

LC191D/LO191D Videregående programmering mai 2010

Det finnes ingenting. som kan gjøres med interface. men som ikke kan gjøres uten

EKSAMEN. Emne: Emnekode: Matematikk for IT ITF Dato: Eksamenstid: til desember Hjelpemidler: Faglærer:

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

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

Eksamensoppgave i IFUD1025 Programmering i Java

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

Transkript:

Høgskoleni østfold EKSAMEN Emnekode: Emne: ITF10611 Objektorientert Programmering Dato: 26 mai 2015 Eksamenstid: kl. 09:00 til kl. 13:00 Hjelpemidier: To A4-ark (fire sider) med egne notater Faglærer: Per Bisseberg Eksamensoppgaven: Oppgavesettet består av 17 sider inklusiv denne forsiden og vedlegg. Kontroller at oppgaven er komplett før du begynner å besvare spørsmålene. Du er selv ansvarlig for å kontrollere at oppgavesettet er komplett. Les gjennom alle oppgavene før du begynner. 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 javasyntaks. 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. 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. Det ligger utdrag fra Java 8 Dokumentasjonen sist i vedlegget. Ønsker dere alle en riktig god sommer, og takk for et virkelig hyggelig semester :-) Lykketil! Sensurdato: 17. iuni 2015 Karakterene er tilgjengelige for studenter på studentweb senest 2 virkedager etter oppgitt sensurfrist. Følg instruksjoner gitt på: www.hiof.no studentweb 1

Oppgave 1 (25%) Disse oppgavene skal besvares kort og presis. 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 abstraksjon. Lag en illustrasjon som viser abstraksjon. Lag enkel kode som viser abstraksjon. Oppgave 1.2 Forklar disse nøkkelordene fra Java new static this Oppgave 1.3 Forklar og eksemplifiser begrepet innkapsling. 2

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 { privatestaticfinalstringnavn = "superduperklasse"; publica(stringnavn){ this.navn= navn; publicclassb extendsa{ privateint verdi; publicb(stringnavn,int verdi){ super(navn); this.verdi= verdi; 3

Oppgave 2.1.2 publicabstractclass A { privatestringtekst; publica(stringtekst){ this.tekst= tekst; publicabstractvoid printtekst(); publicclassb implementsa{ privatestringnavn; publicb(stringtekst,stringnavn){ super(tekst); this.navn= navn; 4

Oppgave 2.2(15%) I disse deloppgavene skal du skrive hvilken utskrift koden i mainmetoden resulterer i. Oppgave 2.2.1 publicclassperson{ privatestringfornavn; privatestringetternavn; privateint alder; publicperson(stringfornavn,stringetternavn,int alder){ this.fornavn= fornavn; this.etternavn= etternavn; this.alder= alder; } @Override publicstringtostring(){ returnfornavn+ " " + etternavn +.,. + alder; } // get og set ikketatt med, men finnesfor allefelt. } // main-metode publicstaticvoid main(string[]args){ ArrayList<Person> personer= new ArrayList<Person>(); Personanne = new Person("Anne","Olsen",32); personer.add(anne); personer.add(anne); personer.get(1).setalder(42); for(personp: personer){ System.out.println(p); } } 5

Oppgave 2.2.2 Vi benytter Person-klassen fra forrige oppgave publicstaticvoid main(string[]args){ ArrayList<Person> personer= new ArrayList<Person>(); personer.add(new Person("Anne","Olsen",32)); personer.add(new Person("Ole","Pettersen",34)); personer.add(new Person("Nina","Hansen",29)); Collections.sort(personer,new Comparator<Person>() { @Override publicint compare(personpl, Personp2) { returnp2.getetternavn().1ength() - pl.getetternavn().1ength(); } } ) ; for(personp: personer){ System.out.println(p); } } 6

Oppgave2.2.3 publicclasslinje{ privatestringtekst; publiclinje(stringtekst) this.tekst= tekst; @Override publicstringtostring(){ returntekst;} publicstringgettekst(){ returntekst; publicvoid settekst(string tekst){ this.tekst= tekst;} publicclassfildata{ publicstaticarraylist<linje> fillinjer= new ArrayList<Linje>(); publicstaticarraylist<linje> genererparagrafer(string tegn){ ArrayList<Linje> ret = new ArrayList<Linje>(); for(linje1: fillinjer){ String[]mid = 1.getTekst().split(tegn); StringnyTekst= for(inti = 0; i < mid.length;i++){ if(i+1!= mid.length){ nytekst+= mid[i]+ else{ nytekst+= mid[i]+ ret.add(newlinje(nytekst)); returnret; // main- metode publicstaticvoid main(string[]args){ Fildata.fiLLinjer.add(new Linje("342523;Per;Persen;3.7;180")); Fildata.fiLtinjer.add(new Linje("231252;Ida;Idasen;1.4;35")); Fildata.fiLtinjer.add(new Linje("932532;Tore;Torsen;4.1;180")); for(linje1: Fildata.genererParagrafer(";")){ System.out.println(1); 7

Oppgave 3(50%) Vi skal utvikle en prototype for en oppdragsgiver, Høgskolen i Østfold. Vi har nettopp begynt utviklingen og vi jobber med å få på plass kjernefunksjonalitet. Vedlagt finner du de klasser og interface vi har så langt. HiØ trenger et nytt romreservasjonssystem. Systemet skal håndtere alle personer som kan kunne trenge å benytte et slikt system, altså både studenter og ansatte. I tillegg så må systemet støtte opprettelsen av rom, men høgskolen har flere typer rom og forskjellig regelverk knyttet til hvem som kan reservere rommene. Romtypene vi skal ta med i prototypen er følgende: forelesningsrom, møterom og grupperom, det er høyst sannsynlig at programmet må kunne støtte andre typer av rom senere. Reglene rundt reservasjon er som følger: Grupperom Kan reserveres av studenter og ansatte. Studenter kan maksimalt reservere et spesifikt grupperom 2 timer per reservasjon. Ansatte har ingen tidsbegrensing. Møterom Kan kun reserveres av ansatte. Kan kun reservere et gitt møterom inntil fire timer per reservasjon. Forelesningsrom Kan kun reserveres av ansatte. En ansatt skal kunne reservere et forelesningsrom flere for dager i en operasjon. Dvs, at en ansatt skal kunne reservere et forelesningsrom for mange dager av gangen. Oppgave 3.1 Lag et klassediagram, det er ikke nødvendig å ta med felter og metoder, over alle klassene og interface (se vedlegg) i systemet hvor du tydelig får frem eventuelle arverelasjoner, implementasjoner og assosiasjoner. Assosiasjonene skal vises med aggregering-/komposisjons- «piler». Du trenger ikke tegne inn klassen Main. Oppgave 3.2 Skriv ferdig konstruktørene i klassene Ansatt og Student. Den abstrakte klassen Rom definerer den abstrakte metoden reservasjon(person person, Tidsrom tidsrom). Implementer denne metoden der det er påkrevd og skriv koden som utfører reservasjon etter reglene som er beskrevet over. Vi har interfacet «Multireserverbar», implementer denne i klassen Forelesningsrom. Du skal her skrive koden som gjør at en ansatt kan reservere et rom mange ganger. 8

Oppgave 3.3 I klassen Rom har vi metoden printreservasjoner() Denne metoden skal skrive ut alle reservasjoner i Reservasjonsoversikten for ett rom. Gjør nødvendige tillegg slik at utskriftene fra denne metoden ser slik ut: Reservert av: Per Bisseberg. Fra: Thu Jan 15 10:15:00 CET 2015 Til: Thu Jan 15 11:00:00 CET 2015 Reservert av: Tom Heine Nätt. Fra: Fri Jan 16 10:15:00 CET 2015 Til: Fri Jan 16 11:00:00 CET 2015 Oppgave 3.4 I klassen Main finner vi en metode som lar en ansatt gjenta en reservasjon ukentlig. Her finner du en rekke kommentarer som dette: // A Du skal erstatte disse kommentarene (A - G) i metoden med egne kommentarer som forklarer og beskriver de underliggende operasjonene. Oppgave 3.5 I klassen Main ar vi en funksjonen printallrominfo() som inneholder nødvendig funksjonalitet for å skrive ut all informasjon om alle rom vi har i systemet. Vi ønsker derimot å kunne sortere rommene på følgende måte før vi skriver ut rominformasjonen: Gjør tillegg i klassen Rom som definerer at den naturlige sorterings-ordenen på romobjekt er på synkende antall plasser. Skriv koden i main-metoden som utfører sortering og utskrift av all rom informasjon. 9

Vedlegg til oppgave 3 Klasser: Rom o Indre klasse: Reservasjon Forelesningsrom Møterom Grupperom Person Ansatt Student Tidsrom Main Trenger ikke være med i oppgave 3.1 UML Interface: multireserverbar Vedlegget er på 8 sider inklusive denne siden. 10

Rom publicabstractclassrom { privatestringnavn; privateint antallplasser; privatestaticarraylist<rom>rom = new ArrayList<Rom>(); privatearraylist<reservasjon> romreservasjoner = new ArrayList<Reservasjon>(); // konstruktør publicrom(stringnavn,int antallplasser){ this.navn= navn; this.antallplasser = antallplasser; rom.add(this); // abstraktmetodefor utførelseav reservasjon abstractpublicvoid reservasjon(person person,tidsromtidsrom); // tekstligrepresentasjon av Rom-objektet @Override publicstringtostring(){ return"rom"+ navn+ "\tplasser:" + antallplasser; // Du kan forutsetteat alleprivatefelt har get og set tilgjengelig //**************** Reservasjoner*'************** // metodefor opprettelseav ny reservasjonfor detterommet protectedvoid leggtilreservasjon(person person,tidsromtidsrom){ // sjekkerom rommetalleredeer reservert if(!erreservert(tidsrom)){ romreservasjoner.add(new Reservasjon(this, tidsrom,person)); // sjekkerom rommeter reserverti dettetidsrommet privatebooleanerreservert(tidsrom tidsrom){ for(reservasjon r: romreservasjoner){ if(r.tidsrom.konflikt(tidsrom)){ System.out.println("Rommet er alleredreservert"); returntrue; returnfalse; // skriverut alle reservasjonerfor detterommet publicvoid printreservasjoner(){ for(reservasjon r: romreservasjoner){ System.out.println(r); 11

// indre klasse: Reservasjon private class Reservasjon{ private Rom rom; private Tidsromtidsrom; private Personreservator; // konstruktør public Reservasjon(Rom rom,tidsromtidsrom, Personreservator){ this.rom= rom; this.tidsrom= tidsrom; this.reservator = reservator; // tekstlig representasjonav Reservasjon-objektet @Override public StringtoString(){ return "Reservertav: " + reservator + tidsrom; // get- og setmetoderer utelatt da de ikke er nødvendige 12

Forelesningsrorn public class Forelesningsrom extends Rom{ // konstruktør public Forelesningsrom(String navn,int antallplasser){ super(navn,antallplasser); Møterom public class Møteromextends Rom { // konstruktør public Møterom(Stringnavn,int antallplasser){ super(navn,antallplasser); Grupperom public class Grupperomextends Rom { // konstruktør public Grupperom(String navn,int antallplasser){ super(navn,antallplasser); Person public abstract class Person{ private Stringfornavn; private Stringetternavn; private Stringavdeling; private static ArrayList<Person> // konstruktør personer= new ArrayList<Person>(); public Person(Stringfornavn,Stringetternavn,Stringavdeling){ this.fornavn= fornavn; this.etternavn= etternavn; this.avdeling= avdeling; personer.add(this); // Du kan forutsetteat alle privatefelt har get og set tilgjengelig 13

Ansatt public class Ansatt extends Person private String ansattid; // konstruktør // oppgave 3.2a løses her // Du kan forutsetteat alle private felt har get og set tilgjengelig Student public class Student extends Person private int studentnummer; // konstruktør // oppgave 3.2a løses her // Du kan forutsetteat alle private felt har get og set tilgjengelig 14

Tidsrorn public class Tidsrom { private Calendar fra; private Calendar til; //konstruktor public Tidsrom(Calendarfra, Calendar til) { // Sjekker om fra tiden er før til tiden if(fra.before(til)){ this.fra = fra; this.til = til; else{ // feilmeldingog lar feltene være null (ikke godt håndtert.. men dette er bare en prototype) System.out.println("Tildatokan ikkeværeeldreenn fra dato"); // sjekker om det er tidskonfliktmed tidsrommetog dette rommet public boolean konflikt(tidsromt){ if(t.fra.after(til)){ return false; return true; // tekstlig representasjonav objektet @Override public String tostring(){ return "Fra: " + fra.gettime()+ " - Til: " + til.gettime(); // henter varighet i timer for dette tidsrommet public int hentvarighet(){ Duration d = Duration.between(fra.toInstant(), til.toinstant()); return (int) d.tohours(); // Du kan forutsetteat alle private felt har get og set tilgjengelig 15

klain public class Main { public static void main(string[]args) { // start // ikke nødvendigå skrive kode her // metode for å lage reservasjonersom gjentar seg i n uker public static void ukesreservasjon(multireserverbar rom, Ansatt ansatt, Tidsrom tidsrom, int n){ // A ArrayList<Tidsrom>liste = new ArrayList<Tidsrom>(); // B liste.add(tidsrom); // C for(int i = 0; i < n; i++){ // D GregorianCalendarfra = new GregorianCalendar( tidsrom.getfra().get(calendar.year), tidsrom.getfra().get(calendar.montn), tidsrom.getfra().get(calendar.day OF MONTH), tidsrom.getfra().get(calendar.nour_of DAY), tidsrom.getfra().get(calendar.minute) ) ; GregorianCalendartil = new GregorianCalendar( tidsrom.gettil().get(calendar.year), tidsrom.gettil().get(calendar.montn), tidsrom.gettil().get(calendar.day OF MONTH), tidsrom.gettil().get(calendar.nour_of DAY), tidsrom.gettil().get(calendar.m/nute) ); // E fra.add(calendar.weekof YEAR, i+1); til.add(calendar.weekof YEAR, i+1); // F liste.add(newtidsrom(fra,til)); // G rom.multireservasjon(ansatt,liste); // metode for å skrive ut info om alle rom public static void printallrominfo(){ for(rom r: Rom.getRom()){ System.out.println(r); 16

Mulfireserverbar publicinterfacemultireserverbar{ // metode for ukentlige reservasjoner void multireservasjon(ansattansatt, ArrayList<Tidsrom>liste); Utdrag Calendar fra Java 8 Dokumentasjonen Felt/Field: WEEK OF YEAR Fieldnumber for get and set indicatingthe week number within the current year. Metoder: add(int field, int amount ) Adds or subtracts the specifiedamount of time to the givencalendar field,based on the calendar's rules. get(int field) Returns the value of the givencalendar field. GregorianCalendar Konstrukt Gre oriancalendar(int year, int month, int day0fmonth, int hourofday, int minute) Constructs a GregorianCalendar with the givendate and time set for the default time zone with the default locale. 17