Løsningsforslag Test 2

Like dokumenter
Test 2 OOP. - Prøveeksamen

Løsningsforslag Eksamen V08. Oppgave 1. Oppgave 1.1. Oppgave 1.2. Oppgave 1.3. Se i boka/forelesningsnotatene:-) Se i boka/forelesningsnotatene:-)

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

TOD063 Datastrukturer og algoritmer

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

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

INF1010, 21. februar Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

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

INF1010 våren 2017 Onsdag 25. januar. Litt om unntak i Java

HØGSKOLEN I SØR-TRØNDELAG

INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først)

INF Notater. Veronika Heimsbakk 10. juni 2012

INF1010 våren 2018 tirsdag 23. januar

Eksamen. Objektorientert Programmering IGR 1372

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

import java.io.*; import java.util.*; import javagently.text;

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

OPPGAVE 5b og 8b Java Kode

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

INF1010 våren januar. Objektorientering i Java

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

Post-it spørsmål fra timen (Arv og subklasser)

Del 3: Evaluere uttrykk

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

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

UNIVERSITETET I OSLO

INF Løsning på seminaropppgaver til uke 8

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

Videregående programmering 6

Gjennomgang av eksamen H99

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

IN1010 våren januar. Objektorientering i Java

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

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

UNIVERSITETET I OSLO

INF Seminaroppgaver til uke 3

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

EKSAMEN. Programvareutvikling. INNFØRING MED PENN, evt. trykkblyant som gir gjennomslag

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

1. Krav til klasseparametre 2. Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

IN våren 2019 Onsdag 16. januar

IN våren 2018 Tirsdag 16. januar

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

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

Repitisjonskurs. Arv, Subklasser og Grensesnitt

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

Hittil har programmene kommunisert med omverden via tastatur og skjerm Ønskelig at data kan leve fra en kjøring til neste

2 Om statiske variable/konstanter og statiske metoder.

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

INF2100. Oppgaver 23. og 24. september 2010

INF våren 2017

UNIVERSITETET I OSLO

Introduksjon til objektorientert programmering

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

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

UNIVERSITETET I BERGEN Det matematisk-naturvitenskapelige fakultet

Kapittel 9. Distribusjon. Fjernbruker. Tjenermaskin LAN WAN. Nærbruker. Figur 9-1: En enkel klient/tjener distribusjon

INF2100. Oppgaver 26. september til 1. oktober 2007

TDT4100 Objektorientert programmering

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

Kapittel 8: Programutvikling

Litt om pakker og mest om data inn og ut

INF1010 våren Grensesnitt

UNIVERSITETET I OSLO

INF2100. Oppgaver 9. oktober 2012 C 100 X 10

INF1010 våren Grensesnitt

INF2100. Oppgaver 6. og 11. oktober 2011 C 100 X 10

Repetisjon. INF gruppe 13

INF2100. Oppgaver uke 40 og

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

Oppgave 3 a. Antagelser i oppgaveteksten. INF1020 Algoritmer og datastrukturer. Oppgave 3. Eksempelgraf

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

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

GUI («Graphical User Interface») del 2

INF1010 våren Grensesnitt (interface)

PG4200 Algoritmer og datastrukturer Forelesning 5 Implementasjon av lister

ADT og OO programmering

INF1010 våren Arv og subklasser - del 2

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

UNIVERSITETET I OSLO

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

Sortering med Comparable og Comparator

Socket og ServerSocket

Eksamen Objektorientert Programmering 2011

En implementasjon av binærtre. Dagens tema. Klassestruktur hovedstruktur abstract class BTnode {}

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

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

Objektorientert design av kode. Refaktorering.

INF1000 Prøveeksamen Oppgave 7 og 9

LO191D/LC191D Videregående programmering

Algoritmer og datastrukturer Eksamen

INF2100. Oppgave 1, 2 og 3. Løsningsforslag til oppgaver 23. og 24. september Her er det mange mulige løsninger her er én: import java.io.

Obligatorisk oppgave 4: Lege/Resept

UNIVERSITETET I OSLO

INF Uke 10. Ukesoppgaver oktober 2012

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

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

Transkript:

Løsningsforslag Test 2 Oppgave 1.1: Interface definerer et grensesnitt som kan implementeres av flere klasser. Dette gir en standardisert måte å kommunisere med objekter av en eller flere relaterte klasser. Det ansees som god OOP å kommunisere via interfaces fremfor klassene direkte, da dette gir muligheten til å bytte implementasjoner bare ved å bytte ut et objekt med et annet som implenterer det samme interfaces. Oppgave 1.2 Multiple arv kan være problematisk på flere måter. Et par eksempler: Hver av subklassene kan ha en metode eller egenskap med samme navn. Hver av subklassene kan igjen arve fra samme klasse. I begge disse tilfellene vil det være problematisk å skille variable og metoder fra hverandre. En ulempe kan være at dette gir noen begrensninger på måten man kan bygge opp trestrukturen av klasser. Java gjør opp for denne mangelen ved at man kan implementere flere interface. En annen ulempe er at interfaces ikke kan ha deler av koden ferdig og at det ikke kan definere klassevariabler. Oppgave 1.3 En Comparator gir muligheten å sortere en samling objekter på flere måter enn den ene måten definert av Comparable.compareTo. F.eks. En klasse, Person implementerer Comparable.compareTo slik at den sammenligner navnene til personene. En comparator kan da lages som i stedet sammenligner alderen til to personer eller en annen egenskap den saks skyld. Oppgave 1.4 Bedre sikring av data (både backup og tilgangskontroll). Ekstremt mye raskere uthenting av mere kompliserte utvalg. osv. Spesialisert spørrespråk som gjør uthentign av kompliserte spørringer "enkelt"

Oppgave 1.5 Det hele er basert på et eneste interface, Collection som definerer en rekke standard operasjoner man skal kunne utføre på en dynamisk datastruktur. Alle klasser som implementerer dette grensesnittet kan brukes på samme måte. Hvordan data blir lagret, er skjult for brukeren. I tilegg har man flere spesialiseringer, slik som Set (uordnet mengde) og List ( ordnet liste) Arven medfører også at man kan skiller datastruktur og implementasjon. Man jobbe ri programmet med kode tilhørende en datatruktur og kan dermed veldig enkelt endre implementasjons klassen. Oppgave 1.6 Gjenbruk - Gjenbruk - Gjenbruk Det er viktig å tenke ut gode grensesnitt og prøve å skjule detaljene. Plasser gjerne grensesnittet i et eget interface for ytterligere bedre skille. Gjenbruk - Gjenbruk - Gjenbruk Tenk på: Enkelhet i bruk ( forstålige medtode/variablenavn, metodene skal kunne kjøres i ulike rekkefølger Gjenbruk - Gjenbruk - Gjenbruk Sikkerhet for upåtenkte verdier ( get/set metoder) God dokumentasjon ( javadoc) Gjenbruk - Gjenbruk - Gjenbruk God feilhåndtering ( Exceptions) Totalt uavhengig fra en konkret applikasjon ( mest mulig generell i bruk) Gjenbruk - Gjenbruk - Gjenbruk Gjenbruk Og sist men ikke minst: GJENBRUK!

Oppgave 2.1 public LinkedList<String> lesinn( String filnavn ) LinkedList<String> res = new LinkedList<String>( ); BufferedReader br = new BufferedReader( new FileReader( filnavn ) ); String line; while( ( line = br.readline( ) )!= null ) res.add( line ); catch( FileNotFoundException e ) catch( IOException e ) return res; Oppgave 2.2 public LinkedList<String> filter( LinkedList<String> liste, String pattern ) LinkedList<String> res = new LinkedList<String>( ); Pattern p = Pattern.compile( pattern ); Matcher m = null; for( int i = 0; i < liste.size( ); i++ ) String str = liste.get( i ); m = p.matcher( str ); if( m.matches( ) ) res.add( str ); return res;

Oppgave 2.3 public void sendmail( LinkedList<String> liste, String id, String tittel, String melding, String fra ) BufferedWriter bw = new BufferedWriter( new FileWriter( id + ".dat" ) ); for( int i = 0; i < liste.size( ); i++ ) String mottaker = liste.get( i ); boolean sendt_mail = Email.sendMail( fra, mottaker, tittel, melding ); if(! sendt_mail ) bw.write( mottaker ); catch( IOException e ) bw.close( ); catch( FileNotFoundException e )

Oppgave 2.4 import java.io.*; import java.util.*; class sentcheck public static void main( String[] args ) if( args.length == 1 ) sentcheck res = new sentcheck( ); LinkedList<String> m = res.lesinn( args[ 0 ] + ".dat" ); System.out.println( "Antall: " + m.size( ) ); else for( int i = 0; i < m.size( ); i++ ) System.out.println( m.get( i ) ); System.out.println( "Kor e parameterane?" );+ //Oppgave 2.1... Kan dere bare skrive at dere referer til denne... public LinkedList<String> lesinn( String filnavn ) LinkedList<String> res = new LinkedList<String>( ); BufferedReader br = new BufferedReader( new FileReader( filnavn ) ); String line; while( ( line = br.readline( ) )!= null ) res.add( line ); catch( FileNotFoundException e ) catch( IOException e ) return res;

Oppgave 3.1 Vi trenger et interface: interface ConnectionOKListener public void checkperformed(string url, boolean success); Vi trenger en liste I ConnectionMonitor, som holde rpå alle ConnectionOKListerene: ArrayList<ConnectionOKListener> coklisteners = new ArrayList<ConnectionOKListener>(); Vi trenger en metode i Connectionmonitor som vi kan legge til lyttere i lista gjennom: public void addconnectionoklistener(connecionoklistener cokl) coklisteners.add(cokl); Vi trenger et kall til alle registrerte listeneres for hver sjekk som blir utført i ConnectionMonitor. for(connectionoklistener col:coklisteners) col.checkperformed(????,????); Vi trenger også en klasse som lytter.. her kun et eksempel: class Lytter implements ConnectionListener public void checkperformed(string url, boolean success) System.out.println(url + " " + success); Vi må registrere denne lytteren i ConnectionMonitor. cm.addconnectionoklistener(new Lytter());

Oppgave 3.2 class DBListener implements ConnectionOKListener public void checkperformed(string url, boolean success) Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); con = DriverManager.getConnection("jdbc:microsoft:sqlserver://donau.hiof.no:1 433;databaseName=db", "user", "pass"); stmnt = con.createstatement(); String sql = "INSERT INTO ServerLogg VALUES(' NOW()','" + url + "','" + (success?"ok":"ikke OK") + "');"; int res = stmnt.executeupdate(sql); catch (Exception e) e.pringstacktrace(); Oppgave 3.3 class Reliability implements ReportPrint public String formatreport( ArrayList<LoggLine> al, String url ) int ok = 0; int alle = 0; for(loggline l:al) boolean status = l.status; alle++; if( status == true ) ok++; return "Oppeprosent: " + (( 100 / alle ) * ok );