04 OOP-Vererbung Flashcards

1
Q

Welche drei zentrale Konzepte der ojektorientierten Programmierung gibt es unter anderem?

A

Das Prinzip der Vererbung, Abstraktion und Kapselung

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Was ermöglicht das Prinzip der Vererbung?

A

Es ermöglicht die Wiederverwendbarkeit von Programmcode

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Wie wird eine Klasse genannt, die ihre Elemente vererbt?

A

Basisklasse, Superklasse, Oberklasse, oder Elternklasse

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Wie wird die Klasse, die die Elemenete erbt genannt?

A

Abgeleitete Klasse, Subklasse, Unterklasse, Kindklasse

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Welche Elemente einer Klasse werden vererbt?

A

Alle Elemente der Basisklasse außer dem Konstruktor und Destruktor, private Elemente ebenfalls aber es ist in der abgeleiteten Klasse keine direkter Zugriff möglich

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Was ist die Syntax der Vererbung?

A

Syntax der Vererbung
Klasse “Abgeleitet” erbt von Klasse “Basis”:

class Abgeleitet : Basis 
{
   // Programmcode der abgeleiteten Klasse
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Wie baut man Klassenhierarchien auf?

A

Durch eine wiederholte Vererbung, indem eine abgeleitete Klasse wiederum Basisklasse für eine neue Vererbung ist

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

An wie viele abgeleitete Klassen kann eine Basisklasse vererben

A

an beliebig viele abgeleitete Klassen

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Von wie vielen Basisklassen kann bei C# eine abgeleitete Klasse erben?

A

Nur von einer Basisklasse

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

In welchem “Sinne” muss Vererbung durchgeführt werden? Gib ein (selbst gewähltes) Beispiel dafür an!

A

Im Sinne einer Spezialisierung

Fahrzeug
Personenkraftwagen
Skoda

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Welche Beziehung muss zwischen den abgeleiteten Klassen einer Klassenhierarchie bestehen? Gib ein (selbst gewähltes) Beispiel dafür an!

A

Ist ein Beziehung

Essen –> Obst –> Apfel

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Wie muss eine “Hat ein-Beziehung” zwischen Klassen beim Klassendesign berücksichtigt werden? Gib ein (selbst gewähltes) Beispiel an!

A

Sie darf beim Klassendesign nicht durch eine Vererbung, sondern eine Einbettung abgebildet werden

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Beschreibe die Funktion von “protected”!

A

Protected Elemente sind aus Sicht der abgeleiteten Klasse public aus der Sicht der Außenwelt, also außerhalb der Klassenhierarchie private

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Was sollte im Zusammenhang mit “protected” beachtet werden?

A

Es gibt das Risiko, dass die Elemente in der Basisklasse unsachgemäßer Weise verändert werden können

sensible Daten sollen daher in der Basisklasse nicht als protected deklariert werden!!!

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Wie wird die Neudefinition von Elementen der Basisklasse in einer abgeleiteten Klasse bezeichnet und welches Schlüsselwort sollte dabei verwendet werden?

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Auf welche Felder und Eigenschaften greifen geerbte Methoden immer zu, auch wenn diese in einer abgeleiteten Klasse neu definiert wurden?

A

Auf die verdeckten Felder und Eigenschaften des eigenen Objekts (des Basisklassenunterobjekts)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Werden bei einer Vererbung vermehrt Elemente der Basisklasse verdeckt, ist das häufig ein Zeichen von …

A

Design-Fehlern in den Basisklassen oder in der abgeleiteten Klasse

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Was bilden die von einer Basisklasse geerbten Elemente innerhalb eines Objekts der abgeleiteten Klasse?

A

Ein Unterobjekt

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Was ist wichtig für das Verständnis und den sinnvollen Einsatz der Vererbung bei der objektorientierten Programmierung

A

Die Berücksichtigung der Tatsache, dass die von der Basisklasse geerbten Elemente innerhalb des Objekts der abgeleiteten Klasse “quasi ein Unterobjekt bilden”

20
Q

Was passiert wenn eine Basisklasse einen Konstruktor definiert

A

Es resultiert in einer abgeleiteten Klasse ohne einen expliziten Aufruf dieses Konstruktors eine Fehlermeldung!

21
Q

Kann in einer abgeleiteten Klasse auf private Elemente der Basisklasse zugegriffen werden?

A

Nein, sie werden vererbt, aber es ist kein direkter Zugriff möglich

22
Q

Syntax automatische Eigenschaften

A

public double Op1 {get; set;}

23
Q

Warum implementiert man automatische Eigenschaften

A

Zur raschen und einfachen Implementierung von Feldern welche von anderen Klassen aus ohne Zugriffskontrollen verwendbar sein sollen.

Automatische Eigenschaften ermöglichen auch die nachträgliche Implementierung von Zugriffskontrollen, ohne die Schnittstelle der Klasse nach außen verändern zu müssen. Dazu wird die automatische Eigenschaft einfach in eine “normale Eigenschaft” umgewandelt.

24
Q

Welche zwei Funktionen haben Klassenhierarchien?

A

bestehenden Code in neuen Klassen wiederzuverwenden

Weiterführung der Basisklasse im Sinne einer Spezialisierung

25
Q

Wann ist bei Klassenhierarchien eine Spezialisierung gegeben?

A

Wenn eine Ist-eine-Beziehung zwischen den Objekten der abgeleiteten Klasse und der Basisklasse besteht.

Jedes Objekt einer abgeleiteten Klasse kann immer auch als Objekt einer Basisklasse angesehen werden:

“Ein Nadelbaum ist immer auch ein Baum”.
“Eine Tanne ist immer auch ein Nadelbaum und immer auch ein Baum”.

Jedoch:
“Ein Baum muss nicht immer ein Nadelbaum sein.”
“Ein Nadelbaum muss nicht immer eine Tanne sein.”

26
Q

Was ist wichtig bei einer Hat-eine Beziehung?

A

Eine “Hat-ein-Beziehung” darf beim Klassendesign nicht durch eine Vererbung, sondern durch eine Einbettung abgebildet werden. Dabei wird in einer Klasse eine Instanzvariable einer anderen Klasse definiert:

27
Q

Was ist beim Zugriffsmodifizierer “protected” zu beachten?

A

Auf private-Elemente einer Basisklasse kann auch in davon abgeleiteten Klassen nicht direkt zugegriffen werden.

Protected-Elemente sind aus Sicht der abgeleiteten Klasse public, aus Sicht der "Außenwelt" (außerhalb der Klassenhierarchie) private.

Protected-Elemente vereinfachen in abgeleiteten Klassen den Zugriff auf interne Elemente der Basisklasse, bergen aber das Risiko, dass dort wiederum die Elemente in unsachgemäßer Weise verändert werden können. Sensible Daten (Felder) sollten in der Basisklasse nicht als “protected” deklarieret werden, der Zugriff sollte lediglich über protected- oder public-Methoden oder Eigenschaften erfolgen (Konzept der Datenkapselung)!

28
Q

Wann verwenden geerbte Methoden die Felder und Eigenschaften des Unterobjekts ihrer eigenen Klasse?

A

auch dann, wenn diese durch die Neudefinition von gleichnamigen Feldern oder Eigenschaften in einer abgeleiteten Klasse verdeckt wurden

29
Q

Was ist Verdeckung und was soll man dabei beachten?

A

Verdeckung = Die Neudefinition von geerbten Elementen einer Basiklasse in einer abgeleiteten Klasse

Sie soll nach Möglichkeit vermieden werden. zB wird dann damit der “Mehrwert der Vererbung” völlig zunichte gemacht!

Eine Verdeckung (mit dem Schlüsselwort new) ist häufig ein Zeichen von Design-Fehlern in der Basisklasse oder in der abgeleiteten Klasse!

30
Q

Wie wird die Neudefinition von Elementen der Basisklasse in einer abgeleiteten Klasse bezeichnet und welches Schlüsselwort sollte dabei verwendet werden?

A

Verdeckt, New

31
Q

Wie lautet der Quelltext für einen catch-Block, der die Fehlermeldung der oben erzeugten Ausnahme in der Konsole zur Anzeige bringt?

A

Catch (Exception ex)

{
Console.WriteLine(“FEHLER: “ + ex.Message);
}

32
Q

Werden bei einer Vererbung vermehrt Elemente der Basisklasse verdeckt, ist das häufig ein Zeichen von …

A

Design-Fehlern in den Basisklassen oder in der abgeleiteten Klasse

33
Q

Was passiert wenn in einer Basisklasse ein Konstruktor definiert wird?

A

Ohne einen expliziten Aufruf des Konstruktors resultiert in der abgeleiteten Klasse eine Fehlermeldung

34
Q

Was passiert, wenn ein Objekt einer abgeleiteten Klasse erstellt wird?

A

Zuerst wird der Konstruktor der abgeleiteten Klasse aufgerufen. Dieser richtet gemeinsam mit dem new-Operator das Objekt im Speicher ein.

Dabei wird festgestellt, dass das Objekt über ein Unterobjekt der Basisklasse verfügt.

Zur Einrichtung dieses Unterobjekts muss der Konstruktor der Basisklasse aufgerufen werden. Wurde in der Basisklasse ein eigener Konstruktor programmiert, so steht dort der Standardkonstruktor für einen automatischen (impliziten) Aufruf nicht mehr zur Verfügung:

35
Q

Durch welche Methoden kann man das Fehlen eines Standardkonstruktors beheben?

A
  1. der explizite Aufruf eines Basisklassenkonstruktors

2. Konstruktorüberladung

36
Q

Was muss man bei überladenen Methoden beachten?

A

Überladene Methoden besitzen denselben Namen, aber eine unterschiedliche Parameterliste. D.h. sie dürfen gleich heißen, wenn sie sich in ihren Parametern, welche in den runden Klammern angegeben werden, unterscheiden. Dabei muss die Anzahl und/oder es müssen die Datentypen der Parameter unterschiedlich sein.

37
Q

Wie sehen überladene Konstruktoren aus?

A

Das Gleiche gilt auch für Konstruktoren! So kann das Fehlen eines Standardkonstruktors durch das Überladen mit einem parameterlosen Konstruktor “kompensiert werden”. Ein parameterloser Konstruktor wird wie ein Standardkonstruktor verwendet, wenn bei der Instanziierung einer Klasse keine Konstruktor-Argumente angegeben werden.

38
Q

Welche Funktion hat ein parameterloser Konstruktor?

A

Er wird anstelle des Standardkonstruktors verwendet, wenn bei der Instanziierung einer Klasse keine Konstruktor Argumente angegeben werden

39
Q

Was muss in einer abgeleiteten Klasse erfolgen, wenn in einer Basisklasse der Standardkonstruktor nicht vorhanden ist und dort auch kein parameterloser Konstruktor hinzugefügt werden kann?

A

Es muss in der abgeleiteten Klasse der Basisklassenkonstruktor explizit aufgerufen werden

40
Q

Syntax eplizites Aufrufen Basisklassenkonstruktor

A

Nach der Konstruktor Definition in der abgeleiteten Klasse wird “:” angegeben dann base mit den Parametern in runden Klammern

41
Q

Was ist eine Methodenüberladung? Können Konstruktoren überladen werden?

A

Eine Neudefinition einer Methode mit dem selben Namen aber einer unterschiedlichen Parameterliste

Ja

42
Q

Was ist Verdeckung oder Vererbung?

A

Wenn geerbte Elemente in einer abgeleiteten Klasse neu definiert werden,

43
Q

Was ist bei dieser Neudefinition zu beachten?

also Verdeckung

A

Diese muss genauso erfolgen, wie in der Basisklasse, lediglich die in Methoden und Eigenschaften erhaltenen Anweisungen können sich unterscheiden

44
Q

Wozu dient das Schlüsselwort “new”?

A

Damit kann eine Compiler-Warnung beim Verdecken vermieden werden

45
Q

Wozu dient das Schlüsselwort “base” allgemein?

A

Damit kann in einer abgeleiteten Klasse auf die verdeckten Elemente der Basisklasse zugegriffen werden

46
Q

Werden bei einer Vererbung vermehrt Elemente der Basisklasse verdeckt, ist das meist ein Zeichen von …

A

Design-Fehlern in der Basisklasse oder in der abgeleiteten Klasse