Programmieren 2

Pflichtmodul im Bachelorstudiengang Wirtschaftsinformatik an der Hochschule Rosenheim.

Organisatorisches

Vorlesungstermin: Mittwochs, 8:00 R0.02

Übungen: Mittwochs, 2./4./5. Stunde, A0.03; Tutor: Lukas Grams (@sinflugram)

Kommunikation: via Mattermost (einschreiben)

PStA: via domjudge (Achtung: nur übers fhintern Netz (WLAN oder Kabel), oder über das VPN)

Wichtige Termine:

  • 20.-30. April: Prüfungsanmeldung im OSC (incl. PStA)
  • 9. Mai: Einführung in das Contestsystem der PStA (persönliche Anwesenheit erforderlich!)
  • 4. Juli.: Testat zur PStA (statt Übung)

Leistungsnachweis

Der Leistungsnachweis ist aufgeteilt in eine

  • (unbenotete) praktische Studienarbeit (PStA), abzulegen während des Semesters (mit Abschlusstestat)
  • schriftliche Prüfung (SP, 90 Minuten) am Ende des Semesters

Empfohlene Literatur

Inhalt

  • 21. März: Professionelle Softwareentwicklung (Einführung, Skript, Übung 1, Übung 2)

    Nach ein paar organisatorischen Dingen widmen wir uns dem Handwerkszeug professioneller Softwareentwicklung. Wir wiederholen Spezifikation mit UML, Versionierung mit git, Tests und Ausnahmebehandlung.

  • 28. März: Liste als sequenzielle Datenstruktur (Skript, Übung)

    Bisher haben wir größere Mengen von gleichen Objekten in Feldern (Arrays) gespeichert, welche aber in ihrer Größe in Java unveränderlich sind. Wir erarbeiten uns nun mithilfe der Objektorientierung eine dynamische Datenstruktur, welche nach Bedarf wachsen und schrumpfen kann und so Daten effizient verwaltet.

  • 4. April: Set als Menge eindeutiger Elemente (Skript, Übung)

    Eine Liste speichert Daten sequenziell ab, achtet dabei aber nicht auf Duplikate. Ein Set (aus dem engl. set: Menge, Gruppe) ist ein Containertyp, welcher der mathematischen Menge nachempfunden ist: jedes Element kann genau einmal vorkommen, und es gibt keine Ordnung (Reihenfolge); ein Element ist entweder enthalten oder nicht. Zur Implementierung lernen wir den Binärbaum kennen, eine weitere wichtige Datenstruktur der Informatik.

  • 11. April: Generics (Skript, Übung)

    Bisher waren die Containerklassen entweder für genau einen Datentyp, oder für die Object, welche für jedes Objekt verwendet werden kann. Generics erlauben es nun mit beliebigen, aber festgelegten, Datentypen zu arbeiten. Wir lernen ausserdem die Interfaces Comparable und Comparator kennen.

  • 18. April: Iteratoren (Skript, Folien, Übung)

    Arrays und Listen verfügen über einen Indexoperator ([] bzw. get(int)), welcher verwendet werden kann um alle Elemente zu besuchen. Der Iterator abstrahiert dieses Prinzip: Bereitgestellt vom Container selbst, ist er ein Hilfsobjekt mit dem jedes Element des Containers besucht werden kann.

  • 25. April: Map als generischer assoziativer Container (Skript, Folien, Übung)

    Eine Liste ist sequenziell mit potentiellen Duplikaten, ein Set ist duplikatfrei, aber ohne Reihenfolge. Eine Map (aus dem engl. map: Abbildung) ist ein assoziativer Container, welcher einem Schlüssel (key) eindeutig einen Wert (value) zuordnet.

  • 2. Mai: Rekursion (Skript, Folien, Übung)

    Ging es um das Abarbeiten von Daten bzw. Implementieren von Algorithmen, so gingen wir bisher meist iterativ vor, also mit for bzw. while. Rekursion ist nun ein Mittel, bei der eine Methoden sich selbst wieder (mit veränderten Argumenten) aufrufen, und so ohne for bzw. while auskommen.

  • 9. Mai: Annotationen und Einführung in die PStA

    Nach einem kurzen Exkurs zum Thema Annotationen und deren Einsatzgebieten gibt es eine Einführung in die PStA.

  • 16. Mai: Sortieren (Skript, Übung)

    Gewappnet mit Datenstrukturen, Iteration und Rekursion erarbeiten wir Algorithmen zum Sortieren von Daten. Wir begegnen wieder den Interfaces Comparable<T> und Comparator<T>, welche die Vergleichsoperation abstrahieren.

  • 23. Mai: Datenverarbeitung (Teil 1) (Skript, Folien, Übung)

    Wir lernen die Containerklassen der Java Bibliothek kennen um effizient und übersichtlich Daten zu verarbeiten. Klassischerweise ist die Datenverarbeitung hier in vier Schritten zu machen: filtern, sortieren, abbilden und reduzieren.

  • 30. Mai: Datenverarbeitung (Teil 2)

  • 6. Juni: Vorlesungen entfällt, Übungen finden statt. Übungs-Thema: Q&A zur PStA

  • 13. Juni: Vererbung (Folien, Übung)

    Bisher waren unsere Klassenbeziehungen vorwiegend strukturell bzw. funktional: Ein Monat besteht aus Tagen, ein Auto aus Bauteilen, usw. Vererbung erlaubt es nun verwandschaftliche Beziehungen zu modellieren, und so Gemeinsamkeiten in Oberklassen zu bündeln. So sind z.B. sowohl Audis als auch BMWs im Grunde genommen Autos, doch gibt es sowohl geteilte Eigenschaften als auch spezielle.

  • 20. Juni: Abstrakte Basisklassen (Folien, Übung)

    Abstrakte Basisklassen sind ein weiteres Syntaxmittel, um verwandschaftliche Beziehungen zu beschreiben. Da abstrakte Klassen nicht instanziiert werden können, sind sie im Grunde ähnlich zu Schnittstellen (Interfaces), erlauben aber genauere Modellierung der Sichtbarkeiten.

  • 27. Juni: Parallele Verarbeitung (Folien, Skript, Übung)

    Folgten unsere Programme bisher einem vorgesehenen Ablaufplan, so erlauben Threads die parallele Verarbeitung von Daten. Wir beginnen mit der Basisimplementierung und erarbeiten einige knifflige Situationen.

  • 4. Juli: Zusammenfassung (Folien)

Abboniere das https://github.com/hsro-wif-prg2/hsro-wif-prg2.github.io Repository, um bei Updates benachrichtigt zu werden.