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

TypInnehåll
F1Grundlä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.
F2Poster 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.
F3Introduktion till resten av kursen. Skillnad mellan funktionell och imperativ programmering. SIMPLE. Det agila upplägget.
Huvudmål: C7
F4Dynamisk minnesallokering. Pekare.
Huvudmål: E10, H20, J26, J27, M38
F5Länkade strukturer och iteratorer.
Huvudmål: J27, M37, M39
Lämpliga övningar (exercises) från Shaws bok: 32, 40.
F6Automatisering (Make, scripting).
Huvudmål: T55, U57, V58
Lämpliga övningar (exercises) från Shaws bok: 32.
F7Testning. CUnit.
Huvudmål: G18, Q49, Q50
Lämpliga övningar (exercises) från Shaws bok: 30, 31.
F8Recap: Pekare, arrayer. Dynamiska arrayer. Pekararrayer.
Huvudmål: E10, H20, J26, M36
Lämpliga övningar (exercises) från Shaws bok: 15, 34, 35.
F9Hur strukturerar man? Top-down, bottom-up. Lagertänkande.
Huvudmål: N41, P45
F10TBA
Huvudmål: TBA
Lämpliga övningar (exercises) från Shaws bok: TBA.
F11Defensiv programmering. Läsbar kod.
Huvudmål: I22, P45
F12Preprocessorn. Bitmanipulering. Optimering.
Huvudmål: O42, O43, O44
Lämpliga övningar (exercises) från Shaws bok: 19.
F13TBA
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å parallellprogrammering.

Föreläsningarnas (planerade) innehåll

TypInnehåll
F14Introduktion till objektorientering. Skräpsamling 1/2.
F15Vad är OOP? Skillnad klass och objekt.
F16Ett första objektorienterat program
Huvudmål: A2, M37, N40
F17-20Objektorienterad 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
F21Identitet och ekvivalens. Inkapsling. Inre och nästlade klasser. Wrapperklasser.
Huvudmål: A2, G15, G16, G17
F22Testning.
Huvudmål: G18, P46, Q49, Q50, Q51
F25Kickoff projektet.
F24TBA
F25Statisk vs. dynamisk bindning. Profilering. Refactoring. JIT-kompilering. Bytecode.
Huvudmål: N40, N41, O42, O43, O44
F26 Skräpsamling 2/2.
F27 Gästföreläsning 1: TBC. (Programmering).
F28 Gästföreläsning 2: TBC. (Process).
F29 Gästföreläsning 3: TBC. (Att arbeta som utvecklare).

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

TypInnehåll
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)

Sprint Val 1 Val 2
Sprint 1 Kassakö Twitterish
Sprint 2 MUD Symbolisk kalkylator

Notera: tabellen länkar till uppgiftsbeskrivningarna.

Projektuppgiften (C)

Projektuppgiften finns här: https://github.com/IOOPM-UU/ioopm16/tree/master/uppgifter/projekt.