OO Analyse in de praktijk OO Analyse in de praktijk V Enkele Design Patterns.

Slides:



Advertisements
Verwante presentaties
Les 2 klassediagrammen II
Advertisements

KINN 2010 •OOP •O Object •O Georiënteerd •P Programmeren.
Leer de namen van de noten 1
Stijn Hoppenbrouwers Software Engineering les 1 Algemene inleiding en Requirements Engineering.
Algoritmen en Datastructuren (ALDAT)
OOS Object geOrienteerd Software-ontwerp - 3
Hoofdstuk 8: Recursie.
Instructie Programmeren Task 8 5JJ70. PAGE 2 Task 8: Double Linked List Het doel van deze opdracht is: Het opbouwen van een tweetal klassen, die samen.
Van domeinklasse tot implementatie
Het ontwerpen van een klasse
‘Inleiding programmeren in Java’ SWI cursus: ‘Inleiding programmeren in Java’ 4e college Woe 19 januari 2000 drs. F. de Vries.
Leer de namen van de noten 2

Computervaardigheden en Programmatie Universiteit AntwerpenObjecten 4.1 Computervaardigheden en Programmatie 1rste BAC Toegepaste Biologische Wetenschappen.
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
De koektrommel of de grabbelton
Parallelle Algoritmen String matching. 1 Beter algoritme patroonanalyse Bottleneck in eenvoudig algoritme: WITNESS(j) (j = kandidaat in eerste i-blok)
1 Orientatie InformatieSystemen K.M.van Hee hgl. architectuur van informatiesystemen dir. Deloitte & Touche Bakkenist TU/e 2001.
Deze les wordt verzorgd door de Kansrekening en statistiekgroep Faculteit W&I TU/e.
Wat is APPRECIATIVE INQUIRY Een manier van kijken en Een co-creatie voor duurzame verandering
Java patterns Introductie tot GoF patterns in Java.
1 Voorwaarden hergebruik Modulair ontwerp Low coupling High cohesion.
1 Uit ons domein: Verzameling programmatuur voor het toewijzen van afstudeerders aan examinatoren. Invoer van voorkeuren Toewijzen Overzichten Practicum.
Frank Stalpers en Ad Baars
Inleidend probleem Data structuur (hiërarchie van classes)
Numerieke Natuurkunde
MICPRG Les 11 Microcontroller Programmeren in C. 112 Datastructuren in C Werkgeheugen (PC en microcontroller): Statische datastructuren (vaste grootte):
Optuigen van datastructuren
Imperatief programmeren nProgramma bestaat uit nRunnen is opdrachten gegroepeerd in methoden één voor één uitvoeren te beginnen met main.
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
1 Datastructuren Introductie tot de programmeeropgaven in C++ Jan van Rijn
6.1 Inleiding HOOFDSTUK 6 METHODEN
P. 1 Vakgroep Informatietechnologie Structuur Deel II C++ Classes Namespaces Type casting Reference types Constructors en Destructors Memory Management.
Opgave 2a nMet een InputStream lees je bytes uit een binare file nMet een Reader lees je characters uit een tekstfile.
OO Analyse in de praktijk OO Analyse in de praktijk IV OO basisregels.
Herhaling Java-programmatie en geautomatiseerd testen (vervolg)
OO Analyse in de praktijk
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 1 Internetapplicaties Deel 15: Herhaling Java-programmatie en geautomatiseerd testen.
PHP & MYSQL LES 02 PHP & FORMULIEREN. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 3: Werken met numerieke gegevens.
Inleiding tot programmeren
Overerving: It’s a kind of magic…. Principes van OO: 1) Overerving 2) Encapsulatie 3) Polymorphisme = (deel van het) OO. paradigma.
Introductie tot GoF patterns in Java
Constructoren Genesis 1:1 Aarde a1 = new Aarde(“Adam”, “Eva”);
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag top-down decompositie Opdrachten:
Encapsulatie: Every man is an island upon himself.
Polymorphisme en Interfaces: inleiding
1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal.
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.
Codetuts Academy Les 6 Module 2a Php Fundamentals 1.
Na de praktijk, de theorie.. Zoals een gehaktmolen 1.Je stopt er iets in. 2.Je hoeft niet te weten wat er binnenin gebeurt. 3.Het resultaat verschijnt.
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)
Objectgeoriënteerd Programmeren (2)
Objectgeoriënteerd Programmeren
Gameprogrammeren: Overerving
Gameprogrammeren: Methoden
Gameprogrammeren: Afsluiting
Gameprogrammeren: Herhalingen
OOS Object geOrienteerd Software-ontwerp - 5
Tinpro015b-les6 Templates.
Gameprogrammeren: Abstracte klassen
Gameprogrammeren: Interfaces
Unified Modeling Language
Gameprogrammeren: Klassen en objecten
Arjan Egges & Paul Bergervoet
Software Development fundamentals
Transcript van de presentatie:

OO Analyse in de praktijk OO Analyse in de praktijk V Enkele Design Patterns

2OO Analyse, V Enkele Design Patterns Boeken/tutorials: Design Patterns Design Patterns Gamma, Helm, Johnson, Vlissides Gamma, Helm, Johnson, Vlissides Object Oriented Software Construction Object Oriented Software Construction Bertrand Meyer Bertrand Meyer

3OO Analyse, V Enkele Design Patterns Inhoud Wat zijn design patterns ? Wat zijn design patterns ? Waarom design patterns leren ? Waarom design patterns leren ? Beperk de impact van veranderingen Beperk de impact van veranderingen Bloemlezing met voorbeelden Bloemlezing met voorbeelden Zie volgende slide

4OO Analyse, V Enkele Design Patterns Enkele design patterns Creational Creational Factory Method Factory Method Singleton Singleton Structural Structural Composite Composite Façade Façade Behavioral Behavioral Command Command State (hier behandeld) State (hier behandeld) Template (hier behandeld) Template (hier behandeld)

5OO Analyse, V Enkele Design Patterns Wat zijn design patterns ? =Standaard oplossingen voor standaard problemen. =Standaard oplossingen voor standaard problemen. Op niveau van ‘design’. Het gaat dus niet om herbruikbare code, wel om bruikbare ontwerpen. Op niveau van ‘design’. Het gaat dus niet om herbruikbare code, wel om bruikbare ontwerpen. Het gaat over iets grotere gehelen dan beschreven in OO principes en OO basisregels. Het gaat over iets grotere gehelen dan beschreven in OO principes en OO basisregels. ‘design patterns’ zijn in de bekendheid geraakt door het boek van de ‘gang of four’ GOF (zie slide 2) ‘design patterns’ zijn in de bekendheid geraakt door het boek van de ‘gang of four’ GOF (zie slide 2)

6OO Analyse, V Enkele Design Patterns Waarom design patterns leren ? Veel problemen ivm software-aanpassingen zijn algemeen. Ze hebben altijd te maken met een verandering die een te grote impact heeft op het softwaresysteem. Veel problemen ivm software-aanpassingen zijn algemeen. Ze hebben altijd te maken met een verandering die een te grote impact heeft op het softwaresysteem. Als je al enkele patronen/oplossing al kent, verlies je minder tijd. Als je al enkele patronen/oplossing al kent, verlies je minder tijd. Als iedereen eenzelfde patroon eenzelfde naam geeft, dan kan er beter gecommuniceerd worden. Als iedereen eenzelfde patroon eenzelfde naam geeft, dan kan er beter gecommuniceerd worden.

7OO Analyse, V Enkele Design Patterns Beperk de impact van veranderingen Probleem: Bij creatie van een object pinnen we ons vast aan een concrete klasse. Als die moet veranderen, moeten we onze code aanpassen. (voorbeeld van schending van Dependency Inversion) Probleem: Bij creatie van een object pinnen we ons vast aan een concrete klasse. Als die moet veranderen, moeten we onze code aanpassen. (voorbeeld van schending van Dependency Inversion) patroon/oplossing: Factory Method Probleem: We weten hoe we een nieuwe methode kunnen bijmaken door reeds eerder gebruikte elementaire methoden op te roepen (zie basisregels: gemeenschappelijke code). Probleem: We weten hoe we een nieuwe methode kunnen bijmaken door reeds eerder gebruikte elementaire methoden op te roepen (zie basisregels: gemeenschappelijke code). Omgekeerd komt het ook voor dat een methode moet toegevoegd worden met een gelijkaardige structuur als een bestaande methode, maar die andere elementaire methoden oproept. Hoe kunnen we gebruik maken van onze eerdere inspanningen ? patroon/oplossing: Template Method

8OO Analyse, V Enkele Design Patterns Beperk de impact van veranderingen Probleem: We hebben in een voorgaand project klassen gebouwd waarvan we nu 10% willen hergebruiken. Helaas hebben de klassen veel publieke methoden met lange parameterlijsten. Het lijk erop dat als we 1 klasse willen gebruiken, we een kluwen van andere klassen moeten meenemen. Probleem: We hebben in een voorgaand project klassen gebouwd waarvan we nu 10% willen hergebruiken. Helaas hebben de klassen veel publieke methoden met lange parameterlijsten. Het lijk erop dat als we 1 klasse willen gebruiken, we een kluwen van andere klassen moeten meenemen. patroon/oplossing: Façade Noot: Gebruik design patterns alleen als je de problemen die ze proberen op te lossen ook echt hebt.

9OO Analyse, V Enkele Design Patterns Het State-pattern Een veranderlijke eigenschap wordt voorgesteld door een attribuut (zie basisregels). We kunnen dan geen subklassen gebruiken, omdat een object niet van klasse kan veranderen. Toch kunnen we m.b.v. het State-pattern, gebruik maken van subklassen en polymorphisme. Een veranderlijke eigenschap wordt voorgesteld door een attribuut (zie basisregels). We kunnen dan geen subklassen gebruiken, omdat een object niet van klasse kan veranderen. Toch kunnen we m.b.v. het State-pattern, gebruik maken van subklassen en polymorphisme. In het voorbeeld laten we zien hoe de if-testen kunnen vermeden worden. In het voorbeeld laten we zien hoe de if-testen kunnen vermeden worden.

10OO Analyse, V Enkele Design Patterns State: het probleem public double getBelPerc(){ public double getBelPerc(){ if ( burgStand == GETROUWD ) if ( burgStand == GETROUWD ) return NORM_PERC - AFTREK; return NORM_PERC - AFTREK; else else return NORM_PERC; return NORM_PERC; } Werknemer +getBurgStand() : int -burgStand : int +getBelPerc() : double +getPensioen() : double

11OO Analyse, V Enkele Design Patterns State: het probleem Het probleem met de code in de vorige slide is hetvolgende: Het probleem met de code in de vorige slide is hetvolgende: Als er een nieuwe burgerlijke stand bijkomt (samenwonend, weduwnaar), dan moeten al de bestaande if-tests doorlopen en evt. gewijzigd worden, met alle gevaren vandien.

12OO Analyse, V Enkele Design Patterns State: de oplossing > BurgStand Getrouwd Alleen Werknemer +getBurgStand() : BurgStand -burgStand : BurgStand +getBelPerc() : double +getPensioen() : double public double getBelPerc(){ return burgStand.getBelPerc(); return burgStand.getBelPerc();} // opm: In sommige gevallen moeten // we this meegeven, op deze manier: // return burgStand.getBelPerc(this); +getBelPerc() : double +getPensioen() : double +getBelPerc() : double +getPensioen() : double +getBelPerc() : double +getPensioen() : double public double getBelPerc(){ return NORM_PERC; return NORM_PERC;} public double getBelPerc(){ return NORM_PERC - AFTREK; return NORM_PERC - AFTREK;}

13OO Analyse, V Enkele Design Patterns Het Template Method-pattern Het komt vaak voor dat een structuur (de template of ‘mal’) van een methode steeds dezelfde is, maar dat de meer elementaire operaties verschillen. Zo zullen we een lijst vaak op dezelfde manier doorlopen en ondertussen dezelfde tests willen uitvoeren. Het komt vaak voor dat een structuur (de template of ‘mal’) van een methode steeds dezelfde is, maar dat de meer elementaire operaties verschillen. Zo zullen we een lijst vaak op dezelfde manier doorlopen en ondertussen dezelfde tests willen uitvoeren. In het voorbeeld laten we zien hoe we de elementaire operaties kunnen aanpassen zonder aan de template-method te raken. In het voorbeeld laten we zien hoe we de elementaire operaties kunnen aanpassen zonder aan de template-method te raken.

14OO Analyse, V Enkele Design Patterns Template Method: het probleem public void verhoog(){ public void verhoog(){ for(int i = 0 ; i < lijst.size(); i++) for(int i = 0 ; i < lijst.size(); i++) …; // verhoog elk element …; // verhoog elk element } public void verlaag(){ public void verlaag(){ for(int i = 0 ; i < lijst.size(); i++) for(int i = 0 ; i < lijst.size(); i++) …; // verlaag elk element …; // verlaag elk element } public void drukAf(){ public void drukAf(){ for(int i = 0 ; i < lijst.size(); i++) for(int i = 0 ; i < lijst.size(); i++) System.out.println( lijst.get(i) ); System.out.println( lijst.get(i) ); } IntegerLijst +verhoog() -lijst : List +verlaag() +drukAf()

15OO Analyse, V Enkele Design Patterns Template Method: het probleem Het probleem met de code in de vorige slide is hetvolgende: Het probleem met de code in de vorige slide is hetvolgende: De code slaagt er niet in het gemeenschappelijke stuk, namelijk de for-lus af te zonderen. Bij elke nieuwe methode waarbij de lijst moet doorlopen worden, moet de for-lus herschreven worden. Het probleem verergert, als naast de for-lus, ook extra conditionele code, steeds herhaalt moet worden. De structuur blijft hetzelfde, de elementaire operaties, verschillen telkens (verhogen, verlagen, afdrukken, …)

16OO Analyse, V Enkele Design Patterns Template Method: de oplossing public void voerUit(){ for(int i = 0 ; i < lijst.size(); i++) for(int i = 0 ; i < lijst.size(); i++)operatie(i);} > Iteratie Verlaging Verhoging +voerUit() +operatie(int i) Afdruk +-operatie(int i) public void operatie(int i){ System.out.println(lijst.get(i)); System.out.println(lijst.get(i));} IntegerLijst +verhoog() -lijst : List +verlaag() +drukAf() public void drukAf(){ (new Afdruk(lijst)).voerUit(); (new Afdruk(lijst)).voerUit();} -lijst : List

17OO Analyse, V Enkele Design Patterns Opdracht Zoek enkele andere patterns op op internet, en probeer ze uit in een werkend stuk code.