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

Post on 24-May-2015

215 views 0 download

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