Nada

2D1358 OOPK period 3 98/99 för E

^ Upp till kursens hemsida.


Denna kursomgång går i period 3, 1999, och är endast öppen för elever på E. Övriga elever hänvisas till ordinarie kursomgången i period 4, 1999, som är öppen för all program.

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. Mer information om detta hittar du nedan.


Senaste nytt (17 december 1999)

EXTRA tider för labredovisning (ej handledning):

Följande information kan du hitta nedan:

Följande information finns på separata sidor:


Kursmål

Kursens mål är att

Förkunskapskrav

Motsvarande kursen 2D1340 (eller 2D1341) Introduktion till datalogi eller 2D1320 Tillämpad datalogi.

Antagning och kursanmälan

Reglerna för vem som får följa olika kurser på KTH har skärpts f.o.m. hösten 1998.

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.

Elever från Stockholms Universitet registreras av studievägledaren. Doktorander på NADA och institutioner med vilka NADA har avtal om ömsesidigt utbyte (t.ex. Matematik) ska meddela Caroline Nordquist, caroline@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.

Omfattning

Kursen omfattar 28 timmar föreläsningar, 16 timmar övningar och 22 timmar laborationer. Det betyder ca 4 timmar föreläsning, 2 timmar övning och 4 timmar laborationer varje vecka. Då kursen omfattar totalt 4 poäng förväntas du utöver den schemalagda undervisningen lägga ner drygt 100 timmar eget arbete.

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 2000. Du kommer inte 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

C++ Primer, 3:e upplagan, av Stanley Lippman och Josee Lajoie, Addison-Wesley 1998. ISBN 0-201-82470-1 (paperback)

Boken kommer att säljas av kårbokhandeln (preliminärt pris 490 kr), men kan naturligtvis också köpas på stan och av olika bokhandlare på Internet. Jag kommer bara att ha sidhänvisningar och läsanvisningar till Lippman, men en mycket bra alternativ bok är

The C++ Programming Language, 3:e upplagan, av Bjarne Stroustrup, Addison-Wesley 1997. ISBN 0-201-88954-4 (paperback)

Stroustrups bok är mycket koncis, men mer avancerad än Lippman och innehåller färre exempel. Det finns även andra bra böcker i C++, men de flesta är mer än två år gamla och därmed föråldrade.

Kursbunten innehåller material som berör övriga delar av kursen: mönster (patterns), UML och objektorienterad analys och design. För den som vill ha riktiga böcker som täcker detta ordentligt rekommenderas

Design Patters, av Erich Gamma m.fl., Addison-Wesley 1995, ISBN 0-201-63361-2 (hardcover). Redan en klassiker. För den som planerar att ägna sig åt objektorienterad programutveckling är den ett måste.

The Unified Modeling Language User Guide, av Grady Booch m.fl., Addison-Wesley 1999, ISBN 0-201-57168-4 (hardcover). Den definitiva UML-guiden, skriven av upphovsmännen. Inte så lättläst, speciellt inte för den som inte redan kan objektorientering.

UML Distilled, av Martin Fowler, Addison-Wesley 1997, ISBN 0-201-32563-2 (paperback). En tunn och lättläst bok, full av personliga (men vettiga) synpunkter från en erfaren systemutvecklare. Det är inte direkt en nybörjarbok i objektorientering, men den är heller inte särskilt avancerad.

Kursbunt

Kursbunten ska finnas att köpa på NADA:s expedition från kursstarten. 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 , . Lämpligaste sättet att komma i kontakt med kursledaren är att skicka datorbrev. Det går också bra att lägga en lapp i postfacket märkt CVAP på NADA, Osquars Backe 2, 4 tr eller skicka ett vanligt brev till NADA, KTH, 100 44 Stockholm. Vill du träffa kursledaren personligen går det bra på mottagningstiden. Adressen är Fiskartorpsvägen 15A, 1 tr. Följ skyltarna till CVAP.

De fyra övningsgrupperna leds av

  1. Indragen.
  2. Alexander Baltatzis, f89-aba@nada.kth.se
  3. Fredrik Zetterling, fzet@nada.kth.se
  4. Harald Winroth, harald@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

Kursen lider mot sitt slut och det är dags för en kursutvärdering:

Laborationer

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ärment, 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 på särskilda tider 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 E startar. Laborationerna måste alltså redovisas senast i omtentamensperioden januari 2000.

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 ska 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 mer än tusen 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 få redovisa ska du skriva upp dig på den elektroniska anmälningslistan. Det finns en lista för varje laborationstid. 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 (i regel 3-4 st) 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. Handledarna (som oftast är teknologer) tar inte emot redovisningar.

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.
    Exempel: rationella tal.
    Objektidentitet och objektlikhet.

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

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

  6. Ansvarsfördelning och ägande.
    Ett större exempel.

  7. Arv, klasshierarkier.
    Polymorfism, virtuella funktioner.

  8. Mönster (design patterns).

  9. UML: statisk modell.
    Grafikpaketet Grain (för lab 3 och 4).

  10. Mer om UML och mönster.

  11. UML: dynamisk modell.

  12. Typ kontra klass.
    Gränssnitt och multipelt arv.
    Invarianter.
    Kontraktsprogrammering, ingångs- och utgångsvillkor.

  13. Undantagshantering (exceptions).
    Mallar (templates).

  14. Andra typer av språk.

Schema

v3 Mån 18/1 Tis 19/1 Ons 20/1 Tor 21/1 Fre 22/1
13:00 Föreläsning
D1
14:00
15:00 Föreläsning
E1
Föreläsning
E1
Föreläsning
Q1 (ändrat!)
16:00
 
 
v4 Mån 25/1 Tis 26/1 Ons 27/1 Tor 28/1 Fre 29/1
8:00 Övning
E51-52
gr 1-2
9:00
10:00 Övning
D34,E51-53
gr 1-4
Laboration
XQ3-6
gr 1-2
11:00
12:00
13:00 Övning
F41,51
gr 3-4
Laboration
XQ3-6
gr 3-4
14:00
15:00 Föreläsning
E1
Föreläsning
E1
16:00
 
 
v5 Mån 1/2 Tis 2/2 Ons 3/2 Tor 4/2 Fre 5/2
8:00 Övning
E51-52
gr 1-2
9:00
10:00 Laboration
XQ3-6
gr 1-2
Laboration
XQ3-6
gr 3-4
Övning
D34,E51-53
gr 1-4
Laboration
XQ3-6
gr 1-2
11:00
12:00
13:00 Övning
F41,51
gr 3-4
Laboration
XQ3-6
gr 3-4
14:00
15:00 Föreläsning
E1
16:00 Föreläsning
E1
17:00
 
 
v6 Mån 8/2 Tis 9/2 Ons 10/2 Tor 11/2 Fre 12/2
8:00 Övning
E51-52
gr 1-2
9:00
10:00 Laboration
XQ3-6
gr 1-2
Laboration
XQ3-6
gr 3-4
Övning
D34,E51-53
gr 1-4
Laboration
XQ3-6
gr 1-2
11:00
12:00
13:00 Övning
F41,51
gr 3-4
Laboration
XQ3-6
gr 3-4
14:00
15:00 Föreläsning
E1
Föreläsning
E1
16:00
 
 
v7 Mån 15/2 Tis 16/2 Ons 17/2 Tor 18/2 Fre 19/2
8:00 Övning
E51-52
gr 1-2
Laboration
XQ3-6
gr 3-4
9:00
10:00 Laboration
XQ3-6
gr 1-2
Laboration
XQ3-6
gr 3-4
Övning
D34,E32,53,D41
gr 1-4
Laboration
XQ3-6
gr 1-2
11:00
12:00
13:00 Övning
F41,51
gr 3-4
14:00
15:00 Föreläsning
E1
Föreläsning
E1
16:00
 
 
v8 Mån 22/2 Tis 23/2 Ons 24/2 Tor 25/2 Fre 26/2
8:00 Laboration
XQ3-6
gr 3-4
9:00
10:00 Laboration
XQ3-6
gr 1-2
Laboration
XQ3-6
gr 1-2
11:00
12:00
13:00 Föreläsning
D1
Laboration
XQ3-6
gr 3-4
14:00
15:00 Föreläsning
D1
16:00
 
 
v9 Mån 1/3 Tis 2/3 Ons 3/3 Tor 4/3 Fre 5/3
10:00 Laboration
XQ3-6
gr 1-2
Laboration
XQ3-6
gr 1-2
11:00
12:00
13:00 Laboration
XQ3-6
gr 3-4
14:00
15:00
16:00
17:00 Laboration
XQ3-6
gr 3-4
18:00
 

^ Upp till kursens hemsida.


Sidansvarig:
Senast ändrad 17 december 1999
Tekniskt stöd: <webmaster@nada.kth.se>