JAVA & Objektorientiertes Programmieren

Eine Einführung in das objektorientierte Programmieren mit JAVA Diese Kartei baut auf dem Stoff des Moduls OOP an der HSLU geleitet von Roland Gisler auf.

Eine Einführung in das objektorientierte Programmieren mit JAVA Diese Kartei baut auf dem Stoff des Moduls OOP an der HSLU geleitet von Roland Gisler auf.


Set of flashcards Details

Flashcards 500
Students 19
Language Deutsch
Category Computer Science
Level University
Created / Updated 04.12.2016 / 16.08.2024
Weblink
https://card2brain.ch/box/java_objektorientiertes_programmieren
Embed
<iframe src="https://card2brain.ch/box/java_objektorientiertes_programmieren/embed" width="780" height="150" scrolling="no" frameborder="0"></iframe>

Was heisst Spezialisieren (in Bezug auf Methoden)?

Wir überschreiben in einer Unterklasse eine bestehende Methode einer Oberklasse oder ergänzen eine neue Methode

Vererbung verursacht eine sehr 1.)________ und sollte 2.)__________ eingesetzt werden

Eine Vererbung ist wann passend?

Nur dann, wenn man einen "is-a" Satzs bilden kann. Beispiel: "Ein Student ist eine Person"

Ist dieser Fall eine sinnvolle Implementation einer Vererbung?

Oberklasse: Ellipse
Unterklasse: Kreis

Nein, denn ein Kreis und eine Ellipse sind zwar sehr ähnlich, trotzdem darf man nicht sagen, dass ein Kreis eine Ellipse ist!

Was bedeutet FCoI?

Favorize Composition over Inheritance:

Im Zweifelsfall besser auf Vererbung verzichten und stattdessen eine Komposition machen.
Beispiel: Ein Auto hat einen Motor (nicht ist ein Motor)

Entweder entwirft man Klassen explizit für die Spezialisierung, oder aber man verhidnert diese aktiv!

Welches Schlüsselwort verhindert die Spezialisierung einer Klasse?

final

Welche Methoden sollte man explizit vor dem Überschreiben schützen?

alle nicht abstrakten Methoden

Was sind die wichtigsten Aufgaben einer IDE?

- Visualisierung und Navigation von/im Quellcode
- Leistungsfähige Quellcode-Editoren
- Werkzeuge für Refactoring
- Organisation von Quellcode in Projekten
- Konfiguration von Projekten
- Quellcode kompilieren und ausführen, Debugging
- Anbindung an Versionskontrollsysteme
- Erzeugung, Import und Export von verschiedenen Artefakten
- usw.

Wie sieht eine typische Verzeichnisstruktur einer IDE aus?

siehe Bild

Weshalb setzt man das File-Encoding einer IDE auf UTF-8?

Damit der Austausch auch über verschiedene Plattformen (Windows, Mac, Linux, etc.) funktioniert

In einem Wort, wofür steht Polymorphie?

Vielgestaltigkeit

Was hat die Fähigkeit zur Polymorphie zur Folge?

- Methoden können abhängig vom Parametertyp unterschiedlich verhalten
- Objekte von unterschiedlichen Typen können sich bei unterschiedlicher Behandlung unterschiedlich verhalten
- Die gleiche Klasse kann für unterschiedliche Typen parametrisiert werden

Was ist ein Vorteil von Polymorphie?

Sie führt zu einfacherem Programmcode. Sie ermöglicht die Handhabung von Objekten unterschiedlicher Klassen auf einer allgemeineren Ebene.

Programme werden flexibler und leichter erweiterbar

Wie viele Methoden mit dem gleichen Namen darf eine Klasse haben?

So viele man will, solange die Parameterlisten unterschiedlich sind

Was bringt es zwei gleiche Methoden (mit gleichem Namen) aber unterschiedlicher Parameterzahl- oder art zu haben?

Gleiche (logische) Funktionalität für unterschiedliche Typen.
Vereinfachte Methoden mit weniger Parameter, welche sinnvolle Defaultwerte verwenden

Zeige ein Beispiel von Polymorphie mit zwei Methoden und gleichem Namen

public int max(int a, int b) {...}
public float max(float a, float b) {...}

public int increment(int increment) {...}
public int increment() { return this.increment(1); }

Java wurde so kreiert, dass alles was geht auch vernünftig ist!

Was ist sinnvoll beim Overloading?

Ist das Überladen von Methoden identisch zum Überladen von Konstruktoren?

Grundsätzlich schon.
Einzige Spezialität: Aufruf eines überladenen Konstruktors aus einem anderen Konstruktor (der selben Klasse) erfolgt nicht mit dem Namen, sondern mit dem Schlüsselwort this(...)

siehe Beispiel

Bei Konstruktoren mit unterschiedlicher Parameterzahl erfolgt die eigentliche Implementation meist im Konstruktor mit der 1.)________ Parameterzahl.

Konstruktoren mit weniger Parametern rufen diesen dann mit 2.)_______ und entsprechend sinnvollen Default-Werten auf. 

Überschreiben von Methoden erfolgt immer in welchem Kontext?

Im Kontext einer Vererbung oder der Implementation eines Interfaces

Eine Methode der Oberklasse kann (sofern sie nicht als ________ markiert wurde) in einer Unterklasse überschrieben werden. Identischer Header mit spezifischer Implementation!

Die Unterklasse kann über welches Schlüsselwort auf die Implementation der Oberklasse zurückgreifen?

super.methode().

Bedingt natürlich entsprechende Sichtbarkeit!

Bei der Implementation eines Interfaces, oder wenn die Methoden in der Oberklasse abstrakt sind, wird was erzwungen?

Das Überschreiben dieser Methoden (konkrete Implementation)

Wie sieht ein Beispiel einer Überschreibung aus?

siehe Bild

Was muss man beachten wenn man Konstruktoren überschreibt?

Man kann Konstruktoren nicht überschreiben!

Weshalb kann man Konstruktoren nicht überschreiben?

Jede Klasse hat einen eindeutigen Namen und somit sind ihre Signaturen à priori unterschiedlich

Bei Vererbung gilt: Der Typ einer Unterklasse ist ein Subtyp des Typs der Oberklasse

Bei der Implementation von Interfaces gilt:

Der Typ der implementierenden Klasse ist ein Subtyp des Interfaces

Jede Referenzvariable kann _______ Objekte des deklarierten Typs aufnehmen

Der Typ der Unterklasse ist auch vom Typ der Oberklasse.

Überlege dir ein Beispiel dazu

Shape shape1 = new Circle(...);
Shape shape2 = new Rectangle(...);

Wichtig: Über den Referenztyp Shape stehen dann nur die Eigenschaften von Shape zur Verfügung!

Was ist der Unterschied zwischen einem statischen und einem dynamischen Datentyp?

- Statischer Typ: Der Typ z.B. einer Variable, welcher zum Programmierzeitpunkt festgelegt wird. (Beispiele: Shape form; -> Shape ist der statische Type, Circle kreis; -> Circle ist der statische Typ.)

- Dynamischer Typ: Der tatsächliche Typ des Objektes zur Laufzeit, auf welches die Referenz zeigt, kann auch ein Subtyp sein. (Beispiel: Object object = new Circle(); -> Während der statische Typ hier sogar "nur" Object ist, ist der dynamische Typ des tatsächlichen Objektes Circle!)

Innerhalb einer Typhierarchie kann man zwischen Super - und ______typen casten. Ein Cast verändert nie den dynamischen Typ des eigentlichen Objektes, sondern ändert nur den Typ der Referenz!

Sub

Was ist Up- und Downcasting?

Da Vererbungshierarchien gerichtete Beziehungen sind, unterscheidet man die Castings in zwei Richtungen:

- Upcasting: Vom Subtyp zum Typ, also von der Spezialisierung zur Generalisierung.

- Downcasting: Vom Typ zum Subtyp, also von der Generalisierung zur Spezialisierung.

Die Warnung vorweg: Analog zu den Castings zwischen elementaren Datentypen ist auch hier nicht alles möglich!

Die Referenz eines Subtypes kann jederzeit problemlos auf einen _________ gecastet werden.

Supertyp

Upcasting findet 1.)_______ statt, kann aber auch 2.)_______ stattfinden.

Stimmt diese Aussage und worauf muss man hier achten?

Downcasting: Die Referenz einer Generalisierung wird zu einem spezialisiertem Typ gecastet.

Ja sie stimmt, aber Achtung:

Das ist nur möglich, wenn der dynamische Typ des Objektes kompatibel, also tatsächlich dem gewünschten Cast-Typ (oder einem Subtyp davon) entspricht.

Downcastings erfolgen immer _______ , und es stellt sich teilweise erst zur Laufzeit heraus, ob es zulässig ist (weil eben abhängig vom dynamischen Datentyp.

Object object = new Rectangle(...);

Welcher Teil dieser Zeile ist der statische Typ und welcher der dynamische Typ?

Der statische Typ ist Object, der dynamische Typ Rectangle