Design patterns.

Vergelijkbare documenten
1 Ontwerppatronen. 1.1 Het Command patroon

Overerving & Polymorfisme

IMP Uitwerking week 13

Abstracte klassen & Interfaces

Design patterns Startbijeenkomst

Ingebouwde klassen & methodes

Tentamen Object Georiënteerd Programmeren TI oktober 2014, Afdeling SCT, Faculteit EWI, TU Delft

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

OBJECT SPAGHETTI : PATTERNS BIEDEN UITKOMST? Wat is het probleem nou eigenlijk? public class CoffeeDrinker { private CoffeeProducer mycoffeeproducer;

Ontwerp van Informatiesystemen

Kwis (3) class X { public void a() { System.out.println("x"); public static void main(string[] args) { X x = new X();

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI

Tentamen in2705 Software Engineering

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Object Oriented Programming

Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing

NAAM: Programmeren 1 Examen 21/01/2011

Objectgericht programmeren 1.

Tentamen Objectgeorienteerd Programmeren TI februari Afdeling ST Faculteit EWI TU Delft

Lessen Java: Reeks 3. David Blinder Jan G. Cornelis

Objectgeorïenteerd werken is gebaseerd op de objecten die door het systeem gemanipuleerd worden.

Een fragment wordt afgeleid van de basis klasse "Fragment".

Zelftest Programmeren in Java

NAAM: Programmeren 1 Examen 29/08/2012

Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld

Tentamen Object Georiënteerd Programmeren TI januari 2013, Afdeling SCT, Faculteit EWI, TU Delft

Modelleren en Programmeren

voegtoe: eerst methode bevat gebruiken, alleen toevoegen als bevat() false is

Tentamen Imperatief Programmeren

Datastructuren en algoritmen

ASP.NET Test Jan Van Ryckeghem

Scala. Korte introductie. Sylvia Stuurman

Objectgericht programmeren 1.

Kleine cursus PHP5. Auteur: Raymond Moesker

Java spiekbrief. Commentaar. Definitie van een methode. Types. Variabelendeclaratie. Definitie van een klasse. Namen. Definitie van een veld

Java spiekbrief. Commentaar. Definitie van een methode. Types. Variabelendeclaratie. Definitie van een klasse. Namen. Definitie van een veld


Object Oriented Ontwerp. Yannick Reekmans

VI. Klassen en objecten

Informatica. Objectgeörienteerd leren programmeren. Van de theorie met BlueJ tot een spelletje met Greenfoot... Bert Van den Abbeele

Objectgeoriënteerd programmeren in Java 1

Game of Life in Java

Uitwerkingen derde deeltentamen Gameprogrammeren Vrijdag 6 november 2015, uur

TENTAMEN Programmeren 1 VOORBEELDUITWERKING

Modelleren en Programmeren

Programmeren I. 26 augustus Algemene Richtlijnen. Richtlijnen Programmeren 1

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

SPOJ oplossingen Gilles Callebaut 7 augustus 2015

Vraag 1: Software Levenscyclus

public Paneel() { knop = new JButton( Klik ); knop.addactionlistener( new KnopHandler() ); tekstvak = new JTextField(10); add(knop); add(tekstvak);

Java Programma structuur

Programmeren 1 23 januari 2013 Prof. T. Schrijvers

Unit testen van EJB's. Koert Zeilstra - iprofs

TENTAMEN Programmeren 1 VOORBEELDUITWERKING

Klassen & objecten, overerving, abstracte klassen, debuggen, interfaces, formulieren, polymorfie, statische methoden, event-handlers

Deel 1 : Gesloten Boek

INFITT01 - Internettechnologie WEEK 8

APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN. Onderdeel van SmartProducts

eerste voorbeelden in Java

Tentamen Inleiding Programmeren (IN1608WI), 2 februari 2012, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

Hoofdstuk 1: Inleiding. Hoofdstuk 2: Klassen en objecten Datahiding: afschermen van implementatiedetails. Naar de buitenwereld toe enkel interfaces.

Datastructuren Werkcollege Intro

et Zend Framework bestaat volledig uit objectgeoriënteerde

Modelleren en Programmeren

Modelleren en Programmeren

Visual Basic.NET. Visual Basic.NET. M. den Besten 0.3 VB. NET

Programmeren (1) Examen NAAM:

Voor het bepalen van de getalswaarde van een string is een standaardmethode beschikbaar: n = Integer.parseInt(s);

Verslag. Projectteam: 107 Datum: 16 oktober 2008 Project leden: Lennard Fonteijn Harish Marhe Nicoletta Saba Turgay Saruhan Robin Tummers

In BlueJ. Doe onderstaande met muis/menu s:

Modelleren en Programmeren

Modelleren en Programmeren

Capita Selecta Design Patterns voor administratieve applicaties

X. Grafische elementen

Vakgroep CW KAHO Sint-Lieven

ASRemote WebService. Via deze webservice kunt u:

colleges recursieve datastructuren college 9 prioriteit van operatoren prioriteit in recursive descent parser

Tentamen Inleiding Programmeren (IN1608WI), duur van de toets 2 uur Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

Inleiding Programmeren 2

TENTAMEN Programmeren 1

Transcriptie:

Design patterns joost.vennekens@mechelen.lessius.eu

Wat zijn dat? Programma zit niet goed in elkaar Zondigt tegen ontwerpprincipes En dat zorgt voor probleem Ontwerppatroon: standaard oplossing voor een bepaald soort van dergelijke problemen

Voorbeeld Dit is een ingewikkelde methode, die afhangt van Motor Wijziging aan Motor -> Sensor aanpassen Sensor kan niet herbruikt worden voor andere apparatuur Geen hergebruik als Motor wordt aangedreven door iets anders dan Sensor

Command patroon Motor en Sensor zijn losgekoppeld Complexiteit verschuift naar initializatie

Voorbeeld van init class Controller { public void init() { Motor m = new Motor(); Command ju = new VersnelCommando(m); Command how = new VertraagCommando(m); Sensor s = new Sensor(); s.setvertraagcommand(how); s.setversnelcommand(ju);

Andere voordelen In wachtrij steken Ongedaan maken Valideren validate()

Active Object Voorbeeld

import java.util.*; public class PersoneelSorteerder { public List<Werknemer> lijst; public PersoneelSorteerder(List<Werknemer> l) { lijst = l; public void sorteer() { boolean gesorteerd = false; while (!gesorteerd) { gesorteerd = true; for (int i = 0; i < lijst.size() - 1; i ++) { if (lijst.get(i).getleeftijd() > lijst.get(i+1).getleeftijd()) { verwissel(i,i+1); gesorteerd = false; private void verwissel(int i, int j) { Werknemer tmp = lijst.get(i); lijst.set(i, lijst.get(j)); lijst.set(j, tmp);

Template patroon Nadeel: overerving is sterke relatie Vergelijkingsfunctie kan niet herbruikt worden in andere sorteeralgoritmes

Strategy

Facade

Mediator Facade: zichtbare implementatie van beleid over gebruik van klassen Mediator: invloed achter de schermen Vb: QuickEntryMediator

Singleton Kan een applicatie meerdere ProduktDatabank objecten maken? Kan een applicatie meerdere Controller objecten maken?

Singleton public class Singleton { private Singleton() { private static Singleton instance; public static Singleton getinstance() { if (instance == null) instance = new Singleton(); return instance;

Voordelen Kan voor elke klasse Kan door overerving: class BlaSingleton extends Bla Lazy evaluation: pas aangemaakt als nodig

Nadelen Niet transparent: gebruikers moeten weten dat het Singleton is Kan niet worden overgeerfd class Bla extends Singleton Efficientie: elke getinstance() heeft if

Monostate Alle variabelen statisch Geen methoden statisch Effect: alle instances zijn hetzelfde

Voordelen Transparant Kan worden overgeerfd: subklasses hebben dezelfde statische variabelen

Nadelen Niet door overeving: class Monostate extends Bla Efficientie: elk Monostate object moet worden aangemaakt, en statische variabelen zijn er altijd

Null object Werknemer w = getwerknemer(naam); if (w!= null && w.isbetaaldag(vandaag)) w.betaal(); Werknemer w = getwerknemer(naam); try { if (w.isbetaaldag(vandaag)) w.betaal(); catch (NullPointerException n) { //...

Null object class NullWerknemer extends Werknemer { public boolean isbetaaldag() { return false; public void betaal() { Werknemer w = getwerknemer(naam); if (w.isbetaaldag(vandaag)) w.betaal();

Uniek null object class NullWerknemer extends Werknemer { private NullWerknemer() { private static NullWerknemer instance; public static NullWerknemer getinstance() { if (instance == nul) instance = new Singleton(); return instance; public boolean isbetaaldag() { return false; public void betaal() { if (getwerknemer(naam) == NullWerknemer.getInstance()) //...

Of nog beter public abstract class Werknemer { public static final Werknemer NULL = new Werknemer() { public boolean isbetaaldag() { return false; public void betaal() { ; if (getwerknemer(naam) == Werknemer.NULL) //...

Factory of toch niet? Vorm v = new Cirkel(5);

Factory Wordt ergens in de initializatie aangemaakt Bij toevoegen van nieuwe vorm, moet interface veranderen Wijzigingen hebben geen effect meer

Alternatief Nadeel: typfouten in naam van vorm, leiden nu tot runtime ipv. compile time errors

Meer flexibiliteit SAXParser parser = SAXParserFactory.newInstance().newSAXParser();

Composite Alle elementen van samengesteld object moeten identiek behandeld worden Voordeel: clienten hoeven niet te sukkelen met lijsten, enkel het samengesteld object doet dat

Observer

Observer Pull model: Er is iets veranderd, kijk zelf maar Standaard klassen Uitvissen wat veranderd is kan veel werk zijn Push model: Dit is veranderd

Proxy + SQL

Proxy

Proxy return new DBProdukt(new ProduktImpl());

Proxy

Visitor Je moet een nieuwe methode toevoegen aan een klassehierarchie, maar dit is pijnlijk of schadelijk voor het ontwerp + configureforunix()

Visitor public void ontvang(modembezoeker bezoeker) { bezoeker.bezoek(this);

Matrix: [Modem,OS] Visitor

Visitor Toepassing: rapportering lokaaloverzicht docentenoverzicht studiegroepoverzicht

Visitor

Decorator

Decorator

Decorator public class Decorator { public Decorator(Venster a) { achterliggend = a; private Venster achterliggend; public void paintcomponent(graphics g) { achterliggend.paintcomponent(g); //... Venster v = new HorizontalScrollbarDecorator( new VerticalScrollbarDecorator( new BorderDecorator(new VensterImpl())));