Designmönster (YRGO)

From Juneday education
Jump to: navigation, search

Contents

Kursen Designmönster

Kursen syftar till att ge en översikt över designmönster samt en närmare titt på ett par specifika mönster samt hur dessa kan implementeras i programmeringsspråket Java.

Kursen ingår som en delkurs på programmet Java Enterpriseutvecklare på ykreshögskolan YRGO.

Det är ett ganska högt tempo i kursen vilket ställer höga krav på deltagarna. Det är viktigt att läsa materialet (helst i förväg i den mån det finns färdigt material), se videoföreläsningarna samt arbeta på övningarna. Det finns begränsad tid till handledning (passen är cirka 3,5 timmar långa och en hel del tid kommer gå till teori) så det rekommenderas att bilda arbetsgrupper och arbeta tillsammans på övningar och laborationer. Samla eventuella frågor gemensamt så försöker vi vara effektiva när vi ses på lektionstillfällena.

OBS! Ju mer ni läser och ser videor i förväg, samt ju mer ni övar mellan passen, desto mer tid har vi till frågor och svar under lektionerna.

Vi har sammanlagt 24 timmar i klassrum utspritt på 7 tillfällen. Vi räknar med att ni får lägga minst lika mycket tid utanför schemalagda lektioner på teori och övningar.

Rekommenderad läsning

  • Head first design patterns
  • Design Patterns - Elements of reusable OOS (Välj en utgåva med Java-exempel)
  • Se även läshänvisningar i varje kapitels slut (längst ned på sidan)

"Kapitel" i Wiki-boken att läsa

Färdigt material

Kapitel Antal sidor Artefakter
Design patterns - introduction 6 pages (Text, Slides, Videos, Exercises Done!)
Object oriented principles 12 pages (Text, Slides, Videos, Exercises Done!)
Design patterns - Builder 11 pages (Text, Slides, Videos, Exercises Done!)
Design patterns - Singleton 5 pages (Text, Slides, Videos, Exercises Done!)
Design patterns - Exceptions patterns 3 pages (Text, Slides, Videos Done!)
Design patterns - Factory 6 pages (Text, Slides, Videos Done!)
Design patterns - Decorator 7 pages (Text, Slides, Videos, Exercises Done!)
Design patterns - Strategy 9 pages (Text, Slides, Exercises, Videos Done!)
Design patterns - Observer 16 pages (Text, Slides, Videos, Exercises Done!)

Download exam here

Preliminär planering och schema

V 45 heldag (förmiddag och eftermiddag) tisdag 7/11 - Intro + OO principles

Föreberedelser (första gången, så repetera detta efter lektionen!)

Läs:

Se:

Frågor för dagen

  • Vad är designmönster?
    • Ge ett exempel, då!
  • Vilka objektorienterade principer finns (översikt)
    • Vad är målet med dessa principer?
    • Hur kan designmönster hjälpa oss följa dessa principer?

Innehåll

V 46 eftermiddag tisdag 14/11 - Builders (3) and Singletons (4) Sal 334

Föreberedelser

Läs:

Se:

Frågor för dagen

  • Hur undviker vi konstruktorer med femtioelva parameter?
  • Hur låter vi ett objekt exportera sig till något format?
  • Hur låter vi ett objekt skapas från en komponent?
  • Hur gör vi om vi vill tvinga fram att bara en instans av en klass får existera?

Innehåll

  • 12.30 - 13.05 - Builder pattern
  • 13.15 - 14.00 - Builder - Bi-directional pattern
  • 14.15 - 15.00 - Singleton
  • 15.15 - 16.00 - Övningar (Ni kommer antagligen behöva fortsätta som "läxa"!)

V 47 eftermiddag tisdag 21/11 - Patterns for Exception handling (5) Sal 331

Föreberedelser

Läs:

Se:

  • Exceptions channel (Eng)
    • Slides PDF (18 sidor)

Frivillig videorepetition: Se frivillig läsning ovan!

Innehåll

V 48 eftermiddag tisdag 28/11 - Factory/Abstract Factory (6) Sal 440

Föreberedelser

Läs:

Se:

PDF:er:

  • Slides Simple Factory PDF (11 sidor)
  • Slides Factory Method PDF (8 sidor)
  • Slides Abstract Factory PDF (14 sidor)

Innehåll

V 49 eftermiddag tisdag 5/12 - Decorator (7) och composition (8) Sal 226

Föreberedelser

Läs:

Se:

  • Design patterns - Decorator channel (Eng)
    • Slides Decorator PDF (17 sidor)

Innehåll

  • 12.30 - 13.05 - Decorator
    • Slides Decorator PDF (17 sidor)
  • 13.15 - 14.00 - Övningar
  • 14.15 - 15.00 - Övningar
  • 15.15 - 16.00 - Övningar

V 50 eftermiddag tisdag 12/12 - Strategy(9) och Observer(10) Sal 226

Föreberedelser

Läs:

Se:

Innehåll

V 51 eftermiddag tisdag 19/12 - To be decided! Sal 226

Föreberedelser

Läs:

  • bla

Se:

  • blå

Innehåll

  • 12.30 - 13.05 -
  • 13.15 - 14.00 -
  • 14.15 - 15.00 -
  • 15.15 - 16.00 -


Schema 2016

2016-11-08 Kursintroduktion samt Vad är designpatterns (1)

2016-11-10 OO-principer(2)

  • Vilka objektorienterade principer finns (översikt)
  • Vad är målet med dessa principer?
  • Hur kan designmönster hjälpa oss följa dessa principer?

2016-11-15 Our first patterns - Builder (3) + Singleton (4)

  • Builder-mönstret
  • Singleton-mönstret

2016-11-17 Using exceptions while protecting tiers/reducing coupling (5)

2016-11-22 Factory/AbstractFactory (6)

  • Factory-mönstret simple factory
  • Factory-mönstret factory method
  • Factory-mönstret abstract factory

Slides och text är klar. Vi hoppas hinna spela in filmer måndag 21/11 och även lägga till övningar.

2016-11-24 Decorator(7) (and composition) (8)

  • Decorator-mönstret - en närmare titt på composition (som alternativ till arv)

2016-12-01 Strategy (9) (and Observer) (10)

  • Strategy-mönstret - abstrahera och inkapsla ett beteende
  • Observer - ett mönster för att prenumerera på uppdateringar om händelser

Extra Lectures 2017 (for the 2016 course)

Dessa tre dagar handlar om att analysera, designa och implementera ett spel. Det kommer ges ut UML och javadoc för en föreslagen design i tre Sprint:ar. Det är roligast om ni försöker själva att skriva koden, men för varje Sprint kommer vi ge ut kod för sprinten innan så att alla har samma möjlighet att bygga vidare i nästa Sprint.

Ni väljer själva hur mycket ni vill tjuvkika (sneak-peek) på kod osv i förväg.

Den första uppgiften är att läsa en specifikation för spelet (som skall ha delats ut i förväg om allt gått vår väg) och fundera kring hur ni skulle kunna skriva detta spel med de uppgifter ni får i specifikationen. Varning: Specifikationer är inte alltid så välskrivna.

Hur har denna extraundervisning med designmönster att göra? Utan objektorienterad analys och design, så har man inte mycket nytta av designmönster. Vi lägger här fokus på hur vi kan analysera ett spel för att ta fram, i tre steg, designen för ett spel med objektorienterad programmering. Vi kommer beröra objektorienterade principer och vissa designmönster i ett program som är lite större än de exempel som givits i originalkursen Designmönster. Poängen är att ni ska få se hur ett större program växer fram, hur man itererar fram en design och dess implementation i tre steg. Ju mer vi tänker kring systemet, desto mer objektorienterade kan vi vara. Det innebär naturligtvis att vi kommer komma fram till nya beslut som kräver att ni skriver om tidigare versioner.

Vi kommer att arbeta mycket med interface (och så småningom även abstrakta klasser) och använda oss av designmönster som (en version av) Strategy, Singleton och liknande. En princip som vi tittar extra på är Law of Demeter.

Tanken är att ni ska få vara med och ta fram ett fullt fungerande spel i en iterativ process (även om det blott är tre Sprint:ar) och lära er hur man kan tänka objektorienterat, använda UML samt se hur man ofta måste ändra såväl specifikation, design som kod allteftersom man kommer närmare slutprodukten. Vi hoppas ni kommer gilla denna mini-kurs!

Förberedelse

  • Repetera
    • Design patterns - Strategy
    • Java interfaces
    • Java Abstract classes
    • Java inheritance
    • Java Map, List interfaces
    • Lambda expressions
    • Java anonymous inner classes
    • UML (om ni har någon källa att repetera - annars, don't worry - vi går igenom grunderna)
    • Java Exceptions - inlkusive skillnad Runtime/Checked samt skriva egna exceptions
  • Ladda hem och läs specen för spelet vi skall jobba med.
    • tänk lite på hur ni skulle implementera spelet
    • anteckna eventuella brister i specifikationen.

2017-05-31 Introduction och Sprint 1

OBS! Titta helst inte i förväg på github - följ med i föreläsningen först (men ni väljer själva hur mycket dramatik ni vill ha).

Videofilmer

Innehåll för dagen - Kl. 9-12

2017-06-01 - Sprint 2

Videos


Java - Cave Game Sprint 2 (Vimeo channel, English)

Innehåll under lektionerna

Kl. 12-16

  • Analys av sprint 1
  • Ni får länk till github för lösning med Room/Player/Thing osv för dem som inte hann klart
  • Hur går vi vidare?
    • Ska Player få gå i en riktning där det inte finns ett Room?
      • Hittills har vi sagt att vi kastar ett runtimeexception (illegal argument)
      • Detta kan dock GUI-utvecklarna skita i!
      • Hur tvingar vi GUI-utvecklarna att tänka på detta?
    • Regler för att plocka upp saker
      • Vad är en regel för saker, egentligen?
    • Var ska vi lagra alla regler?
      • Hur lagras regler vanligtvis i verkligheten och i spel?
    • Vem ska ha ansvar för vilka metoder? Ska GUI behöva känna till Room?
      • OO-princip - Law of Demeter (att komma ihåg)
  • Sprint 2
  • Specifikation för Sprint 2 Sprint 2 Specification
    • Vi tar fram ett UML-förslag på hur vi kan designa klasserna för
      • Sakregler
      • Regel-samling
      • Hantera att Player försöker gå i illegal riktning
      • Nya ansvar för klasserna - Nya metoder i Player - Nu måste vi ändra i GUI också eftersom Player ändrats t ex

Föreläsningar och presentationer under dagen

Ni försöker implementera Sprint 2 själva till nästa dag.

2017-06-02 - Sprint 3

Videos

Innehåll under dagen

Kl. 9-12

  • Föreberedelser - Abstract classes - Tutorial at Oracle - Abstract classes
  • Analys av sprint 2 - Vi repetera det nya och ändringar vi var tvugna att göra i t ex GUI
  • Hur går vi vidare? - Specialrummen med Snake och Dragon
  • Sprint 3 - Vi tar fram UML för rumsreglerna
    • RoomRule - JavaDoc?
    • RuleBook - förändringar och tillägg (lagra och hämta RoomRules - default rule för de flesta rum!)
    • Refactoring av Player och Room? - När ska RoomRule:s kontrolleras?
    • Ny version av Cave Initializer som lägger till RoomRule:s i RuleBook (lärarna ger er)
  • Sammanfattning vi sammanfattar analys och design från sprint 1-3

Föreläsningar och presentationer under dagen

TODO

  • Fix the rule for the Pirate Chest Room (250) so that when you win, it says "You Won!" and all doors close
    • Hint: When have you won? The objective is to be able to pick up the chest (requires all keys), but when have you won?
  • Fix the death rooms (see "analyzing the old specification"):
    • Set the description to "You are dead, game over, man!" and close all doors
  • Challenges:
    • Portals - make a room's exit transport you to the first room
    • Sounds - make the Bird sing - Perhaps louder and louder, the closer you are to it? (how to decide proximity?)
    • Play a triumphant sound when the chest is picked upp and the user wins
    • Play Chopin's death march when the player "dies"
    • Add a menu for saving and loading games - See Serializable - what is the game "state"? What classes/objects must be saved?