Softwareentwicklung 2

LVA Nr SSt LVA Leiter Zeit Raum Beginn
339.191 2VO Prähofer Do 8:30 - 10:00 HS 7 7.3.2024

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 (Planung)

  • 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

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

  • 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)

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

Links