1 Hauptprogramme
Ein Computer hat ein so genanntes Rechenwerk. Diesem wird, geregelt von einem
Steuerwerk, zu jedem Taktschritt bei der Ausführung eines Programms ein
Befehl übergeben, der abgearbeitet wird. Viele Befehle verlangen noch ein
Datenwort, das auch mit dem Befehl übergeben wird und auf das der entsprechende
Befehl angewendet wird. Befehle und Daten eines Programms werden
beim Programmstart von einem nicht flüchtigen Speichermedium, wie der Festplatte, in den sehr schnell
les- und schreibbaren RAM "Random Access Memory" geholt und dort verarbeitet.
Mehr dazu:
http://wb.rus.uni-stuttgart.de/pc/cpu.asp
Bild 1-1: Vereinfachte Darstellung der Arbeitsweise eines Computers
Diese Maschinenprogramme sind für den Menschen nicht direkt, bzw. nur mit viel Mühe lesbar. Um dies zu erleichtern, wurde zuerst Assembler entwickelt, eine sehr Hardware nahe Programmiersprache, die die Befehle des Rechenwerks als Schlüsselwörter zur Verfügung stellt. Der Assembler-Befehlssatz ist stark von der Architektur des jeweiligen Rechners abhängig. Assembler wird nach wie vor benutzt, um z.B. sehr schnelle Programme zu schreiben, oder Rechner mit relativ einfacher Architektur zu programmieren, wie Mikrocontroller.
.include "m8def.inc" ;Header für Atmega8 von Atmel
ldi r16, 0xFF
out DDRB, r16 ;Port B durch Ausgabe von 0xFF ins
;Richtungsregister DDRB als Ausgang konfigurieren
ldi r16, 0x00
out DDRD, r16 ;Port D durch Ausgabe von 0x00 ins
;Richtungsregister DDRD als Eingang konfigurieren
loop:
in r16, PIND ;an Port D anliegende Werte (Taster) nach r16 einlesen
out PORTB, r16 ;Inhalt von r16 an Port B ausgeben
rjmp loop ;Sprung zu "loop:" -> Endlosschleife
Code 1-1: Kleines Assemblerprogramm für einen Mikrocontroller
0F EF 07 BB 00 E0 01 BB 00 B3 08 BB FD CF FF FF
Code 1-2: Maschinencode des Assemblerprogramms hexadezimal dargestellt.
So genannte Programmier - Hochsprachen, stellen Befehle zur Verfügung, die wesentlich näher an den Anwendungen orientiert sind, die mit ihnen erstellt werden sollen. Damit die mit ihnen geschriebenen Programme ablaufen können, haben sich drei Methoden etabliert. Bei den Compilersprachen, wie C, C++, Pascal, Fortran, etc. wird der Quellcode komplett in ein Maschinenprogramm übersetzt. Der dafür erforderliche Compiler liefert dann ein so genanntes Executable zurück, das dann z.B. unter Windows direkt durch Doppelklicken, oder durch Eingabe des Namens und ENTER in der Befehlskonsole gestartet werden kann. Javascript, PHP, Basic, etc. sind dagegen so genannte Skriptsprachen. Bei ihnen wird Befehlszeile für Befehlszeile von einem speziellen Maschinenprogramm, dem Interpreter, eingelesen und zur Programmlaufzeit in Maschinenbefehle umgesetzt. Entsprechend heissen diese Sprachen Interpretersprachen. Mit der Entwicklung von Java ist eine dritte Kategorie entstanden, bei der der Quellcode zunächst in einen nicht mehr vom Menschen, maschinen nahen Bytecode umgewandelt wird. Dieser wird von einem Interpreter verarbeitet, dessen Befehlsvorrat dem des Rechenwerks sehr nahe kommt. Dadurch erreicht ein interpretierter Bytecode bei der Ausführung eine Geschwindigkeit, die sehr von compilierten Programmen schon sehr nahe kommt.
In den ersten Hochsprachen, waren die Befehle in einem Block organisiert, der Zeile für Zeile abgearbeitet wurde. Die zu verarbeitenden Daten waren in einem anderen Block angeordnet und wurden durch die Befehle eingelesen, verarbeitet und wieder zurückgeschrieben. Da hierbei häufig sich wiederholende Codeelemente auftauchten, ist man dazu übergegangen, die redundanten Codeteile in vom Hauptprogramm mehrmals aufgerufenen Unterprogrammen unterzubringen. Mit der Entwicklung Objekt-orintierter Programmiersprachen, wie C++, Java, Smalltalk etc. hat man sich noch weiter von der Architektur des Computers weg und zu der Art und Weise, wie Menschen Ausschnitte aus der realen Welt beschreiben würden, die in einem Computerprogramm abgebildet werden hin orientiert. Hier werden Daten und Funktionen gemeinsam in Objekten organisiert. Man nennt sie dann Eigenschaften und Fähigkeiten/Methoden eines Objektes. Beispielsweise besitzt eine Person als Eigenschaft einen Namen, ein Alter und eine Adresse. Als Methoden für ein Personen-Objekt kämen z.B. die Erhöhung des Alters, oder die Ausgabe der Adresse in Frage.
Bild 1-2: Entwicklung der Programmier-Hochsprachen
C++ ist eine hybride Programmiersprache. Sie wurde aus der prozeduralen Sprache C unter Anleihen an die Objekt-orientierten Programmiersprachen Smalltalk und Eiffel entwickelt. Hybrid heisst: Man kann mit C++ sowohl prozedural, als auch Objekt-oreintiert programmieren. In den ersten beiden Semstern Informatik werden wir nicht über die prozedurale Verwendung von C++ hinaus gehen. Und bei der Behandlung der ersten Themen werden wir zudem nur Hauptprogramme schreiben und keine Unterprogramme.