OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario...
-
Upload
johanna-meyer -
Category
Documents
-
view
215 -
download
0
Transcript of OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario...
OOSObject geOrienteerdSoftware-ontwerp - 3
Data van een object
Data van een klasse
Scenario
Sequence Diagram
Data van een object
Enkelvoudige data
Datum
dag: intmaand: intjaar: int
Datum(int, int, int)getDag() : intgetMaand() : intgetJaar() : intisEerderDan(Datum): boolean
public class Datum
{ private int dag, maand, jaar;
public Datum(int d, int m, int j)
{ dag=d; maand=m; jaar=j; }
public int getDag()
{ return dag; }
…
public boolean isEerderDan(Datum d)
{ if (jaar != d.jaar)
return jaar<d.jaar;
if (maand != d.maand)
return maand<d.maand;
return dag<d.dag;
}
}
Keuzevrijheid in objectdata
Datum
dag: int
Datum(int, int, int)getDag() : intgetMaand() : intgetJaar() : intisEerderDan(Datum): boolean
public class Datum
{ private int dag;// dag=0 is 1-1-1900
public Datum(int d, int m, int j)
{ dag=d+30*m+365*(j-1900); }
public int getDag()
{ return dag-30*m-365*(j-1900); }
…
public boolean isEerderDan(Datum d)
{ return dag<d.dag; }
}
meervoudige multipliciteit
Lokatie
{abstract}
Lokatie(String)
String getLand()
landsnaam: String
Wegdeel
wegcode: Stringlengte: double
Wegdeel(Lokatie, Lokatie, String, double)Lokatie getBeginpunt()Lokatie getEindpunt()double getLengte()String getWegcode()
1 beginpunt
naam: String
Plaats(String,String)String getNaam()
wegcode: Stringint: nr
Afslag(String, String, int)String getWeg()int getNrAfslag()
wegcode1: Stringwegcode2: String
Kruispunt(String, String, String)String getWeg1()String getWeg2()
Route
/ lengte: double
1eindpunt
1..*
Route(Wegdeel)double getLengte()Lokatie getBeginpunt()Lokatie getEindpunt()Iterator getWegdelen()Wegdeel getWegdeel(int)voegAchteraanToe(Wegdeel)boolean rijdtVia(Lokatie)
Plaats Afslag Kruispunt
doorloopt
meervoudig type
public class Route{ private ArrayList wegdelen;
public Route(Wegdeel beginweg){
wegdelen = new ArrayList();wegdelen.add(beginweg);
}…
}
API –java.util.ArrayList
int size()
Object get(int)boolean add(Object) //returnwaarde is nu onbelangrijk
Object remove(int)
Object set(int, Object)
void add(int, Object)
Iterator iterator()
en nog vele andere methoden …
java.util.Vector
verbeterde opzet m.b.t. collecties
sinds JDK 1.2 ArrayList is opvolger Vector compatibiliteit
Vector-API bevat redundante methodes
casting
public class Route{ private ArrayList wegdelen;
public Lokatie getBeginpunt(){
Wegdeel w; w = (Wegdeel)wegdelen.get(0);return w.getBeginpt();
}…
}
getEindpunt
public class Route{ private ArrayList wegdelen;
public Lokatie getEindpunt(){
int laatste = wegdelen.size()-1;Wegdeel w;w = (Wegdeel)wegdelen.get(laatste);return w.getEindpunt();
}…
}
Iteratorpublic class Route{ …
public boolean rijdtVia(Lokatie lok){ // is lok toevallig het beginpunt van deze route?
if (lok.equals(getBeginpt())) return true;
Iterator it = wegdelen.iterator();while (it.hasNext()){
w = (Wegdeel)it.next(i);if (lok.equals(w.getEindpt())) return true;
}
// lok is niet gevonden!return false;
}…
}
Data van een klasse
Klasse-attribuut
Spaarrekening
nr: longsaldo: Euro laatsteMutatie: Datumrentetegoed: doublerenteperc: double
Rekeninghouder
naam: String adres: String
Klassemethode
klasseattribuut klassemethode
Spaarrekening.setRentepercentage(3.4);
static void setRentepercentage(double r)
Klasse.klassemethode( .. );
object.klassemethode( .. );
Op meer niveaus
Spaar
rekening
Rekening
houder
Rekeningnr: long
saldo: Euro
next: long
mutatie: Datum
rentetegoed: Euro
renteperc : double
naam: String
adres: String
Scenario’s
Scenario’s
use case is verzameling scenario’s met gemeenschappelijk doel scenario bevat meestal concrete waarden nuttig bij
invulling acceptatietest analyse dynamiek (sequentiediagram)
Use case (voorbeeld)
name Registreer klant
actors Baliemedewerker
pre
normal
flow
1. Medewerker voert klantgegevens in
2. Systeem toont klanten met hetzelfde adres
3. Medewerker bevestigt registratie
4. Systeem toont klantnummer
results Klant is geregistreerd met klantnummer
alternate
flow
Klant was al geregistreerd [3]
Medewerker annuleert registratie
Scenario (voorbeeld normal flow)
Vooronderstellingen:– Systeem kent onder meer: J.B.C. Peeters,
I.T.M.A. Goldsmid wonende op Boromir 12 te Geldrop;
– Laatst toegewezen klantnummer is 12976
1. Medewerker voert F.A.I. Peeters, Boromir 12, Geldrop in
2. Systeem toont J.B.C. PeetersI.T.M.A. Goldsmid
3. Medewerker bevestigt registratie4. Systeem geeft klantnummer 12977
Sequence diagramVolgordediagram
Nut van Sequence diagram
Waarvoor inzicht in (on)mogelijke communicatie tussen
objecten aanpassing klassendiagram
toevoegen gedragscomponent wijzigen gedragscomponent toevoegen associatierichting toevoegen associatie toevoegen nieuwe klasse
Sequence diagram
Hoe a.h.v. concreet of algemeen scenario levenslijn objecten events processen terugkeer(waarde) condities
Order
ordernr : Getalnext : Getal
Order(Klant)getTotaal( ): Bedragbestel(Artikel)
*
Orderregel
aantal : Getal
Orderregel (Getal,Artikel)getKosten( ): Bedrag
1
Klant* 1
Artikelartnr: Getalnaam: Tekstvoorraad: Getalprijs: BedragArtikel (Getal,Tekst,Bedrag)getVoorraad(): GetalgetPrijs(): BedragsetPrijs(Bedrag)
* 1
Normal flow scenario
pre: Order o voor betreffende klant k is momenteel ‘actief’
Medewerker voert artnr A342 in Medewerker voert aantal 2 in Systeem voegt 2 artikels van artikel A342 toe Systeem toont overzicht van actieve order
post: Order is met een bestelling van 2 artikels van A342 uitgebreid; nieuwe status van order wordt getoond
:GUI
voer artnr en aant in
o :Order
bestel(art,aant)
art:Artikel :Assortiment
getArt(artnr)
art
getVoorraad()
v
:Orderregel[v≥aant]
<<constructor(aant,art)>>
scenario: toevoegen artikel
toon(o)
Order
ordernr : Getalnext : Getal
Order(Klant)getTotaal( ): Bedragbestel(Artikel, int)
*
Orderregel
aantal : Getal
Orderregel (Getal,Artikel)getKosten( ): Bedrag
1
Klant* 1
Artikel
artnr: Getalnaam: Tekstvoorraad: Getalprijs: BedragArtikel (Getal,Tekst,Bedrag)getVoorraad(): GetalgetPrijs(): BedragsetPrijs(Bedrag)
* 1*
Assortiment
getArt(artnr):Artikel
aanpassingen klassendiagram
:GUI
totaalbedrag?
:Order :Orderregel :Artikel
getTotaal()
totaal
* getKosten()getPrijs()
prijs
prijs*aantal
scenario: totaalbedrag bestelling
Deze week Standaardgedrag aanvullen dmv
sequencediagrammen Elk groepslid 1 scenario beschrijven Elk groepslid zijn scenario uitwerken mbv
sequencediagram Elk groepslid doet verbeteringsvoorstellen voor
klassendiagram Coderen van alle domeinklassen Inleveren A4-tje met stand van zaken m.b.t. alle
doelen van OOS subdoel bereikt subdoel is duidelijk doch nog niet bereikt planning acties ivm bereiken subdoel