TU Wien:Programmierparadigmen VU (Puntigam)/PP Test 1 2025WS

Aus VoWi
Zur Navigation springen Zur Suche springen

Test 1 in Programmierparadigmen am 24.11.2025[Bearbeiten | Quelltext bearbeiten]

Aufgabe 1 (10 Punkte)[Bearbeiten | Quelltext bearbeiten]

Bitte markieren Sie jedes Auswahlfeld, bei dem die links stehende Aussage eine Eigenschaft der darüber stehenden Abstraktionsart ist. Es können keines, eines oder mehrere Felder pro Zeile auszuwählen sein.

strukturell nominal λ-Abstraktion
Kommentare haben dafür keine Bedeutung, sie werden ignoriert
eine Variable, die eine Funktion enthält, kann von dieser Art sein
Änderung des Namens einer Methode ändert die Abstraktion
Änderung der Signatur einer Methode ändert die Abstraktion
eine abstrakte Methode ohne Kommentar ist von dieser Art
diese Art ist in der objektorientierten Programmierung essenziell
durch Kommentare beschriebene Methode ist von dieser Art
Basisabstraktionen beruhen auf (oder ähneln) dieser Art
inhaltliche Änderung eines Kommentars ändert die Abtraktion
inhaltliche Änderung der Programmcodes ändert die Abstraktion

Aufgabe 2 (10 Punkte)[Bearbeiten | Quelltext bearbeiten]

Bitte markieren Sie jedes Auswahlfeld, bei dem die links stehende Aussage eine Eigenschaft der darüber stehenden Regel des λ-Kalkül ist. Es können keines, eines oder mehrere Felder pro Zeile auszuwählen sein.

α-Konversion β-Reduktion η-Reduktion
ist von der Form:
ist von der Form:
ist mit von der Form:
ist mit von der Form:
ist von der Form:
wendet eine λ-Abstraktion auf ein Argument an
kann eine λ-Abstraktion auch ohne Argument vereinfachen
wird zur Umbenennung von Parametern verwendet
ist auf eine Normalform nicht anwendbar
ist nur von links nach rechts anwendbar

Aufgabe 3 (10 Punkte)[Bearbeiten | Quelltext bearbeiten]

Bitte markieren Sie jedes Auswahlfeld, bei dem die links stehende Aussage eine Eigenschaft der darüber stehende Modularisierungseinheit zutrifft. Es können keines, eines oder mehrere Felder pro Zeile auszuwählen sein.

Modul Komponente Klasse Objekt
definiert sich über Identität, Zustand und Verhalten
wird durch "Deployment" eingebunden
erlaubt zyklische Abhängigkeiten
dient als Vorlage für die Objekterzeugung
Inhalte davon sind in Java durch gekennzeichnet
ist per Definition eine Übersetzungseinheit
kann zur Laufzeit erzeugt werden
ist bereits dem Compiler bekannt
lässt offen, von wo Inhalte importiert werden
bildet einen Namensraum

Aufgabe 4 (10 Punkte)[Bearbeiten | Quelltext bearbeiten]

Bitte markieren Sie in jeder Zeile das eine Auswahlfeld, bei dem die links stehende Aussage für das darüber stehende Paradigma am besten zutrifft.

objektorientiert prozedural funktional
hoher Abstraktionsgrad bei struktureller und λ-Abstraktion
referentielle Transparenz ist gewährleistet
Aliase sind möglichst zu vermeiden
offensiver Umgang mit Aliasen (sind sichtbar und häufig)
relativ einfache Beweisführung bei λ-Abstraktion
keine Unterscheidung zwischen Original und Kopie (Daten)
Kommunikation über gemeinsame Variablen wird verhindert
Kommunikation über Variablen wird örtlich eingegrenzt
Kontrollfluss muss stets nachvollziehbar sein
gemeinsame Variablen sind nur sparsam einzusetzen

Aufgabe 5 (10 Punkte)[Bearbeiten | Quelltext bearbeiten]

Bitte markieren Sie in jeder Zeile das eine Auswahlfeld, bei dem die links stehende Aussage für das darüber stehende Paradigma am besten zutrifft.

objektorientiert prozedural funktional nebenläufig parallel
Rekursion statt Schleifen
verlangt hohen Hardwareeinsatz
effiziente Reaktion auf Ereignisse
für hardwarenahe Programme geeignet
Gleichheit / Identität unterschieden
Datenbereiche unabhängig bearbeitbar
meist stark, nicht statisch typisiert
verschiedenartige Daten als Einheit
viele Möglichkeiten zur Faktorisierung
bewältigt viele Handlungsstränge

Aufgabe 6 (10 Punkte)[Bearbeiten | Quelltext bearbeiten]

Bitte markieren Sie in jeder Zeile das eine Auswahlfeld, bei dem die links stehende Aussage für das darüber stehende Paradigma am besten zutrifft.

objektorientiert prozedural funktional nebenläufig parallel
gut für große, langlebige Projekte
gut für komplexe Algorithmen
am häufigsten eingesetztes Paradigma
der Speedup ist entscheidend
Interprozesskommunikation oft nötig
Synchronisation (z. B. Monitor) nötig
Programmablauf ist gut kontrollierbar
es wird häufig auf Ergebnisse gewartet
unterstützt algebraische Datentypen
gut für Programmierung im Groben

Aufgabe 7 (10 Punkte)[Bearbeiten | Quelltext bearbeiten]

Bitte markieren Sie in jeder Zeile das eine Auswahlfeld, bei dem der links stehende Begriff am ehesten mit dem darüber stehenden Begriff zusammenhängt ("ist" oder "ist Variante von" oder "ist von Bedeutung für").

Liveness Ersetzbarkeit Parametrisierung kovariant kontravariant invariant
Deadlock
Variablentyp
Design-by-Contract
Aspekt
Ergebnistyp
Generizität
Starvation
Eingangsparametertyp
Annotation
Untertyp

Aufgabe 8 (10 Punkte)[Bearbeiten | Quelltext bearbeiten]

Bitte markieren Sie jedes Auswahlfeld, bei dem die links stehende Aussage eine Eigenschaft der darüber stehende Art von Zusicherung ist. Es können keines, eines oder mehrere Felder pro Zeile auszuwählen sein.

Vorbed. Nachbed. Invariante Client-kontroll. History-Constr. Server-kontroll. History-Constr.
zuständig ist ausnahmslos der Server
Server und Client (in Sonderfällen) sind zuständig
zuständig ist ausnahmslos der Client
schränkt die Aufrufreihenfolge von Methoden ein
im Untertyp stärker oder gleich als im Obertyp
im Untertyp schwächer oder gleich als im Obertyp
gilt zu Beginn einer Methodenausführung
gilt am Ende einer Methodenausführung
bezieht sich auf einzelne Methoden
bezieht sich immer auf Objektzuständen von

Aufgabe 9 (10 Punkte)[Bearbeiten | Quelltext bearbeiten]

Folgende Klasse ist gegeben:

public class RangeChecker {
    private int min = Integer.MIN_VALUE, max = Integer.MAX_VALUE;
    public void set(int a, int b) { this.min = a, this.max = b; }
    public int in(int i) { return i > min ? (i < max ? i : max) : min; }
}

Bitte markieren Sie in jeder Zeile ein Auswahlfeld, bei dem die links stehende Aussage am ehesten eine auf die Klasse bezogene Zusicherung der über dem Auswahlfeld stehenden Art sein kann.

Vorbed. Nachbed. Invariante Client-kontroll. History-Constr. Server-kontroll. History-Constr.
und
und
wenn zwischen und liegt
ist nur aufrufbar wenn
wenn
nach gilt und
kann nur größer und kleiner werden
ist vor erstem Aufruf von aufzurufen

Aufgabe 10 (10 Punkte)[Bearbeiten | Quelltext bearbeiten]

Folgende Klasse ist gegeben:

public class Buffer {
    private int b[8], i, o;
    public boolean set(int v) { if(b[i] != 0) return false; b[i] = v; i = (i + 1) % 8; return true; } 
    public int get() { if (b[o] == 0) return 0; int r = b[o]; o = (o + 1) % 8; return r; }
}

Bitte markieren Sie in jeder Zeile ein Auswahlfeld, bei dem die links stehende Aussage am ehesten eine auf die Klasse bezogene Zusicherung der über dem Auswahlfeld stehenden Art sein kann.

Vorbed. Nachbed. Invariante Client-kontroll. History-Constr. Server-kontroll. History-Constr.
nur aufrufbar wenn davor aufgerufen
erhöht um 1 mod. 8 oder retourniert
und liegen im erlaubten Indexbereich von
liefert Werte in Reihenfolge des Einfügens
, und Arrayeinträge sind mit 0 initialisiert
und nur so änderbar: modulo 8 um 1 erhöht
fügt in Buffer ein oder retourniert false
retourniert 0 wenn der Buffer leer ist
Werte ungleich 0 in sind gültige Buffereinträge
darf nicht 0 sein

Lösungen[Bearbeiten | Quelltext bearbeiten]

Die Lösungen sollten korrekt sein. Der Großteil meiner Antworten wurden als korrekt gewertet*, für die restlichen Antworten wurde in der Einsicht nachgefragt oder mit den Lehrveranstaltungsunterlagen korrigiert.

*(Anmerkung: Die Korrektur des PP-Teams ist jedoch inkonsistent und es könnte sein, dass bei meinem Test etwas als korrekt gewertet wurde, obwohl es das eigentlich nicht ist.)

Aufgabe 1 (Lösung)[Bearbeiten | Quelltext bearbeiten]

Bitte markieren Sie jedes Auswahlfeld, bei dem die links stehende Aussage eine Eigenschaft der darüber stehenden Abstraktionsart ist. Es können keines, eines oder mehrere Felder pro Zeile auszuwählen sein.

strukturell nominal λ-Abstraktion
Kommentare haben dafür keine Bedeutung, sie werden ignoriert x x
eine Variable, die eine Funktion enthält, kann von dieser Art sein x x
Änderung des Namens einer Methode ändert die Abstraktion x x
Änderung der Signatur einer Methode ändert die Abstraktion x x x
eine abstrakte Methode ohne Kommentar ist von dieser Art x
diese Art ist in der objektorientierten Programmierung essenziell x
durch Kommentare beschriebene Methode ist von dieser Art x
Basisabstraktionen beruhen auf (oder ähneln) dieser Art x
inhaltliche Änderung eines Kommentars ändert die Abtraktion x
inhaltliche Änderung der Programmcodes ändert die Abstraktion x

Aufgabe 2 (Lösung)[Bearbeiten | Quelltext bearbeiten]

Bitte markieren Sie jedes Auswahlfeld, bei dem die links stehende Aussage eine Eigenschaft der darüber stehenden Regel des λ-Kalkül ist. Es können keines, eines oder mehrere Felder pro Zeile auszuwählen sein.

α-Konversion β-Reduktion η-Reduktion
ist von der Form:
ist von der Form: x
ist mit von der Form: x
ist mit von der Form: x
ist von der Form:
wendet eine λ-Abstraktion auf ein Argument an x
kann eine λ-Abstraktion auch ohne Argument vereinfachen x
wird zur Umbenennung von Parametern verwendet x
ist auf eine Normalform nicht anwendbar x x
ist nur von links nach rechts anwendbar x x

Aufgabe 3 (Lösung)[Bearbeiten | Quelltext bearbeiten]

Bitte markieren Sie jedes Auswahlfeld, bei dem die links stehende Aussage eine Eigenschaft der darüber stehende Modularisierungseinheit zutrifft. Es können keines, eines oder mehrere Felder pro Zeile auszuwählen sein.

Modul Komponente Klasse Objekt
definiert sich über Identität, Zustand und Verhalten x
wird durch "Deployment" eingebunden x
erlaubt zyklische Abhängigkeiten x x x
dient als Vorlage für die Objekterzeugung x
Inhalte davon sind in Java durch gekennzeichnet x
ist per Definition eine Übersetzungseinheit x x
kann zur Laufzeit erzeugt werden x
ist bereits dem Compiler bekannt x x x
lässt offen, von wo Inhalte importiert werden x
bildet einen Namensraum x x x x

Aufgabe 4 (Lösung)[Bearbeiten | Quelltext bearbeiten]

Bitte markieren Sie in jeder Zeile das eine Auswahlfeld, bei dem die links stehende Aussage für das darüber stehende Paradigma am besten zutrifft.

objektorientiert prozedural funktional
hoher Abstraktionsgrad bei struktureller und λ-Abstraktion x
referentielle Transparenz ist gewährleistet x
Aliase sind möglichst zu vermeiden x
offensiver Umgang mit Aliasen (sind sichtbar und häufig) x
relativ einfache Beweisführung bei λ-Abstraktion x
keine Unterscheidung zwischen Original und Kopie (Daten) x
Kommunikation über gemeinsame Variablen wird verhindert x
Kommunikation über Variablen wird örtlich eingegrenzt x
Kontrollfluss muss stets nachvollziehbar sein x
gemeinsame Variablen sind nur sparsam einzusetzen x

Aufgabe 5 (Lösung)[Bearbeiten | Quelltext bearbeiten]

Bitte markieren Sie in jeder Zeile das eine Auswahlfeld, bei dem die links stehende Aussage für das darüber stehende Paradigma am besten zutrifft.

objektorientiert prozedural funktional nebenläufig parallel
Rekursion statt Schleifen x
verlangt hohen Hardwareeinsatz x
effiziente Reaktion auf Ereignisse x
für hardwarenahe Programme geeignet x
Gleichheit / Identität unterschieden x
Datenbereiche unabhängig bearbeitbar x
meist stark, nicht statisch typisiert x
verschiedenartige Daten als Einheit x
viele Möglichkeiten zur Faktorisierung x
bewältigt viele Handlungsstränge x

Aufgabe 6 (Lösung)[Bearbeiten | Quelltext bearbeiten]

Bitte markieren Sie in jeder Zeile das eine Auswahlfeld, bei dem die links stehende Aussage für das darüber stehende Paradigma am besten zutrifft.

objektorientiert prozedural funktional nebenläufig parallel
gut für große, langlebige Projekte x
gut für komplexe Algorithmen x
am häufigsten eingesetztes Paradigma x
der Speedup ist entscheidend x
Interprozesskommunikation oft nötig x
Synchronisation (z. B. Monitor) nötig x
Programmablauf ist gut kontrollierbar x
es wird häufig auf Ergebnisse gewartet x
unterstützt algebraische Datentypen x
gut für Programmierung im Groben x

Aufgabe 7 (Lösung)[Bearbeiten | Quelltext bearbeiten]

Bitte markieren Sie in jeder Zeile das eine Auswahlfeld, bei dem der links stehende Begriff am ehesten mit dem darüber stehenden Begriff zusammenhängt ("ist" oder "ist Variante von" oder "ist von Bedeutung für").

Liveness Ersetzbarkeit Parametrisierung kovariant kontravariant invariant
Deadlock x
Variablentyp x
Design-by-Contract x
Aspekt x
Ergebnistyp x
Generizität x
Starvation x
Eingangsparametertyp x
Annotation x
Untertyp x

Aufgabe 8 (Lösung)[Bearbeiten | Quelltext bearbeiten]

Bitte markieren Sie jedes Auswahlfeld, bei dem die links stehende Aussage eine Eigenschaft der darüber stehende Art von Zusicherung ist. Es können keines, eines oder mehrere Felder pro Zeile auszuwählen sein.

Vorbed. Nachbed. Invariante Client-kontroll. History-Constr. Server-kontroll. History-Constr.
zuständig ist ausnahmslos der Server x
Server und Client (in Sonderfällen) sind zuständig x x
zuständig ist ausnahmslos der Client x x
schränkt die Aufrufreihenfolge von Methoden ein x
im Untertyp stärker oder gleich als im Obertyp x x x
im Untertyp schwächer oder gleich als im Obertyp x x
gilt zu Beginn einer Methodenausführung x x x
gilt am Ende einer Methodenausführung x x x
bezieht sich auf einzelne Methoden x x
bezieht sich immer auf Objektzuständen von x x

Aufgabe 9 (Lösung)[Bearbeiten | Quelltext bearbeiten]

Folgende Klasse ist gegeben:

public class RangeChecker {
    private int min = Integer.MIN_VALUE, max = Integer.MAX_VALUE;
    public void set(int a, int b) { this.min = a, this.max = b; }
    public int in(int i) { return i > min ? (i < max ? i : max) : min; }
}

Bitte markieren Sie in jeder Zeile ein Auswahlfeld, bei dem die links stehende Aussage am ehesten eine auf die Klasse bezogene Zusicherung der über dem Auswahlfeld stehenden Art sein kann.

Vorbed. Nachbed. Invariante Client-kontroll. History-Constr. Server-kontroll. History-Constr.
x
und x
und x
x
wenn zwischen und liegt x
ist nur aufrufbar wenn x
wenn x
nach gilt und x
kann nur größer und kleiner werden x
ist vor erstem Aufruf von aufzurufen x

Aufgabe 10 (Lösung)[Bearbeiten | Quelltext bearbeiten]

Folgende Klasse ist gegeben:

public class Buffer {
    private int b[8], i, o;
    public boolean set(int v) { if(b[i] != 0) return false; b[i] = v; i = (i + 1) % 8; return true; } 
    public int get() { if (b[o] == 0) return 0; int r = b[o]; o = (o + 1) % 8; return r; }
}

Bitte markieren Sie in jeder Zeile ein Auswahlfeld, bei dem die links stehende Aussage am ehesten eine auf die Klasse bezogene Zusicherung der über dem Auswahlfeld stehenden Art sein kann.

Vorbed. Nachbed. Invariante Client-kontroll. History-Constr. Server-kontroll. History-Constr.
nur aufrufbar wenn davor aufgerufen x
erhöht um 1 mod. 8 oder retourniert x
und liegen im erlaubten Indexbereich von x
liefert Werte in Reihenfolge des Einfügens x
, und Arrayeinträge sind mit 0 initialisiert x* x*
und nur so änderbar: modulo 8 um 1 erhöht x
fügt in Buffer ein oder retourniert false x
retourniert 0 wenn der Buffer leer ist x
Werte ungleich 0 in sind gültige Buffereinträge x
darf nicht 0 sein x

*laut Puntigam wäre hier Nachbedingung richtig, da die Zusicherung eine Nachbedingung eines Konstruktors sein sollte. Es wurde jedoch auch Vorbedingung als korrekt gewertet, da man es als Vorbedingungen der Methoden sehen kann.