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
  • Assistants: TBD
  • 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: TBD
  • Language: English, German
  • Start: Friday, February 23, 2024
  • Exam: TBD
  • 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: Good Friday
  • 05-Apr-24: 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 for Developers
  • 10-May-24: Live Programming in Smalltalk
  • 17-May-24: Functional Programming
  • 24-May-24: Aspect-Oriented Programming
  • 31-May-24: Q&A