TU Wien:Objektorientierte Programmiertechniken VU (Puntigam)/Gesammelte Prüfungsfragen 2017W

Aus VoWi
Zur Navigation springen Zur Suche springen

Puntigam[Bearbeiten | Quelltext bearbeiten]

Prüfung 1[Bearbeiten | Quelltext bearbeiten]

Untertypen und Vererbung

  • Was ist eine Vorbedingung, eine Nachbedingung und eine Invariante?
  • Nenne ein Beispiel für einen Server kontrollierten History Constraint.
  • Müssen Vorbedingungen, Invarianten und Nachbedingungen im Untertyp stärker oder schwächer definiert sein?
  • Sind Eingangsparameter, Ausgangsparameter, Konstanten und Variablen generell (nicht in Java) kovariant, kontraviant oder invariant?

Aspektorientierte Programmierung

  • Was ist aspektorientierte Programmierung und was sind Anwendungszwecke?
  • Was sind die Elemente von AspectJ? (join point, pointcut, ...)
  • In welchem Fall ist aspektorientierte Programmierung besser als objektorientierte Programmierung? (wollte auf cross cutting concerns und core concerns hinaus)

Decorator-Pattern

  • Erkläre den Decorator-Pattern.
  • Wenn die alternative zum Decorator-Pattern ist alle Funktionalitäten in einer Klasse zu entwickeln gibt es dann beim der Version mit dem Decorator-Pattern oder bei der mit nur einer Klasse mehr Objektinstanzen? (beim Decorator-Pattern weil dort in der Decorator-Klasse noch eine Objektinstanz der generelleren Implementierung ist)
  • Wofür ist der Pattern nicht geeignet? Er wollte in dem Fall darauf hinaus dass der Decorator-Pattern nur oberflächlich erweitert. Obwohl ich das erklärt habe wollte er den Begriff "oberflächlich" hören. Nachdem ich den Begriff nicht nennen konnte hat er mich gefragt ob der Decorator-Pattern eher dazu geeignet ist einen Kuchen um eine Glasur zu erweitern oder um mehr Mehl hinzuzufügen.

Zusammenfassung
Alles in allem hat er vor allem bei der aspektorientierten Programmierung überraschend genau nachgefragt. Die Benotung war dafür sehr entgegenkommend.

Prüfung 2[Bearbeiten | Quelltext bearbeiten]

Prof. Puntigam hat, obwohl drei Leute für den Zeitslot eingeteilt waren, jeden einzeln in sein Büro geholt.

Gefragt hat er ebenfalls die oben genannten Fragen zu Untertypen und Vererbung sowie zum Decorator-Pattern. Er wollte bei Letzterem vor allem das Beispiel, das in der Vorlesung behandelt wurde, hören. Als ich ihm das nicht geben konnte, hat er mir das Beispiel gesagt und gefragt, was man mit der component meint.

Statt aspektorientierter Programmierung hat er — weil ich zwischen zwei Noten stand — noch gefragt ob man eher starke oder schwache Objektkopplung haben sollte und warum.

Zusammenfassung

Da ich beim Decorator-Pattern ein bissl Nonsens von mir gegeben habe und eben das Beispiel nicht kannte, ansonsten aber alles gewusst habe, hab ich ein 2+ bekommen. Schließe mich daher meinem Vorposter an, was die Benotung betrifft.

Prüfung 3[Bearbeiten | Quelltext bearbeiten]

War mit einem Freund da und der dritte von uns ist zuerst alleine reingegangen. Er ist drei Minuten später wieder rausgekommen (war auch wegen der Prüfung da, da waren wir uns sicher) und wir haben uns gewundert wie das so schnell ging.

Wir sind zu zweit bei ihm gewesen und waren in der Übung zwischen 1 und 2. Puntigam hat uns lange befragt und es sind die üblichen Fragen gekommen nur er ist sehr sehr in die Tiefe gegangen mit den Fragen und hat sehr gebohrt.

Bspw: Es ging um Objektkopplung und Klassenzusammenhalt. Mich hat der Objektkopplung meinen meinen Freund Klassenzusammenhalt gefragt. Danach wollte er wissen ob schwache Objektkopplung etwas über gute/schlechte Faktorisierung/Refaktorisierung aussagt. Das Selbe hat er über Klassenzusammenhalt gefragt. Ich glaube es war dass die schwache Objektkopplung nur zeigt dass gute Refaktorisierung herrscht und starker Klassenzusammenhalt von guter Faktorisierung und schlechter Refaktorisierung zeugt. Weiters wollte er von mir auch sehr genau wissen was von schwacher/starker Objektkopplung zeugt, was mit der Anzahl kostspieliger Nachrichten zu tun hat (ich glaube im Skript wird das genaue beschrieben).
Bei meinem Freund wollte er auch sehr genau wissen wie man sich von starkem Klassenzusammenhalt überzeugen kann. A: Indem man ein Experiment macht: Etwas entfernen aus der Klasse -> Funktioniert die Klasse nicht mehr? -> Ja, dann ist der Zusammenhalt gut. Und natürlich sind auch gute Namen für alles wichtig für den Klassenzusammenhalt.

Puntigam hat immer mit einer einfachen Frage (wie die die aus dem Skript sind) begonnen, und ist dann in die Tiefe gegangen und hat nach Verständnis des Stoffs gesucht.
Bspw:
Was ist homogene/heterogene Übersetzung von Generischen Klassen? (hat er jeweils einen von uns gefragt)
Was für eine Übersetzung nutzt C++? (A: Heterogen)
Wieso braucht C++ keine Schranken für die Generischen Klassen (im Vergleich zu Java).
(A: Weil durch heterogene Übersetzung die Typen fest in den Klasseninstanzen der Generischen Klassen sind und somit Schranken nicht nötig sind, im Verlgeich zu Java wo die Übersetzung heterogen ist und Schranken nötig sind um Typsicherheit des Typparameters festzutellen.)

Er hat uns auch zu Factory und Factory-Method (ja Achtung das sind zwei verschiedene Sachen) gefragt.
Sehr darauf aufpassen, bei dem Factory-Method Pattern heißt die Oberklasse der ConcreteFactories nicht Factory sondern Creator. (Das hat er meinen Freund gefragt, der das leider nicht gewusst hat) Anscheinend geht er wirklich auch auf namentliche Details ein, was die Pattern betrifft.

Mich hat er auch noch zu den Prototypes gefragt und zu clone Sachen. Ich habe zum ersten Mal gehört dass ein Objekt vom Typ Clonable sein muss, damit man clone aufrufen kann! Anscheinend wirft Java sonst eine Expection (das selbe gilt für Serializable). Er hat mich diese zusätzlichen Sachen gefragt (neben den üblichen Fragen zu Protoype).

Zusammenfassung
Wenn es um ein Sehr Gut geht glaube ich wird er sehr darauf schauen ob es auch verdient ist. Er prüft nicht nur auf Stoff sondern auch auf Verständnis und weitere Zusammenhänge (C++ Fragen etc.). Trotzdem war er nett und hat auch hin und wieder ein Auge zugedrückt. Wenn die Frage etwas knifflig war, lässt er auch reichlich Zeit und wenn man nach einer längeren Zeit die Frage nicht weiß ging sie an den Anderen. Mir kam die Prüfung allerdings sehr lange vor muss ich sagen. Die Benotung war fair und wir sind beide zufrieden (1 und 2). Mein Tipp zur Prüfung, das Skript lesen und die Fragen am Ende vom Kapitel durchgehen. Solange man das gemacht hat, kann man ruhig zur Prüfung gehen und wird diese auch auf jeden Fall schaffen.

Prüfung 4[Bearbeiten | Quelltext bearbeiten]

Die Prüfung erfolgte einzeln. Meine Fragen waren:

  • Sind Parameter/Rückgabetypen/Variablen/Konstanten kontra-, ko-,oder invariant? Wie verhalten sich Zusicherungen in Untertypen (Vorbedingungen dürfen schwächer sein.., gibt es Situationen in denen Invarianten nicht stärker werden dürfen?)
  • Decorator Pattern kurz erklären und: Gibt es mehr oder weniger Objekte, wenn man das Bsp (Window mit Scrollbar) ohne Decorator Pattern löst?
  • Homogene Übersetzung erklären und auf welchen Typ wird gecasted und wo im Code?
  • wegen Zwischennote: was sind die "responsibilities" einer Klasse und wie wirkt sich der Klassenzusammenhalt auf Faktorisierung aus und wie wirkt sich dieser bzw. gute Faktorisierung auf die Refaktorisierbarkeit aus? (gut faktorisierte Programme sind schwer zu refaktorisieren)

Prüfung 5[Bearbeiten | Quelltext bearbeiten]

Die Prüfung erfolgte einzeln. Meine Fragen waren:

  • Zusicherungen in Untertypen (stärker oder schwächer), erklären der einzelnen Zusicherungsarten
  • Multimethoden und Überladen erklären, auf Beispiel mit Tier und Futter eingehen
  • Proxy Design Pattern erklären, vor allem Anwendungsgebiete erklären und auf Struktur eingehen

Prüfung 6[Bearbeiten | Quelltext bearbeiten]

  • Untertypen Zusicherungen (Vorbedingung, Nachbedingung, Invarianz)
    • Wann darf welches schwächer/stärker werden?
    • Von wem wird was kontrolliert?
    • Wann sind Invarianzen auch vom Client abhängig?
  • Interator
    • Was ist ein Interner/Externer Iterator?
    • Wie heißt die Sammlung der Elementen? (Aggregat)
    • Welchen Vorteil hat es den Iterator als interne Klasse im Aggregat zu definieren? (Zugriff auf Private Variablen)
  • Dynamisches Binden
    • Was sind Multimethoden?
    • Werden sie von Java unterstützt? (Nein) Lassen sie sich implementieren? (Ja durch doppelt dynamisches Binden)
    • Was unterscheidet Multimethoden und überladene Methoden?
    • Doppelt dynamisches Binden am Beispiel von Tiger und Futter. (Bei Tier -> Tiger wird fressen aufgerufen, sie weiß nicht welches Futter, was passiert? Auf Futter wird die Methode vonTigergefressen() o.ä. aufgerufen)
    • Was ist das Problem beim doppelt dynamischen Binden? (Viele Methoden!)
  • Heterogene Übersetzung erklären als Zusatzfrage (da zwischen zwei Noten)

Krall[Bearbeiten | Quelltext bearbeiten]

Prüfung 1[Bearbeiten | Quelltext bearbeiten]

Gefragt wurde immer in der gleichen Reihenfolge alle Personen hintereinander jeder bekommt 3 Fragen

  1. Runde: Zusicherungen, Ersetzbarkeitsprinzip, Generizität
  2. Runde: Bivariante Methoden, Generizität vertieft (homogene / het.), Multimethoden
  3. Runde: Factory, Iterator, Proxy

Prüfung 2[Bearbeiten | Quelltext bearbeiten]

  1. Zusicherungen
  2. Aspektorientierte Programmierung
  3. Proxy

Und beim Kollegen:

  1. Ersetzbarkeitsprinzip
  2. Nebenläufige Programmierung
  3. Iterator

Prüfung 3[Bearbeiten | Quelltext bearbeiten]

  1. Runde: Ersetzbarkeit, Zusicherungen, Generizität
  2. Runde: Übersetzung der Generizität, Aspektorientierte Programmierung
  3. Runde: Factory, Iterator, Proxy