# Programmieren 2 (Sommersemester 2026)

## 👋 Willkommen zum Kurs Programmieren 2 (PR2)

In Programmieren 2 lernen Sie die Programmierung in Java auf einem fortgeschrittenen Niveau. Sie werden alle wichtigen Konzepte von Java kennenlernen und diese in praktischen Übungen anwenden. Hierbei werden Sie in kleinen Teams arbeiten und komplexere, objektorientierte Programme in Java entwickeln. Die dazu nötigen objektorientierten Konzepte (Polymorphie, Vererbung, Interfaces, etc.) werden Sie ebenso im Kurs anwenden, wie die dazu grundlegenden Algorithmen und Datenstrukturen.


## 📆 Assignments (Pflichtübungen)

Hier finden Sie die Assignments (Aufgaben) für die Vorlesung Programmieren 2 (PR2). Die Assignments sind unten, zusammen mit dem Ausgabe- und Fälligkeitsdatum aufgelistet.

Die Bearbeitung der Aufgaben und das Erreichen einer hinreichend großen Zahl von Punkten sind die Voraussetzung für die Teilnahme an der Klausur.

Hinweise zur nötigen Softwareausstattung finden Sie [hier](help/softwareausstattung.md).

Wichtige Einstellungen für Eclipse sind [hier](help/eclipse.md) beschrieben.

| #   | Ausgabe    | Thema                                           | Fällig am 📆   |
|-----|------------|-------------------------------------------------|----------------|
| 1.  | 17.03.2026 | [Umgebung aufsetzen](Assignment_001/readme.md)  | **24.03.2026** |

## 🏛️ Aufbau der Veranstaltung

Die folgende Tabelle zeigt Ihnen die Themen der Woche und welche Kapitel Sie bis wann vorbereitet haben müssen. Da die Veranstaltung als **Inverted Classroom** durchgeführt wird, ist es **Ihre Aufgabe** das entsprechende **Kapitel** im Skript **bis zum genannten Termin** durchgearbeitet zu haben.

| #  | 📢 Motto                                   | 🎓 Themen                                             | 📚 Kapitel         | Übungen                                                                                                                                                                                                               | 📆 bis    |
|----|--------------------------------------------|-------------------------------------------------------|--------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------|
| 1  | Auffrischen, einchecken und loslegen       | Auffrischung                                          | [1][1]             | [1][au_001], [2][au_002], [3][au_003], [4][au_004], [5][au_005], [6][au_006]                                                                                                                                          | ¹         |
| 2  | Wie Julius Caesar programmieren            | JUnit, JavaDoc, Programmierstil, Pakete, Module, JARs | [2][2], [3][3]     | [1][ei_001], [2][ei_002], [3][ei_003], [4][st_001], [5][st_002]                                                                                                                                                       | **23.03** |
| 3  | Erben und vererben                         | Vererbung, Überladen, Verdecken, Konstruktoren        | [4][4]             | [1][ve_001], [2][ve_002], [3][ve_003], [4][ve_004], [5][ve_005]                                                                                                                                                       | **30.03** |
| 4  | Verhaltenstherapie für Klassen             | Überschreiben, Polymorphie, static, final             | [4][4]             | [6][ve_006], [7][ve_007], [8][ve_008], [9][ve_009], [10][ve_010], [11][ve_011], [12][ve_012]                                                                                                                          | **06.04** |
| 5  | Mit Interfaces geht es noch abstrakter     | Interfaces, abstrakte Klassen, SOLID, STUPID          | [5][5]             | [1][ab_001], [2][ab_002], [3][in_001], [4][in_002], [5][in_003], [6][in_004]                                                                                                                                          | **13.04** |
| 6  | Wer sortiert, muss trotzdem suchen         | Suchen, Sortieren, Regex                              | [6][6]             |                                                                                                                                                                                                                       | **20.04** |
| 7  | Geschenkverpackungen und andere Feinheiten | Object, Wrapper, Optional, Enums, Records             | [7][7], [8][8]     | [1][ob_001], [2][ob_002], [3][ob_003], [4][ob_004], [5][ob_005], [6][ob_006], [7][ob_007], [8][en_001], [9][en_002], [10][en_003], [11][en_004]                                                                       | **27.04** |
| 8  | Wenn es mal schief geht, Ausnahmen         | Exceptions, try, catch                                | [9][9]             | [1][as_001], [2][as_002], [3][as_003], [4][as_004], [5][as_005]                                                                                                                                                       | **04.05** |
| 9  | Rein oder raus, die Daten müssen fließen   | Input/Output mit Streams und Reader/Writer            | [10][10]           | [1][io_001], [2][io_002], [3][io_003], [4][io_004], [5][io_005], [6][io_006], [7][io_007], [8][io_008], [9][io_009], [10][io_010], [11][io_011], [12][io_012], [13][io_013], [14][io_014], [15][io_015], [16][io_016] | **11.05** |
| 10 | One size fits all, mit generischen Typen   | Generische Typen, Wildcards                           | [11][11]           | [1][ge_001], [2][ge_002], [3][ge_003], [4][ge_004], [5][ge_005], [6][ge_006], [7][ge_007], [8][ge_008], [9][ge_009]                                                                                                   | **18.05** |
| 11 | Matroschka-Klassen                         | Geschachtelte Klassen, Lambdas                        | [12][12]           | [1][gk_001], [2][gk_002], [3][gk_003], [4][la_001], [5][la_002]                                                                                                                                                       | **01.06** |
| 12 | Daten brauchen Struktur                    | Abstrakte Datentypen                                  | [13][13]           |                                                                                                                                                                                                                       | **08.06** |
| 13 | Objekte sammeln                            | Collections und Streams                               | [14][14], [15][15] | [1][co_001], [2][co_002], [3][co_003], [4][co_004], [5][co_005], [6][co_006], [7][co_007], [8][co_008], [9][co_009], [10][co_010], [11][co_011], [12][sr_001], [13][sr_002], [14][sr_003], [15][sr_004], [16][sr_005], [17][sr_006], [18][sr_007], [19][sr_008], [20][sr_009], [21][sr_010]                                                                       | **15.06** |
| 14 | Parallel läuft es schneller                | Threads, Probleme der Thread-Programmierung           | [16][16]           | [1][th_001], [2][th_002], [3][th_003], [4][th_004], [5][th_005], [6][th_006], [7][th_007], [8][th_008]                                                                                                                | **22.06** |

¹ = Wird als aus PR1 bekannt vorausgesetzt

[1]: https://smits-net.de/files/pr2/html/01_auffrischung/
[2]: https://smits-net.de/files/pr2/html/02_intro/
[3]: https://smits-net.de/files/pr2/html/03_strukturierung/
[4]: https://smits-net.de/files/pr2/html/04_vererbung/
[5]: https://smits-net.de/files/pr2/html/05_interfaces/
[6]: https://smits-net.de/files/pr2/html/06_algorithmen/
[7]: https://smits-net.de/files/pr2/html/07_object_wrapper/
[8]: https://smits-net.de/files/pr2/html/08_enumerationen/
[9]: https://smits-net.de/files/pr2/html/09_exceptions/
[10]: https://smits-net.de/files/pr2/html/10_io/
[11]: https://smits-net.de/files/pr2/html/11_generics/
[12]: https://smits-net.de/files/pr2/html/12_geschachtelte_klassen/
[13]: https://smits-net.de/files/pr2/html/13_datenstrukturen/
[14]: https://smits-net.de/files/pr2/html/14_collections/
[15]: https://smits-net.de/files/pr2/html/15_streams/
[16]: https://smits-net.de/files/pr2/html/16_threads/

[au_001]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Auffrischung_001/readme.md
[au_002]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Auffrischung_002/readme.md
[au_003]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Auffrischung_003/readme.md
[au_004]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Auffrischung_004/readme.md
[au_005]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Auffrischung_005/readme.md
[au_006]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Auffrischung_006/readme.md
[ei_001]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Einfuehrung_001/readme.md
[ei_002]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Einfuehrung_002/readme.md
[ei_003]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Einfuehrung_003/readme.md
[st_001]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Strukturierung_001/readme.md
[st_002]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Strukturierung_002/readme.md
[ve_001]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Vererbung_001/readme.md
[ve_002]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Vererbung_002/readme.md
[ve_003]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Vererbung_003/readme.md
[ve_004]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Vererbung_004/readme.md
[ve_005]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Vererbung_005/readme.md
[ve_006]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Vererbung_006/readme.md
[ve_007]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Vererbung_007/readme.md
[ve_008]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Vererbung_008/readme.md
[ve_009]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Vererbung_009/readme.md
[ve_010]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Vererbung_010/readme.md
[ve_011]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Vererbung_011/readme.md
[ve_012]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Vererbung_012/readme.md
[ab_001]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Abstrakte_Klassen_001/readme.md
[ab_002]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Abstrakte_Klassen_002/readme.md
[in_001]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Interfaces_001/readme.md
[in_002]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Interfaces_002/readme.md
[in_003]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Interfaces_003/readme.md
[in_004]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Interfaces_004/readme.md
[ob_001]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Object_und_Wrapper_001/readme.md
[ob_002]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Object_und_Wrapper_002/readme.md
[ob_003]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Object_und_Wrapper_003/readme.md
[ob_004]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Object_und_Wrapper_004/readme.md
[ob_005]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Object_und_Wrapper_005/readme.md
[ob_006]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Object_und_Wrapper_006/readme.md
[ob_007]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Object_und_Wrapper_007/readme.md
[en_001]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Enumerationen_001/readme.md
[en_002]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Enumerationen_002/readme.md
[en_003]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Enumerationen_003/readme.md
[en_004]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Enumerationen_004/readme.md
[as_001]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Ausnahmen_001/readme.md
[as_002]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Ausnahmen_002/readme.md
[as_003]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Ausnahmen_003/readme.md
[as_004]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Ausnahmen_004/readme.md
[as_005]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Ausnahmen_005/readme.md
[io_001]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Input_und_Output_001/readme.md
[io_002]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Input_und_Output_002/readme.md
[io_003]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Input_und_Output_003/readme.md
[io_004]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Input_und_Output_004/readme.md
[io_005]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Input_und_Output_005/readme.md
[io_006]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Input_und_Output_006/readme.md
[io_007]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Input_und_Output_007/readme.md
[io_008]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Input_und_Output_008/readme.md
[io_009]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Input_und_Output_009/readme.md
[io_010]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Input_und_Output_010/readme.md
[io_011]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Input_und_Output_011/readme.md
[io_012]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Input_und_Output_012/readme.md
[io_013]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Input_und_Output_013/readme.md
[io_014]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Input_und_Output_014/readme.md
[io_015]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Input_und_Output_015/readme.md
[io_016]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Input_und_Output_016/readme.md
[ge_001]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Generische_Typen_001/readme.md
[ge_002]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Generische_Typen_002/readme.md
[ge_003]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Generische_Typen_003/readme.md
[ge_004]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Generische_Typen_004/readme.md
[ge_005]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Generische_Typen_005/readme.md
[ge_006]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Generische_Typen_006/readme.md
[ge_007]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Generische_Typen_007/readme.md
[ge_008]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Generische_Typen_008/readme.md
[ge_009]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Generische_Typen_009/readme.md
[gk_001]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Geschachtelte_Klassen_001/readme.md
[gk_002]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Geschachtelte_Klassen_002/readme.md
[gk_003]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Geschachtelte_Klassen_003/readme.md
[la_001]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Lambdas_001/readme.md
[la_002]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Lambdas_002/readme.md
[co_001]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Collections_001/readme.md
[co_002]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Collections_002/readme.md
[co_003]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Collections_003/readme.md
[co_004]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Collections_004/readme.md
[co_005]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Collections_005/readme.md
[co_006]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Collections_006/readme.md
[co_007]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Collections_007/readme.md
[co_008]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Collections_008/readme.md
[co_009]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Collections_009/readme.md
[co_010]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Collections_010/readme.md
[co_011]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Collections_011/readme.md
[sr_001]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Streams_001/readme.md
[sr_002]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Streams_002/readme.md
[sr_003]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Streams_003/readme.md
[sr_004]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Streams_004/readme.md
[sr_005]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Streams_005/readme.md
[sr_006]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Streams_006/readme.md
[sr_007]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Streams_007/readme.md
[sr_008]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Streams_008/readme.md
[sr_009]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Streams_009/readme.md
[sr_010]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Streams_010/readme.md
[th_001]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Threads_001/readme.md
[th_002]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Threads_002/readme.md
[th_003]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Threads_003/readme.md
[th_004]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Threads_004/readme.md
[th_005]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Threads_005/readme.md
[th_006]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Threads_006/readme.md
[th_007]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Threads_007/readme.md
[th_008]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Threads_008/readme.md
[re_001]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Reflection_001/readme.md
[re_002]: https://gitty.informatik.hs-mannheim.de/pr2-lecture/uebungen/src/branch/master/Reflection_002/readme.md


## 😀 Freiwillige Übungen

Die freiwilligen Übungen zur Vertiefung der Vorlesungsinhalte finden Sie in einem getrennten Repository: [Freiwillige Übungen](/pr2-lecture/uebungen/src/branch/main/readme.md).


## 📚 Material

  * [Moodle-Kurs](https://moodle.hs-mannheim.de/course/view.php?id=5022)
