Podcast
Questions and Answers
Warum ist es sinnvoll, den Zugriff auf ein Attribut zu verhindern, das im statischen Typ nicht definiert ist, obwohl der dynamische Typ es besitzt?
Warum ist es sinnvoll, den Zugriff auf ein Attribut zu verhindern, das im statischen Typ nicht definiert ist, obwohl der dynamische Typ es besitzt?
- Weil nur der dynamische Typ zur Compile-Zeit garantiert, dass ein Attribut existiert.
- Weil Attribute des statischen Typs immer schneller sind.
- Weil der statische Typ die Schnittstelle zur Verfügung stellt und nur darüber zur Compile-Zeit garantiert werden kann, dass ein Attribut existiert. (correct)
- Weil der statische Typ die Kompatibilität mit anderen Programmiersprachen gewährleistet.
Welche der folgenden Aussagen beschreibt am besten die Kernelemente des objektorientierten Designs?
Welche der folgenden Aussagen beschreibt am besten die Kernelemente des objektorientierten Designs?
- Kapselung, Vererbung, Polymorphie und Abstraktion (correct)
- Verkapselung, Serialisierung, Persistenz und Abstraktion
- Delegation, Komposition, Aggregation und Assoziation
- Modularität, Vererbung, Parallelität und Abstraktion
Welche der folgenden Aussagen trifft bezüglich der Sichtbarkeit von Methoden in Interfaces zu und welche Auswirkung hat dies auf implementierende Klassen?
Welche der folgenden Aussagen trifft bezüglich der Sichtbarkeit von Methoden in Interfaces zu und welche Auswirkung hat dies auf implementierende Klassen?
- Methoden haben keine definierte Sichtbarkeit in Interfaces und können in implementierenden Klassen beliebig deklariert werden.
- Methoden sind automatisch `public` und `abstract` und müssen in implementierenden Klassen als `public` implementiert werden. (correct)
- Methoden sind standardmäßig `protected` und können in implementierenden Klassen in der Sichtbarkeit reduziert werden.
- Methoden sind standardmäßig `private` und müssen in implementierenden Klassen als `public` deklariert werden.
In welchem Szenario treten typischerweise Namensprobleme bei Packages in Java auf und wie lassen sich diese am besten lösen?
In welchem Szenario treten typischerweise Namensprobleme bei Packages in Java auf und wie lassen sich diese am besten lösen?
Was gilt als Subtyp eines Interfaces I
in Java?
Was gilt als Subtyp eines Interfaces I
in Java?
Was ist der 'Scope' (Gültigkeitsbereich) im Kontext der Programmierung und wodurch wird die Sichtbarkeit eines Attributes oder einer Methode bestimmt?
Was ist der 'Scope' (Gültigkeitsbereich) im Kontext der Programmierung und wodurch wird die Sichtbarkeit eines Attributes oder einer Methode bestimmt?
Angenommen, die Methode foo
einer Klasse X
ist als final
deklariert. Was bedeutet das für abgeleitete Klassen von X
?
Angenommen, die Methode foo
einer Klasse X
ist als final
deklariert. Was bedeutet das für abgeleitete Klassen von X
?
Welchen Vorteil bieten Packages in Java-Programmen?
Welchen Vorteil bieten Packages in Java-Programmen?
Wozu dient das Schlüsselwort this
in einem Konstruktor üblicherweise und warum ist es wichtig, es in bestimmten Fällen nicht wegzulassen?
Wozu dient das Schlüsselwort this
in einem Konstruktor üblicherweise und warum ist es wichtig, es in bestimmten Fällen nicht wegzulassen?
Was versteht man unter dem Begriff 'Closure' in der Programmierung?
Was versteht man unter dem Begriff 'Closure' in der Programmierung?
Welche Konsequenzen hat die Wahl des statischen bzw. dynamischen Typs eines Objekts in Java?
Welche Konsequenzen hat die Wahl des statischen bzw. dynamischen Typs eines Objekts in Java?
Wie viele Klassen kann eine Klasse in Java erweitern und wie viele Interfaces kann sie implementieren?
Wie viele Klassen kann eine Klasse in Java erweitern und wie viele Interfaces kann sie implementieren?
Was ist der Hauptunterschied zwischen Attributen von Klassen und Klassenattributen (statischen Attributen)?
Was ist der Hauptunterschied zwischen Attributen von Klassen und Klassenattributen (statischen Attributen)?
Erläutern Sie den Zusammenhang zwischen dem Schlüsselwort protected
und dem Konzept der Vererbung in der objektorientierten Programmierung.
Erläutern Sie den Zusammenhang zwischen dem Schlüsselwort protected
und dem Konzept der Vererbung in der objektorientierten Programmierung.
Warum sind die Bestandteile void
, static
und public
in der Signatur der main()
-Methode in Java notwendig?
Warum sind die Bestandteile void
, static
und public
in der Signatur der main()
-Methode in Java notwendig?
Kann eine Klasse in Java zwei Methoden mit identischer Signatur haben? Berücksichtigen Sie bei Ihrer Antwort die Begriffe 'Überladen' und 'Überschreiben'.
Kann eine Klasse in Java zwei Methoden mit identischer Signatur haben? Berücksichtigen Sie bei Ihrer Antwort die Begriffe 'Überladen' und 'Überschreiben'.
Nennen Sie die zentralen Bausteine im funktionalen Programmieren und die Kernelemente des funktionalen Programmdesigns.
Nennen Sie die zentralen Bausteine im funktionalen Programmieren und die Kernelemente des funktionalen Programmdesigns.
Auf welches Problem reagiert der Garbage Collector hauptsächlich und wie funktioniert er im Wesentlichen?
Auf welches Problem reagiert der Garbage Collector hauptsächlich und wie funktioniert er im Wesentlichen?
Was versteht man unter formalen und aktualen Parametern im Kontext von Methoden?
Was versteht man unter formalen und aktualen Parametern im Kontext von Methoden?
Die Klasse X
besitzt eine Methode m
, die Exceptions vom Typ Ex1
wirft. Die Klasse Y
erbt von X
und überschreibt m
. Welche Exception-Klassen dürfen in der throws
-Klausel in Y.m
stehen?
Die Klasse X
besitzt eine Methode m
, die Exceptions vom Typ Ex1
wirft. Die Klasse Y
erbt von X
und überschreibt m
. Welche Exception-Klassen dürfen in der throws
-Klausel in Y.m
stehen?
Flashcards
Zugriff auf undefiniertes Attribut?
Zugriff auf undefiniertes Attribut?
Der Zugriff auf ein Attribut, das im statischen Typ nicht definiert ist, ist nicht erlaubt, auch wenn der dynamische Typ es besitzt.
Vier Kernelemente des OO-Designs?
Vier Kernelemente des OO-Designs?
Kapselung, Vererbung, Polymorphie, Abstraktion.
Zwei Kernelemente der OO-Abstraktion?
Zwei Kernelemente der OO-Abstraktion?
Interfaces, abstrakte Klassen.
Sichtbarkeit von Interface-Methoden?
Sichtbarkeit von Interface-Methoden?
Signup and view all the flashcards
Wann gibt es Package-Namenskonflikte?
Wann gibt es Package-Namenskonflikte?
Signup and view all the flashcards
Was bedeutet 'Scope'?
Was bedeutet 'Scope'?
Signup and view all the flashcards
Auswirkungen von 'final' auf Methoden?
Auswirkungen von 'final' auf Methoden?
Signup and view all the flashcards
Drei Vorteile von Packages?
Drei Vorteile von Packages?
Signup and view all the flashcards
Wofür 'this' im Konstruktor?
Wofür 'this' im Konstruktor?
Signup and view all the flashcards
Was ist eine Closure?
Was ist eine Closure?
Signup and view all the flashcards
Statisch vs. dynamisch: Auswirkung?
Statisch vs. dynamisch: Auswirkung?
Signup and view all the flashcards
Erweiterung vs. Implementierung?
Erweiterung vs. Implementierung?
Signup and view all the flashcards
Klassenattribute vs. Instanzattribute?
Klassenattribute vs. Instanzattribute?
Signup and view all the flashcards
Was macht protected
?
Was macht protected
?
Signup and view all the flashcards
main()
Signatur: Warum public static void
?
main()
Signatur: Warum public static void
?
Signup and view all the flashcards
Zweck von Exceptions?
Zweck von Exceptions?
Signup and view all the flashcards
Bedingungen für Map Keys/Values?
Bedingungen für Map Keys/Values?
Signup and view all the flashcards
Was ist referentielle Transparenz?
Was ist referentielle Transparenz?
Signup and view all the flashcards
Array vs. Liste: Unterschiede?
Array vs. Liste: Unterschiede?
Signup and view all the flashcards
Java vs. Racket: Typisierung?
Java vs. Racket: Typisierung?
Signup and view all the flashcards
Study Notes
Zugriff auf Attribute und statische Typen
- Der Zugriff auf Attribute, die im statischen Typ nicht definiert sind, ist unzulässig, selbst wenn der dynamische Typ dieses Attribut besitzt.
- Diese Regelung ist sinnvoll, da der statische Typ die Schnittstelle vorgibt und nur so zur Compile-Zeit die Existenz eines Attributs garantiert werden kann.
Kernelemente des objektorientierten Designs
- Kernelemente des Designs sind Kapselung, Vererbung, Polymorphie und Abstraktion.
- Interfaces und abstrakte Klassen sind Kernelemente der Abstraktion.
Sichtbarkeit von Interface-Methoden
- Methoden in Interfaces sind automatisch
public
undabstract
. - Implementierende Klassen müssen diese Methoden als
public
implementieren.
Namenskonflikte bei Packages
- Namenskonflikte treten auf, wenn mehrere Packages denselben Namen haben.
- Eindeutige Namenskonventionen, wie z.B.
de.uni.projekt
, können dieses Problem beheben.
Subtypen eines Interfaces
- Alle Klassen und Interfaces, die ein Interface
I
direkt oder indirekt implementieren oder erweitern, sind Subtypen vonI
.
Scope (Gültigkeitsbereich)
- Der Scope bezeichnet den Gültigkeitsbereich einer Variable oder Methode.
- Die Sichtbarkeit wird durch Sichtbarkeitsmodifikatoren (
private
,public
, etc.) und den Kontext (Klasse, Paket, etc.) bestimmt.
Finale Methoden in Vererbung
- Wenn eine Methode
foo
in einer KlasseX
alsfinal
deklariert ist, darf sie in keiner Subklasse überschrieben werden.
Vorteile von Packages
- Packages bieten eine bessere Strukturierung, vermeiden Namenskonflikte und fördern die Wiederverwendbarkeit von Code.
Verwendung von this
in Konstruktoren
- Das Schlüsselwort
this
wird verwendet, um Namenskonflikte mit Parametern zu vermeiden. - Beispiel: Ohne
this
wäre nicht eindeutig, auf welche Variablename
verwiesen wird (this.name = name
).
Closure Definition
- Eine Closure ist eine Funktion, die auf Variablen aus ihrem Entstehungskontext zugreifen kann.
Statischer vs. dynamischer Typ
- Der statische Typ bestimmt zur Compile-Zeit, welche Methoden und Attribute sichtbar sind.
- Der dynamische Typ bestimmt das tatsächliche Verhalten eines Objekts zur Laufzeit.
Implementierung von Interfaces und Ableitung von Klassen
- In Java kann eine Klasse beliebig viele Interfaces implementieren, aber nur von einer Klasse erben.
Attribute von Klassen vs. Klassenattribute
- Attribute von Klassen gehören zu Instanzen der Klasse.
- Klassenattribute sind
static
und gehören der Klasse selbst.
protected
und Vererbung
- Das Schlüsselwort
protected
erlaubt den Zugriff auf Member in Subklassen, auch außerhalb des eigenen Pakets, und fördert somit die Vererbung.
Bestandteile der main
-Methode
public
: Ermöglicht den Zugriff von außen (JVM).static
: Es wird kein Objekt benötigt, um die Methode aufzurufen.void
: Die Methode gibt keinen Wert zurück.
Methoden mit identischer Signatur
- Eine Klasse kann keine zwei Methoden mit identischer Signatur haben.
- Überladen bedeutet gleiche Methode, aber andere Parameter.
- Überschreiben bedeutet gleiche Signatur, aber andere Implementierung.
Funktionale Programmierung
- Zentrale Bausteine der funktionalen Programmierung sind Funktionen und Rekursion.
- Kernelemente sind Funktionen höherer Ordnung und Unveränderlichkeit von Datenstrukturen.
Garbage Collector
- Der Garbage Collector vermeidet Speicherlecks durch automatische Freigabe von nicht mehr erreichbaren Objekten.
Formale vs. Aktuale Parameter
- Formale Parameter sind in der Methodendefinition enthalten.
- Aktuale Parameter sind die konkreten Werte, die beim Aufruf an die Methode übergeben werden.
Exceptions in überschriebenen Methoden
- Wenn eine Klasse
X
eine Methodem
hat, die Exceptions vom TypEx1
wirft, kann eine KlasseY
, die vonX
erbt undm
überschreibt, nur die gleiche oder eine spezifischere Exception (d.h. Unterklassen vonEx1
) werfen.
Unterschiede zwischen Interfaces und abstrakten Klassen
- Interfaces enthalten nur Methodendeklarationen (seit Java 8 auch
default
-Implementierungen). - Abstrakte Klassen können Attribute und Methodendefinitionen enthalten.
Zweck von Exceptions
- Exceptions dienen zur Fehlerbehandlung ohne Programmabbruch.
Eigenschaften von Keys und Values in Map
- Keys dürfen nicht
null
sein und müssenequals()
undhashCode()
konsistent überschreiben. - Values können beliebig sein, auch
null
.
Referentielle Transparenz
- Referentielle Transparenz bedeutet, dass eine Methode bei gleichen Eingaben immer das gleiche Ergebnis ohne Seiteneffekte liefert.
- In Java bedeutet dies, dass Methoden den Zustand nicht verändern dürfen, wie z.B.
String.concat()
.
Alternativen zum Iterator
- Neben dem Erzeugen eines Iterators kann eine For-each-Schleife verwendet werden, um auf Elemente von Arrays oder Listen zuzugreifen.
Arrays vs. Listen
- Arrays haben eine feste Größe und sind schnell.
- Listen sind dynamisch und flexibel.
Typisierung in Racket und Java
- Java ist statisch typisiert
- Racket ist dynamisch typisiert
Funktionale Methode
- Eine funktionale Methode in Java hat keine Seiteneffekte und hängt nur von der Eingabe ab.
Das Interface Predicate
Predicate<T>
ist ein funktionales Interface mit der Methodetest(T t)
.- Eine Klasse ist für einfache Funktionen zu schwergewichtig.
Effectively final Variablen
- Eine Variable ist "effectively final", wenn sie nach der Initialisierung nicht mehr verändert wird.
- Lambda-Ausdrücke dürfen nur auf solche Variablen zugreifen.
Rekursion
- Rekursion bedeutet, dass eine Methode sich selbst aufruft.
- Die Terminierung wird durch eine Abbruchbedingung sichergestellt.
Eigenschaften von Klassenmethoden
- Klassenmethoden (statische Methoden) dürfen auf
static
-Variablen zugreifen, ohne ein Objekt zu benötigen. - Sie dürfen nicht auf
this
zugreifen und nichtabstract
sein.
Byteweises vs. zeichenweises Einlesen
- Byteweises Einlesen ist sinnvoll bei Binärdaten (z.B. Bildern).
- Zeichenweises Einlesen ist sinnvoll bei Textdaten.
Downcast
- Ein Downcast stellt eine Ausnahme der statischen Typisierung in Java dar, da der Compiler ihn erlaubt, aber zur Laufzeit Fehler auftreten können.
Listen in Java und Racket
- In Java ist
List
eine Schnittstelle mit konkreten Implementierungen. - In Racket sind Listen rekursive Datenstrukturen und immutabel.
Typinferenz
- Typinferenz bedeutet, dass der Compiler den Typ ohne explizite Angabe ableitet, z.B. mit
var
in Java (ab Version 10).
Modifier vs. Identifier
- Modifier steuern das Verhalten (z.B.
public
,static
). - Identifier sind Bezeichner von Variablen, Klassen und Methoden.
Kontextfreiheit
- Kontextfreiheit ist ein Begriff aus der Grammatiktheorie. Eine Sprache ist kontextfrei, wenn Produktionen unabhängig vom Kontext verwendet werden können.
Regel für die throws
-Klausel
- Wenn eine Methode eine geprüfte Exception wirft, muss sie diese entweder in der
throws
-Klausel deklarieren oder sie behandeln.
Throwable
, Error
und Exception
Throwable
ist die Oberklasse vonError
undException
.Error
sind schwere Fehler, z.B.OutOfMemory
.Exception
sind handhabbare Fehler.
add
und set
in List
add
fügt ein Element hinzu.set
ersetzt ein Element an einem bestimmten Index.
Typparameter bei Generics
- Typparameter bei Generics werden zur Compile-Zeit festgelegt.
- Laufzeitfehler sind trotzdem durch Typumwandlungen (
unchecked casts
) möglich.
Wrapper-Klassen
- Wrapper-Klassen umhüllen primitive Typen (z.B.
Integer
fürint
). - Zum Beispiel:
Integer x = 5;
String
ist keine Wrapper-Klasse.
Überladene vs. Überschriebene Methode
- Überladen: gleiche Methode, andere Parameter (gleiche Klasse).
- Überschreiben: gleiche Signatur, andere Implementierung (Subklasse).
Darstellungsinvariante und Implementationsinvariante
- Darstellungsinvariante: Bedingungen, die das Objekt immer erfüllen muss (z.B.
saldo >= 0
). - Implementationsinvariante: interne, oft nicht sichtbare Strukturbedingungen.
Studying That Suits You
Use AI to generate personalized quizzes and flashcards to suit your learning preferences.