TU Wien:Programmierparadigmen VU (Puntigam)/PP Test 1 2024W
Test 1 in Programmierparadigmen am 25.11.2024 (Gruppe)[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 Regel des λ-Kalküls ist. Es können keines, eines oder mehrere Felder pro Zeile auszuwählen sein.
α-Konversion | β-Konversion | η-Konversion | |
---|---|---|---|
dient zur Umbennennung eines Parameters | |||
kann eine λ-Abstraktion auch ohne Argument vereinfachen | |||
wendet eine λ-Abstraktion auf ein Argument an | |||
ist von links nach rechts und rechts nach links anwendbar | |||
davon gibt es eine gerichtete Variante als Reduktionsregel | |||
ist von der Form: [e/v](λv.f) ≡ λv.f | |||
ist (mit v ∉ fv(e) von der Form: λu.e ≡ λv.[v/u]e | |||
ist von der Form: (λv.f) ≡ [e/v]f | |||
ist von der Form: [e/v](fg) ≡ ([e/v] f) ([e/v] g) | |||
ist (mit v ∉ fv(e) von der Form: λv.(ev) ≡ e |
Aufgabe 2 (10 Punkte)[Bearbeiten | Quelltext bearbeiten]
Bitte markieren sie jedes Auswahlfeld, bei dem die links stehende Aussage eine Eigenschaft auf die darüber stehenden Modularisierungseinheit zutrifft. Es können keines, eines oder mehrere Felder pro Zeile auszuwählen sein.
Objekt | Klasse | Modul | Komponente | |
---|---|---|---|---|
Inhalte davon sind in Java durch "static" gekennzeichnet | ||||
kann zur Laufzeit auch durch Kopieren erzeugt werden | ||||
erlaubt zyklische Abhängigkeiten | ||||
dient als Vorlage für die Objekterzeugung | ||||
hat einen eindeutigen Namen | ||||
ist statisch | ||||
lässt offen, von wo Inhalte importiert werden | ||||
definiert sich über Identität, Zustand und Verhalten | ||||
ist per Definition eine Übersetzungseinheit | ||||
wird per "Deployment" eingebunden |
Aufgabe 3 (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.
nominal | strukturell | λ-Abstraktion | |
---|---|---|---|
durch Kommentare beschriebene Methode ist von dieser Art | |||
eine abstrakte Methode ohne Kommentar ist von dieser Art | |||
eine Variable, die eine Funktion enthält, kann von dieser Art sein | |||
eine Art in der objektorientierten Programmierung essenziell | |||
Änderung der Signatur einer Methode ändert die Abstraktion | |||
Änderung des Namens einer Methode ändert die Abstraktion | |||
inhaltliche Änderung des Programmcodes ändert die Abstraktion | |||
inhaltliche Änderung eines Kommentars ändert die Abstraktion | |||
Kommentare haben dafür keine Bedeutung, sie werden ignoriert | |||
Compiler analysiert den Korrektheitsgrad der Einschränkungen |
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.
funktional | objektorientiert | prozedural | |
---|---|---|---|
keine Unterscheidung zwischen Original und Kopie (Daten) | |||
dynamisches Binden verhindert nachvollziehbaren Kontrollfluss | |||
Kommunikation über Variablen wird örtlich eingegrenzt | |||
Kommunikation über gemeinsame Variablen wird verhindert | |||
gemeinsame Variablen sind nur sparsam einzusetzen | |||
Kontrollfluss muss nachvollziehbar sein | |||
referentielle Transparenz statt nachvollziehbarem Kontrollfluss | |||
nominale Abstraktion statt nachvollziehbarem Kontrollfluss | |||
Aliases sind möglichst zu vermeiden | |||
offensiver Umgang mit Aliasen (sind sichtbar und häufig) |
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.
funktional | objektorientiert | prozedural | nebenläufig | parallel | |
---|---|---|---|---|---|
gut für Programmierung im Groben | |||||
gut für komplexe Algorithmen | |||||
gut für große, langlebige Projekte | |||||
Ziel ist eine möglichst kurze Laufzeit | |||||
unterstützt algebraische Datentypen | |||||
am häufigsten eingesetztes Paradigma | |||||
es wird häufig auf Ergebnisse gewartet | |||||
Programmablauf ist gut kontrollierbar | |||||
Interprozesskommunikation nötig | |||||
Synchronisation (z.B. Monitor) nötig |
Aufgabe 6 (10 Punkte)[Bearbeiten | Quelltext bearbeiten]
Bitte markieren Sie in jeder Zeile das eine Auswahlfeld, bei dem die links stehende Aussage am besten die darüber stehende Beziehung zwischen zwei Typen bzw. Klassen U und T adressiert. (für passend gewählte U und T)
Vererbung | Delegation | Untertyp | |
---|---|---|---|
in U werden Aufrufe an eine Variable vom Typ T weitergeleitet | |||
manchmal ist es egal, ob U von T oder T von U abgeleitet wird | |||
wenn U von T und T von U ableitbar, dann sind U und T äquivalent | |||
Code kann ohne Typanbindung möglichst von U auf T übernommen werden | |||
U soll Ableitung möglichst viel Code aus T übernehmen | |||
Objekt von U ersetzt Objekt von T | |||
Implementierung von U ist einfacher wenn T von U abgeleitet | |||
Objekt von U statt Objekt von T verwendbar | |||
es geht um Wiederverwendung von Code, der auf T bzw. U zugreift | |||
es geht um Wiederverwendung von Code aus T in U |
Aufgabe 7 (10 Punkte)[Bearbeiten | Quelltext bearbeiten]
Bitte markieren Sie in jeder Zeile das eine Auswahlfeld, bei dem der links stehende Typ bei Untertypenbeziehungen (wie angegeben bei allgemeinem strukturellem Untertypbeziehungen oder in Java) die darüber stehende Varianz hat, oder "n/a" wenn es keinen solchen Typ gibt.
kovariant | kontravariant | invariant | n/a | |
---|---|---|---|---|
Typ von Konstante (strukturell) | ||||
Typ von Variable (strukturell) | ||||
Typ von Eingangsparameter (strukturell) | ||||
Typ von Durchgangsparameter (strukturell) | ||||
Typ von Ausgangsparameter (strukturell) | ||||
Ergebnistyp von Methode (strukturell) | ||||
Typ von Eingangsparameter (in Java) | ||||
Typ von Durchgangsparameter (in Java) | ||||
Typ von Ausgangsparameter (in Java) | ||||
Ergebnistyp von Methode (in Java) |
Aufgabe 8 (10 Punkte)[Bearbeiten | Quelltext bearbeiten]
Bitte markieren Sie jedes Auswahlfeld, bei dem die links stehende Aussage eine Eigenschaft der darüber stehenden 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. | |
---|---|---|---|---|---|
im Untertyp schwächer oder gleich als im Obertyp | |||||
im Untertyp stärker oder gleich als im Obertyp | |||||
bezieht sich immer auf Objektzustände von this | |||||
bezieht sich auf einzelne Methoden | |||||
zuständig ist ausnahmslos der Client | |||||
zuständig ist ausnahmslos der Server | |||||
Server und Client (in Sonderfällen) sind zuständig | |||||
schränkt die Aufrufreihenfolge von Methoden ein | |||||
gilt zu Beginn einer Methodeauführung | |||||
gilt am Ende einer Methodeausführung |
Aufgabe 9 (10 Punkte)[Bearbeiten | Quelltext bearbeiten]
Folgede Klasse ist gegeben:
public class CountingSwapper { private int cnt = 0; public void swap(int[] a, int i) { int h = a[i]; a[i] = a[i+1]; a[i+1] = h; cnt++; } public int count() { return cnt; } }
Bitte markieren Sie in jeder Zeile ein Auswahlfeld, bei dem die links stehende Aussage am ehesten eine auf diese Klasse bezogene Zusicherung der über dem Auswahlfeld stehenden Art sein kann.
Vorbed. | Nachbed. | Invariante | Client-
kontroll. History- Constr. |
Server-
kontroll. History- Constr. | |
---|---|---|---|---|---|
swap tauscht a[i] und a[i+1] | |||||
swap(a, i) nur aufrufbar wenn a[i] > a[i+1] | |||||
Ausnahme in swap(a, i) wenn i > a.length-2 | |||||
i >= 0 und i < a.length-1 | |||||
cnt kann nur größer werden | |||||
cnt >= 0 | |||||
count retourniert Zahl der Aufrufe von swap | |||||
count gibt Wert größer oder gleich 0 zurück | |||||
d==c+1 nach c=count();swap(a,i);d=count(); | |||||
a != null |
Aufgabe 10 (10 Punkte)[Bearbeiten | Quelltext bearbeiten]
Folgede Klasse ist gegeben:
public class SimpleBufferMemory { private int data; public void set(int d) { data = d; } public int get() { return data; } }
Bitte markieren Sie in jeder Zeile ein Auswahlfeld, bei dem die links stehende Aussage am ehesten eine auf diese Klasse bezogene Zusicherung der über dem Auswahlfeld stehenden Art sein kann.
Vorbed. | Nachbed. | Invariante | Client-
kontroll. History- Constr. |
Client-
kontroll. History- History- Constr. | |
---|---|---|---|---|---|
x.set(x.get()) lässt Zustand von x unverändert | |||||
data ist eine ungerade Zahl | |||||
d ist eine ungerade Zahl | |||||
Ergebnis von get ist eine ungerade Zahl | |||||
set und get nur abwechselnd aufrufbar | |||||
in neuem Objekt ist zuerst set aufzurufen | |||||
ohne set liefert get wiederholt gleiches Ergebnis | |||||
d==c gilt nach x.set(c); d=x.get(); | |||||
get nur aufrufbar wenn davor set aufgerufen | |||||
x.set(v) nur aufrufbar wenn v > x.get() |