Upload
avram-tucker
View
55
Download
0
Embed Size (px)
DESCRIPTION
Kapittel 6. Objektorientert design. 6.1 Programvareutvikling. Skriving av kode ein liten del av arbeidet med å lage programvare Fire hovudaktivitetar Kravspesifikasjon Design Implementasjon Testing Inf160 fokuserer mest på implementasjon For større system blir dei andre delene viktigare. - PowerPoint PPT Presentation
Citation preview
Kapittel 6
Objektorientert design
6.1 Programvareutvikling Skriving av kode ein liten del av
arbeidet med å lage programvare Fire hovudaktivitetar
Kravspesifikasjon Design Implementasjon Testing
Inf160 fokuserer mest på implementasjon
For større system blir dei andre delene viktigare
6.2 Klasser og objekt Viktig del av objektorientert design å
bestemme kva klasser vi treng Vi kan finne potensielle klasser ved å leite
etter substantiv i kravspec’en Det er ikkje slik at alle substantiv vi finn skal vere
klasser i systemet! Gi klassene gode namn Primitiv type eller klasse? Gjenbruk – klassebibliotek Tildeling av ansvar – kva skal dei ulike
klassene utføre
6.3 Statiske klassemedlemmer Både variable og metoder kan vere static Statiske klassemedlemmer blir kalt gjennom
namnet på klassen, ikkje gjennom eit objekt av klassen
Math.sqrt(27) – her bruker vi Math klassen sin statiske metode sqrt() som returnerer kvadratrot
Statiske klassemedlemmer er felles for heile klassen, i motsetning til instansvariable og –metoder
Om vi ikkje har bruk for å ta vare på tilstand, kan statiske metoder vere OK
Vi kan ikkje referere til instansvariable eller –metoder i ein statisk metode
6.4 Forhold mellom klasser
Avhengigheit Ein klasse bruker andre klasser
Aggregering Objekt av ein klasse inneheld objekt
av ein annan klasse Arv
Meir om arv i kap 8
Forhold mellom klasser Dersom klasse A bruker klasse B:
Ein eller fleire av klasse A sine metoder kaller ein eller fleire av klasse B sine metoder
Viss ein statisk metode blir kalt bruker A berre namnet til B
Elles må A ha ein referanse til eit objekt av klasse B Fleire måtar å få tilgang på
A kan ha objekt av klasse B som instansvariabel Metode i A kan opprette og bruke objekt av B Referanse til B kan sendast inn som parameter
Generelt: minimere bindingar mellom klasser
Forhold mellom klasser Objekt av ein klasse bruker ofte andre
objekt av same klasse Samanlikningar (compareTo(), equals()) Lage nye objekt (concat())
Aggregering – objekt kan vere laga av andre objekt Vi definerer alle objekt med referanser til
andre objekt som instansdata, som aggregerte objekt
“has-a” forhold
Forhold mellom klasser
this-referansen Reservert ord som blir brukt når eit
objekt refererer til seg sjølv Blir ofte brukt til å skille mellom
parameter til ein konstruktør og instansvariable med same namn
6.5 interface Interface (grensesnitt) blir brukt i
fleire samanhengar Kontaktflate mellom brukar og system,
gjerne i form av eit skjermbilde Tilgjengelege metodar for å bruke eit
objekt blir gjerne omtalt som klassen sitt grensesnitt
Eit interface i Java er ei formalisering av det siste
interface Ei samling av konstantar og abstrakte
metoder Ein abstrakt metode har ingen
implementasjon (ingen kode) Spesifiserer returtype, namn og
parameterliste Vi kan ikkje opprette instanser (objekt) av
eit interface Ein klasse som implementerer eit interface må ha alle metodene som er med i interfacet
Bruk av det reserverte ordet implements
interface interface i UML Comparable-interfacet
Blir brukt for å samanlikne to objekt Kun ein metode: compareTo() Tar eit objekt som parameter
int res = obj1.compareTo(obj2); Returnerer int
res < 0: obj1 < obj2 res = 0: obj1 = obj2 res > 0: obj1 > obj2
Kva vil det seie at eit objekt er størst?
6.6 Enumererte typer Introdusert i kap 3 Spesiell type klasse, der alle verdier
er objekt/instanser av klassen Verdiane er lagra som public static variable i klassen
Vi kan også legge til instansvariable og –metoder Vi ser litt på Seasons-eksemplet
6.7 Design av metoder Ei algoritme er ein stegvis prosess for å løyse
eit problem Kan samanliknast med ei oppskrift Alle metoder innheld ei algoritme som løyser
oppgåva metoden skal utføre Vi bruker ofte pseudokode for å beskrive algoritmer
Det er ofte nødvendig/lurt å dele opp metoder Få oversikt – splitt og hersk! Private hjelpemetoder som får ansvar for mindre
deler av problemet
Design av metoder Parameter til metoder
Alle parameter i Java blir sendt by value Kva betyr det?
Det betyr ulike ting, avhengig av om parameteren er ein primitiv type eller eit objekt
Primitive typer: verdien av den faktiske parameteren i metodekallet blir kopiert til den formelle parameteren i metode-headeren
I klartekst betyr det at vi opererer på ein kopi i metoden
Eventuelle endringar er ikkje synlege etterpå
Design av metoder Objekt som parameter: objekt er
referanser/adresser, vi sender altså over ein kopi av referansen
Det betyr at metoden har den same referansen, og difor opererer på det originale objektet
Endringar er synlege etterpå Vi ser litt nærare på eksemplet i ParameterTester
6.8 Overloading Vi kan ha fleire metoder med same namn i
same klasse Desse må ha ulike parameterlister slik at
kompilatoren veit kva metode som blir kalt Tal på parameter til metoden Datatype Rekkefølgje
Det er ikkje nok å ha ulike typer returverdi, sidan denne ikkje alltid blir brukt
Vanleg å overloade konstruktørar
6.9 Testing Vi testar programvare for å finne feil
Så godt som all programkode inneheld feil Betre at vi finn feil under testing enn at dei
som skal bruke systemet gjer det Inspeksjon
Gjennomgang av designdokument eller kode for å finne, men ikkje rette, feil
Test case Input, det brukaren gjer, forventa output Test suite, test cases som saman dekker dei
ulike delene av systemet vi skal teste
Testing Test cases må lagast med andakt
Skal helst avsløre alle feil Skal ikkje overlappe kvarandre Bruk av ekvivalensklasser til å finne input Grenseverdier
Black box testing Vi ser bort frå korleis programmet fungerer, ser kun
på at output skal stemme med input White box testing
Vi testar ut frå vår kunnskap om korleis programmet fungerer
Vi prøver å få kjørt alle statements i programmet
6.10 GUI Design Java tilbyr hjelpemiddel for å lage
det mest utrulege av GUI Men pass på ...
Kva lærte du om design i In105? Prøv å
Hindre brukaren i å gjere feil Tilby fart og effektivitet for den erfarne Vere konsistent
6.11 Layout managers Ein layout manager er eit objekt som
styrer korleis komponentar blir stilt opp i ein container
Bestemmer størrelse og plassering Bestemmer kva endringar som skal skje
når containeren endrar størrelse, eller når nye konponentar blir lagt til
Alle containerar har ein default layout manager som vi kan erstatte om vi vil
Layout managers
Mange typer, vi ser på nokre av dei mest brukte Flow layout Border layout Grid layout Box layout
Rigid area og glue
6.12 Kantlinjer
Vi kan forsyne alle Swing-komponentar med kantlinjer av ulike slag
BorderFactory klassen tilbyr metoder for å lage slike
Bruk med fornuft, sjå BorderDemo-eksemplet
6.13 Inneslutningshierarki Har nokon eit betre ord for containment
hierarchy? Vi grupperer komponentar i containerar Containerane er vidare gruppert i andre
containerar Til saman utgjer dette eit hierarki Komplisert GUI-design kan gjerne
representerast som ein trestruktur, jfr fig 6.13 i læreboka