int

advertisement
OOS
Object geOrienteerd
Software-ontwerp - 3
Data van een object
Data van een klasse
Scenario
Sequence Diagram
Data van een object
Enkelvoudige
{ private int dag, maand, jaar;
data
public Datum(int d, int m, int j)
public class Datum
{ 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;
}
}
Datum
dag: int
maand: int
jaar: int
Dag(int, int, int)
getDag() : int
getMaand() : int
getJaar() : int
isEerderDan(Datum): boolean
Keuzevrijheid in objectdata
public class Datum
{ private int dag;// dag=0 is 1-1-1900
public Datum(int d, int m, int j)
{ dag=d+100*m+100000*(j-1900); }
public int getDag()
{ return dag%100; }
…
public boolean isEerderDan(Datum d)
{ return dag<d.dag; }
}
Datum
dag: int
maand: int
jaar: int
Dag(int, int, int)
getDag() : int
getMaand() : int
getJaar() : int
isEerderDan(Datum): boolean
meervoudige
multipliciteit
Lokatie
{abstract}
landsnaam: String
Wegdeel
1
beginpunt
1
eindpunt
Lokatie(String)
String getLand()
wegcode: String
lengte: double
Wegdeel(Lokatie, Lokatie,
String, double)
Lokatie getBeginpunt()
Lokatie getEindpunt()
double getLengte()
String getWegcode()
1..*
doorloopt
Route
Plaats
Afslag
Kruispunt
naam: String
wegcode: String
int: nr
wegcode1: String
wegcode2: String
Plaats(String,String)
String getNaam()
Afslag(String,
String, int)
String getWeg()
int getNrAfslag()
Kruispunt(String,
String, String)
String getWeg1()
String getWeg2()
/ lengte: double
Route(Wegdeel)
double getLengte()
Lokatie getBeginpunt()
Lokatie getEindpunt()
Iterator getWegdelen()
Wegdeel getWegdeel(int)
voegAchteraanToe(Wegdeel)
boolean rijdtVia(Lokatie)
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();
}
…
}
Iterator
public 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: long
saldo: Euro
laatsteMutatie: Datum
rentetegoed: double
renteperc: 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
Rekening
nr: long
Rekening
houder
saldo: Euro
naam: String
next: long
adres: String
Spaar
rekening
mutatie: Datum
rentetegoed: Euro
renteperc : double
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
actors
pre
Registreer klant
normal
flow
1.
results
Baliemedewerker
Medewerker voert klantgegevens in
2. Systeem toont klanten met hetzelfde
adres
3. Medewerker bevestigt registratie
4. Systeem toont klantnummer
Klant is geregistreerd met klantnummer
alternate Klant was al geregistreerd [3]
 Medewerker annuleert registratie
flow
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.
2.
3.
4.
Medewerker voert F.A.I. Peeters, Boromir
12, Geldrop in
Systeem toont
J.B.C. Peeters
I.T.M.A. Goldsmid
Medewerker bevestigt registratie
Systeem geeft klantnummer 12977
Sequence diagram
Volgordediagram
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 : Getal
next : Getal
*
1
Klant
Order(Klant)
getTotaal( ): Bedrag
bestel(Artikel)
1
Artikel
*
Orderregel
aantal : Getal
Orderregel
(Getal,Artikel)
getKosten( ): Bedrag
*
1
artnr: Getal
naam: Tekst
voorraad: Getal
prijs: Bedrag
Artikel
(Getal,Tekst,Bedrag)
getVoorraad(): Getal
getPrijs(): Bedrag
setPrijs(Bedrag)
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
scenario: toevoegen artikel
:GUI
o :Order
art:Artikel
:Assortiment
voer artnr en aant in
getArt(artnr)
art
bestel(art,aant)
getVoorraad()
v
[v≥aant]
<<constructor(aant,art)>>
toon(o)
:Orderregel
aanpassingen
klassendiagram
Order
ordernr : Getal
next : Getal
*
1
Klant
Order(Klant)
getTotaal( ): Bedrag
bestel(Artikel, int)
1
Artikel
*
Orderregel
aantal : Getal
Orderregel
(Getal,Artikel)
getKosten( ): Bedrag
*
1
artnr: Getal
naam: Tekst
voorraad: Getal
prijs: Bedrag
Artikel
(Getal,Tekst,Bedrag)
getVoorraad(): Getal
getPrijs(): Bedrag
setPrijs(Bedrag)
Assortiment
*
getArt(artnr):Artikel
scenario: totaalbedrag
bestelling
:GUI
:Order
:Orderregel
:Artikel
totaalbedrag?
getTotaal()
* getKosten()
getPrijs()
prijs
prijs*aantal
totaal
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
Download