OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario...

28
OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario Sequence Diagram

Transcript of OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario...

Page 1: OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario Sequence Diagram.

OOSObject geOrienteerdSoftware-ontwerp - 3

Data van een object

Data van een klasse

Scenario

Sequence Diagram

Page 2: OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario Sequence Diagram.

Data van een object

Page 3: OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario Sequence Diagram.

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;

}

}

Page 4: OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario Sequence Diagram.

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; }

}

Page 5: OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario Sequence Diagram.

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

Page 6: OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario Sequence Diagram.

meervoudig type

public class Route{ private ArrayList wegdelen;

public Route(Wegdeel beginweg){

wegdelen = new ArrayList();wegdelen.add(beginweg);

}…

}

Page 7: OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario Sequence Diagram.

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 …

Page 8: OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario Sequence Diagram.

java.util.Vector

verbeterde opzet m.b.t. collecties

sinds JDK 1.2 ArrayList is opvolger Vector compatibiliteit

Vector-API bevat redundante methodes

Page 9: OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario Sequence Diagram.

casting

public class Route{ private ArrayList wegdelen;

public Lokatie getBeginpunt(){

Wegdeel w; w = (Wegdeel)wegdelen.get(0);return w.getBeginpt();

}…

}

Page 10: OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario Sequence Diagram.

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();

}…

}

Page 11: OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario Sequence Diagram.

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;

}…

}

Page 12: OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario Sequence Diagram.

Data van een klasse

Page 13: OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario Sequence Diagram.

Klasse-attribuut

Spaarrekening

nr: longsaldo: Euro laatsteMutatie: Datumrentetegoed: doublerenteperc: double

Rekeninghouder

naam: String adres: String

Page 14: OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario Sequence Diagram.

Klassemethode

klasseattribuut klassemethode

Spaarrekening.setRentepercentage(3.4);

static void setRentepercentage(double r)

Klasse.klassemethode( .. );

object.klassemethode( .. );

Page 15: OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario Sequence Diagram.

Op meer niveaus

Spaar

rekening

Rekening

houder

Rekeningnr: long

saldo: Euro

next: long

mutatie: Datum

rentetegoed: Euro

renteperc : double

naam: String

adres: String

Page 16: OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario Sequence Diagram.

Scenario’s

Page 17: OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario Sequence Diagram.

Scenario’s

use case is verzameling scenario’s met gemeenschappelijk doel scenario bevat meestal concrete waarden nuttig bij

invulling acceptatietest analyse dynamiek (sequentiediagram)

Page 18: OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario Sequence Diagram.

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

Page 19: OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario Sequence Diagram.

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

Page 20: OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario Sequence Diagram.

Sequence diagramVolgordediagram

Page 21: OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario Sequence Diagram.

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

Page 22: OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario Sequence Diagram.

Sequence diagram

Hoe a.h.v. concreet of algemeen scenario levenslijn objecten events processen terugkeer(waarde) condities

Page 23: OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario Sequence Diagram.

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

Page 24: OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario Sequence Diagram.

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

Page 25: OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario Sequence Diagram.

: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)

Page 26: OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario Sequence Diagram.

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

Page 27: OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario Sequence Diagram.

:GUI

totaalbedrag?

:Order :Orderregel :Artikel

getTotaal()

totaal

* getKosten()getPrijs()

prijs

prijs*aantal

scenario: totaalbedrag bestelling

Page 28: OOS Object geOrienteerd Software-ontwerp - 3 Data van een object Data van een klasse Scenario Sequence Diagram.

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