Sie befinden sich hier: Termine » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 2 » Principles of Programming Languages (Juli 2015)   (Übersicht)

Principles of Programming Languages (Juli 2015)

Fach: Principles of Programming Languages

Prüfer: Prof. Veldema

Ergebnis: Hat mich überrascht, obwohl ich eine Frage gar nicht wusste und bei 2-3 Sachen nicht sofort auf die Antwort kam, dennoch eine 1,0.

Stimmung: Locker, die Aufregung war nach der ersten Frage somit weg.

Vorbereitung: Eine Woche, mit dem Skript und den Protokollen aus den letzten Jahren. Wichtig sind die Konzepte an sich, weniger die spezifischen Sprachen. Eventuell kann man sich die Besonderheiten der einzelnen Sprachen wie z.B. die one-way Kanäle und synchrone Kommunikation der Go/Occam Sprache merken. Und evtl ein paar kleinere Beispiele in funktionaler und logischer Sprache programmieren wie z.B. Länge der Liste, concatenate oder List Comprehensions etc.

Anmerkung: Bei manchen Fragen wusste ich nicht genau, worauf er hinauswollte. Ich habe dann einfach angefangen, etwas zu dem Thema zu erzählen. Es hilft wohl, einfach zu reden und zu sagen, was man weiß zu dem Thema, irgendwie war Herr Veldema dann einfach zufrieden ;)

Fragen

F[rage]: Was ist deine Lieblingsprogrammiersprache?

A[ntwort des Studenten]: Java

F: Was ist Type-Introspection in Java ?

A: Reflection API, Metainformationen über Klassen etc

F: Kann man damit Methoden zur Laufzeit aendern?

A: Nein

F: Was ist Typorthogonalität in Java, was ist Nummernorthogonalität?

A: Typorthogonolität: Eine Referenz einer Oberklasse kann man ein beliebiges Unterklassenobjekt von dieser Oberklasse zuordnen; Nummernorthogonalität: An einer Stelle, wo ein Statement vom Typ X stehen kann, können auch mehrere (beliebig viele) Statements vom Typ X stehen

F: Wie kann man bei Mehrfachvererbung in C++ in einer Unterklasse, die von B und C abgeleitet wird, die jeweils von A erben, eine Funktion aufrufen die in B und C gleich heißt?

A: Explizit Oberklasse angeben

F: Kann es in Java dangling references geben?

A: Hab hier gesagt, dass das bei Java nicht geht, weil man die Pointer an sich nicht sieht (war glaub ich aber falsch) - er hat ein bisschen verunsichert geschaut, also hab ich erstmal erklärt, was dangling references sind (ein Zeiger zeigt auf etwas, was nicht mehr existiert) - das hat ihm dann gereicht

F: Wie setzt man Generics/Templates in Java und C++ um, was ist der Unterschied?

A: Java: Type Erasure, der generische Typ wird gelöscht und durch eine Oberklasse (im allgemeinen Object) ersetzt; C++: Type Replacement, generischer Typ wird durch konkreten Typ ersetzt

F: Was ist Fuzzy-Programmierung?

A: Zugehörigkeitsfunktionen, Objekt gehört nur zu X % zu einer Menge etc

F: Ist Fuzzyprogrammierung dann dasselbe wie probabilistic programming oder wo sind die Unterschiede?

A: Ja, ist dasselbe

F: Was ist Dataflow-Programmierung?

A: Pro Instruktion ein virtueller Prozessor, Daten werden an den nächsten Prozessor weitergegeben

F: Alle geraden Zahlen mit Dataflow ausgeben?

A: Prozessor1 generiert 0, gibt diese Zahl an den zweiten Prozessor weiter, dieser addiert 2 auf die Zahl, gibt das Ergebnis an den ersten weiter, dieser addiert wieder 2 drauf, etc… hier war eine kleine Skizze gefragt

F: Liste umdrehen programmieren in funktionaler Sprache mit Pattern Matching.

A:

    reverse [] = []
    reverse (X:XS) = reverse(XS) : X

F: Gleiches in logischer Sprache

A:

    reverse([], []).
    reverse([X|XS], R) :- ???

F: Liste aller geraden positiven Zahlen in funktionaler Sprache mit ListComprehension:

    [x | x <- [0..] ; x mod 2 = 0]

F: Attributgrammatik von einem while Statement angeben A:

Operationale Semantik von while:
    while (B) S :
        label1 : R1=T(B); if(R1 == false) goto label2; T(S); goto label1;
        label2 : end
Axiomatische Semantik von while:
    while (B) S : // I = Schleifeninvariante
        {I and B} S {I and not(B)}

F: Kann man rekursive Structs/Records konstruieren?

A: Ja, aber die Elemente vom Typ record/struct in einem Struct müssen Zeiger auf record/struct sein, weil Zeiger immer gleich groß sind und man sonst nie die Größe des Structs/Records ermitteln kann

F: Was sind Unions im Vergleich/Gegensatz zu Records?

A: Können beliebig viele Elemente haben (zB nur das erste Feld oder nur das zweite und dritte etc) → oder Verknüpfung von Feldern

F: Was ist das besondere an Unions in Ada?

A: Sind eigentlich Records, aber durch die Statusvariable und der case Anweisung beim Anlegen des Records können nur bestimmte Felder angelegt werden

F: Wie funktionieren Rendezvous in Ada?

A: Entry calls (sehen aber aus wie lokale Variablen) rufen Methoden auf dem Server auf, dort Annahme durch accept + select Anweisung

F: Ist die Kommunikation in Google Go synchron oder asynchron ?

A: Synchron - da etwas über ein Kanal senden und warten, bis man eine Antwort enthält.

F: Kommt die Antwort dann über den selben Kanal?

A: Nein, da Kanäle nur one-way sind. Man kann pro Kanal entweder nur etwas senden oder empfangen.

F: Was ist der Unterschied zwischen RPC und shared memory ?

A: RPC: Kommunikation mit Nachrichten; shared memory: gemeinsamer Speicher, auf den alle Prozessoren zugreifen können (Multiprozessor)

F: Was sind Transaktionen ?

A: sich erst die Seiteneffekte merken und am Ende überprüfen, ob in der Zwischenzeit ein Thread dazwischengefunkt hat, falls ja → rollback, ansonsten commit

F: Ich entwickle eine neue Programmiersprache, Manual dazu schreiben, welche Kapitel wird es haben ?

A: Lexikalische, syntaktische, konzeptuelle und semantische Struktur

F: Was haben wir bei der Echtzeitprogrammierung für Konzepte gesehen?

A: Every (periodische Ausführung) und deadline Konzept