Ontwerppatroon
Een ontwerppatroon of patroon (Engels: design pattern) in de informatica is een generiek opgezette softwarestructuur, die een bepaald veelvoorkomend type software-ontwerpprobleem oplost. Het patroon geeft geen concrete oplossing, maar biedt een soort sjabloon, waarmee het ontwerpprobleem kan worden aangepakt. In de wereld van het objectgeoriënteerd programmeren zal een ontwerppatroon eruitzien als een klassendiagram, waar de relatie tussen de verschillende klassen en objecten weergegeven wordt. Een ontwerppatroon is geen algoritme, omdat een algoritme een berekeningsprobleem oplost en geen ontwerpprobleem. Onderstaand artikel geeft uitleg over het meest gebruikte groep van patronen, die van de "gang of four". Voor andere patronen, zie GRASP. Naast ontwerppatronen zijn er in de loop van de tijd ook patronen ontstaan op het gebied van de informatiearchitectuur en voor het het beveiligen van informatie.
Geschiedenis
[bewerken | brontekst bewerken]De term 'design pattern' werd in 1977 geïntroduceerd door Christopher Alexander, emeritus-hoogleraar aan de University of California. Hij deed dat in het boek A Pattern Language: Towns, Buildings, Construction en beschreef daarin een ontwerpmethode voor architecten en stedenbouwkundigen. In 1994 namen Erich Gamma, Richard Helm, Ralph Johnson en John Vlissides, ook bekend als De Bende van Vier (Engels: The Gang of Four), dit concept over en pasten het toe in de softwareontwikkeling. Zij deden dat met het boek Design Patterns : Elements of Reusable Object-Oriented Software. Wat een ontwerppatroon nu precies is bleef 10 jaar lang een onderwerp van discussie.
Gebruik
[bewerken | brontekst bewerken]Het gebruiken van patronen versnelt het maken van bijvoorbeeld software, omdat beschikbare oplossingen direct kunnen worden hergebruikt. Hoewel oplossingen voor veelvoorkomende ontwerpproblemen bestaan, is het vaak lastig om deze toe te passen in andere situaties vanwege de details in de implementatie. Patronen zijn een generieke beschrijving die het voordeel bieden dat het oplossingspatroon herkenbaar is, ongeacht de implementatiedetails. De toepassing van ontwerppatronen verhoogt in potentie de kwaliteit van software omdat ontwerpen worden gemaakt die zich in de praktijk reeds hebben bewezen.
Beschrijving
[bewerken | brontekst bewerken]Er zijn in de literatuur veel verzamelingen van patronen verschenen. Daarbij is normaal geworden per patroon een beschrijving te geven waarin een aantal standaard onderdelen voorkomt. Als voorbeeld noemen we de "normale" onderdelen van softwarepatronen:
- Patroonnaam en Indeling
- Ieder patroon hoort voorzien te zijn van een unieke en beschrijvende naam waarmee het patroon geïdentificeerd wordt en waarnaar verwezen kan worden. Daarbij moet het patroon ook ingedeeld worden naar soort (zoals verderop beschreven) om het patroon nog makkelijk terug te kunnen vinden.
- Doel
- Een beschrijving van het doel van het patroon, het soort probleem dat het patroon oplost.
- Ook bekend als
- Eventueel andere namen voor hetzelfde patroon in de literatuur.
- Motivering
- Een probleembeschrijving met context waarop het patroon van toepassing is. Geeft een voorbeeld van wanneer men het patroon toe zou passen.
- Toepasbaarheid
- Geeft een algemeen idee over de situaties (de contexten) waarin het patroon van toepassing is.
- Structuur
- Een grafische weergave van de structuur van het patroon, bijvoorbeeld met behulp van klassendiagrammen en interactiediagrammen.
- Rollen
- Een opsomming van de klassen/objecten in het patroon en hun rol in het patroon.
- Collaboraties
- Beschrijft de interacties tussen de klassen en objecten in het patroon.
- Gevolgen
- Beschrijft de resultaten, neveneffecten en overwegingen die op gebruik van het patroon van toepassing zijn.
- Implementatie
- Beschrijft de implementatie van het patroon, met een bespreking van de technieken die daarvoor gebruikt worden.
- Voorbeeldcode
- Een voorbeeld van een implementatie van het patroon in een programmeertaal.
- Bekende toepassingen
- Voorbeelden van bekende situaties waarin het patroon toegepast is.
- Gerelateerde patronen
- Beschrijft patronen die verband houden met het huidige patroon en wat het verband is (bijvoorbeeld kan gebruikt worden in plaats van of kan samen gebruikt worden met). Beschrijft ook de verschillen met gelijkende patronen.
Voorbeelden van ontwerppatronen uit de informatica
[bewerken | brontekst bewerken]Hieronder volgt een opsomming van een aantal patronen, ingedeeld naar categorie.
Fundamentele patronen
[bewerken | brontekst bewerken]Patronen die het fundament vormen van object-georiënteerd ontwerp.
- Delegatie
- Functioneel Ontwerp
- Interface
- Proxy
- Immutabiliteit
- Vlaginterface
Creatie
[bewerken | brontekst bewerken]Patronen aangaande mechanismes om in programma's objecten aan te maken.
- Abstract Factory — Laat een object maken waarvan slechts de basisklasse bekend hoeft te zijn.
- Builder — Lijkt op een Abstract Factory, maar levert andere producten dan objecten.
- Factory — Een basisklasse laat het maken van geaggregeerde objecten over aan een subklasse.
- Prototype — Het maken van objecten door objecten te kopiëren.
- Singleton — Een klasse heeft slechts één instantie.
Structuur
[bewerken | brontekst bewerken]Patronen die de structuur van een programma moeten verbeteren, complexiteit tegen moeten gaan en programma's inzichtelijker moeten maken.
Gedrag
[bewerken | brontekst bewerken]Patronen waarin een bepaald gedrag vastligt dat vaak voorkomt in programma's.
- Chain of responsibility
- Command
- Interpreter
- Iterator
- Mediator
- Memento
- Observer
- State
- Strategy
- Template method
- Visitor
Andere patronen
[bewerken | brontekst bewerken]Daarnaast worden er, door anderen, nog de volgende groepen van patronen beschreven.
- Gebeurtenispatronen (Engels: Event handling patterns)
- Architectuurpatronen (Engels: Architectural patterns)
Zie ook
[bewerken | brontekst bewerken]Externe link
[bewerken | brontekst bewerken]- Patronen voor het beveiligen van informatie
- Catalog of Patterns of Enterprise Application Architecture
- Design Patterns
- Design Patterns : elements of reusable object-oriented software
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
Addison-Wesley professional computing series
ISBN 0-201-63361-2