Stand 06.06.2019

Changelog:

  • 06.06.2019 Vorlesung Funktionale Programmierung hinzugefügt
  • 19.06.2019 Vorlesung 10 hinzugefügt
  • 26.06.2019 Vorlesung 11 hinzugefügt
  • 03.07.2019 Vorlesung 12 hinzugefügt
  • 10.07.2019 Vorlesung 13 hinzugefügt

Abküzungen am anfang jeder Frage:

  • FS Foliensatz
  • F Folie
  • L2G Lecture2Go zitat aus 2016

Foliensätze

  • 1 SE2-VL01-Intro.pdf
  • 2 SE2-VL02-TestenDbC.pdf
  • 3 SE2-VL03-Polymorphie.pdf
  • 4 SE2-VL04-ImplVererbung.pdf
  • 5 SE2-VL05-FehlerModule-ohneAuflsg.pdf
  • 6 SE2-VL06-OOD.pdf
  • 7 SE2-VL07-InteraktiveSW.pdf
  • 8 SE2-VL08-Entwurfsmuster.pdf
  • FNK SE2_2019_FunktionaleProgrammierung.pdf
  • 9 SE2-VL09-GUIs.pdf
  • 10 SE2-VL10-OOEntwurf.pdf
  • 11 SE2-VL11-Werttypen.pdf
  • 12 SE2-VL12-Refactoring.pdf
  • 13 SE2-VL13-Formalisierung.pdf

Fragen

Vorlesung 1

  • FS-01 F11f Worin bestehen die Herausforderungen durch Komplexität und Veränderung für Software-Entwicklung großer Systeme?
  • Welche Merkmale von Softwaresystemen zeigen deren Komplexität?
  • Nennen Sie wichtige Quellen von Veränderungen mit Auswirkungen auf Softwaresysteme!
  • FS-01 F13f Erläutern Sie, wodurch sich ingenieurgemäße Softwareentwicklung von Ad-hoc-Vorgehen unterscheidet!
    • Ad-hoc-Vorgehen
      • Softwareentwicklung geht meist nur bis zum Punkt das “es funktioniert”
      • Wenige Spezialisten, eher universale Entwickler
    • ingenieurgemäße Softwareentwicklung
      • Leistungsvorhersage (Was soll die SW schaffen)
      • Spezialisten und Arbeitsteilung (Datenbank Experten, Sicherheits Experten, UI Designer)
      • Qualitätssicherung und Entwicklung verwoben (z.B Iterative ansätze)
  • Warum sollte Problemraum und Lösungsraum getrennt beschrieben werden
  • Erläutern Sie verschiedene Arten von Abstraktion!
  • Welchen Nutzen können Modelle für Softwareentwicklung bringen?

Vorlesung 2

  • Worin besteht defensiver Programmierstil?
  • Worin besteht der Unterschied der Fehler-Begriffe error, failure, fault, mistake?
  • Erläutern Sie das Prinzip Design by Contract!
  • Was sichert der Dienstleister dem Klienten im Vertragsmodell zu?
  • Wie sollte das Vertragsmodell in Java umgesetzt werden?
  • Stellen Sie statische Analysen (Review) und dynamische Analyse (Test) gegenüber bezüglich Einsatzmöglichkeiten (Phase, Gegenstand) und Art von gefundenen Fehlern und Mängeln!
  • Wie kann das Vertragsmodell bei der Erstellung von Tests helfen?
  • Nennen Sie Argumente für den Test-First-Ansatz!

Vorlesung 3

  • FS-03 F6,F16,F17,F21 Was ist der Mehrwert von Vererbung in OO-Programmiersprachen?
    • Generalisierung von Klassen, dadurch eine Reduzierung von Code Duplikaten
    • Durch Super/SubTyp Hirarchie erreichte Flexibilität
      • Stichwort Polymorphie, die ersetzbarkeit von Komponenten ohne grossen Aufwand.
  • Wann ist es sinnvoll, Vererbung anzuwenden?
  • Nennen Sie ein Beispiel für schlechte Verwendung von Vererbung! Was sind die Gefahren?
  • Erläutern Sie Polymorphie in OO-Programmiersprachen an einem Beispiel!
  • Erläutern Sie dynamisches Binden in OO- Programmiersprachen!
  • Stellen Sie Implementations- und Typvererbung gegenüber!
  • Nennen Sie Regeln für Subtyping in Bezug auf Verträge zwischen Klienten und Dienstleistern!
  • Warum sollten Exemplare von Supertypen grundsätzlich durch Exemplare von Subtypen austauschbar sein?

Vorlesung 4

  • (Wdhlg.) Was ist ein Konstruktor? Erläutern Sie an einem Beispiel!
  • Nennen Sie drei Ziele von Implementationsvererbung in Methoden!
  • Erläutern Sie die Wirkung der Operatoren this() und super() an einem Beispiel!
  • FS-04 F34,F45 Welcher super-Konstruktor wird bei der Instanziierung einer erbenden Klasse aufgerufen, wenn sie dies nicht explizit festlegt?
    • Jede Klasse hat einen impliziten Konstruktur Klassenname() der automatisch mithilfe von super() den konstruktor des SuperTyps aufruft.
  • FS-04 F34,F45 Erläutern Sie die Reihenfolge der aufgerufenen Konstruktoren innerhalb einer Klassenhierarchie!
  • Wie wird im Zuge des dynamischen Bindens in der Typ-Hierarchie nach einer auszuführenden Methode gesucht? Erläutern Sie an einem Beispiel!
  • Was ist eine abstrakte Klasse? Wodurch ist sie gekennzeichnet?
  • Erläutern Sie das Entwurfsmuster Schablonenmethode (Template Method)!
  • Stellen Sie Implementations- und Typvererbung gegenüber!

Vorlesung 5

  • Wodurch wird das Import- (Export-) Interface einer Klasse angegeben?
  • Erläutern Sie die Eigenschaften von Paketen in Java!
  • Erläutern Sie die Mechanismen des Zugriffsschutz (der Sichtbarkeit) in Java!
  • L2G FS-05 F-49 Stellen Sie Entwicklungs- und Umgebungsfehler gegenüber bezüglich Entstehung und Behandlung!
  • L2G FS-05 F-51 Nehmen Sie eine kritische Bewertung traditionelle Techniken der Fehlerbehandlung vor!
  • FS-05 F-53 (PDF Seite 41) Wie werden bei Java-Exceptions objektorientierte Konzepte angewendet?
  • FS-05 F-54f (PDF Seite 42) Erläutern Sie das Behandeln von Exceptions in Java mit try, catch, finally!
  • FS-05 F-57 (PDF Seite 45) Erläutern Sie das Auslösen und Weitergeben von Exceptions in Java mit throw und throws!
  • FS-05 F-62 (PDF Seite 50) Geben Sie die Unterschiede der Exception-Klassen in Javas Exception-Hierarchie an!
  • FS-05 F-59f (PDF Seite 47) Welche Möglichkeiten und Pflichten ergeben sich für Programmierer aus checked exceptions?
    • Möglichkeiten
    • Zusätzlich zur dokumentation kann ein Entwickler über throws einen anderen Entwickler aufzwingen Fehlerfälle die auftreten können zu behandeln.
    • Pflichten
      • Umgebungsfehler müssen behandelt werden
      • Beispiel IOException teilt mit das eine Datei schreibgeschützt ist.
    • Verhinderung von Faults durch die Umgebung

Vorlesung 6

  • Stellen Sie die Ziele von objektorientierter Methoden für Programmierung gegenüber zu Modellierung und Entwurf!
  • Erläutern Sie die Unterschiede zwischen Problemraum und Lösungsraum! Wodurch unterscheiden sich Modelle beider Bereiche?
  • Erläutern Sie, warum sich eine fachliche Gliederung des Entwurfs günstig auf den Änderungsaufwand auswirkt!
  • Nennen Sie Beispiele für fachliche Gegenstände des Problemraums!
  • FS-06 F13 Geben Sie Schritte eines einfachen Vorgehens an, um fachliche Gegenstände des Problemraums zu ermitteln!
    • Interviews, Rollenspiele, Hospitieren
      • Welche Gegenstände und Daten verwenden die Anwender (Formulare, Ordner, Pläne)
  • Geben Sie Beispiele für die Metapher „Material wird mittels Werkzeug bearbeitet“!
  • Stellen Sie struktur- und verhaltensorientierten Entwurf gegenüber!

Vorlesung 7

  • Wodurch unterscheiden sich interaktive Softwaresysteme von eingebetteten Systemen und Systemen mit Batchverarbeitung?
  • Erläutern Sie die äußeren und inneren Qualitätsmerkmale nach ISO 25010!
  • Charakterisieren Sie die Konzepte Material, Fachwert, Werkzeug und Service von WAM!
  • Geben Sie die zulässigen Benutzt-Beziehungen zwischen Material, Fachwert, Werkzeug und Service an!
  • Nennen Sie Entwurfsregeln für Klassen für Material, Fachwert, Werkzeug und Service! Wie viele Klassen sind jeweils erforderlich?

Vorlesung 8

  • Geben Sie die graphischen Elemente eines UML-Sequenzdiagramms an!
  • (Wiederholung) Nennen Sie Maßnahmen zur Verringerung des Änderungsaufwands
  • (Wiederholung) Erläutern Sie die Unterschiede zwischen Problemraum und Lösungsraum!
  • Erläutern Sie die Nachteile zyklischer Benutzt-Beziehungen!
  • Worin besteht der Nutzen des Geheimnis-Prinzips?
  • Erläutern Sie Entwurfsmuster anhand der Definition!
  • Erläutern Sie Struktur und Dynamik des Beobachter-Musters!
    • Struktur
      • Interface Beobachter
        • Operation reagiere auf änderung
      • Abstrakte Klasse beobachtbar
        • registriere( Beobachter b )
        • informiereUeberAebderung()
    • Dynamik
      • Abstrakte Klasse beobachtbar
        • hat zur Laufzeit ein SET von beobachtern die bei beim aufruf von informiereUeberAebderung() abgearbeiten werden und dort dann jeweils reagiereAufAenderung aufgerufen wird.
      • Klassen, welche das Interface Beobachter implementieren können sich zur Laufzeit bei dem Beobachtbaren registrieren.
  • Geben Sie Ziele und Anwendungsbereich sowie Vor- und Nachteile des Beobachter-Musters an!
  • Stellen Sie Polling und das Beobachter-Muster als Kopplungsmechanismen gegenüber!
  • Erklären Sie die Beziehungen im Beobachter-Muster!

Vorlesung 8.1 Funktionales Programmieren

  • Nennen Sie die beiden Bestandteile des Verarbeitungsmodells der funktionalen Programmierung und geben Sie deren Eigenschaften an!
  • Wandeln Sie den Ausdruck 3 + 4 * 5 + 2 in Präfixnotation um!
  • Zu welchen Werten evaluieren die folgenden Racket-Ausdrücke?
    • a) (+ 3 (- 6 7))
    • b) (map sqrt '(1 9 4 25))
    • c) (foldl * 1 '(1 2 6 0 1) 1)
    • Hinweis: bezeichnet konstante Listen
    • Hinweis: die Reihenfolge der Parameter ist (foldl f e xs) mit f als Funktion, e als Startelement, xs als Liste
  • Wie werden in Racket Funktionen definiert?
  • Geben Sie den Unterschied zwischen Variablen in funktionalen (Beispiel: Racket) gegenüber dem imperativen Programmierparadigma (Beispiel: Java) an!
  • Was lässt sich mit Lambdas in Racket ausdrücken? Geben Sie ein Beispiel an!
  • In welchen Situationen sollten Funktionen als Werte benutzt werden können?
  • Geben Sie an, mit wie vielen Argumenten die Funktion Mapping (Filter, Falten) arbeitet und wie viele Argumente sie liefert!

Vorlesung 9

  • (Wiederholung) Warum ist eine Zerlegung und Trennung fachlicher und technischer Anteile vorteilhaft für Änderbarkeit?
  • Welche Teile interaktiver Systeme können durch ein GUI- Framework wie Swing realisiert werden?
  • Erläutern Sie das Konzept der Event-Verarbeitung mittels Listener!
  • Worin zeigen sich die Vorteile des funktionalen Programmierparadigmas bei Listenern mit dem Lambda-Konzept von Java 8?
  • Erläutern Sie die GUI-Entwicklung mit Swing mittels Layout-Manager!
  • Wozu wird bei der GUI-Entwicklung mit Swing ein Container benutzt?
  • Erläutern Sie das Zusammenwirken der Werkzeug-Klassen bei der Verarbeitung von Nutzerinteraktionen und der Darstellung von Materialien!

Vorlesung 10

  • Erläutern Sie den Begriff Kopplung.
  • Warum ist lose Kopplung erstrebenswert?
  • Erläutern Sie den Begriff Kohäsion. Nennen Sie Indikatoren für niedrige Kohäsion im Code!
  • Warum ist eine hohe Kohäsion erstrebenswert?
  • Was sind CRC-Karten? Wann können Sie sinnvoll eingesetzt werden?
  • Warum sind Code-Duplikate ein Hindernis für hohe Kohäsion?
  • Erklären Sie das Law of Demeter. Nennen Sie ein Beispiel für dessen Verletzung und schlagen Sie Verbesserungen vor.
  • Wie hängt das Law of Demeter mit Delegation zusammen?
  • Was macht gute Schnittstellen aus?

Vorlesung 11

  • Erläutern Sie, warum Softwaresysteme besser änderbar sind, wenn sie ähnlich der realen Welt aufgebaut sind!
  • Welche Eigenschaften von Fachwerten passen schlecht zu einer Realisierung als Objekte?
  • Vergleichen Sie die Konzepte Wert und Objekt!
  • Stellen Sie die verschiedenen Definitionen von Gleichheit von Objekten gegenüber!
  • Erläutern Sie das Typesafe Enum Pattern!
  • Geben Sie am Beispiel einer Klasse für Postleitzahlen an, welche 6 Richtlinien bei der Implementierung von Fachwerten als Klassen eingehalten werden müssen!

Vorlesung 12

  • Wieso kommt es während Änderungen zu einer Verringerung der Wartbarkeit von Software?
  • Was ist ein Bad Smell? Wodurch unterscheidet es sich von einem Fehler, wie er von einem Unit-Test gefunden wird?
  • Erläutern Sie die nachteiligen Eigenschaften am Beispiel eines Bad Smell Ihrer Wahl!
  • Was ist Refactoring? Nennen Sie Prinzipien, die dabei befolgt werden müssen!
  • Warum sollen Refactorings und Erweiterungen voneinander getrennt durchgeführt werden?
  • Erläutern Sie das Vorgehen bei einem Refactoring Ihrer Wahl!

Vorlesung 13

  • FS-13 F-08Welche Informationen aus dem Interface einer objektorientierten Software (z.B. in Java) sind formal beschrieben, welche informal?
  • Erläutern Sie Schwierigkeiten bei der Prüfung der Korrektheit von Software, wenn keine formale Spezifikation vorliegt!
  • FS-13 F-13-15Auf welche Weise beschreiben denotationale, operationale und axiomatische Ausdrucksmittel die Semantik eines Programms?
  • FS-13 F-20Nennen Sie die Bestandteile eines Abstrakten Datentyps, und geben Sie je ein selbst gewähltes Beispiel an (Kunde, Wochentag, Konto, etc.)!
  • Geben Sie eine Algebraische Spezifikation für die Regel an, dass bei einer Überweisung von einem Konto auf ein anderes kein Geld verlogen geht und keins geschaffen wird!
  • FS-13 F-24Überführen Sie die Regel für eine Schlange, dass das zuerst eingefügte Element auch zuerst entnommen wird (Axiom 2) in einen JUnit-Testfall