10 - Klassen und Objekte Flashcards

1
Q

Was sind Klassen? Wie werden sie deklariert?

A

Klassen sind zusammengesetzte Datentypen, die mehrere Elemente zusammenfassen. Sie können Variablen unterschiedlicher Datentypen kombinieren.
Deklaration:
class Date {
int day;
String month;
int year;
}
->day, month und year sind Attribute/Member-Variablen

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

Wie bei jedem Datentyp, kann man Variablen von einer Klasse deklarieren. Wie?

A

neue Variable (neues Objekt) der Klasse anlegen:
Date today = new Date();
Daten eingeben:
today.day = 1;
today.month = “Februar”;
today.year = 2024;
->es können beliebig viele Objekte einer Klasse erzeugt werden (allerdings durch Heap-Speicher begrenzt)

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

Was gibt eine Klasse vor?

A

Eine Klasse ist eine Schablone für Objekte. Sie gibt die Struktur der Objekte vor (z.B.: Bruch muss Zähler und Nenner haben).

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

Wie funktioniert die Speicherverwaltung von Objekten?

A

Objekte werden mit new erzeugt, wodurch im Heap Speicherplatz reserviert wird und der Variable eine Referenz zugewiesen wird. Zeigt keine Variable mehr auf ein Objekt (null), wird der Garbage Collector den Speicher automatisch wieder freigeben.

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

Was sind Heap und Stack?

A

Der Heap ist ein dynamischer Speicher, der für dynamische Speicherallokation verwendet wird (mit new; Objekte und Arrays hier -> Variablen am Stack). Der Zugriff erfolgt etwas langsamer als beim Stack, allerdings ist die Lebensdauer der Daten nicht auf den Block/die Methode begrenzt.
Der Stack ist ein Stapelspeicher und wird für lokale Variablen, Parameter usw. verwendet. Er wächst mit einem Methodenaufruf und schrumpft nach Beenden der Methode wieder (Variablen eher flüchtig). Der Zugriff erfolgt sehr schnell, wobei das LIFO-Prinzip gilt.

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

Wie kann man Objekte vergleichen?

A

Mit == kann man die Referenzen von Objekten vergleichen. Will man den Inhalt von Objekten vergleichen, muss man ihre Attribute vergleichen. Beispiel:
f1.numerator == f2.numerator

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

Wie hängen Objekte und Methoden zusammen?

A

Klassen können Methoden für ihre Objekte deklarieren. Diese “Instanzmethoden” können auf die Instanzvariablen des Objekts zugreifen.

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

Was sind Konstruktoren?

A

Konstruktoren sind spezielle Methoden zur Initialisierung des Objektes und werden beim Erzeugen des Objektes (mit new) aufgerufen. Sie haben denselben Namen wie die Klasse und man kann mehrere Konstruktoren (mit unterschiedlichen Parametern) deklarieren. Beispiel:
public Fraction(int numerator, int denominator) {
this.numerator = numerator;
this.denominator = denominator;
}
->this bezieht sich auf das Objekt, d.h. hier ist die Instanzvariable gemeint (oben; Namen der Parameter gleich, deshalb ist this notwendig)

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

Wann benötigt man Klassenmethoden und Klassenattribute?

A

Klassenmethoden und Klassenattribute benötigt man dann, wenn man Methoden oder Attribute nicht nur für Objekte, sondern für die Klasse definieren möchte. Man muss kein Objekt erzeugen, um sie zu verwenden, man kann direkt über den Klassennamen darauf zugreifen. Klassenmethoden und Klassenattribute existieren nur einmal (unabhängig von den Objekten).

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

Wie kann man ein Klassenattribut deklarieren?

A

Ein Klassenattribut wird mit dem Schlüsselwort static deklariert.
Beispiel:
static int fractionCounter = 0;
Zugriff von innerhalb der Klasse:
fractionCounter++;
Zugriff von außerhalb:
Fraction.fractionCounter;
->zählt, wie viele Brüche in der Klasse Fraction erzeugt werden, liefert Wert zurück

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

Wie kann eine Klassenmethode deklariert werden?

A

Eine Klassenmethode kann mit dem Schlüsselwort static deklariert werden.
Beispiel:
static void resetCounter() {
fractionCounter = 0;
}
->macht etwas, gibt nichts zurück

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

Was sind Factory-Methoden?

A

Factory-Methoden sind Methoden, die Objekte erzeugen und zurückgeben. Beispiel:
static Fraction getOneThird() {
return new Fraction(1, 3);
}

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

Was ist die main()-Methode?

A

Die main-Methode ist auch nur eine statische Methode der jeweiligen Klasse. Sie wird automatisch durch die JVM bei Programmstart aufgerufen.

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

Was sind Wrapper-Klassen (für primitive Datentypen)?

A

Wrapper packen Werte von primitiven Datentypen in Objekte (Autoboxing: Java verpackt/entpackt Werte automatisch). Beispiele dafür sind MAX_VALUE und MIN_VALUE. Primitive Datentypen sind byte, short, int, long, float, double, boolean und char.

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

Was sagen private, protected und public (und package private) über die Sichtbarkeit von Methoden und Attributen aus?

A
  • private: Methode/Attribut ist außerhalb der Klasse nicht sichtbar, auch nicht in vererbten Klassen
  • protected: außerhalb der Klasse nicht sichtbar, in vererbten Klassen sichtbar
  • public: innerhalb und außerhalb der Klasse sichtbar
  • package private: in anderen Klassen desselben Pakets sichtbar, auch in vererbten; nicht sichtbar in Klassen eines anderen Pakets, auch nicht in vererbten
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Was ist Information Hiding (Geheimnisprinzip)?

A

Attribute, deren Werte kritisch sind (z.B. denominator = 0) und daher geprüft werden müssen (sonst fehlerhafter Programmablauf), sollten private sein. Um sie zu ändern und abzufragen, werden sogenannte Getter und Setter Methoden verwendet. Diese sind von außen sichtbar. Das wird als Kapseln von Daten bezeichnet. Man sollte bei Klassen niemals mehr öffentlich preisgeben, als unbedingt notwendig ist.
->man verwendet geschützte Memberattribute, aber öffentliche Getter und Setter Methoden

17
Q

Können Klassen auch andere Klassen beinhalten?

A

Ja.

18
Q

Wozu braucht man Vererbung?

A

Da Klassen Dinge der realen Welt modellieren und es diese Dinge oft in mehreren Varianten gibt, müssen Programme mit verschiedenen Varianten eines Objekts umgehen können. Diese Varianten kann man durch Klassifikation hierarchisch gliedern. Man möchte generelle Eigenschaften (Attribute) und Verhalten (Methoden) nicht ständig neu implementieren, sondern vererben können.

19
Q

Wie funktioniert Vererbung in Java?

A

In Java verwendet man das Keyword extends hinter dem Klassennamen, um von EINER anderen Klasse zu erben (z.B.: class Reptil extends Tier). Die erbende (untere) Klasse nennt man Subklasse, die (obere) Klasse, von der vererbt wird, nennt man Superklasse. Die Subklasse erbt dabei Attribute und Methoden, sie kann Methoden der Superklasse allerdings auch überschreiben. In Java erbt jede Klasse von Object!

20
Q

Was sind abstrakte Klassen?

A

Wenn man eine Superklasse nur als Vorlage für die Vererbung verwenden möchte, weil man z.B. kein Objekt dieser Klasse erstellt, dann kann sie auch als abstrakte Klasse definiert werden. Von einer abstrakten Klasse können keine Objekte erzeugt werden. Beispiel:
abstract class Article {…}

21
Q

Was sind Interfaces (Schnittstellen)?

A

Interfaces sind ähnlich zu abstrakten Klassen, enthalten jedoch keine Attribute und keine Methodenrümpfe. Es handelt sich um Datentypen, die mit dem Keyword interface deklariert wurden. Sie definieren Methoden-Signaturen (alle öffentlich) und werden in einer Vererbungshierarchie verwendet (Keyword implements). Interfaces definieren keinen Konstruktor.