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:
- Look through this website! Especially read about how this course works, deadlines and labs, and form a mental model for what you need to do to pass with the grade that you want.
- Get a GitHub account and let us know about its username so we can connect it to the course. Once this is done, you should check out your GitHub repository.
- If you want to work on your own machine, install the necessary tools.
- Start working on the C bootstrap exercises.
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
- An introduction to Emacs is found here
- An introduction to Makefiles is found here
- An overview of the tools we use on the course is found here
- A minimal set of commands for working with git and GitHub is found here
- An IOOPM-specific clonable Trello board that you can use to track your own progress and plan your phases and sprints
- An IOOPM-specific Google Spread Sheet for making burndown charts and tracking your velocity
- Machines at IT available for remote access and instructions for accessing them remotely
5.2 TODO C Programming
- Basic compiling instructions
- Basic C constructs overview and discussion
- An introduction to pointers and pointers to pointers
5.3 TODO Java Programming
- Basic compiling instructions
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.