Skip to content

MGL7010

Welcome to MGL7010, "Object-Oriented Programming and Detailed Object-Oriented Design"

Learning goals

In this course you'll learn about the fundamental object oriented concepts on the example of the java programming language. You'll not only learn how to apply language constructs, but also concrete guidance that allows you to determine which language features are best fit for common object oriented software design questions. You'll also learn about standardized visual representations to communicate design ideas, the java tooling ecosystem, and a series of code levels indicators to quickly judge the quality of code.

Success

This course provides you with a technical and theoretical toolkit for making fitting object-oriented design decisions, and the capacity to apply these concepts at programming language level.

Course content

This cours features two main teaching components around object-orientation as learning goals:

  • Language concepts and technical foundations of object-oriented programming.
  • concepts of object-oriented design.

Philosophy

This is a course about software design. While there cannot be any software without programming, it is not the same as software design.

A fundamental distinction

Programming is not identical to software design:

  • Programming is the everyday activity of writing functional code. Language proficiency and familiarity are required to write functional code.
  • Software design is the art of making the right structural and behavioural choices for code to not only sporadically "work", but also ensure non-functional requirements like maintainability, scalability and reliability.

In this course you'll be actively programming, but the grading focus lies on software design, i.e. your ability to reason with design elements, make the right choices, and explain decisions.

Detailed content

To cover both, proficiency with programming and ease with design decisions, this course showcases both as subsections. During the first half of the trimester we'll focus revision the language elements, afterwards we rely on these elements to realize design decisions.

Object oriented programming

  • A brief overview of key programming paradigms.
  • Revision of fundamentals, intermediate and advanced concepts of object-oriented programming.
  • Ecosystems surrounding the java programming language, notably standard libraries and build systems.

Object oriented design

  • The software lifecycle as a model oriented approach
  • Design principles, as guidance for decision making
  • Recap of a selection of common design patterns
  • Anti-patterns and code smells

Communication

Please respect the following communication netiquette (you are many, we are few).

Course material

Grades

  • Grades reflect the quality of your work or understanding.
  • You can contact me by direct message (email / mattermost) if you discovered a formal grading-mistake.
  • Examples:
    • A miscalculation, i.e. the points on your sheet do not add up.
    • A part of your submission has been overlooked and not graded, although you respected the submission requirements.

When not to contact the prof

  • Grading criteria are not negotiable:
    • I cannot change your grade based on your desire or needs to receive a better grade:
      • "I will fail this class if you don't give me extra points."
      • "I only need X more points to receive a better grade."
      • "I will lose my scholarship if you do not give me extra points."
    • I cannot change your grade based on your efforts:
      • "I put in X amount of hours, and I am deceived with my grade."
    • I cannot change the grading criteria:
      • "If you changed the grading criteria from y to z, I would receive a better grade."

Double check before reaching out

I cannot change your grade or the grading criteria, based on your efforts, desire, or needs.

Evaluation Items

Summary Description Date Weight
Graded lab 1 30-09-2025 5%
Project 1 Code: 03-10-2025 11:59 PM
Presentation: 07-10-2025 10%
Midterm Exam 27-10-2025 6:00-9:00 PM 20%
Graded lab 2 21-10-2025 5%
Project 2 Code: 07-11-2025 11:59 PM
Presentation: 11-11-2025 15%
Graded lab 3 25-11-2025 5%
Project 3 Code: 05-12-2025 11:59 PM 10%
Presentation: 09-12-2025 10%
Final Exam 15-12-2025 6:00-9:00 PM 30%
Graded Labs (3) during the session 15%

Due to the theoretical and practical content of the course, the following are required:

  • Minimum 50% on exams, 60% on labs, and 60% overall to pass the course.
  • Minimum 60% on exams to get a grade higher than B-
  • Minimum 70% on exams to get a grade higher than A-

Use of Generative AI Tools

The use of generative AI tools in graded submissions (code, reports, exams) is strictly and formally prohibited. Various detection tools will be used.

Detection of any generative AI tool is considered an attempt at plagiarism.

Projects

  • All three projects must be completed in teams of three.
  • All team members must participate in all parts of each project.
  • Graded labs will be completed individually.

Late Submission

  • Late work receives a zero unless prior agreement is made with the professor.
  • Details of the requirements for each assignment are specified in the assignment description.

Exams

Exams will take place in person during the scheduled time. No documents or electronic devices are allowed during the exam.

Material

This course is practice-heavy, i.e. there will be live-coding examples in every lecture.

Warning

The live coding sessions are mere demonstrations, where you can learn about conceptual possibilities. It is absolutely vital that you gain practical proficiency with the concepts seen in class by attending and solving the lab exercises.

No slides

There will be no slides for this course. All information is communicated via this website.

  • Class attendance is not optional.
  • Plenty of information and illustrative examples will be shown exclusively in class.
  • You are expected to decide yourself what is relevant, and take additional notes.

PDF version

You can download the course material as PDF book using this link.

Note: The link is currently under maintenance, there are some issues with diagram rendering in the PDF version.

Regularly check for updates

By nature, the PDF version is a static snapshot and will not automatically update on your machine when new content or corrections are added to the web version. It is your resposibility to regularly verify you're working with the most recent version.

Finding content

  • In this course you are required to abstract and combine knowledge across course units.
  • To ease the task of finding samples and definitions, this page is fully indexed.

Use the search function

Use the search function in the top right to rapidly navigate the course material.

Gaming

  • Throughout your TPs, you'll be implementing the card game Skyjo ( and later some extensions).
  • Skyjo is a short and fun card game, yet its game mechanisms are complex enough to allow for some serious software modelling and design.
  • The best preparation for coding (or designing) any software project, is understanding the requirements, therefore I invite you to play the game regularly with your team members.
    Two copies of the game can be temporarily borrowed at my office.

The rules are available as PDF, here.

Basic rules

  • Skyjo is a card game, with a deck of cards ranging from -2 to 12.
    • Cards are not unique, there are multiple -2, multiple -1, etc...
    • The numbers on a card are the amount of points a card counts.
  • The goal for winning Skyjo is to mark as little points as possible.
  • After every session, points are added to each player's balance.
  • The game is repeated as many sessions as it takes for a player to exceed 100 points.
  • The winner is the player with the least points at game end.

Skyjo sessions

  • The game has two piles:

    • A hidden card pile
    • A discarded card pile (open)
  • Each player starts with a 4 x 3 matrix of cards:

  • Throughout their turns, each player gradually reveals or replaces their cards:

  • The sessions ends when the first player has all cards revealed. Each player then counts their total by summing up their revealed cards:

Image credit: BoardGamesGeek.com

A little twist

If the player who ended a session does not have the lowers count, their count is doubled (as penalty).

Skyjo turns

  • Obviously the game would be kind of boring if the only action ever allowed were to reveal a card.
  • When it's a player's turn they can choose exactly one of two possible actions:
    1. Take the topmost discarded card: The player replaces any of their cards (regardless if revealed or hidden) by the card taken from the discard pile. They are not allowed to peek under the hidden cards before making a choice. The replaced card is placed publicly on the discard pile.
    2. Take the topmost hidden card: The player reveals the new card and then decides, whether...
      • ...they reject the card: Card is placed on the discarded cards pile, but the player must reveal one of their remaining hidden cards.
      • ...they accept the card: They replace one of the cards, following the same mechanism as if the card they had taken a card from the discard pile.

Special action

There a special rule which possibly applies at the end of each turn: If a player has 3 times the same card in a column, they can eliminate the column altogether.

  • This is optional, and does not count as a dedicated action.
  • Afterwards, the player has one less column.

Technically the special action can be triggered repeatedly, leading to an entirely empty matrix.

Literature

Software

Make sure the following are installed on your system:

Install all software BEFORE the first lab session!

Make sure you have a bash command line, IntelliJ, Java 24 and Maven 3.9.11 BEFORE the first lab session. If you do not have the software installed, you WILL fall behind from day 1. It is your responsibility to arrive to lab sessions prepared.

Here's the link to proceed to the first lab unit: Lab 01