Ontwerppatroon
Een ontwerppatroon of patroon (en: 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 template, waarmee het ontwerpprobleem kan worden aangepakt. In de wereld van het objectgeorienteerd programmeren zal een ontwerppatroon er uitzien 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.
Inhoud |
[bewerk] Geschiedenis
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 1995 namen Erich Gamma, Richard Helm, Ralph Johnson en John Vlissides, ook bekend als de Bende van Vier (en: 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.
[bewerk] Gebruik
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.
[bewerk] Beschrijving
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 voorkomen. 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.
[bewerk] Voorbeelden van ontwerppatronen uit de informatica
Hieronder volgt een opsomming van een aantal patronen, ingedeeld naar categorie.
[bewerk] Fundamentele patronen
Patronen die het fundament vormen van object-georiënteerd ontwerp.
[bewerk] Creatie
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 method — Een basisklasse laat het maken van geaggregeerde objecten over aan een subklasse.
- Prototype — Het maken van objecten door objecten te kopieren.
- Singleton — Een klasse heeft slechts één instantie.
[bewerk] Structuur
Patronen die de structuur van een programma moeten verbeteren, complexiteit tegen moeten gaan en programma's inzichtelijker moeten maken.
[bewerk] Gedrag
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
[bewerk] Parallellisme
Patronen die vaak voorkomen in multiprogramma's.
- Action at a distance pattern
- Active Object
- Balking pattern
- Double checked locking pattern
- Guarded suspension
- Half-Sync/Half-Async pattern
- Leaders/followers pattern
- Monitor Object
- Read write lock pattern
- Scheduler pattern
- Thread pool pattern
- Thread-Specific Storage
[bewerk] Zie ook
Bron(nen): |
|
Daarnaast worden er, door anderen, nog de volgende groepen van patronen beschreven.
- Gebeurtenispatronen (Eng: Event handling patterns)
- Architectuurpatronen (Eng: Architectural patterns)