Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdGerrit Hermans Laatst gewijzigd meer dan 6 jaar geleden
1
OOS Object geOrienteerd Software-ontwerp - 5
PackageDiagram Scheiding GUI en Domein
2
Package diagram UI Framework gui domein + facade test legacy netwerk
persistentie
3
Een model in lagen Application Facade PanelUseCase ViewDomainObject
case::gui case::domain Application Facade 1 * PanelUseCase ViewDomainObject DomainObject * * * 1
4
Application package casus.gui;
public class Application extends JFrame { private PanelUseCase1 panel1; private PanelUseCase2 panel2; … public Application() { ..jbInit().. initialisatie en toevoeging van de panels } public static void main(String[] arg) { (new Application()).setVisible(true);
5
Panel met views package casus.gui;
class PanelUseCase1 extends JPanel { private ViewDomainObject view; public PanelUseCase1() { initialisatie en toevoeging view(s); registratie eventlisteners; }
6
View package casus.gui; import casus.domein.DomainObject;
class ViewDomainObject extends JPanel { … public ViewDomainObject() { creatie en toevoeging visuele componenten; evt registratie eventlisteners; } public ViewDomainObject(DomainObject obj) { this(); invulling gegevens a.h.v. obj; // voor sommige extern te wijzigen eigenschappen public String getProperty() {
7
<<singleton>>
Mediatheek voorbeeld <<singleton>> Mediatheek -Mediatheek( ) +Mediatheek getSingleton( ) +Collection getKlant(String) +Klant getKlant(int) +Item getItem(String) +boolean leenUit(Item, Klant) … Klanten Collection getKlant(String) void addKlant(KlantInfo) … Klant 1 * id : int naw : String … 1 1 * Materiaal Item getItem(String) void addItem(ItemInfo) … Item Uitlening id : String vanaf, tot : Datum * 0,1 void leenUit(Klant) … …
8
Package diagram test gui domein +Applicatie PanelUitlenen
PanelRegKlant ViewKlant … +Mediatheek +Klant Klanten +Item +Uitlening …
9
Nogmaals Observerpatroon
10
Observer + Facade DomainObject Observer ViewDomainObject Facade
<<interface>> Observer void update(Object) state : Type DomainObject( ) Type getState( ) void setState(Type) void attach(Observer) void detach(Observer) void inform( ) observers * ViewDomainObject <<singleton>> Facade addDomainObject( … ) change(DomainObject, …) remove(DomainObject) … searchForDomainObject( … ) attach(Observer,DomainObject) detach(Observer,DomainObject) PanelUseCase
11
Observer-interface package casus.util; public interface Observer {
void update(Object obj); }
12
Observer-implementatie
class ViewDomainObject extends JPanel implements casus.util.Observer { … public void update(Object obj) { DomainObject domainObj = (DomainObject) obj; ophalen en tonen relevante eigenschappen; }
13
Domeinklasse geschikt maken voor observers
package mediatheek.domein; import casus.util.*; import java.util.*; public abstract class Item { private Uitlening uitlening; private ArrayList observers; … public void leenUitAan(Klant k) { if (uitlening != null) return; uitlening = new Uitlening(this, k); inform(); } public void attach(Observer obs){ observers.add(obs); public void inform() { Iterator it = observers.iterator(); while (it.hasNext()) { ((Observer)it.next()).update(this);
14
Uitlening package mediatheek.domein; public class Uitlening {
private Item item; private Klant klant; … //constructor is niet-publiek: Uitlening(Item i, Klant k) { item = i; klant = k; klant.leent(i); }
15
Klant package mediatheek.domein; import java.util.*;
public class Klant { private ArrayList uitleningen; private ArrayList observers; … // niet-publieke methode: void leent(Item item) { if (uitleningen.size()==MAX_TE_LEEN) uitleningen.add(item); inform(); }
16
To do domeinklassen aanpassen i.v.m. Observer-patroon
werken met packages 1 groepslid is verantwoordelijk voor facade elk groepslid kiest in overleg use case uit opsomming benodigde viewklassen taakverdeling viewklassen elk groepslid ontwerpt, codeert en test panelklasse
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.