OOS Object geOrienteerd Software-ontwerp - 3

Slides:



Advertisements
Verwante presentaties
Objectgeoriënteerd Programmeren in C++
Advertisements

KINN 2010 •OOP •O Object •O Georiënteerd •P Programmeren.
OOS Object geOrienteerd Software-ontwerp
Hogeschool HZ Zeeland 19 augustus 2003augustus 2003 Data Structuren & Algoritmen Week 1.
Hoofdstuk 8: Recursie.
Van domeinklasse tot implementatie
Het ontwerpen van een klasse
OOS Object geOrienteerd Software-ontwerp - 4 Codeerperikelen Singleton Specificeren Scheiding GUI en Domein Facade.
Greenfoot Workshop Bobby - Snake.
Hogeschool HZ Zeeland 19 augustus 2003augustus 2003 Data Structuren & Algoritmen Week 5.
Modula vs Java MODULE Show; CONST PI = ; TYPE PointRc = RECORD x,y : INTEGER; speed : REAL; angle : REAL; END; VAR a,b : PointRc; BEGIN.
Hoofdstuk 6: Controle structuren
Ontwerpen van Informatiesystemen met
Frank Stalpers en Ad Baars
Eerste deeltoets Uitwerking. Resultaten Gemiddeld: 6,01 Tips voor de volgende keer: – Werk in klad uit, schrijf duidelijk – Oefenen met loops en tellertjes.
Static Keyword static voor functieleden functie niet voor een object aangeroepen class K {... static int minimum( int i, int j); } aanroep: K::minimum(
JAVA -- H51 CONSTRUCTOR –- COPY-CONSTRUCTOR 1Constructor: Dezelfde naam als de klasse Wordt uitgevoerd d.m.v. new Initialisatie van de (private) attributen.
Algoritmiek Object-georiënteerd Programmeren
JAVA1 H 22. COLLECTIONS FRAMEWORK. 1. INLEIDING. Collections framework Is een verzameling van data structuren, interfaces en algoritmen Meest voorkomende.
Arrays.
OOS Object geOrienteerd Software-ontwerp - 2
OO Analyse in de praktijk OO Analyse in de praktijk V Enkele Design Patterns.
OO Analyse in de praktijk OO Analyse in de praktijk IV OO basisregels.
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 1 Internetapplicaties Deel 15: Herhaling Java-programmatie en geautomatiseerd testen.
KINN 2010 OOP O Object O Georiënteerd P Programmeren.
Variabelen Part deux.. Variabelen week 3 0. Herhaling 1. De NullPointerException (p101) 2. Primitieven 3. Scope en levensduur van variabelen 4. Meerdere.
Object geOrienteerd Software-ontwerp - 6
Constructoren Genesis 1:1 Aarde a1 = new Aarde(“Adam”, “Eva”);
Tircms03-p les 4 Klassen. Abstracte datatypes in C struct stack { char info[100]; int top; }; void reset(stack *s) { s->top = -1; } void push(stack *s,
Scope. Scope van variaben/methoden Een variabele is te gebruiken binnen de { en } waarbinnen hij is aangemaakt. Hetzelfde geld voor een methode { int.
Encapsulatie: Every man is an island upon himself.
Beslissingen. Inhoud: Booleaanse expressies: wat? Booleaanse expressies: wat? Relationele en logische operatoren Relationele en logische operatoren De.
Polymorphisme en Interfaces: inleiding
Opgave 1a ncompiler: vertaalt broncode naar machine-uitvoerbare code ninterpreter: voert broncode direct uit.
Java Objectgeoriënteerd Programmeren in Java met BlueJ
Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 7 Polymorfie en overerving © 2014, Gertjan Laan, versie 2.
Studiehouding Ergens verstand van krijgen kost tijd… Uren die je alleen in je boeken doorbrengt maken het verschil. Er is niets mis met onafhankelijkheid.
 C++ heeft een inheritance mechanisme  Manier om functionaliteit te ‘erfen’ van een parrent class ◦ Polymorphisme ◦ Zoals we het ook in C# kennen.
Aangepaste timing nTheorie (16 colleges + 2 deeltentamens) nPraktijk (16 keer, 3 inleveropdrachten) college Tent. 1 Tent. 3 college prakt. 1 prakt. 3 prakt.
Herhaling: He who does not learn from history, is doomed to repeat it.
Java voor beginners Doel: Een spel maken in LWJGL Door: Jim van Leeuwen.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
Informatie beoordelen If else Switch En Wiskunde.
Bespreking testpracticum.  Javaconventies! ◦ KlasseNamen beginnen met Hoofdletter ◦ objectNamen/methodeNamen met kleine letter  Aanspreken GUI ◦ Zie.
Een verzameling Speciale if-statement String methodes en functies Enumeration Recursing ArrayList Threads.
Objectgeoriënteerd Programmeren (2)
…is eigenlijk overbodig!
Objectgeoriënteerd Programmeren
Gameprogrammeren: Objecten en geheugen
Hoofdstuk 9.2 Strings.
Gameprogrammeren: Animatie
Gameprogrammeren: Methoden
Publieksvraag // schrijf een static methode die telt hoe // vaak een symbool voorkomt in een string // voorbeeld-aanroep: int n; n = Demo . Freq(’e’,
Gameprogrammeren: Overerving in Painter
Gameprogrammeren: Willekeurigheid (Randomness)
C++ • C++ als een verbetering van C • Abstracte datatypen met classes • Constructoren en destructoren • Subklassen • binding van functies 1.
Gameprogrammeren: Properties
OOS Object geOrienteerd Software-ontwerp - 5
Tinpro015b-les6 Templates.
Tinpro015b-les4 Klassen.
Voortborduren op eerder gedaan werk
Gameprogrammeren: Recursie
Gameprogrammeren: Tiles en File I/O in Tick Tick
Unified Modeling Language
Gameprogrammeren: Klassen en objecten
Arjan Egges & Paul Bergervoet
Implementatie Zoekboom
Object Communication (Jewel Jam)
Software Development fundamentals
Gameprogrammeren: Arrays
Transcript van de presentatie:

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

Data van een object

Enkelvoudige data Datum 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; } Datum dag: int maand: int jaar: int Datum(int, int, int) getDag() : int getMaand() : int getJaar() : int isEerderDan(Datum): boolean

Keuzevrijheid in objectdata Datum dag: int Datum(int, int, int) getDag() : int getMaand() : int getJaar() : int isEerderDan(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 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() Afslag(String, String, int) String getWeg() int getNrAfslag() Kruispunt(String, String, String) String getWeg1() String getWeg2()

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) { … 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 Rekeninghouder nr: long saldo: Euro laatsteMutatie: Datum rentetegoed: double renteperc: double naam: String adres: String

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

Op meer niveaus Rekening Rekening houder Spaar rekening nr: long saldo: Euro next: long naam: String 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 normal flow results alternate Registreer klant actors Baliemedewerker pre normal flow Medewerker voert klantgegevens in Systeem toont klanten met hetzelfde adres Medewerker bevestigt registratie Systeem toont klantnummer results Klant is geregistreerd met klantnummer alternate 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. Peeters I.T.M.A. Goldsmid 3. Medewerker bevestigt registratie 4. 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 Klant Orderregel Artikel ordernr : Getal next : Getal Order(Klant) getTotaal( ): Bedrag bestel(Artikel) Klant * 1 * Orderregel aantal : Getal (Getal,Artikel) getKosten( ): Bedrag 1 Artikel artnr: Getal naam: Tekst voorraad: Getal prijs: Bedrag (Getal,Tekst,Bedrag) getVoorraad(): Getal getPrijs(): Bedrag setPrijs(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

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)>> :Orderregel toon(o)

aanpassingen klassendiagram Order ordernr : Getal next : Getal Order(Klant) getTotaal( ): Bedrag bestel(Artikel, int) * Orderregel aantal : Getal (Getal,Artikel) getKosten( ): Bedrag 1 Klant Artikel artnr: Getal naam: Tekst voorraad: Getal prijs: Bedrag (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