Imperative & Object-Oriented Programming Methodology
Table of Contents
Ask questions and discuss with other students on Piazza
Request demonstrations and track your progress at the AU Portal
1 Information For New Students in 2020
The first thing you do should be to go here and read about how the course will run in 2020. Then come back here and on you go!
1.1 Action Points Day One
- Enter the information we need about you in the AU Portal to complete the setup:
- Your GitHub account (get one if you need one)
- Your ZOOM number
- A clear picture that looks reasonably like your ID or Passport
- Perform the necessary steps to connect to Cloud 9
- Checkout your git repository in Cloud 9
1.2 Action Points Week One
- 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.
- Familiarise yourself with the SIMPLE methodology – an attempt at codifying some good practises for thinking about coding, actual coding, and refactoring.
- If you want to work on your own machine without Internet access, install the necessary tools.
- Start working on the C bootstrap exercises.
- Make sure you have a working setup for collaborating with other students, and taking demonstrations. Notably, this includes a working web camera so that we can see your face.
- Get in touch with your group, find someone to pair program with during the labs.
2 Course Staff and How to Get In Touch
Check out this page for details. The primary mode of 1-1 contact is MatterMost. Use Piazza to ask general questions. The course has en email address ioopm@it.uu.se which is checked at least once a week. Never use the teachers’ normal addresses unless asked to explicitly because we need to be able to keep everything else we are doing outside of the IOOPM stream .
3 Course Time Lines
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 2 | Software Project |
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. We aim to be able to deliver some content ahead-of-time. More details will emerge. Until then, plan as if the lectures are given live and recorded for posterity. Recorded lectures appear here.
Note. The schedule below points to the old slides from 2019. These will be updated incrementally for 2020 at which points these links will change to simply ’’Slides’’.
3.1 Phase 1 (Imperative Programming)
Date | Contents | Achievements | |
---|---|---|---|
1/9 | Grundläggande datatyper, deklaration, uttryck och satser. Funktioner. Enkel I/O. Enkel stränghantering. | A1 (F13, G15) | 2020 slides |
4/9 | Poster och unioner. Typnamnsdefinitioner. Funktionspekare. Separatkompilering och headerfiler. | A3, D9, G15, G16, (I22), K30. | 2020 slides |
7/9 | Dynamisk minnesallokering. Pekare. | E10, H20, J26, J27, M38 | 2020 slides |
10/9 | Introduktion till resten av kursen. Skillnad mellan funktionell och imperativ programmering. SIMPLE. Det agila upplägget. | C7 | 2020 slides |
14/9 | Stack och heap, länkade strukturer, pekare 1/2. | E10, H20, J26, M36 | 2020 slides |
17/9 | Stack och heap, länkade strukturer, pekare 2/2. | J27, M37, M39 | 2020 slides |
21/9 | Introduction to testing with CUnit | G18, Q49, Q50 | 2020 slides |
24/9 | Design & metodologi. Hur strukturerar man? Top-down, bottom-up. Lagertänkande. | N41 | 2020 slides |
28/9 | Automatisering (Make, scripting) och optimering. | T55, U57, V58, P45 | 2020 slides |
1/10 | Modularisering, separatkompilering, coupling & cohesion. | TBA | 2020 slides |
5/10 | Defensiv programmering. Läsbar kod. | I22, P45 | 2020 slides |
8/10 | Preprocessorn. Bitmanipulering. | O42, O43, O44 | -’’- |
12/10 | Backup (Terminalen) | V58 | Demo |
15/10 | Prepping for code exam | N/A |
3.2 Phase 2 (Object-Oriented Programming)
Date | Contents | Achivements | |
---|---|---|---|
26/10 | Introduktion till objektorientering. | Många kursivt | Slides |
29/10 | Översikt: skräpsamling, undantagshantering, JVM:en, JIT-kompilering. | Många kursivt | Slides |
2/11 | Objektorienterad analys och design. Konstruktorer. Instantiering, referenser, klassvariabler. | A2, B4, B5, B6, C8, H19, H20, H21, E11, E12, K30, K31, K32 | Slides |
6/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 | -’’- |
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 |
16/11 | Profilering. JIT-kompilering. Bytecode. | N40, N41, O42, O43, O44 | Slides |
19/11 | Refactoring. | A2 | Slides |
23/11 | TBA | ||
26/11 | Garbage collection in-depth, and its relation to resource management. | J26, J27, J28, J29 | Slides |
30/11 | Reservtid. | ||
3/12 | Mjukvaruprojekt | Samtliga projektmål | TBA |
7/12 | Prepping for code exam | Samtliga projektmål | N/A |
10/12 | Backup | ||
14/12 | Backup |
3.3 Phase 3 (Methodology and Tools)
Date | Contents | Achievements | |
---|---|---|---|
15/1 | Retrospective & guest lecture | TBA | TBA |
4 Deadlines
Deadlines and important dates in chronological order. Read here about soft and hard deadlines.
Date | Deadline | Comment |
---|---|---|
1/9 | Presentation Achievement | Handed in by mail |
11/9 | C Bootstrap | Prerequisite for starting on Assignment 1 |
2/10 | Assignment 1 (Soft) | |
16/10 | Assignment 1 (Hard) | |
16/10 | Assignment 2 (Soft) | |
22/10 | Coding Exam 1 | Sign-up not open yet. Might happen on campus. |
1/11 | Java Bootstrap | Prerequisite for starting on Assignment 3 |
30/10 | Assignment 2 (Hard) | |
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 not open yet. Might happen on campus. |
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 2021 | Project (Hard) | Deadline is 24 h before seminars |
15/1 2020 | C7 deadline | |
15–17/1 2021 | Project Seminars | Might happen on-campus! |
5 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 | 11/9 | Lots of small tasks to get familiar with C |
Assignment 1 (C) | 14/9 | 2/10 | Follow us on an excursion in C while implementing two basic data structures |
Assignment 2 (C) | 5/10 | 16/10 | Put the above data structures to use in a larger program |
Java bootstrap exercises | 19/10 | 25/10 | Finish an existing program skeleton for a simulation of cashier registers |
Assignment 3 (Java) | 26/10 | 13/11 | Implement a simple symbolic calculator |
Assignment 4 (Java) | 16/11 | 27/11 | Improve the symbolic calculator program using typical Java idioms |
Project group work | 30/11 | 14–16/1 2021 | Implement memory management systems for C programs |
6 Resources
6.1 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
- Machines at IT available for remote access and instructions for accessing them remotely
6.2 C Programming
- Basic compiling instructions
- Basic C constructs overview and discussion
- An introduction to pointers and pointers to pointers
6.3 Java Programming
- Basic compiling instructions
6.4 Screencasts
Screencasts from old instances of the course are available.
6.5 FAQ
A minimal FAQ is available.
7 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.