Göm menyn

TDDC74 Programmering: Abstraktion och modellering

Project

Abstraktioner

Abstraktioner som ni säkert har koll på vid det här laget är viktigt i Scheme, och andra liknande språk.

De gör livet lättare av ett par anledningar

  • Ni slipper ändra på många ställen i er kod om ni vill ändra något i en funktion eller en datatyp.
  • Koden blir lättare att läsa, procedurnamn som är förklarande gör livet mycket lättare för både er och andra.
  • Koden blir MYCKET lättare att felsöka.

    Låt exempelvis säga att man märker att fel uppstår när man försöker placera en pjäs på en viss upptagen plats på brädet. Detta kan uppstå på grund av fel i inmatningen, i spelmekaniken, eller någon annan stans. Då är det en fördel om koden innehåller rader som ((place-free? row col board) ...) snarare än långa oläsliga uttryck med car och cdr. Dessutom riskerar car-cdr-kedjan i sig att vara en felkälla, om man ändrat något någon annan stans i koden.

  • Ni som siktar på högre betyg måste dessutom ha väl genomtänkta och uppdelade abstraktioner.

Kommentering

Först i varje kod-fil skall det finnas ett s.k kodhuvud där ni berättar följande:

  • Syfte med filen
  • Vilka/vem som skrivit den
  • Senaste ändring och datum.

Alla större procedurer skall kommenteras med följande:

  • Beskrivning, vad proceduren gör
  • Indatatyper
  • Utdatatyper

För mindre procedurer där det är uppenbart vad de gör, behövs inte detta.

Exempel: add-to-db: flight x databas -> databas (indata är en flight och en databas, utdata är en databas).

Som tumregel: skriv inte kommentarer inuti definitioner. Om ni gör det, skriv kommentar på egen rad, och beskriv exv en grupp av fall (modell ;; Databasen behöver uppdateras).

Det ska gå att läsa annat ur koden. För att hårdra det lite: man ska skriva (if (place-taken? row col board) ...), snarare än ett uttryck i stil med (if (assq (cons x y) b) ...) följt av den förklarande kommentaren ";; om platsen är upptagen så ska vi inte göra något, annars så måste vi consa på den och...".


Sidansvarig: Anders Märak Leffler
Senast uppdaterad: 2014-03-24