Mer om programmering av aggregeringer Repetisjon: Komposisjon og aggregering En register-klasse: modellering En register-klasse: implementering Sortering og søking LC9D Videregående programmering Semesterplan: http://aitel.hist.no/fag/vprg/index_lc9d.php Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring Else Lervik, januar 202
Aggregering Student -studnr +getpoststed() +getstudnr() +setpoststed() +setstudnr() +finnpostnr() +finnsted() * poststed Poststed -postnr {readonly} -sted {readonly} +getpostnr() +getsted() Se på koden side 355-356 EksempelStudent2.java Ett studentobjekt er koplet til eksakt ett poststedobjekt. Poststedobjektet spiller rollen poststed i denne sammenhengen. Dette blir navnet på en objektvariabel i klassen Student. Stjerna sier at ett og samme poststedobjekt er knyttet til mange studentobjekter. En aggregering er en en-del-av-sammenheng mellom objekter. Ett objekt består av et eller flere andre objekter. De objektene som aggregatet består av, kan leve både før og etter aggregatet, og omverden har tilgang til disse objektene. Aggregatet vet alltid hvilke objekter det består av. Forelesning 3, side 2
Komposisjon Student -fdato {readonly} +getfdato() +getnavn() +setnavn() navn Navn -fornavn -etternavn +getfornavn() +getetternavn() +setfornavn() +setetternavn() Se på koden side 364-365 EksempelStudent4.java Et bestemt navneobjekt tilhører eksakt ett bestemt studentobjekt. Hver student har kun ett navn. En komposisjon er også en en-del-av-sammenheng mellom objekter, men her har vi en mye sterkere binding mellom objektene enn for aggregering. Omverden har ikke tilgang til de objektene som er gjemt inne i det sammensatte objektet (kompositten). Livet til disse objektene er like langt eller kortere enn livet til det sammensatte objektet. Forelesning 3, side 3
Aggregering, komposisjon og mutable objekter Aggregering Ved aggregering lager vi ikke kopier av objektene det er ofte i samsvar med virkeligheten Potensielt problem Mange referanser til samme objekt. Lett å miste oversikten. Mulige løsninger Bruk immutable objekter hvis mulig. Bruk pakketilgang for å beskytte objekter (se kap..7, side 379) Komposisjon Kompositten skal ha sine egne utgaver av objektene I praktisk programmering av komposisjon nøyer vi oss imidlertid med enkelteksemplarer av immutable objekter, da ingen kan ødelegge disse uansett Når komposisjon og når aggregering? Virkeligheten vi modellere bestemmer hvorvidt vi skal bruke det ene eller det andre. Jmf. Navn og poststed. (Tabeller inngår vanligvis i en komposisjon, dvs vi lager kopier.) Aggregering er mest vanlig. Forelesning 3, side 4
En register-klasse Register registeret * Utstyr Vi skal lage klasser for å administrere uttak av kontorrekvisita og -utstyr i en bedrift. Registeret skal omfatte alt fra blyanter, viskelær og opp til stoler og bord. Vi håndterer imidlertid alt utstyr på samme måte. Om hver utstyrsvariant lagrer vi betegnelse (navn), leverandør, hvor mye som er på lager (varebeholdning) nedre grense for bestilling (dersom lagerbeholdningen går under denne verdien, skal varen opp på bestillingslisten). Forelesning 3, side 5
Hvilke operasjoner bør en klient kunne gjøre i forhold til et registerobjekt? Register registeret * Utstyr Klassen Utstyr er gitt. Programmer deler av klassen Register med enkel testklient. Finn antall typer forskjellig utstyr I regeisteret Lag en utstyroversikt Registrer ny utstyrstype Finn antall på lager av en bestemt type utstyr Endre lagerbeholdningen for en bestemt type utstyr Søke fram detaljinfo om en bestemt type utstyr Forelesning 3, side 6
Sortering av objekter. Søking blant objekter. Objektene ligger i en tabell eller i en ArrayList To typer sorteringsrekkefølger for objekter Sortering i henhold til objektenes naturlige orden Definert i metoden compareto() som er implementasjonen av interfacet Comparable. Likhet med compareto() bør bety det samme som likhet med equals() Sortering i henhold til en rekkefølge definert i en klasse som implementerer interfacet Comparator. Spesielt eksisterer det en Comparator-klasse som vi kan bruke hvis vi ønsker å sortere tekster i henhold til norsk tegnsett. Søking lineært søk binærsøk, forutsetter at objektene er sortert Søke- og sorteringsmetoder i Java-API-et etter objektenes naturlige orden eller Comparator-objekt som argument til sorteringsmetoden Gjennomgå SorterOgSoekTabellerJavaAPI.java (side 42-43) Gjennomgå SorterOgSoekArrayListJavaAPI.java (side 426-427) Forelesning 3, side 7
Klassen Register Sortere arraylisten Naturlig orden Java.util.Collections.sort(reg); // klassemetode Vil bruke den compareto()-metoden som vi har laget i klassen Utstyr Forelesning 3, side 8