EKSAMENSFORSIDE Fagnr. OBJ310 Tittel Objektorientert systemutvikling 3 Ansvarlig faglærer Viggo Holmstedt Klasse(r) Dato IS 3 20.05.2011 Eksamensoppgaven Ant. sider inkl. består av følgende: forside og vedl. 3 Tillatte hjelpemidler: Ingen Ansvarlig avdeling SA Eksamenstid, fra-til 09.00-12.00 (tre timer) Ant. oppgaver Ant. vedlegg 6 0 Opplysninger om vedlegg: Merknader: Hver oppgave i oppgavesettet vektes likt. Hvis en oppgave har bokstavpunkter, vektes hvert bokstavpunkt i en oppgave likt innenfor oppgavens nummer. KANDIDATEN MÅ SELV KONTROLLERE AT OPPGAVESETTET ER FULLSTENDIG
Oppgave 1 XP Agile er kilde til en samling med mønstre som alle sammen har forkortelser på tre bokstaver. Ett eksempel er SRP. Dette mønsteret kan assosieres med et mønster fra kilden GRASP som også har sammenheng med ansvar. Velg det mønsteret fra GRASP som best kan assosieres med SRP og skriv det du vet om dette mønsteret. Side 20-21 refererer Single Responsibility Principle til DeMarcos og Page-Jones kohesjon og til GRASPs high cohesion. SRP handler om at objekter fra en klasse kun skal ha ett ansvar/ansvarsområde. High Cohesion innebærer høy sammenheng i ansvar, og dekker derfor omtrent det samme. En god besvarelse reflekterer også over eventuell fordeler, ulemper og bruksområder for high cohesion/srp, og de muligheter for semantisk problemløsning som konsentrerte ansvarsområder automatisk gir. Oppgave 2 Et enkeltstående problem kan enten løses med aggregering eller spesialisering-generalisering. Diskuter forskjellen på aggregering og spesialisering-generalisering. En god besvarelse redegjør først for hva de to ulike strategiene går ut, helst med basis i enkle diagrammer. Deretter diskuteres aspekter ved gjenbrukbarhet. Det vesentlige er likevel å vise når samarbeidet er så komplisert at det lønner seg å aggregere ulike spesialist-objekter, og når samarbeidet er så spesialisert at det i stedet lønner seg å arve fra en eksisterende klasse. Det kan være klokt å peke på velkjente eksempler, som MoveableLens som oppnår bevegelighet gjennom spesialisering ClassSymbol som oppnår en ny form gjennom aggregering av fire LineElements Oppgave 3 Mønsteret Chain-of-Responsibility er et velkjent mønster for å praktisere mønsteret Command Pattern. Beskriv en programdesign der du trenger å praktisere Command Patterns krav til å isolere mellom avsender og mottaker. Beskriv hvordan du kan bruke CoR i denne programdesignen for å praktisere mønsteret Command Pattern. Her kan nesten hvilken som helst av de velkjente prosjektene som er gjennomgått og arbeidet med gjennom vinteren brukes som illustrasjon. Omtrent som en internett-pakke vandrer fra host til host, ved å hoppe fra switch til switch på veien fra avsender til mottaker, kan et metodekall med eventuelle argumenter hoppe fra objekt til objekt til det ender opp hos det objektet som skal behandle metoden.
En god besvarelse tar i bruk UML og lager sekvensdiagram og klassediagram for å illustrere både prinsippet og det praktiske eksemplet, tatt fra for eksempel prosjektet EasyJava2D eller prosjektet SimpleDiagram. CoR implementerer også Command Pattern og som i våre prosjekter også Mediator. Besvarelse skal vise hvordan dette er i paksis, som når for eksempel når et JSlider-objekt vil sende oppdaterte verdier til et objekt som simulerer optikk, altså når Scalecontroller vil sende ny verdi til MoveableLens, og ingen av objektene eller klassene kjenner hverandre. Et interessant aspekt er at kohesjonen nyter godt av både CoR og Command Pattern. Oppgave 4 Grafiske brukergrensesnitt kan ha mye til felles når det gjelder utseende. Men ofte ser vi ulike typer organisering av vinduer. Noen vinduer er organisert med helt like store ruter, andre har et femdelt utseende med den største delen i midten. Noen verktøy bruker aggregering for å administrere utseendet. Ett eksempel er setlayout(new BorderLayout); Velg ut hvilke mønstre for programdesign du kan assosiere med denne strategien for å administrere vinduets utseende. Begrunn valgene av mønstre. En grafisk container (beholder) er parent til de grafiske elementene den organiserer. Meldingen setlayout går til et container-objekt som skal organisere sine grafiske barn. Men container-objektet vil ikke ta seg av barna sine selv, men installerer en nanny som har sin egen bestemte strategi for å organisere barna. Derfor er det nærliggende å bruke Strategy Pattern for å forstå denne mekanismen. Dessuten gir layout-objektet (altså nanny-en ) en helt ny oppførsel til container-objektet. Dermed kan vi også forstå mekanismen ved hjelp av Decorator Pattern. Oppgave 5 Forklar formål og teknikk for følgende kode: class DateRenderer extends DefaultTableCellRenderer { private Format formatter; DateRenderer() { formatter = new SimpleDateFormat("EEEE d MMMM yyyy HH:mm"); protected void setvalue(object o) { settext(o instanceof Date? formatter.format(o) : o.tostring());
Klassen DateRenderer lager en spesialisering av den eksisterende klassen DeafultTableCellRenderer. Poenget er å gjøre noe mer spesielt ut av visningen i en tabellcelle enn det som vanligvis skjer. Det spesielle her er at dataene som vises, skal vises i et bestemt datoformat, bestemt av det aggregerte objektet formatter, som får sine kunster fra klassen SimpleDateFormat. Ordet protected må brukes i stedet for private eller public, fordi metoden setvalue er en call-back metode. Dette betyr at den allerede er deklarert i superklassen, og skal deklareres og lages på nytt i denne, spesialiserte, klassen. Dermed er det klokt at innkapslingen er den samme. Ordet protected brukes nettopp i disse sammenhengene, fordi det brukes for å kapsle inn klassemedlemmer som skal være tilgjengelige i subklassene. Klassen DefaultCellRenderer er ganske enkelt en spesialisert JLabel. Dette framgår ikke av koden ovenfor, men er noe som er demonstrert gjennom undervisning, pensumlitteratur og prosjektarbeid. Oppgave 6 I Java brukes JSplitPane for å dele opp et vindu i to horisontale eller to vertikale deler, der størrelsen på hver del enkelt kan reguleres av en bruker. Forklar hvorfor vi kan si at Java kanskje bruker mønsteret Composite Pattern her. Forklar også mønsteret Decorator Pattern og hva som er sammenhengen mellom Composite Pattern og Decorator Pattern. Hvis hvert av panelene får ny funksjonalitet ved at det installeres et objekt i panelet, kan vi snakke om Decorator Pattern, der panelet er decoreée altså den som blir dekorert, eller tilført ny funksjonalitet. I dette tilfellet er den nye funksjonaliteten evnen til å krympe og utvide seg
i par med et annet panel. I tillegg er panelene utstyrt med rullebaner som vi fra før vet implementeres med Decorator. Siden det er flere decorées som reagererer på det samme signalet, er det lett å bestemme seg for å forstå mekanismen ved hjelp av Composite Pattern. Resultater: Oppgave nr 1 2 3 4 5 6 Alle SNITT 66,9 65,1 77,9 60,2 66,6 61,0 66,3 Tabellen viser hvordan hver oppgave ble besvart i snitt på en skala fra 0 til 100 poeng Uoffisiell Karakterfordeling A 1 B 2 C 5 D 5 E 0 F 2 SUM 15