Imperative & Object-Oriented Programming Methodology

Table of Contents

Next coding exam takes place 2019-04-16 in the window of 8:15 to 17:00. Sign up here: LINK to Google Form.

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 2018?

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

2.2 Phase 2 (Object-Oriented Programming)

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

TBA in 2018: Guest lecture from Oracle JVM engineers.

2.3 Phase 3 (Methodology and Tools)

Date Contents Achievements
18/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
14/9 Groupie Achievement Only one hand-in per group
14/9 C Bootstrap Prerequisite for starting on Assignment 1
5/10 Assignment 1 (Soft)  
19/10 Assignment 1 (Hard)  
19/10 Assignment 2 (Soft)  
24/10 Coding Exam 1 Sign-up not open yet.
26/10 Assignment 2 (Hard)  
26/10 Java Bootstrap Prerequisite for starting on Assignment 2
16/11 Assignment 3 (Soft)  
30/11 Assignment 3 (Hard)  
30/11 Assignment 4 (Soft)  
1/12 Last day to hand in essay Essay is not mandatory
11/12 Assignment 4 (Hard)  
11/12 Coding Exam 2 Sign-up not open yet.
13/12 Last possibility to do X62 This is a not mandatory achievement
19/12 Coding Exam 3 Sign-up not open yet.
December Essay feedback seminars Mandatory presence for essay writers
15–17/1 2019 Project (Hard) Deadline is 24 h before seminars
16/1 2019 C7 deadline  
16-18/1 2019 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 3/9 14/9 Lots of small tasks to get familiar with C
Assignment 1 (C) 17/9 5/10 Follow us on an excursion in C while implementing two basic data structures
Assignment 2 (C) 8/10 19/10 Put the above data structures to use in a larger program
Java bootstrap exercises 22/10 26/10 Finish an existing program skeleton for a simulation of cashier registers
Assignment 3 (Java) 29/10 16/11 Implement a simple symbolic calculator
Assignment 4 (Java) 19/11 30/11 Improve the symbolic calculator program using typical Java idioms
Project group work 3/12 14/1 2019 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, ran by Tobias Wrigstad.


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

Author: Tobias Wrigstad

Created: 2019-06-03 Mon 23:52