2D1358 OOPK period 3 99/00 för E
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.
- Nu finns tider att boka för redovisining i omtentaperioden januari 2001.
- Kursanalys och resultatet av
elevenkäten.
- Kanske av intresse för er som gått kursen: EuroSeek och KTH söker
C och C++ programmerare för sökmotorsimplementering, automatisk
indexering av text och automatisk textsammanfattning; se även
http://www.nada.kth.se/~hercules/rekryt.html
- Lab 4 is now available in English.
- Grain för Windows finns nu att ladda ner. Inga garantier för
funktionalitet lämnas! Se länken "arbeta hemma".
- The texts of the first three programming exercises are now available
in English.
- Boken The C++ Programming Language av Bjarne Stroustrup
finns nu översatt till svenska och heter Programspråket C++ med
ISBN 0-201-67504-8 (inbunden). Den finns på Akademibokhandeln och
kostar 397 kronor om man visar upp kårleg.
Information på denna sida
Information på separata sidor
Denna kursomgång går i period 3, 2000, och är öppen för
elever på E. Övriga elever hänvisas till
ordinarie kursomgången i period 4, 2000,
som ä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) 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.
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.
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:
- The C++ Programming Language, 3:e upplagan, av Bjarne
Stroustrup, Addison-Wesley 1997. ISBN 0-201-88954-4 (paperback).
Denna bok finns även översatt till svenska och heter då
Programspråket C++ med ISBN 0-201-67504-8 (inbunden).
- C++ Primer, 3:e upplagan, av Stanley Lippman och Josee
Lajoie, Addison-Wesley 1998. ISBN 0-201-82470-1 (paperback).
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
- 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 2000, ISBN
0-201-65783-X (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.
Kursbunten finns att köpa på
NADA:s expedition
för 30 kronor. Den innehåller
- kursinformation,
- laborationslydelser,
- kvitto för godkända laborationer,
- programmeringsregler för laborationerna,
- manualblad för programpaketet Grain,
- UML Quick Reference,
- ett utdrag ur boken Design Patterns.
Den som köpt kursbunten kommer också att få kopior av
föreläsningsanteckningarna under kursens gång.
Kursledare är Staffan Ulfberg,
staffanu@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å mottagningstiden.
Adressen är rum 1433 på Nada.
De fyra övningsgrupperna leds av
- Danica Kragic, danik@nada.kth.se
- Larsson Omberg, lom@nada.kth.se
- Anders Orebäck, oreback@nada.kth.se
- Staffan Ulfberg, staffanu@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.
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.
Kursmodul
Varje gång du loggar in bör du ladda kursens modulfil innan du börjar arbeta
med laborationerna. Det gör du genom att ge kommandot
module load oopk_e00
Kommandot definierar bl.a. omgivningsvariabeln $OOPKHOME.
Beskrivning
- 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.
- Menyhantering
Obligatorisk.
Laborationen tar framför allt upp arv och polymorfism.
- 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).
- 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.
- 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.
- 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.
- Ä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 E
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.
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 3-4 redovisningar per timme.
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 21 dagen före redovisningen. Anledningen till detta är dels
att assistenterna måste kunna dra ut listan i förväg, 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.
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:
- Kursinformation.
Introduktion till objektorienterad programmering.
- Introduktion till C++, jämförelse med C.
Grundläggande mekanismer.
- Klasser.
Gränssnitt, åtkomlighet.
Typkonvertering.
- Standardbiblioteket.
Behållare och iteratorer.
Vektorer, listor, textsträngar.
Kompilering, länkning, avlusning.
- Resursallokering, speciellt minnesallokering.
Destruktion, kopiering, tilldelning.
Minneshanteringsfel.
- Arv, klasshierarkier.
Polymorfism, virtuella funktioner.
- UML (Unified Modelling Language).
Klass- och objektdiagram, associationer och multiplicitet.
-
Mönster (design patterns).
- Mer om mönster.
Grafikpaketet Grain (för lab 3 och 4).
- Dynamiska modellen i UML.
Tillståndsdiagram.
-
Abstrakta basklasser.
Multipelt arv.
Privat arv, Delegering, Typ kontra klass, Interfaces.
-
Felhantering.
Undantagshantering (exceptions).
-
Fredrik Almgren från Across Wireless: "C++ i verkligheten."
Ö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.
- Några enkla program och klasser i C++: ordräkning, ordfrekvenser,
datumklass.
- Hur man skriver en containerklass med interatorer.
Båtuthyrningsexempel: ett exempel på att hur man representerar data i
ett program påverkar dess flexibilitet.
- Virtuella funktioner: evaluering av aritmetiska uttryck och
simulator för logiska kretsar.
- Programmering med Grain.
- Den statiska modellen i UML.
- Den dynamiska modellen i UML.
- Mönster (design patterns), speciellt observer.
- Exceptions.
| v3 | Mån 17/1 | Tis 18/1 | Ons 19/1 | Tor 20/1 | Fre 21/1 |
| 10:00 | | Föreläsning F1 | | | |
| 11:00 | | Föreläsning D1 | | |
| 12:00 | | | | |
| 13:00 | | | | | Föreläsning E1 |
| 14:00 | | | Föreläsning Q1 | |
| 15:00 | | | | |
| v4 | Mån 24/1 | Tis 25/1 | Ons 26/1 | Tor 27/1 | Fre 28/1 |
| 13:00 | | | | | Föreläsning E1 |
| 14:00 | | | Föreläsning Q1 | |
| 15:00 | | | | |
| 16:00 | | | Övning E31, 51-53 | | |
| 17:00 | | | | |
| v5 | Mån 31/1 | Tis 1/2 | Ons 2/2 | Tor 3/2 | Fre 4/2 |
| 8:00 | Övning D31, E31, F31, 34 | | Laboration XQ3-6 gr 1-2 | | Laboration XQ3-6 gr 3-4 |
| 9:00 | | |
| 10:00 | | Laboration XQ3-6 gr 3-4 | | | Laboration XQ3-6 gr 1-2 |
| 11:00 | | | |
| 12:00 | | | | | |
| 13:00 | | | | | Föreläsning E1 |
| 14:00 | | | Föreläsning Q1 | |
| 15:00 | | | | |
| 16:00 | | | Övning E31, 51-53 | | |
| 17:00 | | | | |
| v6 | Mån 7/2 | Tis 8/2 | Ons 9/2 | Tor 10/2 | Fre 11/2 |
| 8:00 | Övning D31, E31, F31, 34 | | Laboration XQ3-6 gr 1-2 | | Laboration XQ3-6 gr 3-4 |
| 9:00 | | |
| 10:00 | | Laboration XQ3-6 gr 3-4 | | | Laboration XQ3-6 gr 1-2 |
| 11:00 | | | |
| 12:00 | | | | | |
| 13:00 | | | | | Föreläsning E1 |
| 14:00 | | | Föreläsning Q1 | |
| 15:00 | | | | |
| 16:00 | | | Övning E31, 51-53 | | |
| 17:00 | | | | |
| v7 | Mån 14/2 | Tis 15/2 | Ons 16/2 | Tor 17/2 | Fre 18/2 |
| 8:00 | Övning D31, E31, F31, 34 | | Laboration XQ3-6 gr 1-2 | | Laboration XQ3-6 gr 3-4 |
| 9:00 | | |
| 10:00 | | Laboration XQ3-6 gr 3-4 | | | Laboration XQ3-6 gr 1-2 |
| 11:00 | | | |
| 12:00 | | | | | |
| 13:00 | | | | | Föreläsning 12 F2 |
| 14:00 | | | Föreläsning 11 Q1 | |
| 15:00 | | | | |
| 16:00 | | | Övning E31, 51-53 | | |
| 17:00 | | | | |
| v8 | Mån 21/2 | Tis 22/2 | Ons 23/2 | Tor 24/2 | Fre 25/2 |
| 8:00 | Övning D31, E31, F31, 34 | | Laboration XQ3-6 gr 1-2 | | Laboration XQ3-6 gr 3-4 |
| 9:00 | | |
| 10:00 | | Laboration XQ3-6 gr 3-4 | | | Laboration XQ3-6 gr 1-2 |
| 11:00 | | | |
| 12:00 | | | | | |
| 13:00 | | | | | |
| 14:00 | | | Föreläsning 13 Q1 | | |
| 15:00 | | | | |
| v9 | Mån 28/2 | Tis 29/2 | Ons 1/3 | Tor 2/3 | Fre 3/3 |
| 8:00 | | | Laboration XQ3-6 gr 1-2 | | |
| 9:00 | | | | |
| 10:00 | | Laboration XQ3-6 gr 3-4 | | | |
| 11:00 | | | | |
Upp till kursens webbsida.
Sidansvarig: <staffanu@nada.kth.se>
Senast ändrad 18 december 2000
Tekniskt stöd: <webmaster@nada.kth.se>