2.1.2. Die Entwicklung der heutigen Programmiersprachen

Nächste Seite

Programmiersprachen formulieren Algorithmen und Datenstrukturen so, dass der Rechner das resultierende und übersetzte (kompilierte) Programm ausführen kann. Es gibt heute bereits mehr als tausend Programmiersprachen, wobei allerdings nur etwa 20 weiter verbreitet sind.
Man unterscheidet heute 3 Hauptgruppen von Programmiersprachen in unterschiedlicher Höhe, d.h. "Entfernung" vom Computer: Maschinensprachen, Assemblersprachen und Problemorientierte (höhere) Programmiersprachen.
In der Anfangszeit der Mikrorechentechnik wurden Programme fast ausschließlich in Maschinen- oder Assemblercode erstellt und getestet. Nach dem Erscheinen der ersten Betriebssysteme und verbesserter Hilfsmittel für die Programmentwicklung, vor allem von Übersetzern (Compilern) für höhere Programmiersprachen, waren Ende der siebziger Jahre die Voraussetzungen für eine Programmentwicklung geschaffen, die dem Niveau der Rechentechnik entsprach. Die Orientierung auf wenige international verbeitete Betriebssysteme förderte die Kompatibilität und damit den Austausch von Programmen.

2.1.2.1. Übersicht der Programmiersprachen

Maschinensprachen

Der Maschinencode (=Maschinensprache) ist das Endergebnis der Kompilierung einer höheren Programmiersprache wie z.B. Pascal oder C oder von Assemblersprachen. Dieser aus Einsen und Nullen (Binärzeichen) bestehende Code ist die einzige Sprache, die ein Computer verstehen kann. Er bildet somit die Grundlage aller Programmiersprachen, welche nur als Hilfsmittel dienen, dass der Mensch in einer einfachen Weise die vom Computer zu lösenden Probleme formulieren kann.
Algorithmen werden so ausgedrückt, dass das benutzte Rechnermodell sie direkt verarbeiten kann, dabei werden die Zeichenfolgen durch den Mikroprozessor geladen und ausgeführt.
Alle verwendeten mathematischen Operationen werden auf eine sehr begrenzte Anzahl von Grundoperationen zurückgeführt.
Die Programme sind an ein bestimmtes Rechnermodell gebunden und nicht auf andere Platformen portierbar. Auch die benutzbaren Ein- und Ausgabegeräte sind vorgegeben.

In Maschinensprache geschriebene Programme sind äußerst schwer lesbar und auch für den erfahrenen Programmierer oft unverständlich.
Sie bieten dafür den Vorteil, dass sie schneller verarbeitet werden können, weil eine spezifischere Problemformulierung möglich ist, da man nicht auf vorgegebene und umfangreiche "Formulierungshilfen" zurückgreifen muss.

Beispiel

Assemblersprachen

Assemblersprachen sind symbolische Darstellungen der Maschinencodes und damit ebenso maschinennah und schnell zu verarbeiten.
Dadurch sind sie sehr effizient und außerdem benötigen sie nur wenig Speicherplatz.
Der Nachteil ist allerdings, dass sie, genau wie die Maschinensprachen, an einen bestimmten Rechnertyp gebunden sind.

Auch Assemblersprachen sind noch recht schwer verständlich und wenig übersichtlich, erleichtern aber immerhin die Programmierung in Maschinensprache
(rein binäre Darstellung).

Beispiel


Höhere Programmiersprachen (High Level Language)

Höhere Programmiersprachen sind die heute am meisten verwendeten Programmiersprachen.
Sie basieren auf der Maschinensprache und werden durch einen Compiler oder Interpreter in diese übersetzt (compiliert).
Algorithmen werden in den HLL (High Level Languages) auf einfache und dem Problem angepasste Weise beschrieben.

Programme in einer höheren Programmiersprache sind oft plattform- und rechnerunabhängig und können übertragen werden. Sie haben einen klaren und strukturierten Aufbau und sind relativ leicht nachvollziehbar.
Die höheren Programmiersprachen ermöglichen eine problemnahe und für den Anwender transparente Darstellung, die den Forderungen nach Anwenderfreundlichkeit und Verständlichkeit entgegenkommt.
Da dem Computer an sich die Programme unverständlich sind, müssen sie immer erst compiliert werden. Sie belegen mehr Speicherplatz und sind in der Ausführung langsamer als vergleichbare reine Maschinencodes.


Beispiel

Die höheren Programmiersprachen werden unterteilt in imperative, funktionale, prädikative und objektorientierte Programmiersprachen. Die Einteilung kann man jedoch unter verschiedenen Gesichtspunkten vornehmen, so dass sich die einzelnen Klassen überschneiden. Einige Sprachen kann man somit in mehrere Klassen einordnen..

  1. Imperative Programmiersprachen

    Die Imperativen Programmiersprachen (auch Prozedurale PS genannt) stammen von den Assemblersprachen ab und sind die heute wohl am häufigsten benutzten Programmiersprachen in Schule und Beruf. Sie entsprechen der Von-Neumann-Architektur und beruhen auf dem Variablenkonzept. Der Bezeichner einer Variablen ist die Adresse einer Speicherzelle und deren Inhalt gibt den Variablenwert an. Erneute Wertzuweisungen der Variablen sind jederzeit möglich und zu verschiedenen Zeiten kann die Variable somit verschiedene Werte besitzen. Die Lösung eines vorliegenden Problems wird in Form eines Algorithmus codiert: Der Weg auf dem ein gewünschtes Resultat bei gegebenen Voraussetzungen erreicht werden soll wird eindeutig und vollständig beschrieben, wobei die Anzahl der Verarbeitungsschritte endlich sein muss (d.h. der Algorithmus muss terminierend sein).

    Beispiele: Pascal, BASIC, C, COBOL, FORTRAN, Ada, ALGO 60

  2. Funktionale Programmiersprachen

    Die Funktionalen Programmiersprachen (auch Applikative PS genannt) sind aus dem Lambda-Kalkül entstanden.
    Sie beschreiben den Datenfluss, also die fortlaufende Umwandlung von Werten durch Anwendung von Funktionen. Der Variablenbegriff ist nicht vorhanden, was bedeutet, dass jedem Bezeichner (Speicherzelle) nur einmal ein Wert zugewiesen werden kann. Aus diesem Grund haben die funktionalen Sprachen nur ein eingeschränktes Anwendungsgebiet, da auch der Begriff des Zustandes, welcher z.B. durch Datenbestände repräsentiert wird, unbekannt ist.
    Ein Algorithmus entsteht durch eine Hintereinanderanwendung von Funktionen, welche ihrerseits durch den rekursiven Aufruf weiterer Funktionen definiert sind,  auf die Eingangsdaten. Die Anwendung einer Funktion auf einen Algorithmus nennt man "Applikation".
    Bestandteil der Programmiersprache ist ein Mechanismus vom Programmierer vorgegebenen Funktionen und Eingangsvariablen auswertet und somit das Problem löst.

    Beispiele: LOGO, LISP (COMMON LISP), Occam

  3. Logische Programmiersprachen

    Die Logischen Programmiersprachen (auch Prädikative PS genannt) sind aus dem Logikkalkül entwachsen.
    Das Besondere an diesen Sprachen ist, dass nicht die Lösung eines Problems beschriebe wird, sondern das Problem selbst. Dies geschieht in Form von Fakten (Aussagen über die Beziehung zwischen den handelnden Objekten) und Regeln für allgemeine Transformationen. Indem der Benutzer eine Fragestellung gibt, werden die Algorithmen auf die Eingangsdaten angewandt. Eine automatische Problemlösung erfolgt mit Hilfe der implementierten Schlussfolgerungsprozedur, welche die gegebenen Regeln auf die Fakten anwendet und versucht die Frage zu bejahen oder zu verneinen.
    Logische Programmiersprachen werden vor allem im Bereich der Künstlichen Intelligenz z.B. zur Verarbeitung natürlicher Sprache verwendet.

    Beispiel: PROLOG


  4. Objektorientierte Programmiersprachen

    Objektorientierte Programmiersprachen haben sich erst relativ spät herausgebildet. Im Jahre 1980 entstand mit SMALL TALK 80 die erste Programiersrprache, die konsequent Fenstertechnik und eine Maus als Eingabemedium verwendet und alle Ausgaben auf einem pixelorientierten Bildschirm ausgibt. Der Benutzer sieht nur noch eine einheitliche Oberfläche, die für ihn das Betriebssystem und die Dateiverwaltung verbirgt, und arbeitet mit Objekten (z.B. Zahlen, Graphiken, Texte, Editoren...).
    Es gibt keine Trennung mehr zwischen Daten und Programmen, die auf die Daten wirken. Jedes Objekt hat eine Anzahl von Attributen (Eigenschaften) und kennt bestimmte Operationen, die es ausführen kann. Die Objekte untereinander treten in Verbindung durch Aussenden von Messages (engl.: Nachrichten). Diese wiederum können am Ort der Empfängers Veränderungen auslösen oder zur Erzeugung neuer Objekte führen.
    Objekte sind in Klassen geordnet und erben die Attribute und Operationen ihrer Klasse bei ihrer Entstehung.

    Beispiele:
    SMALLTALK 80, Delphi, C++, Visual Basic


Übersicht über die Entstehung der Programmiersprachen