1 / 28

OOS Object geOrienteerd Software-ontwerp - 3

OOS Object geOrienteerd Software-ontwerp - 3. Data van een object Data van een klasse Scenario Sequence Diagram. Data van een object. Datum. dag: int maand: int jaar: int. Datum(int, int, int) getDag() : int getMaand() : int getJaar() : int isEerderDan(Datum): boolean.

lyris
Download Presentation

OOS Object geOrienteerd Software-ontwerp - 3

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. OOSObject geOrienteerdSoftware-ontwerp - 3 Data van een object Data van een klasse Scenario Sequence Diagram

  2. Data van een object

  3. Datum dag: int maand: int jaar: int Datum(int, int, int) getDag() : int getMaand() : int getJaar() : int isEerderDan(Datum): boolean Enkelvoudige data publicclass Datum { private int dag, maand, jaar; publicDatum(int d, int m, int j) { dag=d; maand=m; jaar=j; } publicint getDag() { return dag; } … publicboolean isEerderDan(Datum d) { if (jaar != d.jaar) return jaar<d.jaar; if (maand != d.maand) return maand<d.maand; return dag<d.dag; } }

  4. Datum dag: int Datum(int, int, int) getDag() : int getMaand() : int getJaar() : int isEerderDan(Datum): boolean Keuzevrijheid in objectdata publicclass Datum { private int dag;// dag=0 is 1-1-1900 publicDatum(int d, int m, int j) { dag=d+30*m+365*(j-1900); } publicint getDag() { return dag-30*m-365*(j-1900); } … publicboolean isEerderDan(Datum d) { return dag<d.dag; } }

  5. meervoudige multipliciteit Wegdeel 1 beginpunt Lokatie {abstract} wegcode: String lengte: double 1 Wegdeel(Lokatie, Lokatie, String, double) Lokatie getBeginpunt() Lokatie getEindpunt() double getLengte() String getWegcode() eindpunt landsnaam: String Lokatie(String) String getLand() 1..* doorloopt Route Plaats Afslag Kruispunt /lengte: double Route(Wegdeel) double getLengte() Lokatie getBeginpunt() Lokatie getEindpunt() Iterator getWegdelen() Wegdeel getWegdeel(int) voegAchteraanToe(Wegdeel) boolean rijdtVia(Lokatie) naam: String wegcode: String int: nr wegcode1: String wegcode2: String Plaats(String,String) String getNaam() Kruispunt(String, String, String) String getWeg1() String getWeg2() Afslag(String, String, int) String getWeg() int getNrAfslag()

  6. meervoudig type public class Route { private ArrayList wegdelen; public Route(Wegdeel beginweg) { wegdelen = new ArrayList(); wegdelen.add(beginweg); } … }

  7. 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 …

  8. java.util.Vector • verbeterde opzet m.b.t. collecties sinds JDK 1.2 • ArrayList is opvolger Vector • compatibiliteit  Vector-API bevat redundante methodes

  9. casting public class Route { private ArrayList wegdelen; public Lokatie getBeginpunt() { Wegdeel w; w = (Wegdeel)wegdelen.get(0); return w.getBeginpt(); } … }

  10. 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(); } … }

  11. 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; } … }

  12. Data van een klasse

  13. Klasse-attribuut Spaarrekening Rekeninghouder nr: long saldo: Euro laatsteMutatie: Datum rentetegoed: double renteperc: double naam: String adres: String

  14. Klassemethode klasseattribuut  klassemethode Spaarrekening.setRentepercentage(3.4); static void setRentepercentage(double r) Klasse.klassemethode( .. ); object.klassemethode( .. );

  15. Op meer niveaus Rekening Rekening houder nr: long saldo: Euro next: long naam: String adres: String Spaar rekening mutatie: Datum rentetegoed: Euro renteperc : double

  16. Scenario’s

  17. Scenario’s • use case is verzameling scenario’s • met gemeenschappelijk doel • scenario bevat meestal concrete waarden • nuttig bij • invulling acceptatietest • analyse dynamiek (sequentiediagram)

  18. Use case (voorbeeld)

  19. 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. Peeters I.T.M.A. Goldsmid 3. Medewerker bevestigt registratie 4. Systeem geeft klantnummer 12977

  20. Sequence diagramVolgordediagram

  21. 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

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

  23. Order ordernr : Getal next : Getal * 1 Klant Order(Klant) getTotaal( ): Bedrag bestel(Artikel) Artikel 1 artnr: Getal naam: Tekst voorraad: Getal prijs: Bedrag * Orderregel Artikel (Getal,Tekst,Bedrag) getVoorraad(): Getal getPrijs(): Bedrag setPrijs(Bedrag) aantal : Getal * 1 Orderregel (Getal,Artikel) getKosten( ): Bedrag

  24. 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

  25. :GUI scenario: toevoegen artikel o :Order art:Artikel :Assortiment voer artnr en aant in getArt(artnr) art bestel(art,aant) getVoorraad() v [v≥aant] <<constructor(aant,art)>> :Orderregel toon(o)

  26. Order ordernr : Getal next : Getal * 1 Klant Order(Klant) getTotaal( ): Bedrag bestel(Artikel,int) Artikel 1 artnr: Getal naam: Tekst voorraad: Getal prijs: Bedrag * Orderregel Assortiment * Artikel (Getal,Tekst,Bedrag) getVoorraad(): Getal getPrijs(): Bedrag setPrijs(Bedrag) aantal : Getal * 1 Orderregel (Getal,Artikel) getKosten( ): Bedrag getArt(artnr):Artikel aanpassingen klassendiagram

  27. scenario: totaalbedrag bestelling :GUI :Order :Orderregel :Artikel totaalbedrag? getTotaal() * getKosten() getPrijs() prijs prijs*aantal totaal

  28. 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

More Related