Imperative & Object-Oriented Programming Methodology

Table of Contents

As long as this note remains on this page, any information is subject to change and broken links, etc. are to be expected. Please be restrictive in reporting any errors for now.

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

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 Achivements
3/9 Grundläggande datatyper (inkl. arrayer), deklaration, uttryck och satser (inkl. loopar). Funktioner. Introduktion till standard-I/O och grundläggande stränghantering. A1 (F13, G15) TBA
6/9 Poster och unioner. Typnamnsdefinitioner. Funktionspekare. Separatkompilering och headerfiler. A3, D9, G15, G16, (I22), K30. TBA
10/9 Introduktion till resten av kursen. Skillnad mellan funktionell och imperativ programmering. SIMPLE. Det agila upplägget. C7 TBA
13/9 Dynamisk minnesallokering. Pekare. E10, H20, J26, J27, M38 TBA
17/9 Hur strukturerar man? Top-down, bottom-up. Lagertänkande. N41, P45 TBA
19/9 Automatisering (Make, scripting). T55, U57, V58 TBA
24/9 Introduction to testing with CUnit G18, Q49, Q50 TBA
27/9 Recap: Pekare, arrayer. Dynamiska arrayer. Pekararrayer. E10, H20, J26, M36 TBA
1/10 Länkade strukturer och iteratorer. J27, M37, M39 TBA
4/10 Const, Preprocessorn, Coupling & Cohesion TBA TBA
8/10 Defensiv programmering. Läsbar kod. I22, P45 TBA
11/10 Preprocessorn. Bitmanipulering. Optimering. O42, O43, O44 TBA
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 TBA
26/19 Översikt: skräpsamling, undantagshantering, JVM:en, JIT-kompilering. TBA TBA
29/10 Ett första objektorienterat program A2, M37, N40 TBA
1/11 Objektorienterad analys och design. Konstruktorer. Instantiering, referenser, klassvariabler. A2, B4, B5, B6, C8, H19, H20, H21, E11, E12, K30, K31, K32 TBA
5/11 Arv och klasshierarkier. Överlagring. Overriding. A2, B4, B5, B6, C8, H19, H20, H21, E11, E12, K30, K31, K32 TBA
8/11 Överlagring av konstruktorer. Abstrakta klasser. Interface. Genericitet. A2, B4, B5, B6, C8, H19, H20, H21, E11, E12, K30, K31, K32 TBA
12/11 Identitet och ekvivalens. Inkapsling. Inre och nästlade klasser. Wrapperklasser. A2, G15, G16, G17 TBA
15/11 Testing of Object-Oriented Programs G18, P46, Q49, Q50, Q51 TBA
19/11 Statisk vs. dynamisk bindning. Profilering. Refactoring. JIT-kompilering. Bytecode. N40, N41, O42, O43, O44 TBA
22/11 Garbage collection in-depth, and its relation to resource management. TBA TBA
26/11 Backup   TBA
29/11 Backup   TBA
3/12 Prepping for code exam   TBA

TBA in 2018: Guest lecture from Oracle JVM engineers.

2.3 Phase 3 (Methodology and Tools)

Date Contents Achievements
10/12 Project presentations, software projects TBA TBA
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
14/1 2019 Project (Hard)  
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 TBA
Assignment 4 (Java) 19/11 30/11 TBA
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: 2018-08-17 fre 12:23