Imperative & Object-Oriented Programming Methodology

Table of Contents

Get course material at the course’s GitHub page
Ask questions and discuss with other students on Piazza
Request demonstrations and track your progress at the AU Portal
Ask questions during lectures using this webform (or put your hand up!)

1 How IOOPM Works

If you are visiting this page for the first time, you should probably read the page about the course first. Mandatory reading!

1.1 What You Should be Doing the First Week

In no particular order, and preferably somewhat in parallel:

In addition to this, and outside of your control1, you will be placed in a group with about 10-12 other students. Throughout the course, this group will be your “team”, and you will be pairing with others from this team, and report back to the team regularly, and meet with your coach. Your will also cooperate on your first deliverable.

1.2 Who is Running the Course in 2019?

Check out this page.

1.3 The Coding Exam

The course does not use a traditional closed-book exam. Read this page for more information about he coding exam.

1.4 The SIMPLE Methodology

The SIMPLE methodology is an attempt at codifying some good practises for thinking about coding, actual coding, and refactoring. Read about in on this page.

2 Lecture Schedule with Slides

Note that without exception, all lectures start at 10:15 and are scheduled to end at 12:00. The full schedule is available on TimeEdit. The course is divided into 3 phases. Phases 1 and 2 are furthermore divided into 2 sprints each, and each sprint roughly corresponds to one assignment.

Phase Start Finish Remark
1 Week 36 Week 42 Getting started, Imperative programming
2 Week 43 Week 48 Object-Oriented Programming
3 Week 49 Week 3 Software Project

2.1 Phase 1 (Imperative Programming)

Date Contents Achievements
2/9 Grundläggande datatyper, deklaration, uttryck och satser. Funktioner. Enkel I/O. Enkel stränghantering. A1 (F13, G15) Slides Code
5/9 Poster och unioner. Typnamnsdefinitioner. Funktionspekare. Separatkompilering och headerfiler. A3, D9, G15, G16, (I22), K30. -’’-
9/9 Dynamisk minnesallokering. Pekare. E10, H20, J26, J27, M38 -’’-
12/9 Introduktion till resten av kursen. Skillnad mellan funktionell och imperativ programmering. SIMPLE. Det agila upplägget. C7 -’’- (p160)
16/9 Stack och heap, länkade strukturer, pekare 1/2. E10, H20, J26, M36 Slides
18/9 Stack och heap, länkade strukturer, pekare 2/2. J27, M37, M39 -’’-
23/9 Introduction to testing with CUnit G18, Q49, Q50 Slides
26/9 Automatisering (Make, scripting) och optimering. T55, U57, V58, P45 -’’-
30/9 Design & metodologi. Hur strukturerar man? Top-down, bottom-up. Lagertänkande. N41 Slides
3/10 Modularisering, separatkompilering, coupling & cohesion. TBA -’’-
7/10 Defensiv programmering. Läsbar kod. I22, P45 Slides
10/10 Preprocessorn. Bitmanipulering. O42, O43, O44 -’’-
11/10 Backup (Terminalen) V58 Demo
14/10 Prepping for code exam   N/A

2.2 Phase 2 (Object-Oriented Programming)

Date Contents Achivements
21/10 Introduktion till objektorientering. Många kursivt Slides
24/19 Översikt: skräpsamling, undantagshantering, JVM:en, JIT-kompilering. Många kursivt Slides
25/10 Objektorienterad analys och design. Konstruktorer. Instantiering, referenser, klassvariabler. A2, B4, B5, B6, C8, H19, H20, H21, E11, E12, K30, K31, K32 Slides
4/11 Arv och klasshierarkier. Överlagring. Overriding. Överlagring av konstruktorer. Abstrakta klasser. Interface. Genericitet. A2, B4, B5, B6, C8, H19, H20, H21, E11, E12, K30, K31, K32 -’’-
7/11 Typer, subtyper, Liskovs substitutionsprincip. Undantagshantering. A2, G15, G16, G17 Slides
11/11 Identitet och ekvivalens, JUnit G15, G16, G18, P46, Q49, Q50, Q51 Slides Junit
14/11 Profilering. JIT-kompilering. Bytecode. N40, N41, O42, O43, O44 Slides
18/11 Refactoring. A2 Slides
21/11 Garbage collection in-depth, and its relation to resource management. J26, J27, J28, J29 Slides
25/11 Inkapsling. Inre och nästlade klasser. Wrapperklasser. G15, G16, G17 TBA
28/11 Reservtid.    
3/12 Mjukvaruprojekt Samtliga projektmål TBA
9/12 Prepping for code exam Samtliga projektmål N/A

2.3 Phase 3 (Methodology and Tools)

Date Contents Achievements
17/1 Retrospective & guest lecture TBA TBA

3 Deadlines

Deadlines and important dates in chronological order. Read here about soft and hard deadlines.

Date Deadline Comment
13/9 Groupie Achievement Only one hand-in per group
13/9 C Bootstrap Prerequisite for starting on Assignment 1
4/10 Assignment 1 (Soft)  
18/10 Assignment 1 (Hard)  
18/10 Assignment 2 (Soft)  
23/10 Coding Exam 1 Sign-up not open yet.
1/11 Assignment 2 (Hard)  
1/11 Java Bootstrap Prerequisite for starting on Assignment 3
15/11 Assignment 3 (Soft)  
29/11 Assignment 3 (Hard)  
29/11 Assignment 4 (Soft)  
1/12 Last day to hand in essay Essay is for grades 4 and 5 only
10/12 Coding Exam 2 Sign-up here, at the latest on December 4.
12/12 Last possibility to do X62 This is a not mandatory achievement
13/12 Assignment 4 (Hard)  
8/1 2020 Coding Exam 3 Sign-up not open yet.
14–16/1 2020 Project (Hard) Deadline is 24 h before seminars
15/1 2020 C7 deadline  
15–17/1 2020 Project Seminars Mandatory presence for all

4 Exercises, Assignments and Projects

Note that assignments mostly act as drivers to learn concepts and produce evidence for demonstrating mastery of achivements.

What Start End Capsule summary
C bootstrap exercises 2/9 13/9 Lots of small tasks to get familiar with C
Assignment 1 (C) 16/9 4/10 Follow us on an excursion in C while implementing two basic data structures
Assignment 2 (C) 7/10 18/10 Put the above data structures to use in a larger program
Java bootstrap exercises 21/10 25/10 Finish an existing program skeleton for a simulation of cashier registers
Assignment 3 (Java) 28/10 15/11 Implement a simple symbolic calculator
Assignment 4 (Java) 18/11 29/11 Improve the symbolic calculator program using typical Java idioms
Project group work 2/12 14–16/1 2020 Implement memory management systems for C programs

5 Resources

5.1 TODO General

5.2 TODO C Programming

5.3 TODO Java Programming

5.4 Screencasts

Screencasts from old instances of the course are available.

5.5 FAQ

A minimal FAQ is available.

6 Recent Changes

Substantial changes are announced in Piazza. For everything else, use the git log. Complete change tracking is possible by following these pages on GitHub.

Questions about stuff on these pages? Use our Piazza forum.

Want to report a bug? Please place an issue here. Pull requests are graciously accepted (hint, hint).

Nerd fact: These pages are generated using org-mode in Emacs, a modified ReadTheOrg template, and a bunch of scripts.

Ended up here randomly? These are the pages for a one-semester course at 67% speed on imperative and object-oriented programming at the department of Information Technology at Uppsala University, created by Tobias Wrigstad.


No, you cannot form your own team, no matter what the reasons are.

Author: Tobias Wrigstad

Created: 2019-12-03 Tue 16:32