Nada

2D1358 OOPK period 4 00/01 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.

Latest News ( March 17th, 2003)

Tidigare nytt

Information på denna sida

Information på separata sidor


Antagning och kursanmälan

Denna kursomgång går i period 4, 2001, 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 (for more information see Doktorand som läser teknologkurs vid Nada).

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 2002. 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. För den som vill ha riktiga böcker som täcker detta ordentligt rekommenderas

Föreläsare, handledare och examinator

Kursledare är Frank Hoffmann, hoffmann@nada.kth.se. Lämpligaste sättet att komma i kontakt med kursledaren är att skicka datorpost. Vill du träffa kursledaren personligen går det också.. Adressen är rum 12.4 på CVAP/NADA.

De fyra övningsgrupperna leds av

  1. Danica Kragic, danik@nada.kth.se
  2. Anders Orebäck, oreback@nada.kth.se
  3. Mikael Rosbacke, rosbacke@nada.kth.se
  4. Peter Raicevic, peterr@nada.kth.se

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

Här finns dessutom en PostScript-version av programmeringsreglerna för laborationerna.

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 oopk01
Du kan behöva logga ut och logga in igen, efter att ha gett kommandot. Modulfilen definierar bl.a. omgivningsvariabeln $OOPKHOME.

Beskrivning

  1. Introduktion
    lab exam 1
    lab exam 1 (English)
    lab exam 1 (PDF)
    lab exam 1 (PDF) (English)

    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
    due 4/5/2001
    lab exam 2
    lab exam 2 (English)
    lab exam 2 (PDF)
    lab exam 2 (PDF) (English)

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

  3. Grafiskt ritverktyg
    due 18/5/2001
    lab exam 3
    lab exam 3 (English)
    lab exam 3 (PDF)
    lab exam 3 (PDF) (English)

    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
    due 25/5/2001
    lab exam 4
    lab exam 4 (English)
    lab exam 4 (PDF)
    lab exam 4 (PDF) (English)

    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
    due 1/6/2001
    lab exam 5
    lab exam 5 (PDF)

    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)
    due 1/6/2001
    lab exam 6
    lab exam 6 (PDF)

    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
    due 1/6/2001
    lab exam 7
    lab exam 7(PDF)

    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.

kvitto för godkända laborationer

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 augusti 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.
    Powerpoint file lecture 1
    PDF file lecture 1

  2. Introduction to C++.
    C++ Basics, data types, variables, operators, functions
    Powerpoint file lecture 2
    PDF file lecture 2

  3. Klasser.
    Classes, objects, constructor, destructor.
    Reading: Powerpoint file lecture 3
    PDF file lecture 3

  4. Operator overloading and templates.
    Operator overloading, friend function and classes, templates
    Powerpoint file lecture 4
    PDF file lecture 4

  5. Standard template library.
    containers, iterators, algorithms
    Powerpoint file lecture 5
    PDF file lecture 5
    Standard template library quick reference
    Standard template library documentation

  6. Pointers
    pointers, pointers and arrays, dynamic memory allocation, new and delete
    Powerpoint file lecture 6
    PDF file lecture 6

  7. Inheritance
    Inheritance, access specifiers, virtual functions Powerpoint file lecture 7
    PDF file lecture 7

  8. Abstract Classes
    Abstract classes, pure virtual functions Powerpoint file lecture 8
    PDF file lecture 8

  9. I/O streams
    streams, file I/O, exception handling Powerpoint file lecture 9
    PDF file lecture 9

  10. Grain, UML (Unified Modelling Language)
    Grain package, UML static model, class and object diagrams, associations, aggregation, composition, generalization.
    Powerpoint file lecture 10
    PDF file lecture 10

  11. Design Patterns
    Design Patterns, Composite Pattern Powerpoint file lecture 11
    PDF file lecture 11

  12. Design Patterns / UML
    Observer Pattern, UML use case and sequence diagrams Powerpoint file lecture 12
    PDF file lecture 12

  13. Design Patterns / UML
    UML statechart diagrams, Mediator pattern Powerpoint file lecture 13
    PDF file lecture 13

  • Design Patterns / UML
    Singleton pattern, fiagame, course analysis Powerpoint file lecture 14
    PDF file lecture 14

    Ö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 12/3 Tis 13/3 Ons 14/3 Tor 15/3 Fre 16/3
    10:00F Objori
    D1
    11:00F Objori
    D1
    12:00
    13:00F Objori
    D1
    14:00
    15:00F Objori
    D1
    16:00
    v12 Mån 19/3 Tis 20/3 Ons 21/3 Tor 22/3 Fre 23/3
    9:00F Objori
    D2
    10:00L Objori
    Röd, Orange
    gr 3-4
    11:00Ö Objori
    D32-33, E36, E53
    12:00
    13:00F Objori
    D1
    14:00
    15:00Ö Objori
    E31, 35, 51-52
    16:00
    17:00L Objori
    Röd, Orange
    gr 1-2
    18:00
    v13 Mån 26/3 Tis 27/3 Ons 28/3 Tor 29/3 Fre 30/3
    8:00F Objori
    Q1
    9:00
    10:00Ö Objori
    Q11-14
    L Objori
    Röd, Orange
    gr 3-4
    11:00L Objori
    Röd, Orange
    gr 1-2
    12:00
    13:00L Objori
    Röd, Orange
    gr 3-4
    L Objori
    Brun, Gul
    gr 1-2
    14:00
    15:00F Objori
    D1
    16:00
    17:00Ö Objori
    D31-32, 34-35
    18:00
    v14 Mån 2/4 Tis 3/4 Ons 4/4 Tor 5/4 Fre 6/4
    8:00L Objori
    Orange, Röd
    gr 1-2
    F Objori
    Q1
    L Objori
    Orange, Röd
    gr 3-4
    9:00F Objori
    D2
    10:00L Objori
    Röd, Orange
    gr 3-4
    Ö Objori
    Q11-14
    11:00Ö Objori
    E32-33, 36, 53
    12:00
    13:00L Objori
    Brun, Gul
    gr 1-2
    14:00
    v18 Mån 30/4 Tis 1/5 Ons 2/5 Tor 3/5 Fre 4/5
    10:00L Objori
    Brun, Gul
    gr 1-2
    11:00
    12:00
    13:00L Objori
    Gul, Brun
    gr 3-4
    14:00
    15:00F Objori
    E1
    16:00
    17:00Ö Objori
    E31-33, 35
    18:00
    v19 Mån 7/5 Tis 8/5 Ons 9/5 Tor 10/5 Fre 11/5
    8:00F Objori
    Q1
    L Objori
    Orange, Röd
    gr 1-2
    L Objori
    Orange, Röd
    gr 3-4
    9:00
    10:00Ö Objori
    Q12-13, 15, 21
    F Objori
    Q1
    11:00
    12:00
    13:00L Objori
    Röd, Orange
    gr 3-4
    L Objori
    Brun, Gul
    gr 1-2
    14:00
    v20 Mån 14/5 Tis 15/5 Ons 16/5 Tor 17/5 Fre 18/5
    8:00L Objori
    Orange, Röd
    gr 1-2
    F Objori
    E1
    9:00
    10:00L Objori
    Orange, Röd
    gr 1-2
    L Objori
    Orange, Röd
    gr 3-4
    L Objori
    Röd, Orange
    gr 3-4
    11:00
    12:00
    13:00L Objori
    Brun, Gul
    gr 1-2
    14:00
    15:00L Objori
    Röd, Orange
    gr 3-4
    16:00

    ^ Upp till kursens webbsida.


    Sidansvarig: <hoffmann@nada.kth.se>
    Senast ändrad 21 februari 2001
    Tekniskt stöd: <webmaster@nada.kth.se>