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.
Kartei Details
Karten | 500 |
---|---|
Lernende | 19 |
Sprache | Deutsch |
Kategorie | Informatik |
Stufe | Universität |
Erstellt / Aktualisiert | 04.12.2016 / 16.08.2024 |
Weblink |
https://card2brain.ch/box/java_objektorientiertes_programmieren
|
Einbinden |
<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.
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?
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)
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