29.10.2013 Aufrufe

Multiparadigmen- Programmiersprachen - grabmueller.de

Multiparadigmen- Programmiersprachen - grabmueller.de

Multiparadigmen- Programmiersprachen - grabmueller.de

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!