Multiparadigmen- Programmiersprachen - grabmueller.de
Multiparadigmen- Programmiersprachen - grabmueller.de
Multiparadigmen- Programmiersprachen - grabmueller.de
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
<strong>Multiparadigmen</strong>-<br />
<strong>Programmiersprachen</strong><br />
Martin Grabmüller<br />
magr@cs.tu-berlin.<strong>de</strong><br />
Fachgebiet Übersetzerbau und <strong>Programmiersprachen</strong><br />
Fakultät IV – Elektrotechnik und Informatik<br />
Technische Universität Berlin<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 1/27
Einführung<br />
Übersicht<br />
Paradigmen und Paradigmen-Kombinationen<br />
Beispiele<br />
Syntax und Semantik<br />
Ausblick<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 2/27
Einführung<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 3/27
Definitionen<br />
Definition 1 Ein Paradigma ist ein Musterbeispiel.<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 4/27
Definitionen<br />
Definition 1 Ein Paradigma ist ein Musterbeispiel.<br />
Definition 2 Ein Programmierparadigma ist eine Sichtweise,<br />
die zur Lösung eines Problems mittels einer<br />
Programmiersprache eingenommen wird.<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 4/27
Definitionen<br />
Definition 1 Ein Paradigma ist ein Musterbeispiel.<br />
Definition 2 Ein Programmierparadigma ist eine Sichtweise,<br />
die zur Lösung eines Problems mittels einer<br />
Programmiersprache eingenommen wird.<br />
Definition 3 Eine <strong>Multiparadigmen</strong>- Programmiersprache ist<br />
eine Programmiersprache, die zur Problemlösung mit<br />
verschie<strong>de</strong>nen Programmierparadigmen die geeigneten<br />
Sprachmittel besitzt.<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 4/27
Programmierparadigmen<br />
Problemstellung<br />
(unabhängig von einem Paradigma)<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 5/27
Programmierparadigmen<br />
Problemstellung<br />
(unabhängig von einem Paradigma)<br />
Sichtweise auf ein Problem<br />
(abhängig)<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 5/27
Programmierparadigmen<br />
Problemstellung<br />
(unabhängig von einem Paradigma)<br />
Sichtweise auf ein Problem<br />
(abhängig)<br />
Damit verbun<strong>de</strong>ne Lösungsstrategie<br />
(abhängig)<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 5/27
Programmierparadigmen<br />
Problemstellung<br />
(unabhängig von einem Paradigma)<br />
Sichtweise auf ein Problem<br />
(abhängig)<br />
Damit verbun<strong>de</strong>ne Lösungsstrategie<br />
(abhängig)<br />
Beispiel: Listentraversierung<br />
imperativ: Schleife<br />
funktional: Menge rekursiver Gleichungen<br />
logisch: Menge rekursiver Prädikate<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 5/27
Paradigmen und<br />
Paradigmen-Kombinationen<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 6/27
Verschie<strong>de</strong>ne Paradigmen<br />
Imperativ<br />
Funktional<br />
Logisch<br />
Constraint-basiert<br />
Objekt-orientiert<br />
Nebenläufig<br />
Verteilt<br />
Aspekt-orientiert<br />
Intentional<br />
Generativ<br />
Literate Programming<br />
. . .<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 7/27
Paradigmen-Kombinationen<br />
Funktional-logisch<br />
Constraint-logisch<br />
Constraint-imperativ<br />
Funktional-imperativ<br />
Funktional-logisch-imperativ-objekt-orientiert<br />
. . .<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 8/27
Beispiele<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 9/27
Beispiele<br />
Funktional-logische Programmierung<br />
mit Curry<br />
Multiparadigmatische Programmierung<br />
mit GED<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 10/27
Curry<br />
Programm besteht aus Regeln <strong>de</strong>r Form<br />
f p1 . . . pn = t
Curry<br />
Programm besteht aus Regeln <strong>de</strong>r Form<br />
f p1 . . . pn = t
Curry<br />
Programm besteht aus Regeln <strong>de</strong>r Form<br />
f p1 . . . pn = t
Curry<br />
Programm besteht aus Regeln <strong>de</strong>r Form<br />
f p1 . . . pn = t
Curry – Auswertungsstrategien<br />
append [] L = L<br />
append [E | R] L = [E | append R L]<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 12/27
Curry – Auswertungsstrategien<br />
append [] L = L<br />
append [E | R] L = [E | append R L]<br />
append X [3,4] == [1,2,3,4] ⇒ X=[1,2]<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 12/27
Curry – Auswertungsstrategien<br />
append [] L = L<br />
append [E | R] L = [E | append R L]<br />
append X [3,4] == [1,2,3,4] ⇒ X=[1,2]<br />
eval append 1:rigid<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 12/27
Curry – Auswertungsstrategien<br />
append [] L = L<br />
append [E | R] L = [E | append R L]<br />
append X [3,4] == [1,2,3,4] ⇒ X=[1,2]<br />
eval append 1:rigid<br />
append X [3,4] == [1,2,3,4] ⇒ <strong>de</strong>layed<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 12/27
GED<br />
Entwurf als <strong>Multiparadigmen</strong>-Sprache<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 13/27
GED<br />
Entwurf als <strong>Multiparadigmen</strong>-Sprache<br />
Imperativ, funktional, logisch und objekt-orientiert<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 13/27
GED<br />
Entwurf als <strong>Multiparadigmen</strong>-Sprache<br />
Imperativ, funktional, logisch und objekt-orientiert<br />
Vor allem in <strong>de</strong>r Lehre benutzt<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 13/27
GED – imperativ<br />
func <strong>de</strong>lete(x, list) {<br />
local [a:[]];<br />
foreach i in list do<br />
if (i != x) then<br />
a := a | [i];<br />
end<br />
end;<br />
a;<br />
}.<br />
Schleife, Zuweisung<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 14/27
GED – funktional<br />
func <strong>de</strong>lete(x, list)<br />
if list then<br />
if (x = head(list)) then<br />
<strong>de</strong>lete(x, tail(list))<br />
else<br />
[head(list)]|<strong>de</strong>lete(x, tail(list))<br />
end<br />
end.<br />
Rekursion, Listen<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 15/27
GED – logisch<br />
func <strong>de</strong>lete(x, list) {<br />
local [temp];<br />
list[temp], temp != x -> temp<br />
}.<br />
Nicht<strong>de</strong>terminismus<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 16/27
GED – objekt-orientiert<br />
addtype (MyList, List, local[list], #, #).<br />
func MyList init(me, x:[])<br />
list := x.<br />
func MyList add(me, x)<br />
list := list | [x].<br />
func MyList <strong>de</strong>lete(me, x)<br />
list := list[x].<br />
Klassen, Vererbung, Metho<strong>de</strong>n, Kombination mit an<strong>de</strong>ren<br />
Paradigmen<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 17/27
Syntax und Semantik<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 18/27
Syntax<br />
Syntax muss Nutzung aller Paradigmen erlauben.<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 19/27
Syntax<br />
Syntax muss Nutzung aller Paradigmen erlauben.<br />
Einfache Syntax, die alle Konzepte einschließt<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 19/27
Syntax<br />
Syntax muss Nutzung aller Paradigmen erlauben.<br />
Einfache Syntax, die alle Konzepte einschließt<br />
Unterschiedliche Syntax für unterschiedliche Paradigmen<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 19/27
Syntax<br />
Syntax muss Nutzung aller Paradigmen erlauben.<br />
Einfache Syntax, die alle Konzepte einschließt<br />
Unterschiedliche Syntax für unterschiedliche Paradigmen<br />
Vorteile bei bei<strong>de</strong>n Ansätzen: Geschmacksache?<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 19/27
Integration <strong>de</strong>klarativer Sprachen<br />
Constraint-logisch, funktional-logisch<br />
Erfolgreich, theoretisch sauber<br />
Implementiert (CLP, Curry, Escher, AKL, . . . )<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 20/27
Integration <strong>de</strong>klarativer und<br />
imperativer Sprachen<br />
Zustandsfreie und zustandsbehaftete Berechnungen<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 21/27
Integration <strong>de</strong>klarativer und<br />
imperativer Sprachen<br />
Zustandsfreie und zustandsbehaftete Berechnungen<br />
Zerstört nützliche Eigenschaften <strong>de</strong>klarativer Sprachen<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 21/27
Integration <strong>de</strong>klarativer und<br />
imperativer Sprachen<br />
Zustandsfreie und zustandsbehaftete Berechnungen<br />
Zerstört nützliche Eigenschaften <strong>de</strong>klarativer Sprachen<br />
1. Referentielle Transparenz<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 21/27
Integration <strong>de</strong>klarativer und<br />
imperativer Sprachen<br />
Zustandsfreie und zustandsbehaftete Berechnungen<br />
Zerstört nützliche Eigenschaften <strong>de</strong>klarativer Sprachen<br />
1. Referentielle Transparenz<br />
2. Deklarative Semantik<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 21/27
Integration <strong>de</strong>klarativer und<br />
imperativer Sprachen<br />
Zustandsfreie und zustandsbehaftete Berechnungen<br />
Zerstört nützliche Eigenschaften <strong>de</strong>klarativer Sprachen<br />
1. Referentielle Transparenz<br />
2. Deklarative Semantik<br />
Lösungen:<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 21/27
Integration <strong>de</strong>klarativer und<br />
imperativer Sprachen<br />
Zustandsfreie und zustandsbehaftete Berechnungen<br />
Zerstört nützliche Eigenschaften <strong>de</strong>klarativer Sprachen<br />
1. Referentielle Transparenz<br />
2. Deklarative Semantik<br />
Lösungen:<br />
1. Ignorieren<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 21/27
Integration <strong>de</strong>klarativer und<br />
imperativer Sprachen<br />
Zustandsfreie und zustandsbehaftete Berechnungen<br />
Zerstört nützliche Eigenschaften <strong>de</strong>klarativer Sprachen<br />
1. Referentielle Transparenz<br />
2. Deklarative Semantik<br />
Lösungen:<br />
1. Ignorieren<br />
2. Seiteneffekte in die Typisierung aufnehmen<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 21/27
Integration <strong>de</strong>klarativer und<br />
imperativer Sprachen<br />
Zustandsfreie und zustandsbehaftete Berechnungen<br />
Zerstört nützliche Eigenschaften <strong>de</strong>klarativer Sprachen<br />
1. Referentielle Transparenz<br />
2. Deklarative Semantik<br />
Lösungen:<br />
1. Ignorieren<br />
2. Seiteneffekte in die Typisierung aufnehmen<br />
3. Getrennte Teilsprachen<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 21/27
Seiteneffekte und Typisierung<br />
Monadische Seiteneffekte<br />
Seiteneffektbehaftete Aktionen als Werte<br />
Übergeordneter Mechanismus führt Aktionen aus<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 22/27
Seiteneffekte und Typisierung<br />
Monadische Seiteneffekte<br />
Seiteneffektbehaftete Aktionen als Werte<br />
Übergeordneter Mechanismus führt Aktionen aus<br />
Effektsysteme<br />
Seiteneffekte wer<strong>de</strong>n in Typisierung aufgenommen<br />
Effekte wer<strong>de</strong>n inferiert<br />
Lokal begrenzte Effekte können maskiert wer<strong>de</strong>n<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 22/27
Getrennte Teilsprachen<br />
Berechnungssprache<br />
sequentiell, ausdrucksbasiert, nebeneffektfrei<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 23/27
Getrennte Teilsprachen<br />
Berechnungssprache<br />
sequentiell, ausdrucksbasiert, nebeneffektfrei<br />
Koordinationssprache<br />
erzeugt Berechnungen, ermöglicht Kommunikation<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 23/27
Getrennte Teilsprachen<br />
Berechnungssprache<br />
sequentiell, ausdrucksbasiert, nebeneffektfrei<br />
Koordinationssprache<br />
erzeugt Berechnungen, ermöglicht Kommunikation<br />
Goffin: funktionale Berechnungssprache,<br />
nebenläufige Constraints als Koordinationssprache<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 23/27
Getrennte Teilsprachen<br />
Berechnungssprache<br />
sequentiell, ausdrucksbasiert, nebeneffektfrei<br />
Koordinationssprache<br />
erzeugt Berechnungen, ermöglicht Kommunikation<br />
Goffin: funktionale Berechnungssprache,<br />
nebenläufige Constraints als Koordinationssprache<br />
Linda: beliebige Berechnungssprache,<br />
Tuple Spaces zur Koordination<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 23/27
Ausblick<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 24/27
Weitere Arbeiten<br />
Untersuchung verschie<strong>de</strong>ner Kalküle für imperative<br />
Sprachen<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 25/27
Weitere Arbeiten<br />
Untersuchung verschie<strong>de</strong>ner Kalküle für imperative<br />
Sprachen<br />
Untersuchung von Effektsystemen<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 25/27
Ausblick<br />
Unterschie<strong>de</strong> zwischen <strong>de</strong>klarativen und imperativen<br />
Sprachen<br />
Ähnlichkeiten zwischen <strong>de</strong>klarativen und imperativen<br />
Sprachen<br />
Definition einer einfachen, integrieren<strong>de</strong>n Semantik<br />
Definition einer unterstützen<strong>de</strong>n Syntax<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 26/27
Ausblick<br />
Unterschie<strong>de</strong> zwischen <strong>de</strong>klarativen und imperativen<br />
Sprachen<br />
Ähnlichkeiten zwischen <strong>de</strong>klarativen und imperativen<br />
Sprachen<br />
Definition einer einfachen, integrieren<strong>de</strong>n Semantik<br />
Definition einer unterstützen<strong>de</strong>n Syntax<br />
. . . und natürlich eine Implementierung<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 26/27
Vielen Dank<br />
<strong>Multiparadigmen</strong>-<strong>Programmiersprachen</strong> – p. 27/27