# Programmieren 3

Required class for CS majors at the University of Applied Sciences Rosenheim. — Pflichtmodul im Bachelorstudiengang Informatik an der Hochschule Rosenheim.

## Class Schedule

Lecture: Thursdays at 8a

Tutorials: Thursdays at 11.45a/1.45p/3.30p; tutor: Peter Kurfer

Comunication via Mattermost (invite).

Note: Materials will be in English, the lectures/tutorials will be taught in German; the written exam will be German (you may answer in English).

## Class and Credits (Leistungsnachweis)

Lectures: Not your classic lecture— we’ll work together on concrete problems and their solution. The class will be taught in German, the materials are mostly in English.

Tutorials and assignments: Pairprogramming preferred, BYOD strongly recommended!

Credits: written exam (90’) at the end of the semester.

## Syllabus

• Introduction (Oct 4, slides, assignments)

With a few examples we dig right into the necessary tools of a (Java) software engineer: Git, IntelliJ, and of course: Google, SO and the Java docs.

• Classes and Interfaces revisited (Oct 11, slides, lecture notes, assignments)

We look at different types of classes (inner, anonymous, local, static), when to use them, and which visibility for which purpose. Also: @FunctionalInterface and lambda expressions.

• Inheritance revisited (Oct 18, slides, lecture notes, assignments)

We talk about abstract and final classes, (pure) virtual functions and defaults. Also, when (and how) to use abstract base classes, and how the Decorator pattern can be used to add functionality to existing classes.

• Mixins, pt. 1; Generics, pt. 1 (Oct 25, slides, lecture notes, assignments)

After a short digression to Mixins, we dig into the details of how generics work in Java, and how to apply them to data structures and algorithms.

No class and assignments on Nov 1 (All Saints/Allerheiligen).

• Mixin, pt. 2; Generics, pt. 2(Nov 8, slides, lecture notes, assignments)

We’ll review Mixins and see how to use generics to make them stateful. Generics and inheritance need special attention, and will lead us to bounds and wildcards.

• Reflection and Annotations (Nov 15, slides, lecture notes, assignments)

Learn how reflection works in Java, and how they enable annotations by using examples of testing (JUnit5), serialization (gson) and networking (retrofit).

• Design patterns, pt. 1 (Nov 22, slides, lecture notes, assignments: JavaFX (recommended) or Android (advanced))

We begin with a few basic patterns: composite, iterator and observer, and use that to dive into Android and MVC/MVVC.

• Design patterns, pt. 2 (Nov 29, slides, lecture notes, assignments: JavaFX or Android)

We look at more every-day-patterns: singleton, factory, strategy and command.

• Design patterns, pt. 3 (Dec 6, slides, lecture notes, assignments: JavaFX, Android)

We round up a few more useful patterns: proxy and adapter to make other peoples’ modules fit your needs, and flyweight to save on precious memory in (mostly) graphical apps.

• Parallel processing, pt. 1 (Dec 13, slides, lecture notes, assignments: JavaFX or Android)

Because sometimes, you need to work on more than one thing at a time! We’ll talk about threads and concurrency when it comes to resources.

• Parallel processing, pt. 2 (Dec 20, slides, lecture notes, assignments: Terminal or Android)

Threads are clunky— learn about a better Future, and what promise chaining can do for you.

• Introduction to functional programming (Jan 10, slides, lecture notes, assignments)

Leave your imperative and objected oriented programming comfort zone and follow me down the rabbit hole of functional programming. After some theory, we’ll do some basic exercises, including filter, map and forEach.

• Functional programming in Java (Jan 17, slides, lecture notes, assignments)

We’ll talk about the specifics (and limits) of functional programming in Java. Learn about the classes and interfaces used for Java’s functional parts, and the more sophisticated stream reduction using reduce and collect.

• Review (Jan 24)

TBA.