Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 2 » Allgemeines   (Übersicht)

Allgemeines

  • “Principles of Programming Languages” (PoPL), SS2015
  • Dauer ~ 30min
  • Prüfer: Ronald Veldema
  • Beisitzer: Andreas Kumlehn
  • Note: 1,0

Die Stimmung war sehr nett und entspannt. Der Hinweis der älteren Protokolle hat sich als richtig erwiesen: Es ist vorteilhaft schnell und viel zu reden, so dass nicht gewusste Fragen untergehen. Mir ist es einige Male passiert, dass ich etwas nicht gewusst habe, die Note war trotzdem sehr gut. Ich habe relativ viele Beispiele auf Papier gebracht (am Schluss waren etwa 1,5 Seiten vollgekritztelt) → man muss schon konkret wissen, wie Konzepte funktionieren, konkrete Syntax ist aber egal. Die Fragen kamen (wieder) von zwei DIN A4 Zetteln (es ist nicht unmöglich, dass es die aus dem letzten Semester sind).

Insgesamt fand ich die Prüfung ziemlich schwer (es ist viel Stoff, von dem auch viel abgefragt wird), aber sehr fair benotet. Ist man an einer Stelle hängen geblieben, gabs manchmal noch leichte Stupser in die richtige Richtung, so dass man doch noch auf die Antwort kommen konnte.

Prüfung

Generell gilt: Es gab noch mehr Fragen, ich habe mich nur beim besten Willen nicht mehr an alle erinnern können. Auch wurde ein Teil der Fragen nicht so direkt gestellt, sondern haben sich aus dem ergeben, was ich gesagt habe. Abrupte Themenwechsel sind die Regel. ;-)

P[rüfer]: Was ist deine Lieblingssprache? → Java

P: Was sind Reflections in Java?

P: Kann man zur Laufzeit Methoden in Java einfügen?

P: Hat Java dynamisches Binden für Methoden?

P: Was ist der Unterschied zwischen statischem und dynamischem Typ?

P: Ist Java dynamisch typisiert?

P: Muss man in Java immer einen Typ angeben?

P: Was ist denn Typinferenz?

P: Was ist ein Typkonstruktor?

P: Was ist der Unterschied zwischen Generics in Java und Template Programmierung in C++?

P: Hat Java Typ-Orthogonalität?

P: Was ist Name-Binding bei Variablen?

P: Welche Arten von Typequivalenz gibt es?

P: Was ist eine polymorphe Variable?

P: Was ist eine polymorphe Funktion?

P: Wie werden Methoden in Smalltalk aufgerufen?

P: Wie funktioniert Kontrollfluss in Smalltalk?

P: Gibt es einen Unterschied zwischen mehrdimensionalen Arrays und Arrays-of-Arrays?

P: Was ist ein assoziatives Array?

P: Ist ein assoziatives Array immer ein dynamisches Array?

P: Programmiere mal eine Funktion in funktionaler Programmiersprache, die einen String umdreht und Pattern Matching benutzt.

P: Okay, mach mal dasselbe für eine logische Programmiersprache.

P: Ich erzähle dir was und ich möchte, dass du ein logisches Programm daraus machst: „Wer zu McDonalds geht ist reich. Ronald geht zu McDonalds und Andreas geht zu McDonalds.“

P: Wer ist jetzt reicht bzw. was gibt das Programm aus?

P: Wie findet es das heraus?

P: Was ist accessorientiertes Programmieren?

P: Wofür kann man das benutzen?

P: Ich diktiere dir mal ein Programm, schreib mal mit (Code so oder so ähnlich):

#define x 3
if (x > 1) {
  x++;
}

P: Was passiert da?

if (3 > 1) {
  3++;
}

P: Aber das kompiliert doch gar nicht dann.

P: Mach mal ein Programm, bei dem die Oberfläche eines Kreises gleich der Oberfläche eines Rechtecks mit Constraint Programmierung.

P: Wie kann man in einer funktionalen Programmiersprache eine Liste mit allen gerade Zahlen erzeugen?

P: Aber jetzt ist die Liste ja unendlich?

P: Was ist denn Lazy Evaluation?

P: Okay dann mache mal die Liste mit Datenflussprogrammierung.

P: Was ist eine Partitioned Global Address Space Sprache?

P: Was ist ein Rendezvous in Ada?

P: Was sind Future-Objekte?

P: Was sind denn transaktionale Sprachen?

P: Aber in Transaktionen können doch Seiteneffekte auftreten. Werden die wiederholt?

P: Wir haben noch Echzeitsprachen gehabt, wie sieht das aus?

P: Wie sehen die Deadlines dort aus?

P: Und was passiert, wenn sie nicht eingehalten werden?

P: Okay, sagen wir mal ich möchte eine Sprache entwickeln. Welche Sachen brauche ich dafür?

P: Gut, dann schreib mir mal eine Regel für eine for-Schleife, die so ähnlich aussieht wie in Modula oder Pascal. (Ich habe dann eine Java Schleife genommen, weil ich von Pascal oder Modula keine Ahnung hatte)

P: Gut, dann beschreibe mir mal die Semantik der Schleife mit einer attributierter Grammatik.

P: Und jetzt in operationeller Semantik.

P: Und jetzt noch in axiomatischer Semantik.

Bei den letzten drei Fragen (v.a. bei der attributierten Grammatik) bin ich doch arg ins Schleudern geraten und hatte keine Ahnung. Das Beispiel für attributierten Grammatik war in der Vorlesung auch sehr einfach gehalten. In der Nachbesprechung hat er auch gemeint, dass die Frage wohl ein bisschen zu hart gewesen sein könnte. Da die Note trotzdem sehr gut war, gehe ich davon aus, dass die Frage kaum in die Bewertung eingegangen ist.
Zitat: „Da habe ich Ihnen gezeigt wie ein Schraubenzieher aussieht und Sie hätten ein Atomkraftwerk bauen müssen.“ ;-)