Softwareentwicklung 2 (Objektorientierte Programmierung in Java)

339.191 2VO Prähofer Do 8:30 - 10:00 Zoom Beginn: 11.3.2021

Zoom-Link zur Vorlesung:

https://jku.zoom.us/j/4249695527?pwd=UkhNSEtUTXRvbVdBdUMzNkNsU05Vdz09
(Meeting-ID: 424 969 5527, Passwort: 7537753)

Ziel

Nach Besuch dieser Vorlesung werden Sie ...

  • Grundlagen und Anwendungen der objektorientierten Programmierung beherrschen
  • fortgeschrittene Konzepte wie Generizität oder Lambda-Ausdrücke beherrschen
  • objektorientierte Entwurfsmuster kennen und einsetzen können
  • erweiterbare Programme auf der Basis objektorientierter Frameworks schreiben können
  • die wichtigsten Klassen und Pakete der Java-Bibliothek kennen
  • elementare Testtechniken anwenden können
  • guten Programmierstil beherrschen

Als Programmiersprache wird Java verwendet.

Inhalt

  • Prinzipien der objektorientierten Programmierung
    - Grundideen
    - Objektorientierte Programmstruktur
    - Information Hiding, Datenabstraktion, Vererbung, dynamische Bindung

  • Klassen
    - Bestandteile (Felder, Methoden, Nachrichten, Konstruktoren, Finalizers)
    - Information Hiding (Sichtbarkeitsattribute, Schnittstelle/Implementierung, get/set-Methoden)
    - Beispiele

  • Vererbung
    - Wiederverwendung
    - Kompatibilität (Klassenhierarchien, Typkompatibilität, statischer/dynamischer Typ, Laufzeittypprüfungen)
    - Mehrfache Vererbung
    - Klasse Object

  • Dynamische Bindung
    - Prinzip
    - Statische versus dynamische Bindung
    - Abstrakte Klassen

  • Interfaces
    - Grundlagen
    - Mehrfache Schnittstellenvererbung
    - Erweiterung von Interfaces
    - Anwendung von Interfaces
    - Default-Methoden
    - Beispiele

  • Innere Klassen
    - Innere Klassen
    - Geschachtelte statische Klassen
    - Lokale Klassen
    - Anonyme Klassen

  • Generics
    - Grundlagen
    - Constraints
    - Generische Arrays
    - Vererbung
    - Wildcards
    - Generische Methoden
    - Laufzeit-Typinformation

  • Java-Klassenbibliothek (Auszug)
    - java.lang (Object, String, StringBuffer, Math, Kopieren, Wrapper-Klassen)
    - java.util (Collections, Iteratoren, Streams)
    - java.io (IOStreams, Serialisierung)
    - java.net (Sockets)

  • UML
    - Überblick
    - Klassendiagramme
    - Use-Case-Diagramme
    - Sequenzdiagramme
    - Kollaborationsdiagramme
    - Zustandsdiagramme

  • Objektorientierter Entwurf
    - Allgemeine Überlegungen (topdown vs. bottomup)
    - Ermitteln der Klassen (Entwurfsüberlegungen, Beispiel, Methode von Abbott, CRC-Karten)
    - Beziehungen zwischen Klassen (Benutzt-, Hat- und Ist-Beziehung)
    - Entwurfstipps (Bindung vs. Kopplung, Designing for Change, Schnittstellenkriterien)
    - Entwurfsfehler

  • Frameworks
    - Allgemeines (Definition, Black-Box- und White-Box-Frameworks)
    - Beispiele (Menüs, Und/Redo, Dragging, Model-View-Controller)
    - Das Swing-Framework
    - Vorteile und Probleme von Frameworks

  • Entwurfsmuster
    - Erzeugende Muster
      (Fabrik, Fabrikmethode, Prototyp)
    - Strukturmuster
      (Familie, Adapter, Kompositum, Dekorator, Proxy, Fassade, Zwilling)
    - Verhaltensmuster
      (Iterator, Besucher, Beobachter, Strategie, Nachrichtenobjekt, Schablonenmethode)

  • Lambda-Ausdrücke und Streams
    - Grundlagen
    - Zugriff auf äußere Variablen und Felder
    - Methodenreferenzen
    - Streams

  • Testen
    - Allgemeines
    - Dynamisches Testen (Treiber, Stubs, Black-Box-Test, White-Box-Test, Regressionstest)
    - Statisches Testen (Verifikation, Schreibtischtest, Code-Inspektion, Metriken)
    - Defensives Programmieren (Assertionen, Hilfsdrucke)

  • Korrektheitsüberlegungen bei Klassen
    - Kontrakte
    - Subkontrakte
    - Schnittstellen überschriebener Methoden

  • Programmierstil
    - Namensgebung
    - Strukturierung
    - Lesbarkeit
    - Kommentierung
    - Effizienz
    - Beispiele

Skript

Das Folienskript dieser LVA wird über Moodle bereitgestellt.

Prüfung

Die Prüfung in Form einer schriftlichen Klausur wird am Do, 1.7.2021 zur Vorlesungszeit stattfinden.
Hinweis für Teilnehmer der UE Softwareentwicklung 2: Der praktische Teil dieser Klausur fließt, zusätzlich zu den wöchentlichen Programmieraufgaben der Übung, auch in die Note der Übung mit ein. Die Klausur ist somit auch für jene Übungsteilnehmer verpflichtend, die die Vorlesung nicht besuchen.

Links