Programmiersprachen - Informatik @ Uni Frankfurt

Werbung
Programmiersprachen:
Klassifizierung und Methoden
Programmier-Paradigmen
Grundlagen der Programmierung 2 (1.C)
- 1 -
Programmiersprachen: Begriffe
Syntax
Beschreibung der Programme als Texte
let xyz =
3+4
Semantik
Beschreibung der Aktionen / Bedeutung eines Programms
( berechne (3+4), mit dem Resultat ...)
Grundlagen der Programmierung 2 (1.C)
- 2 -
Programmiersprachen
imperativ
Programm ist Folge von Befehlen
sukzessive Änderung des Speicherinhalts
Ergebnis des Programms: letzter Zustand
bzw. alle durchgeführten Änderungen
Ein imperatives Programm sagt präzise:
was
(welche Anweisung),
wann (Reihenfolge der Anweisungen)
womit (Speicherplatz/Variable) zu geschehen hat.
Grundlagen der Programmierung 2 (1.C)
- 3 -
Programmiersprachen
prozedural:
Strukturierung in (imperativen) Programmiersprachen
Prozedur = Unterprogramm
Aufruf mit Argumenten im Programm
Ziel: Übersichtlichkeit; Wiederverwendbarkeit
Grundlagen der Programmierung 2 (1.C)
- 4 -
Programmiersprachen
funktional: Programm ist strukturiert in Funktionsdefinitionen
Ausdrücke
= Anwendung von Funktionen auf Argumente
Berechnung = Auswertung von Ausdrücken
Ergebnis
= Nur der Return-Wert
Varianten von funktionalen Programmiersprachen:
nicht-strikt: Argumente werden so spät wie möglich ausgewertet
strikt: Argumente werden vor Funktionsaufruf ausgewertet
pur: Objekte haben nur einen Wert, keine Mutation möglich
nicht-pur: Objekte veränderbar, Seiteneffekte möglich
Grundlagen der Programmierung 2 (1.C)
- 5 -
Programmiersprachen
deklarativ:
Idealfall: Spezifikation = deklaratives Programm
Betonung auf Logik, weniger algorithmisch
Beispiele: logische Programmierung Prolog
Grundlagen der Programmierung 2 (1.C)
- 6 -
Programmiersprachen
objektorientiert:
Verwendung in imperativen Programmiersprachen
Strukturierung des Programm in Klassen.
Ziel: Übersichtlichkeit, Wiederverwendung
Ausführung eines Programms:
Erzeugung von Objekten
Austausch von Nachrichten zwischen Objekten
Grundlagen der Programmierung 2 (1.C)
- 7 -
Programmiersprachen
typisiert
Alle Programmiersprachen haben eine Typisierung
Programmtext
• statische Typisierung:
• dynamische Typisierung: Ausführungszeit des Programms
•
•
schwache Typisierung:
Typfehler zur Laufzeit sind möglich
starke Typisierung:
Typfehler zur Laufzeit sind nicht möglich
Grundlagen der Programmierung 2 (1.C)
- 8 -
Beispiele für Programmiersprachen
Haskell: Eine funktionale Programmiersprache
funktional, nicht-strikt, hat ein polymorphes und starkes Typsystem,
flexible Datenstrukturen,
gute Abstraktionseigenschaften,
Ziele:
pures Programmieren,
Auswerten von Ausdrücken
rekursives Programmieren,
Typsystem zur Strukturierung
Grundlagen der Programmierung 2 (1.C)
- 9 -
Beispiele für Programmiersprachen
Python:
prozedural; schwaches, dynamisches Typsystem,
flexible Datenstrukturen, Objektorientierung.
Java:
prozedural; dynamisches Typsystem,
flexible Datenstrukturen, Objektorientierung.
Grundlagen der Programmierung 2 (1.C)
- 10 -
Objektorientierte Konzepte: Vergleich mit Haskell
OO (Java,Python)
Klasse
Methode
Objekt
Senden von Nachrichten
Seiteneffekte
Aliasing
Grundlagen der Programmierung 2 (1.C)
|
entspricht
entspricht
entspricht
entspricht
|
|
Haskell
Typ bzw. einer Typklasse
Funktion (bzw. Prozedur)
konstruiertem Datenobjekt.
Funktionsaufruf
(self = extra Argument)
Nur Kopieren möglich
keine Seiteneffekte
- 11 -
Logische Programmierung
Grundlegende Idee:
Verwendung der Prädikatenlogik
Formaler:
Hornlogik, d.h.:
Programm besteht nur aus Formeln
∀x1, . . . xn.A1 ∧ . . . ∧ An ⇒ B
(Hornklauseln)
Schreibweise: B : −A1, . . . An
Grundlagen der Programmierung 2 (1.C)
- 12 -
Logische Programmierung
Informell:
Stärken:
•
•
•
Programm besteht aus Wenn-Dann-Regeln
mit Übertragung von Werten
verglichen mit anderen Programmiersprachen
deklarative (auch rekursive) Beschreibung von
menhängen (Relationen)
Beschreibung von Mengen
Suche/Suchverfahren ergeben sich automatisch
Grundlagen der Programmierung 2 (1.C)
Zusam-
- 13 -
Logische
ausführung
Programmierung:
Programm-
Ausführung =
Beantwortung von Anfragen an das Programm
Anfrage:
∃y1, . . . ym.C1 ∧ . . . ∧ Cm
entspricht einer negativen Hornklausel
Antwort
die möglichen Tupel y1, . . . ym
bzw Ja / Nein
Ausführung:
Schlussfolgern
Grundlagen der Programmierung 2 (1.C)
- 14 -
Logische Programmierung: Beispiel
vater(peter,maria).
mutter(susanne,maria).
vater(peter,monika).
frau(maria).
frau(susanne).
frau(monika).
mann(peter).
eltern(X,Y) :- vater(X,Y).
eltern(X,Y) :- mutter(X,Y).
Anfrage:
Antwort:
eltern(peter,maria)?
Ja
Anfrage:
Antwort 1:
Antwort 2:
Antwort 3:
frau(X)?
X = maria
X = susanne
X = monika
Grundlagen der Programmierung 2 (1.C)



















Programm


















- 15 -
Logische Programmierung: Beispiel
vater(peter,maria).
mutter(susanne,maria).
vater(peter,monika).
frau(maria).
frau(susanne).
frau(monika).
mann(peter).
eltern(X,Y) :- vater(X,Y).
eltern(X,Y) :- mutter(X,Y).
Anfrage:
Antwort 1:
Antwort 2:
eltern(peter,X)
X = maria
X = monika
Grundlagen der Programmierung 2 (1.C)



















Programm


















(Kinder von peter)
- 16 -
Herunterladen