OOS Object geOrienteerd Software-ontwerp - 2 Generalisatie Compositie Gedrag Hoe ontwerpen?
Generalisatie
Generalisatie voorbeeld onvoorwaardelijk overerven van: eigenschappen Klant Zakelijke Klant Prive Klant onvoorwaardelijk overerven van: eigenschappen gedrag constraints
Generalisatie voordelen gevalsonderscheid duplicatie van code onderhoudbaarheid betere typecontrole maar er zijn ook nadelen …
Generalisatie versus Specialisatie
Type is bevroren Exemplaar Aanwezig Uitgeleend Beschikbaar leenUit(Lid) komtTerug() legApart() Aanwezig Uitgeleend Beschikbaar
State pattern Toestand Exemplaar Aanwezig Uitgeleend Beschikbaar 1 leenUit(Lid) komtTerug() legApart() Aanwezig Uitgeleend Beschikbaar 1 state
Compositie
Compositie bij 1 parent verantwoordelijkheid life-time dependency Logical Drive letter : Char Root bij 1 parent verantwoordelijkheid life-time dependency
0..* Container Onderdeel public class Container { private ArrayList onderdelen; public Container() { onderdelen = new ArrayList(); } public void addOnderdeel(...) onderdelen.add( new Onderdeel(...) ); public class Onderdeel { Onderdeel(...) { }
1 LogicalDrive Root public class LogicalDrive { private char driveletter private Root root; public LogicalDrive(char letter) { driveletter = letter root = new Root(); } public class Root extends Directory { Root() { super(); }
Aggregatie Folder name : Text File 0..* compositie Folder name : Text File 0..* aggregatie Folder name : Text File 0..* 1 associatie Vervang elke aggregatie, die geen compositie is, door een associatie met multipliciteit 1 (of soms zelfs 0..1)
Navigatie 0..* 0..* Land Plaats Weg Route 1 2 0..* 1 ◄ ligt in naam: Text Land naam: Text pos: Position Plaats afstand: Real Weg /afstand: Real Route 0..* 0..* 1 2 0..* 1 ◄ ligt in ◄ uiteinden ◄ bestaat uit
Compositie-procedure life-time dependency extra compositieklassen toevoeg-, verwijder- en zoekmethoden afgeschermde constructor
Toe te voegen compositie Aarde naam: Text Land naam: Text Land naam: Text pos: Position Plaats naam: Text pos: Position Plaats afstand: Real Weg afstand: Real Weg /afstand: Real Route /afstand: Real Route 0..* 0..* 1 2 0..* ◄ ligt in ◄ uiteinden ◄ bestaat uit
Gedrag
Standaardgedrag Constructor(en) Inspectie Wijzigiging
Constructor Niet-optionele eigenschappen: Via parameter Defaultwaarde Interne berekening
Inspectiemethoden Getters Boolean-eigenschappen Zoekmethoden
Wijziging Read-only eigenschappen Setters Add, Remove
Hoe ontwerpen?
Ontwerpproces OMT – heuristieken CRC – cards Eerst toestand dan gedrag Inventariseer alle soorten van informatie Controleer of alle informatie in CD voorkomt Standaardgedrag op basis van toestand Verfijnen van gedrag
Naamgeving Klassenaam Objectnaam Meervoudige eigenschap meervoud Rolnaam Associatienaam
Deze week Toepassen van compositie. Navigatierichting toevoegen. Standaardgedrag toevoegen.
Volgende week Scenario’s Sequentiediagram Coderen aan de hand van het klassendiagram