Information Technology Reference
In-Depth Information
hat die Lösung x = 1. Niemand käme auf die Idee zu sagen,
dass eine Lösung vorliegt, wenn man für das erste Vorkom-
men von x den Wert 3 nimmt und für das zweite den Wert 5
(9 − 2 * 5 + 1 = 0). Eine Variable steht also in ihrem Gül-
tigkeitsbereich stets für denselben Wert. Diese Eigenschaft
erfüllt die Variable a in dem Programmbeispiel nicht, da ihr
Wert durch
Baum und sagt „eins“, zeigt dann mit dem Finger auf das
nächste Element und sagt „und noch eins sind zwei“, usw..
Es identiiziert also jedes Element (in diesem Falle ein Baum)
der Folge mit Eins und addiert die Einsen auf.
Ein FP-Programm setzt dieses Vorgehen mit folgenden
Funktionen um:
• Ausgangspunkt ist die „konstante“ Funktion x , die
jedes Objekt mit „ x “ identiiziert. In diesem Fall ist x
gleic h 1.
• Auf 1 wird das Funktional a (Anwendung auf alle) an-
gewandt. Das Programm a f bewirkt, dass die Funktion
f auf alle Elemente einer präsentierten Folge angewandt
wird. In di esem Fall ist f gleich 1, d. h. das FP-Pro-
gramm α1 identiiziert jedes Element (ganz gleich ob es
Bäume oder Häuser sind) einer Folge mit „eins“.
• Die Funktion + ist die übliche Addition zweier Zahlen.
• Auf die Addition wird das Funktional / (Reduktion)
angewandt. Das Programm / f bewirkt, dass die binäre
Funktion f sukzessive auf alle Elemente einer Folge
angewandt wird.
• Als Endergebnis erhält man das FP-Programm
a := x + 1 bzw. a := x + 2
geändert wird.
Da es hierdurch sehr schwer ist, Aussagen über die Ei-
genschaften eines Programms zu treffen, entstand die Idee,
Programme an mathematischen Kalkülen zu orientieren. Dies
führte zur Entwicklung der funktionalen oder applikativen
Sprachkonzepte. Zum ersten Mal wurde dies bei der bereits
beschriebenen Sprache LISP realisiert, die sich am Lambda-
Kalkül orientierte.
Zu denjenigen Sprachen, die Weiterentwicklungen von
LISP waren, gehörten u. a.
SCHEME (entwickelt Mitte der 1979er-Jahre durch Ge-
rald Jay Sussman und Guy L. Steele am Massachusetts
Institute of Technology)
HOPE (entwickelt 1980 durch Bod Burstall und David
McQueen in Edinburgh)
MIRANDA (entwickelt von David Turner zwischen 1983
und 1986)
HASKELL (entwickelt zwischen 1987 und 1990 durch
Paul Hudak , Simon Peyton Jones und Philip Wadler ).
Ein anderes Konzept wurde von J.W. Backus , dem Va-
ter von FORTRAN, entwickelt. Es waren die FP-Systeme
( F unctional- P rogramming-Systems) , die er anlässlich seiner
„Turing Award Lecture“ auf der ACM Jahrestagung 1977 vor-
stellte. Diese basierten nicht auf dem LAMBDA-Kalkül, son-
dern auf den Prinzipien der kombinatorischen Logik. Hierbei
handelt es sich um eine Theorie, die in den 1920er-Jahren von
M. Schöninkel und H. B. Curry entwickelt wurde. Das Be-
sondere dieses Kalküls war seine Variablenfreiheit, wodurch
sich Programme, die auf diesem Kalkül beruhen, in ihrer äu-
ßeren Form stark von üblichen Programmen unterscheiden.
Die FP-Systeme waren keine in allen Einzelheiten festge-
legten Programmiersprachen, sondern im Sinne einer Sche-
masprache als Konzept für funktionale Sprachen vorgesehen.
Sie basierten auf den von Backus bereits Anfang der 1970er-
Jahre entwickelten Red Languages. Bei einem FP-Programm
hatte man drei verschiedene Ebenen: Objekte (atomar oder
Listen), Funktionen zwischen Objekten und ferner Funktio-
nale, die als Ergebnis Funktionen zwischen Objekten besa-
ßen.
Zur Demonstration sei ein Programm vorgestellt, wel-
ches die Länge einer Folge (z. B. Anzahl der Bäume in einer
Straße) bestimmt. Ein kleines Kind würde diese Aufgabe fol-
gendermaßen lösen: Es zeigt mit dem Finger auf den ersten
def länge = (/+) o (α1)
Hierbei ist o die Komposition von Funktionen (Program-
men).
Die Anwendung auf die Eingabefolge <1, 2, 3> erfolgt
durch:
länge : <1,2,3> (/+)o(a1):<1,2,3>
= (/+):((a1):<1,2,3>)
= /+: <1:1, 1:2, 1:3>
= /+:<1,1,1>
= +:<1,+:<1,1>>
= +:<1,+:<1,/+:<1>>>
= +: < 1, + : < 1,1 >>
= +: < 1,2 >
= 3
Die FP-Systeme konnten sich zwar nicht durchsetzten,
aber sie gaben einen wesentlichen Anstoß zur Entwicklung
neuer Techniken zur Programmentwicklung und für Pro-
grammveriikationen.
Objektorientierte Sprachen
Als die Charakteristika der objektorientierten Programmie-
rung gelten das Klassenkonzept, die Vererbung, die Kapse-
lung und das Versenden von Botschaften. In Klassen werden
Objekte mit ähnlichen Eigenschaften zusammengefasst. Ein
Objekt besitzt bestimmte Attribute (Eigenschaften, Daten-
struktur) und Methoden und ist in der Lage, von anderen Ob-
jekten Nachrichten zu empfangen beziehungsweise an diese
zu senden. Klassen können von anderen Klassen abgeleitet
werden (Vererbung). Dabei erbt die abgeleitete Klasse die
 
 
Search WWH ::




Custom Search