Övningar

Övningar

Under övningspassen kommer ni arbeta i grupp med att lösa problem, som vi sen diskuterar i grupp. Syftet är att väcka tankar och funderingar kring de principer och mönster vi sen diskuterar på efterföljande föreläsning.

Övningstillfällena är viktigare än föreläsningarna för ditt lärande!

Vid övningspassen är i olika salar, tiderna och sal hittar ni på TimeEdit.

Övningsuppgifter

Övningarna kommer länkas här under kursens gång.

Övning 1-1 DrawPolygons

Övning 1-2 UML

Övning 2-1: Dynamic binding

Kod (zippat IntelliJ-projekt).

Övning 2-2: Subclassing vs Delegation

Implementera följande tre scenarier, dels med subclassing, dels med delegering:

Diskutera för varje scenario för- och nackdelar med subclassing vs delegering. Bör subclassing användas?

Övning 3-1: Subtyping och Variance

Utgå från DrawPolygons som tidigare.

Övning 3-2: Generics

Börja från koden som finns att ladda ner här.

Övning 4-1: High cohesion, Low coupling

Börja från koden som finns att ladda ner här.

Övning 4-2: Separation of Concern

Börja från koden som finns att ladda ner här.

Övning 5-1: Factory Method

Börja från koden som finns att ladda ner här.

Övning 5-2: Model-View-Controller

Börja från koden som finns att ladda ner här.

Övning 6-1: Immutability

Börja från koden som finns att ladda ner här.

Övning 6-2: Fler Design Patterns

Börja från koden som finns att ladda ner här.

  1. Rita ett UML-diagram över det nya paketet tda551.polygon.
    • För mer utmaning, inkludera även resten av filerna i paketet tda551.
    • Ni behöver inte inkludera beroenden på filer som ligger utanför paketet, e.g. JComponent eller Point.
  2. Identifiera de design patterns som används (inklusive i implementations-övningen nedan). Vissa har ni sett förut, några är nya.
  3. Implementera metoderna translate, scale och rotate i de klasser som ännu inte implementerar dessa.
    • Hint: Varje implementation kommer, korrekt gjord, bestå av högst två statements.
    • Specifikationen är som följer:
      1. En polygon representeras av en sekvens av nestade objekt, där varje objekt i kedjan representerar en specifik aspekt av polygonen.
      2. En polygon initieras till en uppsättning punkter i en BasePolygon.
      3. Om den därefter e.g. roteras hanteras detta av RotatePolygon, etc.
      4. En polygon ska bara ha en rotation (etc) – roteras polygonen flera gånger ska dess RotatePolygon-objekt uppdateras.
  4. För mer utmaning: Implementera en ny klass PolygonGroup som representerar en grupp av polygoner. Gör det möjligt att applicera e.g. rotation på hela gruppen. Vissa förändringar av existerande kod och struktur är nödvändiga.

Övning 7-1: Trådar

Börja från koden som finns att ladda ner här.

Menu