Softwareentwicklung 2 (Objektorientierte Programmierung in Java)

339.191 2VO Mössenböck Do 8:30 - 10:00 Raum: HS16 Beginn: 7.3.2019

Achtung: Am 21.03. und am 16.05. findet die Vorlesung im HS10 statt.

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

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

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

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

  4. Dynamische Bindung
    - Prinzip
    - Statische versus dynamische Bindung
    - Abstrakte Klassen

  5. Interfaces
    - Grundlagen
    - Mehrfache Schnittstellenvererbung
    - Erweiterung von Interfaces
    - Anwendung von Interfaces
    - Beispiele

  6. Innere Klassen
    - Innere Klassen
    - Geschachtelte statische Klassen
    - Lokale Klassen
    - Anonyme Klassen

  7. Generics
    - Grundlagen
    - Constraints
    - Generische Arrays
    - Vererbung
    - Wildcards
    - Generische Methoden
    - Laufzeit-Typinformation

  8. Lambda-Ausdrücke
    - Grundlagen
    - Zugriff auf äußere Variablen und Felder
    - Methodenreferenzen
    - Default-Methoden

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

  10. UML
    - Überblick
    - Klassendiagramme
    - Use-Case-Diagramme
    - Sequenzdiagramme
    - Kollaborationsdiagramme
    - Zustandsdiagramme

  11. 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

  12. 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

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

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

  15. Korrektheitsüberlegungen bei Klassen
    - Kontrakte
    - Subkontrakte
    - Schnittstellen überschriebener Methoden

  16. Programmierstil
    - Namensgebung
    - Strukturierung
    - Lesbarkeit
    - Kommentierung
    - Effizienz
    - Beispiele

Vorlesungsaufzeichnungen aus dem SS 2018

Leider gibt es von Minute 3:51 bis Minute 7:30 einen Tonausfall
Aus organisatorischen Gründen, stehen nur die letzten 35min. der Vorlesung als Aufzeichnung zur Verfügung

Skript

Das Skript ist auf der KUSSS-Seite dieser LVA als PDF-Dokument verfügbar.

Prüfung

Die Prüfung in Form einer schriftlichen Klausur wird am 27.6.2019 zur Vorlesungszeit stattfinden. Die Übungen werden neben den wöchentlichen Programmieraufgaben durch eigene Übungstests benotet.

Links