1. Programmiersprachen

Programmiersprachen gibt es etwa ab Ende der 50-er Jahre und man unterscheidet zwischen maschinenorientierten (niederen) und problemorientierten (höheren) Programmiersprachen. Bei höheren Programmiersprachen unterscheidet man heute vor allem zwischen prozeduralen und objektorientierten Sprachen.

Diese Sprachen ermöglichen es dem Programmierer, das von ihm entworfene Struktogramm bzw. die Diagramme der UML (u.a. Klassendiagramme) mit Hilfe einer Formalsprache darzustellen, die vom Computer selbst - mittels eines Übersetzungsprogramms - in die maschineninterne Darstellungsform übertragen werden kann.

In dieser "übersetzten" Form ist das Programm vom Computer ausführbar.

Die Übersicht auf der nächsten Seite zeigt die wesentlichsten Unterschiede von Programmiersprachen. Über die angeführten Beispiele hinaus gibt es eine Unzahl weiterer Programmiersprachen. Die genannten Sprachen sind jedoch die in der Praxis am häufigsten verwendeten, wobei man bei der Häufigkeit der Anwendung ganz unterschiedliche Prozentanteile erhält je nachdem, ob man den Großrechner-, Abteilungsrechner- oder PC-Bereich untersucht, bzw. ob man von den zu programmierenden Anwendungen ausgeht!

Wie kommen nun Programme und Daten in den Computer?

Bei den meisten Programmiersprachen besteht jede Programmzeile aus 80 Spalten. Dies hat historische Gründe. Früher schrieb man jede Zeile mit Hilfe einer speziellen Maschine (eines sogenannten Lochers) auf eine Lochkarte, die der Computer lesen konnte. Eine Lochkarte hatte 80 Spalten und bot lange Zeit fast die einzige Möglichkeit, Programme und Daten in den Computer einzugeben. So kam es, dass sich viele Dinge, die sich auf einen Computer bezogen, an diesen 80 Spalten einer Lochkarte orientierten.

Heute verwendet man ein Bildschirmgerät mit Tastatur und Maus für die Eingabe einer Programmzeile und für die Eingabe von Daten.

Es würde den Rahmen dieses Buches sprengen, wenn man nun genau den Vorgang beschriebe, wie die eingegebenen Programme und Daten mit Hilfe eines sogenannten Betriebssystems in den Computer gelangen und dort so weiterverarbeitet werden, dass schließlich die gewünschten Ergebnisse eines Programms auf Bildschirm, auf Papier, auf Platte oder auf irgendein anderes Ausgabemedium ausgedruckt bzw. ausgegeben werden.

Wir wollen in diesem Buch einfach annehmen, dass Programme und Daten über einen Bildschirm und eine Tastatur in den Computer kommen (Standardeingabe). Weiters wollen wir ab nun eine Zeile (Programmzeile oder Datenzeile) einen Datensatz (bzw. kurz einen Satz) nennen.

Programmiersprachen werden üblicherweise mit Hilfe von "Generationen" klassifiziert.

Als die ersten Computer in den 40er-Jahren gebaut wurden, konnte ein Computer sehr oft nur eine ganz bestimmte Aufgabe (meist eine Rechenaufgabe) lösen. Die Programmierung dieser damals riesigen Anlagen erfolgte durch fixe Kabel- und Steckverbindungen, die man mit Hilfe von Steckbrettern und/oder Schaltern herstellte. (Dies könnte man als die 0. Generation bezeichnen.)

Die eigentliche Programmierung von Computern begann mit den ersten Maschinensprachen, mit deren Hilfe ein Computer ganz unterschiedliche Aufgaben bewältigen konnte. Dabei musste ein Programmierer die absoluten Adressen der verwendeten Datenfelder im Hauptspeicher (damals noch Kernspeicher) ganz genau kennen und in seinem Maschinenprogramm angeben. Maschinensprachen sind die Sprachen der 1. Generation.

Assemblersprachen (maschinenorientierte Sprachen oder auch Symbolsprachen) sind die Sprachen der 2. Generation. Der Programmierer kann symbolische Adressen (Namen) für seine Datenfelder im Hauptspeicher verwenden, er muss sich nicht mehr um die Adressstruktur des zugrundeliegenden Prozessors kümmern. Außerdem gibt es mnemonische Namen für die Maschinenbefehle. Allerdings ist der Befehlsvorrat jeder Assemblersprache durch den verwendeten Prozessor vorgegeben. Das bedeutet, dass jeder Prozessor seine eigene Assemblersprache haben muss.

Sprachen der 3. Generation sind unabhängig von einem speziellen Prozessor. Diese Sprachen nennt man daher auch höhere bzw. problemorientierte Programmiersprachen. Zu jedem Prozessor muss es für jede solche Sprache ein eigenes Übersetzungsprogramm (Compiler oder Interpreter) geben, das die Übersetzung in die Maschinensprache ermöglicht. Ein Programmierer kann sich nun voll auf die gestellte Aufgabe konzentrieren, er muss nicht auf die technischen Möglichkeiten bzw. Einschränkungen eines bestimmten Computers Rücksicht nehmen. Das bedeutet aber auch, dass er spezielle Eigenschaften eines Prozessors nicht nutzen kann und somit auf dessen Vorteile verzichten muss (wie z.B. höhere Verarbeitungsgeschwindigkeit bei sogenannten Echtzeitproblemen).

Bei allen genannten Sprachen benötigt man eine spezielle EDV-Ausbildung, nämlich die eines Programmierers. Um auch den Endbenutzern (Anwendern) die Programmierung von Computern zu ermöglichen, wurden die Sprachen der 4. Generation entwickelt. Diese Sprachen (auch 4GL-Sprachen genannt) sind mächtige Werkzeuge, die heute meist Teil von sogenannten integrierten Paketen (oder Multifunktionspaketen, auch bekannt unter dem Sammelbegriff "Office-Pakete") sind. Auch sogenannte Datenbankabfragesprachen (z.B. SQL) gehören zu diesen Sprachen.

Die Sprachen der 5. Generation sind völlig unabhängig von jeglicher Software- (und Hardware-)Umgebung. Ursprünglich gedacht für den Einsatz im Anwendungsbereich der Künstlichen Intelligenz, setzten sich diese Sprachen mehr und mehr auch für ganz allgemeine Problemstellungen durch.

Innerhalb dieser Generation unterscheidet man
  • objektorientierte,
  • funktionale und
  • logische Sprachen.

Klarerweise sind diese Sprachen auch problemorientiert, zur Unterscheidung nennt man daher die Sprachen der 3. Generation auch prozedurale Sprachen.

PROGRAMMIERSPRACHEN
Maschinenorientierte (niedere) Sprachen Problemorientierte (höhere) Sprachen
die Übersetzung in die Maschinensprache erfolgt im Verhältnis
1 : 1 1 : n
die Übersetzungsprogramme heißen
ASSEMBLER (oder auch ASSEMBLIERER) COMPILER (erzeugt ein fertiges Maschinenprogramm) und
INTERPRETER (Übersetzung zur Laufzeit - Befehl für Befehl)
Beispiele für derartige Programmiersprachen sind:
IBM/370-ASSEMBLER
SIEMENS-ASSEMBLER
AUTOCODE
GESAL
Z-80-ASSEMBLER
8086/8088-ASSEMBLER
Prozedurale Sprachen:
    ADA
    ALGOL    (ALGOrithmic Language)
    APL         (A Programming Language)
    BASIC     (Beginner's All purpose Symbolic Instruction Code)
    C
    COBOL       (COmmon Business Oriented Language)
    FORTRAN   (FORmula TRANslator)
    MODULA
    PASCAL
    PHP
    PL/I       (Programming Language One)
    RPG       (Report Program Generator)
Objektorientierte Sprachen:
    C++
    C#
    Java
    MODULA3
    Object-PASCAL
    PHP 5 (mit Einschränkungen)
    Smalltalk
    Visual PL/I
Funktionale Sprachen:
    LISP
Logische Sprachen:
    PROLOG     (PROgramming in LOGic)
    LOGO


Weiter zu
Kapitel 3.2.1.2 - Programm 1 (prozedural)
Kapitel 3.2.2.2 - Programm 2 (prozedural)
Kapitel 3.2.3.2 - Programm 3 (prozedural)
Kapitel 4.2.1.2 - Programm 1 (objektorientiert)
Kapitel 4.2.2.2 - Programm 2 (objektorientiert)
Kapitel 4.2.3.2 - Programm 3 (objektorientiert)
Kapitel 8.7.1 - Demo-Programm (Werte- und Referenztypen)
Kapitel 9.1.4 - Demo-Programm (Parameterübergabe)
Kapitel 14.2 - Beispiel mit Datenerfassung (Dateien, objektorientiert)
Kapitel 15.1.1 - SQL-Skript
Kapitel 15.2 - Einführende Beispiele (Datenbanken, prozedural)
Kapitel 15.3 - Beispiel mit Datenerfassung (Datenbanken, objektorientiert)
Kapitel 16.1.2 - Projektpfad - Include-Datei "projektpfad.inc.php"
Zurück
zum Anfang dieses Kapitels
zum Inhaltsverzeichnis