• Shuffle
    Toggle On
    Toggle Off
  • Alphabetize
    Toggle On
    Toggle Off
  • Front First
    Toggle On
    Toggle Off
  • Both Sides
    Toggle On
    Toggle Off
  • Read
    Toggle On
    Toggle Off
Reading...
Front

Card Range To Study

through

image

Play button

image

Play button

image

Progress

1/70

Click to flip

Use LEFT and RIGHT arrow keys to navigate between flashcards;

Use UP and DOWN arrow keys to flip the card;

H to show hint;

A reads text to speech;

70 Cards in this Set

  • Front
  • Back

KE 3

Wird durch die Verwendung von Vererbung bei der Definition von Klassen immer auch eine Generalisierungs-/Spezialisierungsbeziehungen zwischen diesen Klassen geschaffen?

- Nein, denn man kann auch Vererbungshierarchien konstruieren, die mit dem theoretischen Konzept von Generalisierung und Spezialisierung nichts gemein haben.
- Ob die Vererbung so eingesetzt wird, dass damit auch eine Generalisierungs-/ Spezialisierungsbeziehung geschaffen wird, liegt im Ermessen des Programmierers.

Was ist der Unterschied zwischen statischer und dynamischer Typprüfung?
- statische Typprüfung soll die Typkorrektheit zur Übersetzungszeit vom Compiler gewährleisten
- dynamische Typprüfung versucht Typkorrektheit zu gewährleisten, indem zur Laufzeit vor einer Variablenzuweisung geprüft wird, ob der zuzweisende Wert den von der Variablen geforderten Typ hat

Was ist der Nachteil der dynamischen und der statischen Typprüfung?
- Nachteil der dynamischen Typprüfung: Fehler werden erst zu einem Zeitpunkt entdeckt, zu dem man nichts andere tun kann als einen Fehler zu signalisieren
- Nachteil der statischen Typprüfung: eine rein statische und kompromisslos eingesetzte Typprüfung weist auch immer Programme zurück, die nützlich, sinnvoll und typkorrekt sind

Warum ist es Sprachen wie Smalltalk und Java unmöglich eine Methode zu definieren, die den Inhalt zweier Variablen vertauscht?
- Variablen haben in Smalltalk und Java zwar Referenzsemantik, aber beim Methodenaufruf wird nach dem Prinzip des Call by value eine Kopie des Objektpointers übergeben
- Zum Vertauschen wäre aber notwendig, dass Zeiger auf die Variablen übergeben werden, so dass der tatsächliche Speicherinhalt geändert werden kann.
- Dies ist in beiden Sprachen nicht vorgesehen
- In C++ oder C# wäre es möglich

Was ist eine abstrakte Klasse und wozu wird sie eingesetzt?
- eine Klasse, von der man keine Instanzen bilden kann
- wird eingesetzt, um Generalisierungen auszudrücken

Was besagt das Geheimnisprinzip?
dass Implementierungen hinter Schnittstellen zu verbergen sind und nur die Elemente einer Klassendefinition, die für Benutzer einer Klasse zur Verwendung gedacht sind, nach außen getragen werden sollen.

Was ist der Zusammenhang zwischen Interfaces und dem Implementationsgeheimnis?
- Interfaces sind die öffentlichen Schnittstellen von Klassen / Objekten und erlauben den Zugriff auf das jeweilige Objekt
- Alles, was nicht zum Interface gehört, wird nach außen verborgen und stellt das Implementationsgeheimnis dar
- Damit wird das Geheimnisprinzip gewahrt

Welche drei Formen von Polymorphie werden im Kurs genannt?
- Inklusionspolymorphie
- Parametrische Polymorphie
- beschränkt parametrische Polymorphie

Was bedeutet Inklusionspolymorphie?
- Programmteile, die für Objekte eines Typs T formuliert sind, sind unverändert auch für Objekte eines Typs S verwendbar, wenn S ein Subtyp von T ist
- Objekte vom Typ S können also an allen Stellen verwendet werden, an denen Objekte vom Typ T zulässig sind
- So können inhomogene Behälter realisiert werden, also Behälter, die Objekte verschiedenen Typs aufnehmen können

Was bedeutet parametrische Polymorphie?
- Programmteile werden mit Typen parametrisiert
- So kann man Behältertypen mit ihren Elementtypen parametrisieren
- Der einmal für diesen Behälter geschriebene Programmcode kann durch einfachen Instanziieren des Typparameters für jeden beliebigen Elementtyp verwendet werden
- bietet weniger Flexibilität als Inklusionspolymorphie
- Beispielsweise lassen sich mit Sprachen, die nur parametrische Polymorphie unterstützen, keine inhomogenen Behälter realisieren
- gestattet andererseits bei vielen Anwendungsfällen eine leistungsfähigere Typanalyse zur Übersetzungszeit

Was bedeutet beschränkt parametrische Polymorphie?
- verbindet Inklusionspolymorphie mit parametrischer Polymorphie
- ermöglicht es, Typparameter von parametrischen Typen durch Angabe von Supertypen zu beschränken
- Für einen durch einen Typ T beschränkten Typparameter E dürfen nur solche Typen S eingesetzt werden, die Subtypen von T sind
- Bei der Implementierung solcher beschränkt parametrischer Typen durch Klassen kann das Wissen ausgenutzt werden, dass Objekte eines Typen S, der für einen Typparameter E eingesetzt wird, der selbst nach oben durch einen Supertyp T beschränkt ist, mindestens über alle Eigenschaften von T verfügen
- Diese Eigenschaften können dann in der Implementierung genutzt werden

Welche Zugriffsmodifikatoren dürfen die Methoden in Java-Interfaces haben?
- Interface ist eine öffentliche Schnittstelle
- Deswegen können die unmittelbar enthaltenen Deklarationen keine Zugriffsmodifikatoren enthalten außer dem implizit angenommenen public

Was ist das Problem der mangelnden Kapselung?
- Durch Aliasing-Problem wird die Kapselung von Daten aufgebrochen
- Das Aliasing-Problem bezeichnet die Tatsache, dass durch Aliase das Verbergen eines Objekts hinter der Schnittstelle eines anderen Objekt umgangen werden kann
- So nützt es z.B. nichts, wenn in Smalltalk die Instanzvariablen eines Objekts von außen nicht zugreifbar sind, wenn das Objekt, auf das eine Instanzvariable verweist, einen Alias außerhalb des Objekts hat
- Das Objekt ist damit über den Alias zugreif- und änderbar
- Lediglich die Instanzvariable ist geschützt, so dass ihr Inhalt, der Verweis auf das Objekt, nicht geändert werden kann

Welche Probleme der objektorientierten Programmierung gibt es?
- Problem der mangelnden Kapselung
- Problem der Substituierbarkeit
- Fragile-base-class-Problem
- Problem der schlechten Tracebarkeit
- Problem der eindimensionalen Strukturierung
- Problem der mangelnden Skalierbarkeit
- Problem der mangelnden Eignung

Ist die folgende Aussage richtig oder falsch? Zwei Objekte sind identisch, wenn sie nicht zwei Objekte, sondern eines sind?
Richtig

Ist die folgende Aussage richtig oder falsch? Identische Objekte müssen nicht unbedingt gleich sein.
falsch

Ist die folgende Aussage richtig oder falsch? Ein Objekt kann zur gleichen Zeit verschiedene Namen haben.
Richtig

Ist die folgende Aussage richtig oder falsch? Aliasing führt dazu, dass jedes Objekt nur einmal vorkommt.
falsch

Ist die folgende Aussage richtig oder falsch? Lokale Variablen überdecken immer globale Variablen gleichen Namens.
Richtig

Ist die folgende Aussage richtig oder falsch? Wenn eine Variable nichit sichtbar ist, kann auf das von ihr bezeichnete Objekt nicht zugegriffen werden.
falsch

Ist die folgende Aussage richtig oder falsch? Ein Typ hat eine Intension und eine Extension, wobei erstere der Definition des Typs entspricht und letzterer dem Wertebereich.
richtig

Ist die folgende Aussage richtig oder falsch? Java erlaubt keine Mehrfachvererbung.
richtig

Das Friends-Konzept von C++ ermöglicht das gezielte Auffinden von Objekten, die den gleichen Namen haben.
falsch

Ist die folgende Aussage richtig oder falsch? Typkonformität ist eine symmetrische Eigenschaft.
falsch

Wo sind in Smalltalk Klassenvariablen definiert?
in der Metaklasse

Wo sind in Smalltalk Instanzvariablen definiert?
in einer Klasse

Auf was kann die Metaklasse als Objekt in Smalltalk zugreifen?
auf Klassenvariablen und Klassenmethoden

Wieviele Instanzen gibt es von einer Metaklasse in Smalltalk?
nur eine Instanz

Welche Konsequenzen hätte es, wenn man eine Methode, die eine Subklasse von einer Superklasse geerbt hat, in der Subklasse löschen könnte?
Das Prinzip der Substituierbarkeit wäre verletzt, denn die Subklasse könnte wegen der fehlenden Methode die Superklasse nicht mehr ersetzen

Wie erreicht man dynamisches Binden in C++?
- Obwohl die Zuweisungskompatibilität in C++ wie in Java über die Typkonformität an die Typerweiterung gebunden ist und somit einer Variable eines Typs auch Objekte seiner Subtypen zugewiesen werden können, werden in C++ Methoden zunächst einmal statisch gebunden
- das bedeutet, dass auf einem Objekt immer die Methode aufgerufen wird, die in der Klasse definiert ist, deren Typ die Variable und nicht das Objekt, auf das sie verweist, hat
- der tatsächliche Typ eines Objekts wird also ignoriert, es sei denn, die betreffende Methode wurde mit virtual deklariert
- Bei virtuellen Methoden wird wie in Java zur Laufzeit geprüft, welchen Typs das Objekt ist, und dann zur enrsprechenden Methodenimplementierung verzweigt
- zu diesem Zweck hält das System eine Virtual Function Table, in der die zum Objekt passende Implementierung nachgeschlagen werden kann

Wozu ist in C++ die Information Runtime Type Information (RTTI) gut?
Bibliothektsfunktion, die es erlaubt, für Objekte mit dynamisch gebundenen Methoden herauszufinden, Instanzen welcher Klassen sie sind.

Was tut der Typ eines Elements?
Er schränkt die Menge der Objekte, für die ein Programmelement stehen kann, und die Menge der Nachrichten, die an dieses geschickt werden können, ein.

Welchem Zweck dienen Typen und Klassen?
-Klassen dienen der Angabe von Implementierungen und damit als Container von ausführbarem Code.
- Typen dienen der Formulierung von Invarianten, die für Variablenbelegungen gelten müssen und deren Verletzung auf einen logischen oder semantischen Programmierfehler hinweist.

Welche Rollen spielen Typen und Klassen zur Laufzeit eines Programms?
- Klasseninformationen beeinflussen die Ausführung des laufenden Programms insofern, als dass sie Grundlage des dynamischen Bindens sind und in einem Programm als Eingeschaften von Objekten abgefragt werden können
- Typinformation beeinflusst die Ausführung des laufenden Programms insofern, dass sie ein Programm bei Verletzung von Invarianten abbrechen lässt und damit einem anderen, schwieriger zuordnenbaren Fehler zuvorkommt.

Gegeben sei Java-Code ohne parametrische Polymorphie. Die statische Typprüfung funktioniert bei solchem Code ohne parametrische Polymorphie sicher mit zwei Ausnahmen. Welche?
- ArrayStoreException: bei Arrays, die über eine Referenz angesprochen werden, die einen anderen Deklarationstyp hat, als der, mit dem Array erzeugt wurde
- ClassCastException: bei expliziten Casts, weil diese die statische Typprüfung aushebelt

Wie reagiert Java bei einer ArrayStoreException oder einer ClassCastException?
- beide Fälle werden zur Laufzeit erkannt
- ArrayStoreException wird erkannt, wenn versucht wird, dem referenzierten Array ein Element zuzuweisen, das durch seinen tatsächlichen Elementtyp nicht gedeckt ist
- ClassCastException wird erkannt, wenn an der Stelle, an der gecastet werden soll, das referenzierte Objekt einen Typ hat, der nicht Subtyp des Typs ist, auf den gecastet werden soll

Was ist ein möglicher Standardanwendungsfall für den einfachen, parametrischen Polymorphismus?
- Collections
- In einer Collection sollen Elemente eines bestimmten Typs gespeichert werden
- Oft möchte man die Collection allgemein definieren und erst später angeben, für welche Typen von Objekten sie verwendet werden soll

Warum braucht man den beschränkten, parametrischen Polymorphismus?
- Man erkauft sich mit einfachem parametrischen Polymorphismus außerhalb der Typdefinition Typsicherheit zum Preis der mangelnden Typsicherheit innerhalb
- Solange man keine Aussagen über den konkreten Typm der für einen Typparameter eingesetzt wird, machen kann, kann man bei der Implementierung einer Klasse, die den parametrischen Typ definiert, auch keine Eigenschaften der Objekte, die von dem unbekannten Typ sein sollen, voraussetzen
- durch beschränkten parametrischen Polymorphismus werden die möglichen Werte der Typvariablen auf Typen eingeschränkt, die eine Klasse direkt oder indirekt erweitern
- Die Methoden können also davon ausgehen, dass alle Objekte eine bestimmte Nachricht verstehen

Was ist das Friends-Konzept und was kann man damit erreichen?
- In der Praxis kommt es häufig vor, dass ein bestimmtes Teilproblem nicht von der Klasse allein, sondern nur durch das Zusammenspiel mehrerer Klassen gelöst werden kann
- Während diese Klassen untereinander eng kooperieren müssen und deswegen intime Kenntnis voneinander benötigen, also auf Elemente zugreifen können müssen, die anderen Klassen verborgen bleiben sollen, gilt das für andere Klassen nicht
- Die Schnittstelle solcher kooperierender Klassen sollte also nicht absolut, sondern relativ zu anderen Klassen definiert werden

Warum kann man Eiffel als Sprache für objektorientierte Analyse und Design ansehen?
- Wegen der Integration von Zusicherungen: Zusicherungen als Verträge zwischen dienstanbietenden und dienstnehmenden Klassen interpretiert, erlauben, das Was einer Software zumindest teilweise vonabhängig vom Wie zu spezifizieren.
- Die Typsysteme anderer Sprachen erlauben zwar scohn Zusicherungen auszudrücken, aber die sind jeweils auf die möglichen Werte einer Variable bezogen und bleiben dabei sowohl voneinander als auch von der Zeit unabhängig
- Eiffel erlaubt darüberhinaus nahezu beliebige Bedingungen für Vairablen- und Rückgabewerte von Methoden auszudrücken, die sowohl auf andere Werte als auch auf den zeitlichen Verlauf Bezug nehmen können

Wo sind in Eiffel Vor- und Nachbedingungen und wo Invarianten angesiedelt?
- Vor- und Nachbedingungen in Methoden
- Invarianten in Klassen

Was sind die interessantesten Eigenschaften des Typsystems von Eiffel?
- Mehrfachvererbung
- beschränkter parametrischer Polymorphismus
- das Unterdrücken von Instanzvariablen und Methoden in Subklassen (Löschen von Methoden)
- kovariante Redefinition unterstützt durch sog. verankerte Typen

Aus welchen Bestandteilen besteht ein Smalltalkprogramm, geordnet vom primitivsten zum komplexesten?
- Literal
- Ausdruck
- Anweisung
- Methode
- Klasse

Mit Hilfe welcher Beziehungen lassen sich die Klassen eines Smalltalk-Systems strukturiert anordnen?
- Subklassenbeziehung bzw. Generalisierung / Spezialisierung
2. Instanzbeziehung von einer Klasse zu ihrer Metaklasse

Wie drückt man in einem objektorientierten Programm Beziehungen zwischen Objekten aus?
durch Instanzvariablen

Welche Beziehungen zwischen Objekten gibt es?
:1- und :n-Beziehungen

Aus welchen Bestandteilen besteht ein Block?
Variablendeklarationen (Parameter) und Anweisungen

Was ist eine Kontrollstruktur?
ein Sprachkonstrukt, das den Programmablauf beeinflusst

Welche Kontrollstrukturen gibt es?
- Sequenz
- Verzweigung
- Wiederholung
- Unterprogrammaufruf

Welche Kontrollstrukturen sind unverzichtbar?
die Sequenz und der dynamisch gebundene Methodenaufruf

Welche Kontrollstruktur ist für die OOP charakteristisch?
der dynamisch gebundene Methodenaufruf

Was ist ein Iterator und wofür braucht man ihn?
- eine Kontrollstruktur, die die Elemente einer Collection nacheinander einer Variablen zuweist und damit einen bestimmten Anweisungsblock ausführt
- man braucht ihn zum Durchlaufen einer :n-Beziehung

Was bezeichnet das Schlüsselwort Self in Smalltalk?
eine Pseudovariable, die sich immer auf das Empfängerobjekt der Methode bezieht, in der sie vorkommt

Wie unterscheidet man ein nominales von einem strukturellen Typsystem?
- strukturelles Typsystem verlangt für die Zuweisungskompatibilität, dass der Typ auf der rechten Seite alle Eigenschaften des Typs auf der linken Seite umfasst.
- ein nominales Typsystem verlangt, dass der Typ auf der rechten Seite deklariert, ein Subtyp des Typs auf der linken Seite zu sein

Welche charakteristischen Merkmale der Programmiersprachen C++, Java, Smalltalk und Eiffel unterscheiden die Sprachen jeweils von den anderen?
- Smalltalk: nur zwei Kontrollstrukturen, kein Typsystem
- Java: rekursiv parametrischer Polymorphismus, syntaktische Trennung von Interfaces und abstrakten Klassen
- C++: Friend-Konzept, mangelnde dynamische Typsicherheit begünstigt schwere Laufzeitfehler
- Eiffel: kovariante Redefinition, Vor- und Nachbedingungen als explizites Sprachkonstrukt

Welches praktische Problem stellt das dynamische Binden bei der Entwicklung objektorientierter Programme dar?
Schlechte Tracebarkeit aufgrund ständig wechselnder Kontexte.

Was versteht man unter Aliasing?
- den Umstand, dass mehrere Namen (Variablen) auf dasselbe Objekt verweisen können
- entsteht bei Wertzuweisung unter Referenzsemantik

Was ist der Unterschied zwischen Gleichheit und Identität?
- zwei Objekte sind identisch, wenn sie nicht zwei Objekte, sondern eines sind
- Identische Objekte sind auch gleich
- darüberhinaus können auch nicht identische Objekte gleich sein, wenn die Gleichheitsrelation entsprechend definiert ist

Was ist eine konkrete Klasse?
Eine Klasse, die nicht abstrakt ist und die Erstellung von Objekten zulässt

Was ist statisches Binden?
Ein Methodenaufruf wird bereits zur Übersetzungszeit an eine Implementierung gebunden

Was ist dynamisches Binden im Kontext von Methodenaufrufen?
- die tatsächlich ausgeführte Methode wird erst zur Laufzeit bestimmt
- wird in objektorientierten Programmiersprachen eingesetzt
- Die Auswahl der Methode ist nicht nur vom Nachrichtenselektor, sondern auch vom Empfängerobjekt abhängig

Nach welchem Verfahren wird beim dynamischen Binden die auszuführende Methode bestimmt?
- zunächst wird geprüft, ob die Methode im zur Klasse des Empfängers gehörenden Methodenwörterbuch enthalten ist
- Wird die Methode gefunden, wird sie ausgeführt
- Wird sie nicht gefunden, wird zunächst in der direkten Superklasse der Klasse des Objekts weitergesucht und dann in der nächsten Superklasse usw.

Was versteht man im Kontext der Überschreibung von Methoden unter Kovarianz, was unter Kontravarianz?
- Sei B ein Subtyp von A
- die Methode m ist in A definiert und wird in B redefiniert
- Sei PA ein Parametertyp von m in A, PB ein Parametertyp von m in B
- Wenn PB ein Supertyp von PA ist, spricht man von Kontravarianz, denn die entsprechenden Parametertypen variieren gegenläufig zur Subtypenbeziehung von A und B
- Wenn PB ein Subtyp von PA ist, spricht man von Kovarianz, denn die entsprechenden Parametertypen variieren gleichgerichtet zur Subtypenbeziehung von A und B

Welche Bedingungen muss man an die Überschreibung von Methoden stellen, damit der überschreibende Typ zuweisungskompatibel zum überschriebenen bleibt?
Wenn die Eingabeparameter einer redefinierten Methode kontravariante und die Ausgabeparameter kovariant redefiniert werden, bleibt die Zuweisungskompatibilität des redefinierten Typs mit den redefinierenden Typ erhalten

Sind bei der Redefinition in Java Kovarianz und / oder Kontravarianz zulässig? Wenn ja, welche Art der Varianz ist an welchen Stellen zulässig?
- Für Eingabeparameter ist keine Kontra- und keine Kovarianz erlaubt
- Eingabeparameter können also nur invariant definiert werden
- Ausgabeparameter können dagegen ab Java 5.0 kovariant redefiniert werden

Sid bei der Redefinition in Eiffel Kovarianz und / oder Kontravarianz zulässig? Wenn ja, welche Art der Varianz ist an welchen Stellen zulässig?
- In Eiffel wird beim Redefinieren von Methoden verlangt, dass die entsprechenden Parametertypen gleich oder kovariant redefiniert werden
- Kontravarianz ist nicht erlaubt
- Dadurch ist die Substituierbarkeit in Gegenwart von kovarianten Überschreibungen eingeschränkt

Was versteht man unter Verhaltenskonformität im Kontext von Subtyping?
- Die Grundregel für Subtyping besagt, dass ein Objekt von einem Supertyp überall vorkommen kann, an denen Objekte des Supertyps zulässig sind
- Dazu muss der Subtyp die Eigenschaften des Supertyps besitzen
- Diese Eigenschaften betreffen sowohl syntaktische Bedingungen bspw. für die Deklaration von Attributen und Methodensignaturen als auch das Verhalten des Subtyps, also seine Methodenimplementierungen
- Ein Subtyp verhält sich konform zu seinem Supertyp, wenn seine Methodenimplementierungen dasselbe Verhalten aufweisen, wie durch seinen Supertyp vorgegeben

Wie könnte ein Beispiel aussehen für einen Subtyp, der sich nicht konform zu seinem Supertyp verhält?
- Die push-Methode eines Stacks legt ein Objekt oben auf den Stack und die pop-Methode nimmt das oberste Element weg
- Ein Subtyp von Stack, der die Methode pop so abändert, dass sie das Element aus dem Stack löscht, das sich ganz unten befindet, verhält sich nicht konform zum Supertyp, da er eine FIFO-Queue implementiert

Was ist Polymorphie allgemein?
- Vielgestaltigkeit
- Im Zusammenhang mit Programmiersprachen spricht man von Polymorphie, wenn Programmkonstrukte oder Programmteile für Objekte mehrerer Typen verwendbar sind

Was ist das Fragile-Base-Problem?

- Allgemein versteht man darunter, dass Änderungen einer Klasse in der Vererbungshierarchie neben den für die geänderte Klasse gewünschten Effekten auch unerwünschte Effekte in anderen Klassen haben kann
- Diese unerwünschten Änderungen können offensichtlich (die Änderungen werden an eine Subklasse vererbt, wo sie aber nicht sinnvoll sind) oder verborgen sein
- letzteres ist oft bei offener Rekursion der Fall, nämlich wenn eine zuvor durch dynamisches Binden aus Methoden der Superklasse aufgerufene überschreibende Methode in der Subklasse nicht mehr aufgerufen wird