Imperativ och objektorienterad programmerings-metodik
Välkommen till sidorna för kursen IOOPM -- imperativ och objektorienterad programmeringsmetodik!
Huvuddelen av kursens examination består av mål som du redovisar vid labbar. När du gör en inlämningsuppgift skall du använda den för att redovisa att du har uppnått flera av målen på kursen. Exakt vilka mål är mycket upp till dig.
Målen finns beskrivna här. Vissa mål är mycket utförligt beskrivna, i andra ingår det i uppgiften att själv tolka eller hitta information.
Fas 1: Imperativ programmering i C
Denna fas består av två sprintar och därmed två inlämningsuppgifter. Ämnet för fasen är imperativ programmering i C. Vi kommer att lära oss C från grunden, verktyg för C-programmering som valgrind, gdb, m.fl., defensiv programmering, manuell minneshantering, testning, och hur man skriver läsbar kod.
Föreläsningarnas (planerade) innehåll
Notera att föreläsningar kan komma att flyttas runt vid behov beroende på vad vi gör tillsammans under kursen. Vi har 15 föreläsningar schemalagda under Fas 1.
Typ | Innehåll |
---|---|
F1 | Grundläggande datatyper (inkl. arrayer), deklaration, uttryck och satser (inkl. loopar). Funktioner. Introduktion till standard-I/O och grundläggande stränghantering. |
Huvudmål: A1 (F13, G15) | |
Lämpliga övningar (exercises) från Shaws bok: 0, 1, (2), 3, (4), 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, (15), (21), 24. Övningar inom parentes tas upp igen senare mer detaljerat. | |
F2 | Poster och unioner. Typnamnsdefinitioner. Funktionspekare. Separatkompilering och headerfiler. |
Huvudmål: A3, D9, G15, G16, (I22), K30. | |
Lämpliga övningar (exercises) från Shaws bok: 13, 24. | |
F3 | Introduktion till resten av kursen. Skillnad mellan funktionell och imperativ programmering. SIMPLE. Det agila upplägget. |
Huvudmål: C7 | |
F4 | Dynamisk minnesallokering. Pekare. |
Huvudmål: E10, H20, J26, J27, M38 | |
F5 | Hur strukturerar man? Top-down, bottom-up. Lagertänkande. |
Huvudmål: N41, P45 | |
F6 | Automatisering (Make, scripting). |
Huvudmål: T55, U57, V58 | |
Lämpliga övningar (exercises) från Shaws bok: 32. | |
F7 | Testning. CUnit. |
Huvudmål: G18, Q49, Q50 | |
Lämpliga övningar (exercises) från Shaws bok: 30, 31. | |
F8 | Recap: Pekare, arrayer. Dynamiska arrayer. Pekararrayer. |
Huvudmål: E10, H20, J26, M36 | |
Lämpliga övningar (exercises) från Shaws bok: 15, 34, 35. | |
F09 | Länkade strukturer och iteratorer. |
Huvudmål: J27, M37, M39 | |
Lämpliga övningar (exercises) från Shaws bok: 32, 40. | |
F10 | Const, Preprocessorn, Coupling & Cohesion |
Huvudmål: TBA | |
Lämpliga övningar (exercises) från Shaws bok: TBA. | |
F11 | Defensiv programmering. Läsbar kod. |
Huvudmål: I22, P45 | |
F12 | Preprocessorn. Bitmanipulering. Optimering. |
Huvudmål: O42, O43, O44 | |
Lämpliga övningar (exercises) från Shaws bok: 19. | |
F13 | TBA |
Huvudmål: TBA | |
Lämpliga övningar (exercises) från Shaws bok: TBA. |
Fas 2: Objektorienterad programmering i Java
Denna fas består av två sprintar och därmed två inlämningsuppgifter. Fasen behandlar objektorienterad programmering med Java som programspråk. Vi skall lära oss Java från grunden, hur klasser och objekt kan användas som hjälpmedel för att konstruera komplexa system, titta på statisk och dynamisk bindning, arv, interface, API:er, och även nosa litet på trådar.
Föreläsningarnas (planerade) innehåll
Notera att föreläsningar kan komma att flyttas runt vid behov beroende på vad vi gör tillsammans under kursen. Vi har 14 föreläsningar schemalagda under Fas 1.
Typ | Innehåll |
---|---|
F15 | Introduktion till objektorientering. |
F16 | Översikt: skräpsamling, undantagshantering, JVM:en, JIT-kompilering. |
F17 | Ett första objektorienterat program |
Huvudmål: A2, M37, N40 | |
F17—20 | Objektorienterad analys och design. Konstruktorer. Instantiering, referenser, klassvariabler. Arv och klasshierarkier. Överlagring. Overriding. Överlagring av konstruktorer. Abstrakta klasser. Interface. Genericitet. |
Huvudmål: A2, B4, B5, B6, C8, H19, H20, H21, E11, E12, K30, K31, K32 | |
F22 | Identitet och ekvivalens. Inkapsling. Inre och nästlade klasser. Wrapperklasser. |
Huvudmål: A2, G15, G16, G17 | |
F23 | Testning. |
Huvudmål: G18, P46, Q49, Q50, Q51 | |
F24 | Statisk vs. dynamisk bindning. Profilering. Refactoring. JIT-kompilering. Bytecode. |
Huvudmål: N40, N41, O42, O43, O44 | |
F25 | Skräpsamling 2/2. |
Fas 3: Projektarbete
Projektgruppen delar själv in denna fas i sprintar efter eget huvud. Målet med projektarbete är att fördjupa sina programmeringsfärdigheter, men också i lika stor del öva programutveckling i grupp, process, planering och uppföljning och rapportering.
Föreläsningarnas (planerade) innehåll
Typ | Innehåll |
---|---|
F26 | Kickoff projektet. |
F30 (timme 1) | Pekare framåt. Avslutning. Postmortem. |
F30 (timme 1) | Gästföreläsning 3: Thorbiörn Fritzon, Spotify. Att arbeta som utvecklare. Perspektiv på framtiden. |
Träning i skriftlig framställning
Universitetskanslerämbetet åligger oss att träna studenter i skriftlig framställning. Oavsett detta är det ofta liten skillnad mellan att programmera och att skriva text eftersom kod skrivs så att andra programmerare skall kunna läsa den, inte främst för att exekveras.
På denna kurs tränar vi skriftlig framställning i projektrapporten (man kan alltså få underkänt för att den är undermålig), men också via en essä (för nivå 4/5). Du kan läsa om den bland målen.
Träning i att hålla presentationer
Universitetskanslerämbetet åligger oss att träna studenter i att hålla presentationer. Oavsett detta är det extremt viktigt att kunna hålla presentationer, på många olika nivåer. På ett ståmöte behöver man kunna sammafatta hur arbetet med en viss del av systemet går på 30-60 sekunder. På en anställningsintervju kanske man måste kunna presentera en lösning av ett problem eller hur man felsöker ett visst sorts fel i ett system. På en utvecklarkonferens måste man kunna förmedla kunskap eller entusiasm kring något som man arbetar med. I ett möte kring en ISO-standard måste man kunna argumentera för den lösning som man tror är den bästa på ett väl förberett sätt. Etc.
På denna kurs tränar vi presentation i två steg. Först skall du hålla en individuell presentation och få återkoppling på den. Vissa av er kommer att hålla ytterligare en individuell presentation, och slutligen kommer du att göra en gemensam presentation med din projektgrupp i kursens slut. Tanken är att den sista gemensamma redovisningen är den stora och att du skall få tillfälle att träna och få återkoppling innan dess.
Inlämningsuppgifter
Kursen har fyra inlämningsuppgifter och en projektuppgift. Inlämningsuppgifterna löses i par om två. Projektuppgiften görs i grupper om 4-6 studenter.
En inlämningsuppgift skall lämnas in för varje sprint under fas 1 och två. (Deadlines finns här.)
Förutom i sprint 1 i fas 1 har du alltid flera uppgifter att välja mellan. Du kan i alltid välja mellan att fortsätta med en uppgift som du redan håller på med (en fördjupning), eller välja en annan uppgift. Du styr själv detta val, i samråd med den person du jobbar med.
Inluppar fas 1 (C)
Sprint | Obligatorium | Frivillig extra |
---|---|---|
Sprint 1 | Lagerhanteringssystem 1.0 | n/a |
Sprint 2 | Lagerhanteringssystem 2.0 | Primtalshåv med pthreads |
Notera: tabellen länkar till uppgiftsbeskrivningarna.
Inluppar fas 2 (Java)
OBSERVERA ATT NEDANSTÅENDE KOMMER ATT ÄNDRAS INNAN FAS 2 Speciellt har uppgifterna inte uppdaterats för 2017Sprint | Val 1 | Val 2 |
---|---|---|
Lab 1 & 2 | Kassakö | |
Sprint 1 | Twitterish | |
Sprint 2 | Symbolisk kalkylator |
Notera: tabellen länkar till uppgiftsbeskrivningarna.
Projektuppgiften (C)
Projektuppgiften för 2017 kommer att finnas här (från slutet av november): http://wrigstad.com/ioopm/2017/project.html.