Gå til hovedindhold

TuT Javaklasser

Tech uden Tech øvelser - Denne artikel er en del af en serie.
Del 3: Denne artikel

Læringsmål
#

De studerende kan efter aktiviteten:

  • Identificere de strukturelle elementer i en Java-klasse (felter, konstruktør, metoder)
  • Skelne mellem kode der hører hjemme i en klasse og kode der ikke gør
  • Forklare hvad der skal til for at kode “kompilerer”
  • Forklare klassens semantik

Forudsætninger
#

De studerende forventes at kende til:

  • Grundlæggende Java-syntaks (semikolon, parenteser, krølleparenteser, parametre, variable, datatyper mv.)
  • Begrebet “klasse” på konceptniveau

Kort beskrivelse
#

Kode fra en eller flere Java-klasser er printet og klippet i stykker.

De to klasser der bruges er Dish og Restaurant, hvor Restaurant indeholder en ArrayList<Dish> — og dermed introducerer komposition som sidebemærkning. Dette kan dog udelades.

I første runde skal grupperne samle koden til Restaurant så den “kompilerer” (men uden ArrayList<Dish>). I anden runde får de en pose med Dish som også indeholder distraktorer (overflødige eller forkerte elementer) og skal igen samle en gyldig klasse — nu med det ekstra kognitive krav at vurdere hvad der ikke hører til. Til sidst kan de få Restaurant igen men nu med ArrayList<Dish> for at koble komposition på.

Faglig kontekst
#

  • Semester/fag: 1. semester, objektorienteret programmering
  • Holdstørrelse: Skalerer til store hold
  • Organisering: Grupper

Trin-for-trin
#

  1. Underviseren introducerer aktiviteten og forklarer hvad “kompilerer” betyder i denne sammenhæng.
  2. Grupperne får en kuvert med kodestykker fra én klasse og skal lægge dem i den rigtige rækkefølge.
  3. Fælles gennemgang: hvad valgte I, og hvorfor?
  4. Grupperne får en ny pose med klasse og distraktorer. De skal nu vælge de stykker der hører til og lægge dem i rækkefølge.
  5. Diskussion: hvilke stykker kasserede I, og hvad afslørede det om klassen?

Materialer
#

  • Javaklasser.pdfDish og Restaurant-klasserne, klar til print og klipning (stor skrift, store mellemrum mellem ordene)
  • Kuverter eller poser til kodebrikkerne

Tidsforbrug
#

Kan afvikles på 45 min. inkl. introduktion og fælles opsamling.

Modtagelse
#

De studerende gik til opgaven med stort engagement og var selv overraskede over at de formåede at lægge koden korrekt op. Øvelsen understregede for dem at de godt kunne forstå kode og bygge en klasse, når de ikke blev distraheret af at stave forkert og få røde streger fra kompileren.

Udvidelser
#

  • Tilføj en tredje klasse der bruger Dish og Restaurant — introducerer komposition eksplicit
  • Lav en version med metoder der har returværdier af forkert type (type mismatch)
  • Brug samme aktivitet til at introducere arv: giv grupperne en FancyDish extends Dish-klasse og lad dem diskutere hvad der arves

Noter til underviseren
#

Dish-klassen indeholder bevidste distraktorer allerede i originalfilen:

  • public static int wheels — et felt der ikke giver semantisk mening i en Dish-klasse
  • setOwner(String spoon) — metode med misvisende parameternavn
  • String s = "Spaghetti" inde i konstruktøren — en lokal variabel der ikke bruges

Disse kan bruges som udgangspunkt for diskussion om navngivning og kohæsion, selv inden distraktorrunden.

Puslespillet samles
Tech uden Tech øvelser - Denne artikel er en del af en serie.
Del 3: Denne artikel