Inhoud introductie Design patterns
Introductie tot de cursus 1 Plaats en functie van de cursus 7 2 Inhoud van de cursus 8 2.1 Voorkennis 8 2.2 Leerdoelen 8 2.3 Opbouw van de cursus 8 3 Leermiddelen en wijze van studeren 9 4 Wijze van toetsing 12 4.1 Opdrachten 12 4.2 Studententeams 13 4.3 Planning 14 5 Cursusteam 14
Introductie tot de cursus
Introductie tot de cursus
Voor u begint met het bestuderen van de cursus Design patterns, willen wij u in deze introductie informeren over de bedoeling van de cursus, de opzet van het cursusmateriaal, de manier waarop u de cursus kunt bestuderen en de wijze waarop de cursus kan worden afgerond. 1
Plaats en functie van de cursus
De cursus Design patterns is een cursus van het derde niveau met een studielast van 100 uur (3 studiepunten). De cursus sluit aan de ene kant aan op de cursussen over programmeren in Java (Visueel programmeren met Java, Objectgeoriënteerd programmeren met Java, Datastructuren en algoritmen, Gedistribueerd programmeren met Java) en anderzijds op de cursussen die gericht zijn op modelleren en ontwerpen (Beginselen van modelleren, Informatiesystemen). Ontwerppatronen Gang of Four (GoF)
Doelgroepen
De belangstelling voor design patterns of ontwerppatronen – we gebruiken in deze cursus bij voorkeur de Nederlandse term – is sinds het verschijnen van het standaardwerk Design patterns, Elements of reusable object-oriented software van Erich Gamma e.a. (deze groep wordt veelal aangeduid als de ‘Gang of Four’, afgekort als GoF) in 1995 sterk gegroeid. Ervaren ontwerpers van objectgeoriënteerde software zien het als een goede manier van werken om al bij het ontwerp rekening te houden met mogelijke wijzigingen in die software. Het vak kan worden gezien als een verzameling van nuttig gebleken ontwerpoplossingen voor regelmatig voorkomende problemen. Het is te beschouwen als gebundelde ervaring die is ontwikkeld over de laatste decennia door de objectgeoriënteerde ‘software community’. De in deze cursus behandelde patronen betreffen slechts een aantal veelgebruikte patronen; in feite worden er nog jaarlijks nieuwe patronen gepubliceerd en bediscussieerd, zeker binnen specifieke toepassingsgebieden. In deze cursus doen we geen moeite om een compleet overzicht te geven; het gaat meer om het verkrijgen van een goed inzicht in het gebruik van ontwerppatronen en het verkrijgen van waardering ervoor. Daarnaast richten we ons in de cursus vooral op het verkrijgen van vaardigheden om zelf te leren wer ken met ontwerppatronen die in de cursus of elders worden beschreven. De vorm waarin de cursus wordt getoetst, is hier ook op afgestemd. De cursus is een verplicht onderdeel van de masterfase van de woopleiding Computer Science. De cursus is met name ook voor deze doelgroep ontwikkeld. Toch verwachten wij dat ook anderen dan opleidingsstudenten veel profijt van deze cursus kunnen hebben. Wij denken hierbij speciaal aan softwareontwikkelaars met een goede kennis van Java en objectgeoriën teerd ontwerpen. Ontwikkelaars die kennis willen opdoen op het gebied van softwarearchitectuur, komen in deze cursus basisprincipes tegen die niet alleen geldig zijn op het niveau van objecten, maar ook op het niveau van componenten van systemen. De cursus legt daarom een goede basis voor het vakgebied softwarearchitectuur.
Design patterns
2
Inhoud van de cursus
2.1
Voorkennis
Om met succes de cursus Design patterns te kunnen bestuderen en de opdrachten te kunnen maken, is een grondige Java-kennis noodzakelijk – ten minste op het niveau van de cursus Objectgeoriënteerd programmeren met Java – en een goede basiskennis van objectgeoriënteerd ontwerpen, bijvoorbeeld verkregen door het bestuderen van de cursussen Objectgeoriënteerd programmeren met Java en Software engineering; een objectgeoriënteerde benadering. Kennis van UML en vaardigheid bij het gebruik van een UML-tool is niet strikt noodzakelijk, maar wel wenselijk. Studenten die deze specifieke UML-achtergrond missen, maar in plaats daarvan ervaring hebben met voorlopers van UML, zullen rekening moeten houden met extra inwerktijd. Datzelfde geldt voor studenten die geen ervaring hebben met een UML-tool. 2.2
Leerdoelen
Na het bestuderen van de cursus wordt verwacht dat u – bij een probleembeschrijving kunt aangeven en beargumenteren welke van de behandelde ontwerppatronen kunnen bijdragen aan een goede oplossing van het probleem – zelfstandig ontwerppatronen kunt bestuderen die niet worden behandeld in het tekstboek, en deze kunt toepassen – op basis van een probleembeschrijving een ontwerp kunt maken, gebruikmakend van ontwerppatronen uit verschillende bronnen – een (eigen of gegeven) ontwerp waarbij ontwerppatronen zijn toegepast, kunt implementeren – in een gegeven ontwerp of implementatie kunt aangeven waar ontwerp patronen zijn gebruikt, en de voordelen van die patronen op die plaats kunt uitleggen – het verband kunt uitleggen tussen een bepaald patroon en de flexibi liteit die daardoor in het ontwerp wordt gebracht – zich realiseert dat er variaties op ontwerppatronen bestaan en dat ze op meerdere manieren geïmplementeerd kunnen worden. 2.3
Opbouw van de cursus
De cursus is gebaseerd op een Engelstalig tekstboek: Design patterns explained; a new perspective on object-oriented design, second edition, Alan Shalloway en James R. Trott, Addison Wesley, 2005. Het tekstboek wordt geheel bestudeerd en vormt samen met de bijbehorende opdrachten de inhoud van de eerste twee blokken van de cursus. De cursus is opgebouwd uit vier blokken, waarbij de eerste twee en een deel van het derde gebaseerd zijn op het tekstboek. Het vierde blok bevat een integrerende eindopdracht. Blok 1 Achtergrond studielast 8 uur
Het eerste blok haalt de essentie van het begrip objectoriëntatie op, en laat de relevante onderdelen van UML de revue passeren. In principe behoren deze onderwerpen tot de vereiste voorkennis. Daarnaast bevat dit blok een beschrijving van een voorbeeldsysteem dat in het tekstboek wordt gebruikt en de casusbeschrijving van de eind opdracht.
Introductie tot de cursus
Blok 2 Introductie studielast 34 uur
Het tweede blok van de cursus bevat een introductie op ontwerp patronen en duikt daarna het diepe in. Er wordt een probleem beschreven dat de noodzaak laat zien van een aantal ontwerppatronen, en die patronen worden vervolgens uitgebreid besproken. Het gaat om het Facade-patroon, het Adapter-patroon, het Strategy-patroon, het Bridge-patroon en het Abstract factory-patroon. Het vergt een hoog abstractieniveau om bij die laatste twee patronen te kunnen zien wat ze doen en waarvoor ze nodig zijn. Het tweede blok wordt afgesloten met een vijftal hoofdstukken uit het tekstboek waarin de leerstof van het eerste blok geïntegreerd wordt. In die hoofdstukken vindt ook reflectie plaats op hoe experts ontwerpen maken en op de principes en strategieën van ontwerppatronen. In de opdracht die behoort bij dit blok, zult u de patronen uit dit blok binnen een probleem in de praktijk gebruiken.
Blok 3 Verbreding studielast 27 uur
Het derde blok is een verbreding, in de vorm van een aantal nieuwe ontwerppatronen. In twee aparte leereenheden besteden we nog aandacht aan een patroon dat meer op architectuurniveau werkt (modelview-controller) en aan patronen op een verwant gebied. Voor de laatste leereenheid wordt gebruikgemaakt van additioneel studiemateriaal op de cursuswebsite: het onderwerp kan per jaar variëren. Ook dit blok wordt afgesloten met een opdracht waarmee de kennis wordt verankerd.
Blok 4 Eindopdracht studielast 30 uur
Het laatste blok wordt gevormd door de eindopdracht. In deze opdracht moet u laten zien dat u bij het (her)ontwerpen van een systeem op basis van een gegeven veranderscenario gebruik kunt maken van wat u aan ontwerppatronen hebt bestudeerd binnen de cursus. Dat (her)ontwerp moet u (her)implementeren en daarbij moet u trouw blijven aan het ontwerp. Over de eindopdracht dient u een rapportage te schrijven. Een deel van de studielast van dit blok is gereserveerd voor het bestu deren van aanvullende ontwerppatronen, bijvoorbeeld op de GoF-cd, die u nodig hebt voor deze eindopdracht. In de volgende paragraaf vindt u informatie over deze cd. 3
Leermiddelen en wijze van studeren
Het cursusmateriaal bestaat uit het tekstboek, dit werkboek, de cursus site, de cd van het GoF-boek en de benodigde programmatuur. Op de cursussite staat alle informatie die aan verandering onderhevig is. De planning van het maken en inleveren van de opdrachten bijvoorbeeld, is niet in het werkboek opgenomen, maar vindt u op de cursussite. Tekstboek
Het tekstboek Design patterns explained is helder geschreven met veel gevoel voor didactiek; de auteurs, die ruime ervaring hebben met ontwerpen én het geven van trainingen over het onderwerp, vertellen ook op een openhartige wijze over hun eigen ervaring met het leren toepassen van ontwerppatronen bij hun eigen ontwerpen. Naast de behandeling van de meest relevante patronen (niet alle GoF-patronen worden behandeld) zijn er ook hoofdstukken gewijd aan goede inleidingen, casussen en reflectie op de behandelde leerstof. Bij deze reflectie wordt regelmatig aandacht besteed aan de uiteindelijke doelen van ontwerppatronen: anticiperen op mogelijke wijzigingen die in de
Design patterns
software moeten worden aangebracht, en het creëren van een ontwerp dat daarop is voorbereid. Het tekstboek bevat per hoofdstuk een aantal review questions. Antwoorden op die review questions zijn te vinden op de website die bij het tekstboek hoort. Het werkboek gaat niet op die review questions in; als u vragen hebt met betrekking tot de review questions, is de discussieruimte op de cursussite de aangewezen plaats om ideeën uit te wisselen. Website tekstboek
Bij het tekstboek hoort een website; hiervan zullen we in de cursus zo nu en dan gebruikmaken. Deze zogeheten ‘on-line companion’ is te vinden op www.netobjectives.com/dpexplained/dpe_olc.htm.
Werkboek
Het werkboek is de leidraad voor het bestuderen van de cursus. De studiestof vindt u in het tekstboek en op de cursussite. De leereenheden uit het werkboek bevatten – extra uitleg en aanwijzingen voor onderdelen die onduidelijk zijn – opgaven met een terugkoppeling – een inschatting van de studielast per onderdeel van de cursus.
GoF-cd
Voor referentiedoeleinden wordt een cd meegeleverd van het boek Design patterns, elements of reusable object-oriented software, Erich Gamma, Richard Helm, Ralph Johnson en John Vlissides, Addison Wesley, 1995. Dit boek wordt in het algemeen beschouwd als hét standaardwerk over ontwerp patronen; het is echter niet als leerboek geschreven en ook niet goed als zodanig bruikbaar. Andere nadelen zijn het gebruik van C++ in plaats van Java bij programmacodevoorbeelden en een niet-standaard gebruik van UML-achtige notaties. Het boek is verschenen in 1995, toen Java en UML nog nauwelijks bestonden. Het boek kan worden ingezien in de studiecentra. We zullen naar het boek verwijzen als het GoF-boek en naar de cd als de GoF-cd. De cd bevat het volledige boek en heeft een eenvoudig htmlgebaseerde interface; zie figuur 1. Via de browser zijn de verschillende onderdelen van het boek ook eenvoudig te bekijken of desgewenst af te drukken.
FIGUUR 1
10
De inhoudsopgave van de GoF-cd
Introductie tot de cursus
Belangrijke GoF-patronen die wel op de cd staan, maar die niet in het tekstboek worden behandeld, zijn: Command, Composite, Chain of responsibility, Iterator, Proxy, State, Visitor. U kunt de cd gebruiken als u bij het bestuderen van het tekstboek of bij het uitwerken van de opdrachten de behoefte voelt aan (extra) voor beelden of uitleg bij een specifiek patroon of aan een extra inleiding (Ch. 1: Introduction) of casus (Ch. 2: A case study: designing a document editor). Als u nog niet erg bekend bent met het vakgebied, is het echter niet raadzaam om met dit boek te beginnen; het tekstboek is toeganke lijker. Cursussite
Op de cursussite op http://elo.ou.nl vindt u de meest actuele informatie over de cursus en alle informatie die niet of moeilijk statisch is vast te leggen in het werkboek. In het bijzonder gaat het daarbij om de volgende zaken: – de organisatie van de studiebegeleiding – informatie over de wijze waarop u in contact kunt komen met de studiebegeleider en de examinator van de cursus (onder ‘Cursus informatie’) – de planning van de eerstvolgende begeleidingscyclus met de data waarop de opdrachten moeten worden ingeleverd (onder ‘Planning’) – de manier waarop u aan de opdrachten kunt komen en de wijze waarop de uitwerkingen van de opdrachten moeten worden ingeleverd (onder ‘Opdrachten’) – software behorende bij de opdrachten(onder ‘Cursusmateriaal’) – links naar relevante websites (onder ‘Bronnen’) – errata op het werkboek (onder ‘Cursusmateriaal’) – informatie over de bij de cursus geleverde software tools (onder ‘Softwaretools’). Op de cursussite vindt u tevens een discussiegroep waarin u vragen met betrekking tot de stof en de opdrachten kunt stellen aan de studiebege leiders en aan andere studenten. Wij raden u aan om regelmatig de cursussite en de discussiegroep te raadplegen.
Wijze van studeren
De nummers en titels van de leereenheden in het werkboek komen niet overeen met de hoofdstukken van het tekstboek. We hebben ervoor gekozen om de paragrafen binnen de leereenheden wel te laten corre sponderen met de hoofdstukken uit het tekstboek. Dit is in het begin wellicht wat verwarrend: leereenheid 4 bevat bijvoorbeeld de paragrafen 5.1 t/m 8.5. Het geeft echter de mogelijkheid om een aantal wat kleinere hoofdstukken uit het tekstboek te groeperen en ook om de opdrachten en het aanvullende leermateriaal met bijbehorende ondersteuning onder te brengen in het leereenhedenmodel met een doorlopende nummering. De nummering van de opgaven correspondeert daarentegen wel met die van de leereenheden. Wij raden u aan om op de volgende wijze tewerk te gaan: – lees van iedere leereenheid eerst de introductie, leerdoelen en studeer aanwijzingen in het werkboek – lees dan één of meer paragrafen in het tekstboek – bekijk op de cursussite eventuele errata en bekijk wat voor relevante links er zijn – lees vervolgens de overeenkomstige paragrafen in het werkboek en maak de opgaven. U kunt daarbij, wanneer van toepassing, gebruik maken van bouwstenen op de cursussite. Het bestuderen van de links op de cursussite is geen verplichting. U kunt er gebruik van maken wanneer u extra uitleg over een bepaald onderwerp zoekt of meer wilt weten.
11
Design patterns
Opdrachten
Op de cursussite vindt u informatie over de data waaop u de twee toetsopdrachten en de eindopdracht moet hebben ingeleverd en over de manier waarop u aan die opdrachten komt. Tevens staat daar uitgelegd hoe u tewerk kunt gaan om, na het inleveren van de eerste toetsopdracht, een team te vormen om de tweede toets opdracht en de eindopdracht te kunnen uitvoeren.
Java-versie en ontwikkelomgeving
De cursus maakt gebruik van Java. Alle programma’s die bij de eind opdracht van de cursus zullen worden meegeleverd, zullen worden uitgetest met de Java SE Development Kit 5.0 of hoger. Op het moment van schrijven van deze introductie is nog niet duidelijk welke programmatuur zal worden geleverd als Java-ontwikkelomgeving. Ook is nog niet duidelijk welk UML tool meegeleverd zal worden. De eindopdracht mag, in overleg met uw teamgenoot (zie verderop in deze introductie), met een andere ontwikkelomgeving worden geco deerd. De enige voorwaarde is dat de Java-code zonder probleem kan draaien zonder die ontwikelomgeving of extra bibliotheken. Voor het gebruik van andere ontwikkelomgevingen wordt geen ondersteuning geboden. Voor meer informatie verwijzen we u naar de cursussite.
UML tool
Ook voor het werken met UML-diagrammen geldt dat u gebruik mag maken van een andere tool, in overleg met de partner in uw team. De UML-diagrammen moeten in de vorm van gif-plaatjes bij het verslag worden geleverd. Het is niet aan te bevelen om een tool als Visio te gebruiken: dan mist u de automatische codegeneratie die u veel werk uit handen kan nemen. Applied Java patterns
Voor de studiecentra is speciaal voor deze cursus het volgende boek aangeschaft: Applied Java patterns, Stephen Stelting en Olav Maassen, Prentice Hall, 2002. Dit boek legt, anders dan het meegeleverde cursusmateriaal, veel meer de nadruk op concrete toepassingen in Java. Een belangrijk deel van het boek is gewijd aan zogeheten ‘full code examples’, waarbij van elk ontwerppatroon een volledige implementatie in Java is gegeven. Hierbij is het centrale voorbeeld een ‘personal information manager’. Het boek kan vooral zijn waarde bewijzen bij het maken van de Javaimplementaties die gevraagd worden bij het uitwerken van de eind opdracht. Meer informatie over dit boek is te vinden via de volgende webadressen: vig.prenhall.com en www.amazon.com; de volledige adressen vindt u op de cursussite. 4
Wijze van toetsing
4.1 opdrachten Geen schriftelijk tentamen
12
Gegeven de aard van dit vak is gekozen om de cursus te toetsen met behulp van twee toetsopdrachten en een eindopdracht. Deze opdrachten moeten thuis worden gemaakt. Er is dus geen schriftelijk tentamen voor deze cursus. De toetsopdrachten zijn ontwerpopdrachten die moeten worden gemaakt aan het einde van het tweede, respectievelijk het derde blok. Deze toetsopdrachten zijn verplicht.
Introductie tot de cursus
Eindopdracht
Het laatste blok wordt gevormd door de eindopdracht. Met deze opdracht moet u laten zien dat u bij het (her)ontwerpen van een systeem op basis van een gegeven veranderscenario gebruik kunt maken van wat u aan ontwerppatronen hebt bestudeerd binnen de cursus. Dat (her)ontwerp moet u (her)implementeren, en daarbij moet u trouw blijven aan uw ontwerp. Over de eindopdracht dient u een rapportage te schrijven. Informatie over de precieze eisen voor de rapportage kunt u vinden op de cursussite.
Eindcijfer
De ingeleverde ontwerpen van de twee toetsopdrachten tellen niet mee in het eindcijfer. Wel is het noodzakelijk dat ze van voldoende kwaliteit zijn en dat ze tijdig zijn ingeleverd, omdat dat voorwaarden zijn om aan de eindopdracht te mogen beginnen. Het eindcijfer wordt verkregen door het gewogen gemiddelde te bepalen van de cijfers van de probleembeschrijving en analysematrix van de eindopdracht (C1, 30 %), het ontwerp (C2, 40 %) en de implementatie en documentatie (C3, 30 %). Alle onderdelen dienen voldoende te zijn. Ofwel: eindcijfer = (3C1 + 4C2 + 3C3) / 10, voor Ci ≥ 6. Criteria voor de onderdelen vindt u in de vorm van competentiekaarten op de cursussite (onder ‘Opdrachten’). 4.2
Studententeams
Teams van twee personen
De tweede en derde opdracht worden gedaan in teams van twee. De uitwerking wordt ook per team ingeleverd; slechts in uitzonderings gevallen kunnen studenten ook alleen werken. In principe worden de cijfers voor de eindopdracht aan een team toegekend; alleen in uitzonderingsgevallen wordt gedifferentieerd tussen de twee leden van het team. Alleen de eerste opdracht wordt individueel gedaan; kort daarna worden studententeams gevormd.
Teamvorming
We gaan ervan uit dat iedereen in eerste instantie zelf een geschikte partner zoekt om de opdrachten mee uit te voeren. Hiertoe worden, voor zover beschikbaar, de namen en e-mailadressen van alle voor de cursus ingeschreven studenten aan het begin van een begeleidingscyclus op de cursussite geplaatst. Op deze site vindt u tevens aanwijzingen hoe u tewerk kunt gaan bij het vinden van een partner. De discussiegroep op de cursussite is een hulpmiddel daarbij. Als het u niet lukt om tijdig een partner te vinden, zal de examinator u aan een partner koppelen. Alleen in uitzonderingssituaties accepteren wij dat u de opdrachten alleen uitvoert. Indien u dit wenst, moet u tijdig contact opnemen met de examinator. Meer informatie over teamvorming kunt u vinden op de cursussite. Maak bij het vormen van een team met name afspraken over eventuele vakanties en andere belemmeringen bij het studietempo. De samen werking kan geheel op afstand gebeuren, door middel van e-mail en telefoon. U hoeft in principe dus geen rekening te houden met elkaars woonplaats.
Risico’s
Deze aanpak van werken in teams heeft naar onze mening grote voor delen, maar heeft ook risico’s. Tijdens de periode waarin de opdrachten moeten worden gemaakt, kunnen u of uw partner ziek worden of om
13
Design patterns
andere redenen achterop raken of zelfs afhaken. Ook kan het zijn dat de bijdragen van de partners niet evenwichtig zijn, vanwege verschillen in ervaring of geïnvesteerde tijd. In principe willen we dat u in eerste instantie deze zaken regelt met uw partner zelf, zowel door vooraf goede afspraken te maken, maar ook door tijdens de studie elkaar goed op de hoogte te houden van uw vorderingen of problemen daarbij. Alleen als u er samen echt niet uitkomt, kunt u contact opnemen met de examinator. 4.3
Planning
Eenmaal per jaar!
Om het vinden van een teamgenoot mogelijk te maken, wordt begelei ding voor deze cursus slechts eenmaal per jaar aangeboden en wel in de periode dat de cursus voor opleidingsstudenten is geprogrammeerd in het studiejaar.
Strakke planning
De duur van een begeleidingscyclus bedraagt ongeveer 10 weken en verloopt volgens een zeer strakke planning. Hierbij is per week vastgelegd welke hoofdstukken moeten worden bestudeerd, welke opdrachten moeten worden gedaan en wanneer deze uiterlijk moeten worden ingeleverd. U vindt alle gegevens betreffende de planning op de cursussite. Wij gaan ervan uit dat u zich goed aan deze planning houdt; mocht u in de problemen komen, dan dient u zo snel mogelijk contact op te nemen met de examinator. Er zal dan in overleg gezocht worden naar een oplossing.
Afwijken
Het is van groot belang dat u de bestudering van deze cursus goed inpast in uw studieplanning. Een advies van onze kant is om in de weken van het studiejaar waarin de begeleidingscyclus is gepland, ten minste 10 uur per week te reserveren voor deze cursus, om te garanderen dat u alles op tijd afkrijgt. Als u zich wilt indekken tegen het risico dat u, bijvoorbeeld door drukte op het werk, niet deze benodigde studietijd kunt besteden aan deze cursus tijdens de begeleidingscyclus, dan raden wij u dringend aan om al ruim voor deze cyclus de nodige tijd in de cursus te stoppen, bijvoorbeeld door het tekstboek en het werkboek alvast een keer grondig door te nemen. U voorkomt zo het risico dat u tussentijds moet afhaken en aldus een jaar moet wachten tot de volgende begeleidingscyclus. Het is in principe mogelijk om de cursus op een afwijkend tijdstip of met een afwijkende planning te doen. Voorwaarde is wel dat u een team genoot hebt die dezelfde tijd en dezelfde planning wil aanhouden. Neem in zo’n geval contact op met de examinator. 6
Cursusteam
Het werkboek is voor het overgrote deel geschreven door Sylvia Stuurman. Verder zijn bijdragen geleverd door Frank Wester en Manuela Witsiers. De auteurs zijn allen werkzaam bij de Open Universiteit Nederland. De twee toetsopdrachten zijn ontwikkeld door Sylvia Stuurman en Manuela Witsiers. De eindopdracht is voor een belangrijk deel ontwik keld door ervaren ontwikkelaars van het Software Engineering Research Centre (SERC): Mark van Elswijk, Marc Evers en Gert Florijn. Adviezen over de inhoud van de cursus en de opzet en inhoud van de opdrachten zijn gegeven door de extern referent Gert Florijn (SERC).
14