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 2023)

  • Lecturer: Timo Kehrer
  • Assistants: Pablo Valenzuela, Yael van Dok, Filip Nikolic, Marlene Kulowatz
  • Course details: ILIAS
  • Registration: KSL
  • Lectures: Fridays 13:15 - 15:00 (Hörsaal 1 001, Engehalde, E8)
  • Exercise hour: Fridays 15:00 - 16:00 (Hörsaal 1 001, Engehalde, E8)
  • Stream/Podcast: Available through ILIAS course
  • Pool hours: Tuesdays 16:30 - 18:00 (ExWi Linux Pool, A95)
  • Language: English, German
  • Start: Friday, February 24, 2023
  • Exam: Written exam, June 12, 2023, 10:15 -12:00 (Hörsaal A006, Exakte Wissenschaften, ExWi)
  • Repetition: Spring 2024

Schedule (Spring Semester 2023)

  • 24-Feb-23: Introduction
  • 03-Mar-23: Object-Oriented Design Principles
  • 10-Mar-23: Design by Contract
  • 17-Mar-23: Testing and Debugging
  • 24-Mar-23: Inheritance and Polymorphism
  • 31-Mar-23: Iterative Development and Refactoring
  • 07-Apr-23: Good Friday
  • 14-Apr-23: Spring break
  • 21-Apr-23: Design Patterns
  • 28-Apr-23: GUI Construction
  • 05-May-23: Functional Programming
  • 12-May-23: Live Programming in Smalltalk (Guest Lecture by Oscar Nierstrasz)
  • 19-May-23: Aspect-Oriented Programming
  • 26-May-23: Advanced Design Lab
  • 02-Jun-23: Q&A