Nada

2D1358 OOPK period 4 99/00 för B,F,I,K,L,M,T,V

^ Upp till kursens webbsida.

Information kommer att lämnas under kursens gång genom kursens webbsidor. Ta för vana att titta på dessa då och då. Rättelser till laborationer, schemaändringar, svar på vanliga frågor etc kommer att läggas in på dessa sidor.

Senaste nytt (14 december 2000)

Tryck här för att hämta bokningslistor:

Tidigare nytt

Information på denna sida

Information på separata sidor


Antagning och kursanmälan

Denna kursomgång går i period 4, 2000, och är öppen för alla program.

Reglerna för vem som får följa olika kurser på KTH har skärpts fr.o.m. hösten 1998. Från och med hösten 1998 gäller att endast de teknologer som delfakulteten lagt in i Ladok som studerande på en kurs kan godkännas på kursen. Vill du läsa en kurs som inte är obligatorisk för dig, måste du alltså först välja kursen vid ditt fakultetskansli som ska godkänna ditt val.

För att få gå denna kurs måste du som följer ett civilingenjörsprogram antas till kursen av ditt delfakultetskansli. Kansliet registrerar dig i Ladok som elev på kursen och meddelar kursledaren. Eftersom denna registrering ibland kan fallera eller släpa efter får du i början av kursen redovisa laborationer även om du ännu inte finns med i Ladok. Notera dock att om du inte är antagen till kursen kan inget slutbetyget rapporteras. Är du osäker på om du har antagits till kursen bör du därför snarast vända dig till ditt delfakultetskansli.

Doktorander på NADA och institutioner med vilka NADA har avtal om ömsesidigt utbyte (t.ex. Matematik, Mekanik) ska meddela Ann Bengtsson, ann@nada.kth.se. Övriga doktorander måste fylla i en särskild blankett och skicka den till kursledaren före kursstart.

Förutom detta ska du anmäla dig till kursen så snart som möjligt efter kursstart. Det kan du göra elektroniskt. Då vet vi vilka som verkligen tänker gå kursen, och vi får alla personuppgifter direkt från källan. Efter anmälan kommer du automatiskt med på alla labresultatlistor.

Kurskrav

Kursen består av två kursmoment, LAB1 (3 poäng) och LAB2 (1 poäng). LAB1 omfattar två obligatoriska laborationer samt en frivillig introduktionslaboration. LAB2 består av en lite större uppgift. Laborationerna löses i grupper om högst tre personer och redovisas i terminalsal på särskilda tider. Det finns ingen tentamen i kursen. Är du godkänd endast på de tre obligatoriska laborationerna får du betyget 3. För att få högre betyg måste du lösa extra uppgifter som tar upp fler aspekter av kursens innehåll.

Laborationerna måste redovisas senast i omtentamensperioden januari 2001. Det finns ingen garanti för att du kommer att få tillgodoräkna dig enstaka laborationer när nästa års kurs har börjat. Däremot har du rätt att tillgodoräkna dig hela, avklarade kursmoment (dvs LAB1 och LAB2).

Mer information finns under avsnittet laborationer nedan.

Kurslitteratur

Detta är en kurs i objektorienterad programkonstruktion, inte primärt en kurs i C++. Det är dock oundvikligt att C++ tar upp en betydande del av kursen, och det har visat sig vara mycket svårt att göra laborationer utan att ha en bra, utförlig och modern bok i C++. Vi rekommenderar därför att man skaffar en av dessa böcker: Stroustrups bok är mycket koncis, men mer avancerad än Lippman och innehåller färre exempel.

Kursen handlar förutom C++ också om mönster (patterns), UML och objektorienterad analys och design. Detta kommer att gås igenom på föreläsningar och övningar; lite material finns även i kursbunten eller kommer att delas ut. För den som vill ha riktiga böcker som täcker detta ordentligt rekommenderas

Kursbunt

Kursbunten finns att köpa på NADA:s expedition för 30 kronor. Den innehåller Den som köpt kursbunten kommer också att få kopior av föreläsningsanteckningarna under kursens gång.

Föreläsare, handledare och examinator

Kursledare är Björn Sjögreen, bjorns@nada.kth.se. Lämpligaste sättet att komma i kontakt med kursledaren är att skicka datorpost. Det går också bra att lägga en lapp i kursledarens postfack på Nada, eller att skicka ett vanligt brev till kursledaren på addressen NADA, KTH, 100 44 Stockholm. Vill du träffa kursledaren personligen går det bra på tisdagseftermiddagar. Adressen är rum 4518 på Nada.

De fyra övningsgrupperna leds av

  1. Mattias Lindström, mattiasl@nada.kth.se
  2. Peter Nillius, nillius@nada.kth.se
  3. Mikael Rosbacke, rosbacke@nada.kth.se
  4. Björn Sjögreen, bjorns@nada.kth.se

Formell examinator på denna kurs är Yngve Sundblad, yngve@nada.kth.se. Examinatorn har det yttersta ansvaret för examinationen på kursen. Vänd dig dock med eventuella klagomål till kursledaren i första hand.

Synpunkter på kursen

Vi är tacksamma för synpunkter på kursen, både under kursens gång och efteråt. En datorstödd kursutvärdering kommer att göras. Synpunkter kan lämnas till övningsledarna eller till kursledaren.

Laborationer

Kursmodul

Innan du börjar arbeta med laborationerna bör du ladda kursens modulfil. Modulfilen kommer att laddas automatiskt vid varje inloggning om du en gång ger kommandot
        course join oopk-f00
Du kan behöva logga ut och logga in igen, efter att ha gett kommandot. Modulfilen definierar bl.a. omgivningsvariabeln $OOPKHOME.

Beskrivning

  1. Introduktion

    Frivillig. Detta är en kom-igång-laboration som inte ska redovisas och som inte är betygshöjande. Jag rekommenderar dock bestämt att du gör den. Det kommer att bespara dig tid senare i kursen. Passa på att fråga övningsledare och laborationshandledare mycket. De har bättre med tid i början av kursen.

  2. Menyhantering

    Obligatorisk. Laborationen tar framför allt upp arv och polymorfism.

  3. Grafiskt ritverktyg

    Obligatorisk. Utifrån ett enkelt fönstersystem ska du bygga ett ritverktyg. Laborationen tar upp klassbibliotek, fönsterprogrammering och s.k. mönster (patterns).

  4. Fiaspel

    Obligatorisk. I denna laboration ska du analysera och objektmodellera spelet Fia i UML. Från modellen ska du sedan implementera ett program som ritar ut spelplanen på skärmen, flyttar pjäser och ser till att spelreglerna upprätthålls.

  5. Hantering av väljare

    Frivillig och betygshöjande. Ett programs beteende kan man påverka genom att specificerar en eller flera s.k. väljare, eventuellt med tillhörande argument. Ett exempel är -l till programmet ls. Du ska skapa ett litet objektorienterat system som automatiskt tar hand om sådana väljarna och deras argument och som är bekvämt att använda för en programmerare.

  6. Verktygslåda för fönsterprogrammering (toolkit)

    Frivillig och betygshöjande. Till fönstersystemet från laboration 3 ska du skapa ett objektbibliotek för fönsterprogrammering. Biblioteket ska innehålla objekt som ofta förekommer i grafiska gränssnitt, såsom knappar, menyer, och rullningslister (scrollbars), och vara dokumenterat i UML. Laborationen tar upp klassbibliotek, fönsterprogrammering, designmönster och UML.

  7. Äventyrsspel

    Frivillig och betygshöjande. I ett äventyrsspel rör man sig i en okänd värld full av faror. Man måste ta hjälp av olika föremål och ledtrådar man hittar på vägen. Denna laboration går ut på att designa och implementera ett sådant spel, komplett med grafik (enkel grafik, inte 3D-grafik).

Betygssättning

Är du godkänd på laboration 2, 3 och 4 är du också godkänd på kursen med betyget 3. Gör du dessutom laboration 5 och 6 blir betyget 4. För betyg 5 måste även laboration 7 göras. Du måste ha fått de obligatoriska laborationerna godkända innan du kan redovisa de betygshöjande.

Genomförande, tillåtet och otillåtet samarbete

Uppgifterna får lösas individuellt eller i grupper om högst tre personer. All examinering sker dock individuellt, d.v.s. eleverna bedöms alltid var för sig. Det kan mycket väl hända att en av personerna i en grupp blir underkänd på en laboration, medan de andra blir godkända. Läraren kan välja att ställa frågor omväxlande till gruppens medlemmar eller att examinera varje elev enskilt. Du måste alltså vara beredd att själv redogöra för allt som rör laborationen, inklusive praktiska saker som var filer ligger och hur program startas.

Diskussion av uppgifter och lösningar mellan grupper är tillåten men direkt kopiering av programkod eller UML-ritningar betraktas som fusk. All redovisad programkod kommer att registreras elektroniskt och lösningarna kommer att jämföras med varandra i efterhand. Det är därför viktigt att du aldrig gör din kod läsbar för andra än dina laborationskamrater. Lämna inte heller utskrifter vid skrivarna. Ta med dig alla utskrifter och släng dem någon annanstans. Kopierar någon din kod kan du få svårt att visa att det verkligen är du som har skrivit den. Detta ska dock inte hindra dig från att diskutera olika tänkbara lösningar med andra eller att ge och ta emot tips om enskilda konstruktioner och kodavsnitt. Får du hjälp med bitar av laborationen av andra än dina laborationskamrater, redovisa det öppet, t.ex. genom att notera det i koden. Det hjälper oss att snabbt avskriva misstankar om fusk när systemet upptäcker likheter mellan inlämnade lösningar.

Redovisning

Laborationerna redovisas under labbtimmarna, samt om det behövs även på extratider under kursens gång. Därefter tas redovisningar emot endast på vissa tider i omtentamensperioderna (mars, augusti, januari), fram tills dess nästa kursomgång för B,F,I,K,L,M,T,V startar. Laborationerna måste alltså redovisas senast i omtentamensperioden januari 2001.

Eftersom denna kurs inte har någon tentamen kan kraven på redovisningen av laborationerna vara hårdare än vad du kanske är van vid från andra kurser. Vid redovisning ska du kunna redogöra i detalj för hela lösningen, inklusive datastrukturer, in- och utgångsvillkor hos funktioner, och eventuella UML-modeller. Inlämnad programkod ska vara välstrukturerad och dokumenterad; det räcker inte med att den fungerar. Kursbunten innehåller vissa grundläggande krav på programstruktur, programkodlayout och kommentering. Ta del av dessa.

Redovisad programkod kommer att registreras, oavsett om du blir godkänd eller ej. Därför måste all programkod finnas tillgänglig på maskinläsbar form på UNIX-systemet vid redovisningen (gör dock inte koden allmänt läsbar, se ovan). Programkoden skall dessutom finnas tillgänglig på papper, annars får läraren ingen överblick och redovisningen tar då mycket längre tid. Eventuell annan pappersdokumentation (t.ex. UML-diagram där sådana krävs) ska läraren kunna ta med sig. Gör kopior om du vill ha kvar originalet.

Rapportering av godkända laborationer till betygsdatasystemet ska normalt ske automatiskt. För varje kursomgång registreras dock hundratals laborationer, och enstaka missar är oundvikliga. Varje elev måste därför se till att få laborationskvittot påskrivet av läraren som tar emot redovisningen. Kvittot ska fyllas i med bläck och ni måste kunna visa legitimation. Vid första redovisningen ska dessutom kvitto på kåravgiften uppvisas, precis som vid en vanlig tentamen. Spara kvittot tills kursen är godkänd och du ser att slutbetyget har registrerats i ditt betygsutdrag.

Anmälan till laborationsredovisning

För att vara säker på att få redovisa ska du skriva upp dig på den elektroniska anmälningslistan. Det finns en lista för de flesta laborationstider. I början av kursen är antalet redovisningar litet, och det går bra att redovisa utan tidigare anmälan. Anmälningslistor för laborationsredovisning kommer att börja användas då det behövs. Assistenterna kommer att följa dessa listor och ropa upp namnen i den ordning eleverna har anmält sig. Vi kan tyvärr inte exakt specificera när det blir din tur: Olika laborationer tar olika långt tid att redovisa, en del personer som skrivit upp sig på listan dyker aldrig upp, och antalet assistenter kan variera. I regel finns dock 2-3 assistenter som tar emot redovisningar på varje tid och varje assistent klarar av ca 4-5 redovisningar per timme.
Tryck här för att hämta bokningslistor:
Du kan redovisa flera laborationer vid samma tillfälle, men du måste göra en bokning för varje. Det går inte att anmäla sig elektroniskt efter kl 18 dagen före redovisningen. Anledningen till detta är dels att assistenterna måste kunna dra ut listan i god tid kvällen före, dels att kursledaren måste få tid att fördela assistenterna mellan olika hårt belastade redovisningstillfällen. Är du sent ute kan du chansa på att komma oanmäld till redovisningstillfället. Skriv då till ditt namn på assistentens lista så tar han/hon emot din redovisning i mån av tid.

Vid varje schemalagt redovisningstillfälle finns också ett antal handledare som kan hjälpa dig med laborationerna och svara på frågor. Oftast organiserar de en kölista på tavlan i terminalsalen. Skriv upp dig på den listan endast om du vill ha hjälp.

Föreläsningsplan

Kursen består av två huvuddelar: objektorienterad modellering samt programmering med C++. Efter en kort introduktion börjar vi direkt med programmeringsdelen, eftersom kursen annars skulle bli väldigt abstrakt. Fokus kommer sedan att växla till design och mönster (patterns), d.v.s. hur objekt typiskt samverkar med varandra för att lösa en uppgift. Senare i kursen kommer problemanalys och modellering att tas upp. Ett grafiskt språk för att beskriva system, UML, kommer att gås igenom.

Preliminär föreläsningsplan:

  1. Kursinformation.
    Introduktion till objektorienterad programmering.

  2. Introduktion till C++, jämförelse med C.
    Grundläggande mekanismer.

  3. Klasser.
    Gränssnitt, åtkomlighet.
    Typkonvertering.

  4. Standardbiblioteket.
    Behållare och iteratorer.
    Vektorer, listor, textsträngar.
    Kompilering, länkning, avlusning.

  5. Resursallokering, speciellt minnesallokering.
    Destruktion, kopiering, tilldelning.
    Minneshanteringsfel.

  6. Arv, klasshierarkier.
    Polymorfism, virtuella funktioner.

  7. UML (Unified Modelling Language).
    Klass- och objektdiagram, associationer och multiplicitet.

  8. Mönster (design patterns).

  9. Mer om mönster.
    Grafikpaketet Grain (för lab 3 och 4).

  10. Dynamiska modellen i UML.
    Tillståndsdiagram.

  11. Abstrakta basklasser.
    Multipelt arv.
    Privat arv, Delegering, Typ kontra klass, Interfaces.

  12. Felhantering.
    Undantagshantering (exceptions).

Övningarnas ungefärliga innehåll

Övningarnas innehåll är till stor del beroende av vad de enskilda övningsassistenterna vill ta upp, men följande lista ger en indikation av vad de olika övningarna kan komma att innehålla.
  1. Några enkla program och klasser i C++: ordräkning, ordfrekvenser, datumklass.
  2. Hur man skriver en containerklass med interatorer. Båtuthyrningsexempel: ett exempel på att hur man representerar data i ett program påverkar dess flexibilitet.
  3. Virtuella funktioner: evaluering av aritmetiska uttryck och simulator för logiska kretsar.
  4. Programmering med Grain.
  5. Den statiska modellen i UML.
  6. Den dynamiska modellen i UML.
  7. Mönster (design patterns), speciellt observer.
  8. Exceptions.

Schema

v11 Mån 13/3 Tis 14/3 Ons 15/3 Tor 16/3 Fre 17/3
10:00F Objori
Q1
11:00F Objori
E1
12:00
13:00
14:00F Objori
E1
15:00
16:00F Objori
Q1
17:00
v12 Mån 20/3 Tis 21/3 Ons 22/3 Tor 23/3 Fre 24/3
10:00Ö Objori
E31, 35, 51-52
11:00F Objori
Q1
12:00
13:00Ö Objori
F11, F31, 34, 41
14:00
15:00
16:00F Objori
Q1
17:00
v13 Mån 27/3 Tis 28/3 Ons 29/3 Tor 30/3 Fre 31/3
8:00DL Objori
Orange, Röd
gr 1
9:00F Objori
D1
10:00DL Objori
Orange, Röd
gr 2
Ö Objori
E31, 35, 51-52
11:00DL Objori
Orange
gr 1
Ö Objori
D34, E31, F31, 34
12:00
13:00DL Objori
Orange, Röd
gr 2
14:00DL Objori
Orange, Röd
gr 1
15:00
16:00F Objori
Q1
17:00DL Objori
Röd
gr 1
18:00
v14 Mån 3/4 Tis 4/4 Ons 5/4 Tor 6/4 Fre 7/4
9:00F Objori
D1
10:00DL Objori
Orange, Röd
gr 2
Ö Objori
E31, 35, 51-52
11:00DL Objori
Orange, Röd
gr 1
Ö Objori
D34, E31, F31, 34
12:00
13:00DL Objori
Orange, Röd
gr 2
14:00DL Objori
Orange, Röd
gr 1
15:00
16:00F Objori
Q1
17:00
v15 Mån 10/4 Tis 11/4 Ons 12/4 Tor 13/4 Fre 14/4
9:00F Objori
D1
10:00DL Objori
Orange, Röd
gr 2
Ö Objori
E31, 35, 51-52
11:00DL Objori
Orange, Röd
gr 1
Ö Objori
D34, E31, F31, 34
12:00
13:00DL Objori
Orange, Röd
gr 2
14:00DL Objori
Orange, Röd
gr 1
15:00
16:00F Objori
Q1
17:00
v19 Mån 8/5 Tis 9/5 Ons 10/5 Tor 11/5 Fre 12/5
10:00DL Objori
Orange, Röd
gr 2
11:00DL Objori
Orange, Röd
gr 1
12:00
13:00DL Objori
Orange, Röd
gr 2
14:00DL Objori
Orange, Röd
gr 1
15:00
16:00F Objori
Q1
17:00
v20 Mån 15/5 Tis 16/5 Ons 17/5 Tor 18/5 Fre 19/5
8:00DL Objori
Orange, Röd
gr 1
DL Objori
Orange, Röd
gr 1
9:00
10:00DL Objori
Orange, Röd
gr 2
DL Objori
Orange, Röd
gr 2
DL Objori
Orange, Röd
gr 2
11:00
12:00
13:00
14:00
15:00
16:00F Objori
Q1
17:00

^ Upp till kursens webbsida.


Sidansvarig: <bjorns@nada.kth.se>
Senast ändrad 14 december 2000
Tekniskt stöd: <webmaster@nada.kth.se>