TU Wien:Programmierparadigmen VU (Puntigam)/PP Test 1 2024W

Aus VoWi
Zur Navigation springen Zur Suche springen

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()