INF1000 Prøveeksamen Oppgave 7 og 9



Like dokumenter
UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Anta at følgende programsetninger utføres. Hva skrives ut på skjermen? Hva skrives ut her (skriv nøyaktig de karakterene som printes, og bare de)?

INF1001 Prøveksamen Løsningsforslag

INF Løsning på seminaropppgaver til uke 8

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

INF Uke 10. Ukesoppgaver oktober 2012

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

UNIVERSITETET I OSLO

Informasjon Prøveeksamen i IN1000 høsten 2018

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1000 Eksamen 2014 (modifisert)

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

Løsningsforslag til eksamen i INF1000 våren 2006

Oblig4 - forklaringer. Arne og Ole Christian

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

Go to use the code /10/2016. En liten undersøkelse: Mobil/ nettbrett. INF1000/ INF1001: IT og samfunn.

Enkle generiske klasser i Java

Oppgave 1. Oppgave 2. Oppgave 3. Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Oppgave 1. INF1000 Uke 13. Oppgave 2. Oppgave 3. Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI

Gjennomgang av eksamen H99

UNIVERSITETET I OSLO

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

INF1000: noen avsluttende ord

INF1000: Forelesning 11. Oppgave 2. Oppgave 1. Husk å melde deg på prøveeksamen i INF1000! Ole Christian Lingjærde 7.november 2006

UNIVERSITETET I OSLO

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

UNIVERSITETET I OSLO

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 15.

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Eivind Storm Aarnæs

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

De neste ukene. INF1000 Uke 12. Prøveeksamen. Nå - Prøveeksamen. Forelesning om IT og samfunn neste uke (13/11).

INF1000: Forelesning 7

UNIVERSITETET I OSLO

Innhold. INF1000 Høst Klasser og objekter. Uke 7: Mer objektorientert programmering Siri Moe Jensen

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

UNIVERSITETET I OSLO

Eksamen INF1010 V2009 Del B prøveeksamen V2010 Vekt 60 %

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

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

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

Introduksjon til objektorientert programmering

UNIVERSITETET I OSLO

Eksamensoppgaver 2014

Læreboken på 45 minutter

Løsningsforslag, inf101, våren 2001

UNIVERSITETET I OSLO

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

INF Uke 10. Løsningsforslag ukesoppgaver oktober 2012

2 Om statiske variable/konstanter og statiske metoder.

INF1000: Forelesning 7. Konstruktører Static

IN1010 våren januar. Objektorientering i Java

UNIVERSITETET I OSLO

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

INF 1000 Prøveeksamen. 23. november Ole Christian og Arne. Oppgave 1 (10 poeng) Er disse programsetningene lovlige i Java? Oppgave 2 (10 poeng)

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

INF1000 Eksamen 2014 (modifisert)

Etter uke 9 skal du. Introduksjon til objektorientert programmering. Innhold. Klasser som abstraksjoner

Innhold. INF1000 Høst Hva skal evalueres? Fra kurssidene. Hvorfor har vi en lærebok? Uke 11: Repetisjon og pensumgjennomgang

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

UNIVERSITETET I OSLO

INF1010 UML. Marit Nybakken 26. januar 2004

Eksamen høsten 2003 Den store bøygen i INF1000 er de obligatoriske oppgavene.

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

TDT4100 Objektorientert programmering

UNIVERSITETET I OSLO

Oblig4 - obligatorisk oppgave nr. 4 (av 4) i INF1000

Endret litt som ukeoppgave i INF1010 våren 2004

UNIVERSITETET I OSLO

Oblig 4Hybelhus litt mer tips enn i oppgaven

INF1000 (Uke 14) Resten av eksamen H03 + del av V05

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

Løsningsforslag til eksamen i INF1000

UNIVERSITETET I OSLO

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

IN Notat om I/O i Java

UNIVERSITETET I OSLO

. Ved sensur vl1 ahe bokstaverte deloppgaver (a, b, c,...) telle like mye.

UNIVERSITETET I OSLO

Repetisjon. INF gruppe 13

Oppgave 1a. INF1000 Prøveeksamen Oppgave 1c. Oppgave 1b

Oblig4 - forklaringer. Arne og Ole Christian

Seminaroppgaver IN1010, uke 2

UNIVERSITETET I OSLO

Løsningsforslag ukeoppg. 9: okt (INF Høst 2011)

Transkript:

INF1000 Prøveeksamen Oppgave 7 og 9 Høst 2015 Siri Moe Jensen 7a) Skriv en klasse Gave med to variabler som forteller hva som er i gaven, og hvor mye den har kostet. Klassen skal ha en konstruktør med parametere som angir verdier for objektvariablene. Foruten konstruktøren skal klassens grensesnitt omfatte tre metoder: En som returnerer gavepris; en som returnerer gavenavn; og en metode tostring som returnerer gavens navn og verdi som en String. private! ved eksamen: legger ikke vekt på eksplisitt public class Gave { private String innh; private int kr; public Gave (String hva, int kr) { innh = hva; this.kr = kr; public int getpris () { return kr; public String tostring () { return (innh + " " + kr); public String getinnhold () { return innh; 7b) Klassen Barn skal ha en datarepresentasjon for barnets navn, alle gavene barnet har åpnet, og totalverdien av gaver barnet har åpnet. Grensesnittet til klassen skal være en konstruktør med barnets navn som parameter, en metode for avlesing av totalverdien av alle gaver barnet har mottatt, en metode apnegave som legger til en ny gave og oppdaterer totalverdien av gaver barnet har fått, og en metode skrivbarn som skriver ut på terminal barnets navn, en linje for hver av barnets gaver og til slutt totalverdien av barnets gaver. Skriv klassen Barn med alt innhold. samling gaver ukjent antall class Barn { ikke oppslag? private String navn; liste opp private int totkost; private ArrayList <Gave> fatt = new ArrayList <>(); public Barn (String hvem) { navn = hvem; totkost = 0; // class Barn fortsetter 1

7b) forts..grensesnittet til klassen skal være en konstruktør med barnets navn som parameter, en metode for avlesing av totalverdien av alle gaver barnet har mottatt, en metode apnegave som legger til en ny gave og oppdaterer totalverdien av gaver barnet har fått,.. //..class Barn fortsetter public String getnavn () { return navn; public int gettotkost () { return totkost; public void apnegave (Gave ny) { fatt.add(ny); totkost += ny.getpris(); 7b) forts.. og en metode skrivbarn som skriver ut på terminal barnets navn, en linje for hver av barnets gaver og til slutt totalverdien av barnets gaver... //..class Barn fortsetter public void skrivbarn () { System.out.println (navn + ":"); for (Gave g: fatt) { System.out.println (g); System.out.println("Totalverdi gaver for " + navn + ": " + totkost); System.out.println (); spesialisert for løkke bruker tostring // class Barn forsetter Vi skal i de senere oppgavene utvide programmet, som skal inneholde en klasse Julekalender med blant annet følgende innhold: private Gave [] kalender; // pekere til en gave for hver dag private Barn [] apnere; // pekere til hvert av barna i familien // holder rede på hvem sin tur det er til å åpne // hvilken dag skal åpnes neste gang Julekalender (String[] barnenavn, String filnavn) // Konstruktør private void lesgavefil (String filnavn) // leser inn gaver med pris fra fil void nydag () // åpner en ny gave og oppdaterer datastrukturen void gaveoversikt (); // Skriver en oversikt over barna, deres åpnede gaver // og totalpris per barn på skjermen vet før bruk hvor mange gaver og barn som skal håndteres aksesseres sekvensielt => array eller ArrayList, her oppgitt som array lesgavefil oppgitt som private. Kun ved oppstart => i konstruktør. Filen inneholder 48 linjer, 2 for hver gave: Én linje med navn på gaven (en tekststreng), deretter én linje med prisen (et heltall). 7c) Skriv metoden lesgavefil i klassen Julekalender, som leser inn alle gavene fra filen oppgitt i parameteren og legger disse inn i kalenderen. Filformatet er beskrevet ovenfor. private void lesgavefil (String filnavn) throws Exception { File fil = new File(filnavn); Scanner gavefil = new Scanner (fil); for (int i=0; i<24; i++) { String gnavn = gavefil.nextline(); int gpris = Integer.parseInt (gavefil.nextline()); kalender[i] = new Gave (gnavn, gpris); kaster unntak må gjøres også i metoder som kaller denne 2

7d) Skriv konstruktøren til klassen Julekalender. Konstruktøren skal opprette objekter for alle barna i familien og opprette selve julekalenderen med gaver. class Julekalender { private Gave[] kalender = new Gave[24]; private Barn[] apnere; public Julekalender (String[] barnenavn, String filnavn) throws Exception { lesgavefil (filnavn); apnere = new Barn [barnenavn.length]; apnere[i] = new Barn (barnenavn[i]); dag = 0; Fast antall gaver, varierende antall barn Får array med barnenavn, trenger objekter Indeksering fra 0, <> dato 7e) Skriv metoden nydag i klassen Julekalender. Husk å oppdatere nesteapner. public void nydag () { Barn dagens = apnere[nesteapner]; dagens.apnegave(kalender[dag]); dag++; nesteapner++; if (nesteapner == apnere.length) { Hvilket barn skal åpne? kall apnegave for dette barnet, som oppdaterer barnet klar for ny gave og nytt barn 7f) Skriv metoden gaveoversikt i klassen Julekalender. public void gaveoversikt () { apnere[i].skrivbarn (); System.out.println(); Skal skrive ut hvert barn, og dets gaver hvert barn skriver ut seg selv 7g) Tegn et UML klasse diagram som viser programmets klasser med attributter og metoder, og deres relasjoner. nesteapner: int dag: int Julekalender + Julekalender (String[] barnenavn, String filnavn) lesgavefil (String filnavn):void + nydag (): void + gaveoversikt (): void Åpnere 1..* Innhold 24 Barn navn: String totkost: int + Barn (String hvem) + getnavn (): String + gettotkost (): int + apnegave (Gave ny): void + skrivbarn (): void Mottatte gaver 0..24 Viser ferdig design Entiteter (bokser) tilsvarer klasser Piler angir: Kan navigere til Gave innh: int kr: int + Gave (String hva, int kr) + getpris (): int + tostring (): String + getinnhold (): String 3

7f) Vi skal nå utvide klassen Julekalender med historikk fra tidligere år. I første omgang er hensikten å redusere sjansen for at et barn får samme gave flere år på rad. Du kan anta at gavenavn er entydige. Klassen Julekalender er utvidet med objektvariabel og metoder som vist nedenfor. Du skal skrive metoden avvergetlike som beskrevet nedenfor, og utvide metoden nydag med kall på avvergetlike. Dersom avvergetlike returnerer false, skal du skrive ut en beskjed på terminalen. Beskriv eventuelle andre behov for endringer i metoder du allerede har skrevet. /* HashMap historikk inneholder Gave objekter for alle gaver som har vært delt ut tidligere år. Nøkkel er en String bestående av navn på barnet som fikk den, konkatenert (sammensatt) med navnet på gaven.*/ private HashMap<String,Gave> historikk = new HashMap<>(); /* Metoden leshistorikk leser inn all historikk om tidligere utdelte gaver fra filen Historikk.txt, og bygger opp HashMap en historikk som beskrevet over. Denne metoden skal du ikke skrive selv. */ void leshistorikk(string filnavn) throws Exception { Denne oppgaven viser eksempler på noen utfordringer som kan komme bruk av kjente ting på nye måter les nøye ikke implementere mer enn bedt om Bruk piler og kommentarer i marg, ikke skriv (for mye) på nytt design preget av utvidelse "i første omgang" kan komme flere /* Metoden avvergetlike prøver å avverge at en barn får en gave det har fått i tidligere år. Den kalles hver dag før metoden apnegave. Dersom gaven og barnet som står for tur sammenfaller med noe som er gitt tidligere år, byttes gaven som står for tur med gaven for neste dag i kalenderen. I de tilfeller denne strategien ikke kan hindre at et barn får en gave det har fått før, skal metoden returnere false. Dersom barnet ikke har fått gaven som står for tur tidligere, eller du klarer å avverge det ved å bytte, skal metoden returnere true: */ private boolean avvergetlike () { /* Metoden skrivhistorikk lagrer årets gaver på fil sammen med tidligere historikk. Metoden skal ikke skrives av deg: */ Nøkkel sammensatt av flere elementer void skrivhistorikk (String filnavn) { Gjenbruk av gaveobjekter i ny sammenheng Endringer i besvarte metoder Tillegg i klassen Julekalender: Ny objektvariabel og leser historikk i konstruktør class Julekalender { private Gave[] kalender = new Gave[24]; private Barn[] apnere; private HashMap<String, Gave> historikk = new HashMap<>(); public Julekalender (String[] barnenavn, String filnavn) throws Exception { leshistorikk ("Historikk.txt"); lesgavefil (filnavn); apnere = new Barn [barnenavn.length]; apnere[i] = new Barn (barnenavn[i]); dag = 0; private boolean avvergetlike () { String barn = apnere[nesteapner].getnavn(); String innhold = kalender[dag].getinnhold(); if (historikk.containskey(barn+innhold)) { // Bytt Gave if (dag == 23) { return false; Gave tmp = kalender[dag]; kalender[dag] = kalender[dag+1]; kalender[dag+1] = tmp; innhold = kalender[dag].getinnhold(); if (historikk.containskey(barn+innhold)) { return false; return true; Skal starte en ny dag Finner barn og gave som står for tur Skal gi beskjed om resultat Hvilke tilfeller klarer vi ikke å fikse? julaften den vi byttet til er også dublett 4

Lov om behandling av personopplysninger (Personopplysningsloven, Poppl) Tillegg i metoden nydag public void nydag () { if (!avvergetlike()) { System.out.println ("Dublett i kalenderluke " + (dag+1) + ": " + kalender[dag].getinnhold()); Barn dagens = apnere[nesteapner]; dagens.apnegave(kalender[dag]); dag++; nesteapner++; if (nesteapner == apnere.length) { Idé Er POPPL relevant? 2.1 2, 3 Nei Kjør på! Ja Hjemmel? 8, 2.8, 9 Nei Dropp det! Ja Undersøk videre krav og plikter Er POPPL relevant? 2.1 2, 3 Definisjoner og virkeområde I: Er systemet/ dataene berørt av Poppl? Oppgave 9 (6 poeng) 2. Definisjoner I denne loven forstås med: 1) personopplysning: opplysninger og vurderinger som kan knyttes til en enkeltperson, 2) behandling av personopplysninger: enhver bruk av personopplysninger, som f.eks. innsamling, registrering, sammenstilling, lagring og utlevering eller en kombinasjon av slike bruksmåter, Utvalg og understrekninger gjort for forelesning INF1000 Er dette en personopplysning? Begrunn med henvisning til Personopplysningsloven: Mann, født 1990. Mangler fast bopæl. Straffedømt for narkotikabruk. Nei, informasjonen kan ikke knyttes til en enkeltperson ( 2.1) Nevn tre sentrale hensyn til informasjonssikkerhet som ifølge Personopplysningsloven skal ivaretas ved behandling av personopplysninger. Konfidensialitet, integritet, tilgjengelighet ( 13 Informasjonssikkerhet) Som ledd i arbeidet mot forsikringssvindel har norske forsikringsselskaper fått konsesjon for lagring av følgende opplysninger om sine skadeoppgjør i et felles, sentralt skaderegister: Forsikringstakers fødselsnummer, saksnummer, bransjekode, selskap, skadetype, dato, saksbehandlers initialer og skadeland. Konsesjonen omfatter ikke tillatelse til registrering av sensitive personopplysninger. Diskuter om noen av opplysningene konsesjonen omfatter kan komme til å omfatte sensitive personopplysninger slik at spesiell varsomhet bør utvises ved registrering av disse i det felles registeret. «skadetype» kan tenkes å gi indikasjoner på helseforhold. ( 2.8) <poeng her for alle eksempler på sensitive personopplysninger som KAN bli aktuelle> 5