PCP - Programming Concepts & Paradigms

Lernkartei zum Modul Programming Concepts & Paradigms der HSLU

Lernkartei zum Modul Programming Concepts & Paradigms der HSLU


V. B.
Diese Lernkarten behandeln fortgeschrittene Konzepte der Programmierung und Programmierparadigmen auf Universitätsniveau. Sie vertiefen sich in Themen wie Prolog, C, Java, und verschiedene Programmierparadigmen, darunter prozedurale, objektorientierte, funktionale und logische Programmierung. Die Karteikarten erklären Kontrollstrukturen, Endrekursion, abstrakte Datentypen und die Unterschiede zwischen verschiedenen Programmiersprachen und -paradigmen. Diese Lernkarten sind ideal für Studierende und Programmierer, die ihr Verständnis von fortgeschrittenen Programmierkonzepten vertiefen und ihre Fähigkeiten in verschiedenen Programmiersprachen und -paradigmen erweitern möchten.
Cartes-fiches
44
Utilisateurs
6
Langue
Allemand
Catégorie
Informatique
Niveau
Université
Créé / Mis à jour
20.09.2018 / 23.06.2022

Cartes-fiches

Was bedeutet Turing-Vollständigkeit?

Universelle Programmierbarkeit, d.h. damit lassen sich grundsätzlich alle Funktionen berechnen, welche mit einer [fiktiven] Turing-Maschine berechnet werden können.

Definition: Programmierparadigma

Fundamentaler Programmierstil, eine bestimmt Art die Struktur und Elemente von Programmen aufzubauen

Nenne Beispiele für imperative Programmierparadigmen:

  • strukturiert (Pascal)
  • prozedural (C)
  • objektorientiert (Java)

Nenne Beispiele für deklarative Programmierparadigmen:

  • funktional (Scheme)
  • logisch (Prolog)

Programmierparadigmen sind eher ___ als ___ zu sehen

Was bedeutet imperative Programmierung?

Problemlösung (Berechnungslogik) wird schrittweise in Befehlen beschrieben: Wie ist das Problem zu lösen?

Was bedeutet deklarative Programmierung?

Berechnungslogik wird beschrieben ohne den Kontrollfluss zu definieren: Was sind die Fakten zum Problem?

Erkläre imperativ am Beispiel „Kreis“

  • Imperative Programmierung: WIE
    • Kreis: Resultat einer 360 Grad Rotation um einen festen Mittelpunkt mit dem Zirkel
    • Beschreibung von einer konkreten Lösung, so wird schrittweise vorgegangen

Erkläre deklarativ am Beispiel ,,Kreis"

  • Deklarative Programmierung: WAS
    • Kreis: Menge aller Punkte, die von einem vorgegebenen Punkt denselben Abstand hat
    • Reine Problembeschreibung ohne konkreten Lösungsweg!

Was sind Charakteristiken der imperativen/prozeduralen Problemlösung?

  • Der Fokus liegt auf den Befehlen (Anweisungen)
  • Kontrollfluss ist vorgegeben (sequentiell bis auf Kontrollstrukturen wie z.B. Funktionen, Bedingungen oder Schleifen)

Was sind Charakteristiken der deklarativ-logischen Problemlösung?

  • Einzelne Fakten und Regeln sind angegeben
  • Kontrollfluss ist nicht (explizit) vorgegeben

Was sind Charakteristiken der deklarativ-funktionalen Problemlösung?

  • Fokus liegt auf Definition von Ein- und Ausgaben von Funktionen
  • Kontrollfluss ist nicht (explizit) vorgegeben

Wann spricht man von strukturierter Programmierung?

Spezialisierung des imperativen Paradigmas, verlangt Beschränkung auf drei Kontrollstrukturen:

  1. Sequenzen (Hintereinander auszuführende Programmanw.)
  2. Auswahl (Verzweigung: Bedingung)
  3. Wiederholung (Schleifen)

Konsequenz: „goto“ darf nicht eingesetzt werden, sonst „Spaghetticode“ (= Code mit verworrenen Kontrollstrukturen)

Wann spricht man von prozeduraler Programmierung?

Spezialisierung des imperativen Paradigmas, bietet Unterteilung von Programmen in Teilprogramme (= Prozedur, oder je nach Sprache: Routine, Unterprogramm, Funktion)

  1. Vermeidet Code-Duplikation
  2. Prozeduren können Argumente entgegen nehmen und Ergebnisse zurück geben
  3. Unterscheidung in Programm-globale und Prozedurlokale Variablen

Oft genannt als „Gegenstück“ zur objektorientierten Programmierung innerhalb der imperativen Sprachen

Wann spricht man von objektorientierter Programmierung?

Spezialisierung des imperativen Paradigmas, laufende Programme bestehen aus einzelnen Objekte, welche miteinander interagieren (Nachrichten austauschen = Methoden aufrufen)

Objekte sind typischerweise Instanzen von Klassen (Geht auch anders, z.B. mit Prototypen in JavaScript)

  • Klassen definieren Zustand (Variablen) und Verhalten (Methoden)
  • Vererbung, Polymorphismus, usw.

Entstanden als Weiterentwicklung von prozeduraler Programmierung und abstrakten Datentypen

Was macht den Unterschied aus zwischen prozeduraler und strukturierter Programmierung?

Grundsätzlich überlappen sich die beiden Paradigmen an vielen Stellen.

Verwendung von Kontrollstrukturen wie Sequenzen, Auswahl und Wiederholung und Verzicht auf goto? => Strukturierte Programmierung

Programme in kleinere Teilaufgaben aufspalten? => Prozedurale Programmierung

Nenne die bekanntesten Unter-Programmierparadigmen der deklarativen Programmiernung.

  • logische Programmierung (z.B. Prolog)
  • funktionale Programmierung (z.B. Scheme)

Wann spricht man von logischer Programmierung?

Spezialisierung vom deklarativen Paradigma: Programm besteht aus Fakten und Regeln, aus welchen auf Anfrage automatisch versucht wird, eine Lösungsaussage herzuleiten

Lösungsweg wird nicht angegeben

Basierend auf mathematischer Logik (Horn-Klauseln, Resolution)

Wann spricht man von funktionaler Programmierung?

Spezialisierung des deklarativen Paradigmas: Programme bestehen ausschliesslich aus Definitionen von Funktionen mit Parametern und Rückgabewerten

  • Der Rückgabewert hängt ausschliesslich von den Parametern ab (-> Referenzielle Transparenz!)
  • Es gibt keinen Zustand und keine veränderbaren Daten

Basiert auf dem formalen System des Lambda-Kalkül

Welche imperativen Programmierparadigmen kennen Sie?

  • strukturiert
  • prozedural
  • objektorientiert

Welche deklarativen Programmierparadigmen kennen Sie?

  • logisch
  • funktional

Was ist eine Programmiersprache?

Programmiersprache = formal konstruierte Sprache, entworfen um Befehle an Maschinen (speziell Computer) zu übermitteln

Definition Syntax

Gibt das Muster (die formale Struktur) vor, nach dem Programme einer Sprache aufgebaut sind

➔„Zusammenfügungsregeln“

Definition Semantik

Definiert die Bedeutung von Programmen (Anweisungen, Operatoren, usw.)

➔„Interpretationsregeln“ 

Was beschreibt die Mächtigkeit einer Programmiersprache?

Die Mächtigkeit einer Programmiersprache beschreibt, den Umfang der darin festhaltbaren Algorithmen.

Was trifft für Java zu?

Warum soll bei der strukturierten Programmierung auf goto-Statements verzichtet werden?

Nach Dijkstra: Mit der goto-Anweisung sind verworrene Kontrollstrukturen möglich (= „Spaghetticode“) – Auswahl und Wiederholung sind einfacher verständlicher und Programmfluss nachvollziehbar

In welchem Verhältnis stehen imperative und strukturierte Programmierung?

Strukturierte Programmierung ist eine Spezialisierung der imperativen Programmierung, die sich auf die drei Kontrollstrukturen...

  1. Sequenzen
  2. Auswahl
  3. Wiederholung

...beschränkt. Goto-Statements sind zu vermeiden.

Was sind struct-Strukturen?

Mit struct lässt sich eine Liste von Variablen zusammenfassen.

Beispiel Deklaration:

struct point {

int x;
int y;
char color;

};

Verwendung:

struct point p;
p.x = 100;
p.y = 200;
p.color = 'g';
printf(" p = (%i, %i)", p.x, p.y);

Definition Abstrakte Datentypen

Abstrakte Datentypen (ADT) sind mathematische Modelle für Datenstrukturen und darauf definierte Operationen (mit vorgegebenem Effekt)

  • Welche „Unschönheit“ existiert im Zusammenhang mit abstrakten Datentypen?
  • Wie löst die Objektorientierung diese Unschönheit?

  • Implementierung der Datenstruktur ist (grundsätzlich) getrennt und unabhängig von der Implementierung der dazu gehörigen Funktionen.
  • Die Funktionen „hängen“ direkt an den Daten: Klassen haben definierte „Daten“ (Zustand: Instanzvariablen) und „Funktionen“ (Verhalten: Methoden)

Worin unterscheidet sich die Implementierung von einem abstrakten Datentyp in C fundamental von einer Implementierung in Java?

In C ist die Implementierung der Daten getrennt von derjenigen der Operationen, wohingegen bei Java die Implementierung der Daten und Operationen innerhalb der Klasse zusammengefasst sind.

Um welche Konzepte erweitert die OOProgrammiersprache Java im wesentlichen die prozedurale Programmiersprache C? 

  • Klassen und Instanzen
  • Interfaces
  • Sichtbarkeit
  • Packages
  • Exception Handling

Definition: Endrekursion (tail recursion)

Eine Prozedur ist endrekursiv, wenn:

  • sie nur einen rekursiven Aufruf hat und 
  • dieser rekursive Aufruf ist der letzte Aufruf in der letzten Klausel von dieser Prozedur
  • zusätzlich müssen die Aufrufe vor dem rekursiven Aufruf alle deterministisch sein

Was ist der Vorteil von Endrekursion?

Kein Backtracking notwendig: Endrekursion kann als Iteration ohne zusätzlichen Speicherplatz ausgeführt werden

Wie wird Endrekursion auch genannt?

last call optimization

Definition: Memoization

Optimierung durch Assertions.

Es werden zur Laufzeit Fakten und Regeln in die Wissensdatenbank eingefügt oder entfernt. Man vermeidet so das mehrfache berechnen von Zwischenresultaten,

Warum kann eine endrekursive Prozedur von Prolog effizienter ausgeführt werden, als eine nicht-endrekursive Prozedur?

Endrekursive Prozeduren können von Prolog als Iteration ausgeführt werden, was effizienter ist.

Beschreiben sie in eigenen Worten, auf was für einer Beobachtung „Optimierung mit Assertions“ beruht und wie diese konkret in Prolog umgesetzt wird.

Beobachtung: Bei einer rekursiven Prozedur werden Zwischenresultate mehrfach berechnet.

Diese Zwischenresultate speichert man bei einer Optimierung mit Assertions in Prolog in die Wissensdatenbank.

Einfügen mit asserta/1 oder assertz/1 und entfernen mit retract/1

Was antwortet Prolog auf die folgende Anfrage: X = [a | [b]]?

X = [a, b]

Étudier