1 / 17

OO Analyse in de praktijk

OO Analyse in de praktijk. V Enkele Design Patterns. Boeken/tutorials:. Design Patterns Gamma, Helm, Johnson, Vlissides Object Oriented Software Construction Bertrand Meyer. Inhoud. Wat zijn design patterns ? Waarom design patterns leren ? Beperk de impact van veranderingen

hiroko
Download Presentation

OO Analyse in de praktijk

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. OO Analysein de praktijk V Enkele Design Patterns

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

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

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

  5. Wat zijn design patterns ? • =Standaard oplossingen voor standaard problemen. • 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. • ‘design patterns’ zijn in de bekendheid geraakt door het boek van de ‘gang of four’ GOF (zie slide 2) OO Analyse, V Enkele Design Patterns

  6. 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. • 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. OO Analyse, V Enkele Design Patterns

  7. 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) 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). 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 OO Analyse, V Enkele Design Patterns

  8. 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. patroon/oplossing: Façade Noot: Gebruik design patterns alleen als je de problemen die ze proberen op te lossen ook echt hebt. OO Analyse, V Enkele Design Patterns

  9. 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. • In het voorbeeld laten we zien hoe de if-testen kunnen vermeden worden. OO Analyse, V Enkele Design Patterns

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

  11. State: het probleem • 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. OO Analyse, V Enkele Design Patterns

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

  13. 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. • In het voorbeeld laten we zien hoe we de elementaire operaties kunnen aanpassen zonder aan de template-method te raken. OO Analyse, V Enkele Design Patterns

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

  15. Template Method: het probleem • 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, …) OO Analyse, V Enkele Design Patterns

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

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

More Related