Course (BSc): Programming 2

Page content


This course provides an introduction to object-oriented design in Java with an emphasis on practical techniques for developing complex software systems.

Learning outcomes

You will learn:

  • How to apply Responsibility-Driven Design to decompose a complex system into objects
  • How to use Design by Contract to develop robust software
  • How to make use of inheritance to design flexible and generic software systems
  • How to apply iterative and incremental development and continuous refactoring to arrive at a clean and understandable design
  • How to effectively test software
  • How to develop maintainable code by consistently applying simple design principles
  • How to apply design patterns as reusable solutions to commonly occurring design problems
  • How to develop software that communicates its own design
  • How to effectively use development tools like integrated development environments and version control systems
  • How to program declaratively using paradigms beyond (classical) object-orientation

Overview (Spring Semester 2024)

  • Lecturer: Timo Kehrer
  • Exercises: Roman Bögli
  • Assistants: Maurice Amon, Marlene Kulowatz, Ramon Näf, Vsevolod Yevdokimov
  • Course materials: ILIAS
  • Registration: KSL
  • Lectures: Fridays 13:15 - 15:00 (Hörsaal 1 001, Engehalde, E8)
  • Exercise hour: Fridays 15:15 - 16:00 (Hörsaal 1 001, Engehalde, E8)
  • Stream/Podcast: Available through ILIAS course
  • Pool hours: Tuesdays 16:30 - 18:00 (PC Pool A95, ExWi)
  • Language: English, German
  • Start: Friday, 23rd February 2024
  • Exam: Monday, 10th June 2024, 10:00 - 12:00 (Hörsaal A6 und B5, ExWi)
  • Course Repetition: Spring Semester 2025

Schedule (Spring Semester 2024)

  • 23-Feb-24: Introduction
  • 01-Mar-24: Object-Oriented Design Principles
  • 08-Mar-24: Design by Contract
  • 15-Mar-24: Testing and Debugging
  • 22-Mar-24: Inheritance and Polymorphism
  • 29-Mar-24: No class (Good Friday)
  • 05-Apr-24: No class (Spring break)
  • 12-Apr-24: Iterative Development and Refactoring
  • 19-Apr-24: Design Patterns
  • 26-Apr-24: GUI Construction
  • 03-May-24: GenAI/Code Generation für Developer – was können die Tools, wie geht’s, wo macht es Sinn? (Isabell Sippli, IBM AIOps)
  • 10-May-24: Live Programming in Smalltalk (Guest Lecture by Oscar Nierstrasz)
  • 17-May-24: A Bit of Functional Programming
  • 24-May-24: Introduction to Aspect-Oriented Programming
  • 31-May-24: Q&A