Objektorientiertes Design und Interfaces

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to Lesson

Podcast

Play an AI-generated podcast conversation about this lesson
Download our mobile app to listen on the go
Get App

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?

  • 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?

  • 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?

  • 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?

<p>Wenn mehrere Packages den gleichen Namen haben; Lösung: Verwendung eindeutiger Namenskonventionen. (A)</p> Signup and view all the answers

Was gilt als Subtyp eines Interfaces I in Java?

<p>Alle Klassen und Interfaces, die <code>I</code> direkt oder indirekt implementieren oder erweitern. (A)</p> Signup and view all the answers

Was ist der 'Scope' (Gültigkeitsbereich) im Kontext der Programmierung und wodurch wird die Sichtbarkeit eines Attributes oder einer Methode bestimmt?

<p>Scope bezeichnet den Gültigkeitsbereich; Sichtbarkeit hängt von Sichtbarkeitsmodifikatoren und dem Kontext ab. (D)</p> Signup and view all the answers

Angenommen, die Methode foo einer Klasse X ist als final deklariert. Was bedeutet das für abgeleitete Klassen von X?

<p>Die Methode <code>foo</code> kann in Subklassen nicht überschrieben werden. (C)</p> Signup and view all the answers

Welchen Vorteil bieten Packages in Java-Programmen?

<p>Bessere Strukturierung, Vermeidung von Namenskonflikten, Förderung der Wiederverwendbarkeit. (D)</p> Signup and view all the answers

Wozu dient das Schlüsselwort this in einem Konstruktor üblicherweise und warum ist es wichtig, es in bestimmten Fällen nicht wegzulassen?

<p><code>this</code> wird verwendet, um Namenskonflikte mit Parametern zu vermeiden; ohne <code>this</code> wäre unklar, welche Variable gemeint ist. (B)</p> Signup and view all the answers

Was versteht man unter dem Begriff 'Closure' in der Programmierung?

<p>Eine Funktion mit Zugriff auf Variablen aus ihrem Entstehungskontext. (C)</p> Signup and view all the answers

Welche Konsequenzen hat die Wahl des statischen bzw. dynamischen Typs eines Objekts in Java?

<p>Der statische Typ bestimmt, welche Methoden/Attribute sichtbar sind, der dynamische Typ bestimmt das tatsächliche Verhalten zur Laufzeit. (D)</p> Signup and view all the answers

Wie viele Klassen kann eine Klasse in Java erweitern und wie viele Interfaces kann sie implementieren?

<p>Eine Klasse kann eine Klasse erweitern und beliebig viele Interfaces implementieren. (C)</p> Signup and view all the answers

Was ist der Hauptunterschied zwischen Attributen von Klassen und Klassenattributen (statischen Attributen)?

<p>Attribute von Klassen gehören zu Instanzen, während Klassenattribute zur Klasse selbst gehören. (D)</p> Signup and view all the answers

Erläutern Sie den Zusammenhang zwischen dem Schlüsselwort protected und dem Konzept der Vererbung in der objektorientierten Programmierung.

<p><code>protected</code> erlaubt Zugriff in Subklassen, auch außerhalb des Pakets, und fördert somit die Vererbung. (C)</p> Signup and view all the answers

Warum sind die Bestandteile void, static und public in der Signatur der main()-Methode in Java notwendig?

<p><code>void</code>: Die <code>main()</code>-Methode darf keinen Wert zurückgeben; <code>static</code>: kein Objekt nötig; <code>public</code>: Zugriff von außen (JVM). (B)</p> Signup and view all the answers

Kann eine Klasse in Java zwei Methoden mit identischer Signatur haben? Berücksichtigen Sie bei Ihrer Antwort die Begriffe 'Überladen' und 'Überschreiben'.

<p>Nein, nicht mit identischer Signatur. Überladen erlaubt gleiche Methode, andere Parameter. Überschreiben erlaubt gleiche Signatur, andere Implementierung. (B)</p> Signup and view all the answers

Nennen Sie die zentralen Bausteine im funktionalen Programmieren und die Kernelemente des funktionalen Programmdesigns.

<p>Funktionen, Rekursion; Funktionen höherer Ordnung, Unveränderlichkeit (D)</p> Signup and view all the answers

Auf welches Problem reagiert der Garbage Collector hauptsächlich und wie funktioniert er im Wesentlichen?

<p>Er vermeidet Speicherlecks durch automatische Speicherfreigabe von unerreichbaren Objekten. (C)</p> Signup and view all the answers

Was versteht man unter formalen und aktualen Parametern im Kontext von Methoden?

<p>Formale Parameter sind die in der Methodendefinition verwendeten Platzhalter, während aktuale Parameter die tatsächlichen Werte sind, die beim Aufruf übergeben werden. (A)</p> Signup and view all the answers

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?

<p>Nur die gleiche oder eine spezifischere Exception (d. h. Unterklassen von <code>Ex1</code>). (C)</p> Signup and view all the answers

Flashcards

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?

Kapselung, Vererbung, Polymorphie, Abstraktion.

Zwei Kernelemente der OO-Abstraktion?

Interfaces, abstrakte Klassen.

Sichtbarkeit von Interface-Methoden?

Alle Methoden sind implizit public und abstract. Implementierende Klassen müssen diese als public implementieren.

Signup and view all the flashcards

Wann gibt es Package-Namenskonflikte?

Wenn mehrere Packages gleiche Namen haben. Lösung: Eindeutige Namenskonventionen (z.B. de.uni.projekt).

Signup and view all the flashcards

Was bedeutet 'Scope'?

Scope bezeichnet den Gültigkeitsbereich. Sichtbarkeit hängt von Sichtbarkeitsmodifikatoren (private, public, etc.) und dem Kontext (Klasse, Paket, etc.) ab.

Signup and view all the flashcards

Auswirkungen von 'final' auf Methoden?

Die Methode 'foo' darf in Subklassen nicht überschrieben werden.

Signup and view all the flashcards

Drei Vorteile von Packages?

Bessere Strukturierung, Namenskonflikte vermeiden, Wiederverwendbarkeit fördern.

Signup and view all the flashcards

Wofür 'this' im Konstruktor?

Um Namenskonflikte mit Parametern zu vermeiden: this.name = name; Ohne this wäre unklar, was gemeint ist.

Signup and view all the flashcards

Was ist eine Closure?

Eine Closure ist eine Funktion mit Zugriff auf Variablen aus ihrem Entstehungskontext.

Signup and view all the flashcards

Statisch vs. dynamisch: Auswirkung?

Der statische Typ bestimmt, welche Methoden/Attribute sichtbar sind (Compile-Time). Der dynamische Typ bestimmt das tatsächliche Verhalten zur Laufzeit.

Signup and view all the flashcards

Erweiterung vs. Implementierung?

Eine Klasse kann eine Klasse erweitern, aber beliebig viele Interfaces implementieren.

Signup and view all the flashcards

Klassenattribute vs. Instanzattribute?

Attribute von Klassen gehören zu Instanzen. Klassenattribute sind static und gehören zur Klasse selbst.

Signup and view all the flashcards

Was macht protected?

protected erlaubt Zugriff in Subklassen – auch außerhalb des Pakets. Fördert Vererbung.

Signup and view all the flashcards

main() Signatur: Warum public static void?

public: Zugriff von außen (JVM), static: kein Objekt nötig, void: gibt keinen Wert zurück.

Signup and view all the flashcards

Zweck von Exceptions?

Fehlerbehandlung ohne Programmabbruch.

Signup and view all the flashcards

Bedingungen für Map Keys/Values?

Keys dürfen nicht null sein und müssen equals() und hashCode() konsistent überschreiben. Values: beliebig (auch null).

Signup and view all the flashcards

Was ist referentielle Transparenz?

Eine Methode liefert bei gleichen Eingaben immer das gleiche Ergebnis ohne Seiteneffekte.

Signup and view all the flashcards

Array vs. Liste: Unterschiede?

Arrays: feste Größe, schnell. Listen: dynamisch, flexibler.

Signup and view all the flashcards

Java vs. Racket: Typisierung?

Java: statisch typisiert. Racket: dynamisch typisiert.

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 und abstract.
  • 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 von I.

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 Klasse X als final 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 Variable name 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 Methode m hat, die Exceptions vom Typ Ex1 wirft, kann eine Klasse Y, die von X erbt und m überschreibt, nur die gleiche oder eine spezifischere Exception (d.h. Unterklassen von Ex1) 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üssen equals() und hashCode() 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 Methode test(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 nicht abstract 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 von Error und Exception.
  • 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ür int).
  • 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.

Quiz Team

Related Documents

More Like This

CP317| Week 5
37 questions

CP317| Week 5

HaleNeodymium avatar
HaleNeodymium
Object Oriented Design Heuristics
15 questions
Use Quizgecko on...
Browser
Browser