Applikationsprogramm

Das Computerprogramm oder kurz Programm ist eine Folge von Anweisungen, die auf einem Computer ausgeführt werden können, um damit eine bestimmte Funktionalität (z. B. Textverarbeitung) zur Verfügung zu stellen.

Inhaltsverzeichnis

Details

Ein Computerprogramm liegt zumeist auf einem Datenträger als ausführbare Programmdatei im sogenannten Maschinencode vor und wird zur Ausführung in den Arbeitsspeicher des Rechners geladen. Das Programm wird als Abfolge von Maschinen-, d.h. Prozessorbefehlen von dem Prozessor des Computers (in diesem Fall meist die CPU) verarbeitet und damit ausgeführt.

Eine Programmdatei, welche aus Maschinencode besteht, enthält Befehle aus dem Sprachschatz des Prozessors, d. h. Befehle, die für den Prozessor „verständlich“ und damit ausführbar sind. Die Erstellung eines solchen Programms bezeichnet man allgemein als Programmierung. In den Anfängen der Programmierung wurde - bis zur Entwicklung von Programmiersprachen - ausschließlich in Maschinencode programmiert. Der Programm- bzw. Quelltext, den der Programmierer in einer Programmiersprache abgefasst hat, besteht aus einer Abfolge von (zumeist der englischen Sprache entnommenen) Befehlen, die für den Programmierer (i. A.) verständlicher sind als der Maschinencode (z. B.: ADD, SUB, AND, OR etc). Später ergänzten die höheren Programmiersprachen Schleifen, Abstraktion und modularen Aufbau.

Sowohl der Quelltext als auch der von einem Computer ausführbare Maschinencode werden als Programm bezeichnet. Meist ist eine Quelltextdatei durch eine Dateiendung gekennzeichnet, die auf die verwendete Hochsprache hinweist (programm.c: ein in C formuliertes Programm). Sie kann im Allgemeinen in einem einfachen Texteditor bearbeitet werden. Eine Datei, die dagegen Maschinencode enthält, besitzt keine oder eine betriebssystemspezifische Endung, die lediglich auf ihre Ausführbarkeit hinweist (programm.exe bei MS-DOS und Windows; programm bei unixoiden Systemen). Sie kann oft als Kommando in einem Terminal (Eingabeaufforderung) aufgerufen werden.

Damit das Programm der Hochsprache auf einem Prozessor ausgeführt werden kann, muss es in Maschinencode übersetzt werden. Ein Befehl einer höheren Programmiersprache wird im Allgemeinen in mehrere Maschinenbefehle übersetzt. Den Übersetzungsvorgang nennt man Compilierung. Um aus dem Quelltext den Maschinencode zu generieren, wird ein Assembler, Compiler oder Interpreter benötigt. Diese übersetzen die Befehle der Programmiersprache, die für menschliche Benutzer verständlich und bearbeitbar sein sollen, in die semantisch entsprechenden Befehle der Maschinensprache des verwendeten Computers.

Die Entwicklung einer Vorgehensweise innerhalb der Programmierung in einer Implementierung bezogen auf einen konkreten Lösungsweg wird als Algorithmus bezeichnet.

Im Sprachgebrauch wird Computerprogramm meist zu Programm verkürzt oder der Begriff Software verwendet. Allerdings ist Computerprogramm kein Synonym zu Software, da mit Software die komplette, für den Benutzer fertige Anwendung gemeint ist. Diese umfasst zusätzliche Ressourcen wie Daten, Grafik- und Audiodateien, Schriftarten oder Hilfetexte.

Ein größeres Computerprogramm setzt sich meist aus mehreren Modulen zusammen und verwendet bereits bestehende Programmbibliotheken.

Die Entwicklung von Computerprogrammen ist das Gebiet der Softwaretechnik. Je nach Komplexität der zu entwickelnden Computerprogramme werden dazu verschiedene Vorgehensmodelle verwendet.

Geschichte

Das erste Computerprogramm von Ada Lovelace

Als weltweit erstes Computerprogramm gilt eine Vorschrift für die Berechnung von Bernoulli-Zahlen, die Ada Lovelace in den Jahren 1842/1843 für die mechanische Analytical Engine von Charles Babbage erstellte. Dieses Programm konnte zu ihrer Zeit nur von Hand ausgeführt werden, denn es gab im 19. Jahrhundert keine funktionsfähige Maschine, welche es ausführen konnte.

Erste Programme auf Lochstreifen

In den Jahren 1936 bis 1941 entwarf Konrad Zuse die Rechner Z1 und Z3, die lange Befehlsfolgen auf einem Lochstreifen verarbeiteten, die ersten Computerprogramme, die auf realen Maschinen ausgeführt werden konnten. Die Rechner beherrschten die vier Grundrechenarten und Quadratwurzelberechnungen auf binären Gleitkommazahlen, der Lochstreifen enthielt jeweils eine Rechenoperation und eine Speicheradresse.

Auf Zuse geht auch die erste höhere Programmiersprache Plankalkül, zurück. Damit lassen sich Probleme maschinenunabhängig formulieren und später in eine maschinenlesbare Form überführen.

Programme im Arbeitsspeicher

Der EDVAC-Rechner, der auf einem Entwurf von John von Neumann aus dem Jahre 1945 basiert, hatte einen Quecksilber-Verzögerungsspeicher für 1024 Fest- oder Gleitkommazahlen mit jeweils 44 Bit. Jede Speicherzelle konnte statt einer Zahl auch einen Befehl aufnehmen. Bei diesem Rechnerkonzept war es möglich, die Befehle eines Computerprogramms vor der Ausführung erstmals in den Arbeitsspeicher zu übertragen. Dies ist noch heute üblich. EDVAC wurde jedoch erst im Jahre 1951 teilweise fertiggestellt. Der Demonstrationsrechner Manchester SSE und der auf dem EDVAC aufbauende EDSAC-Rechner hatten schon vorher Programme aus dem Arbeitsspeicher ausgeführt.

Höhere Programmiersprachen und Compiler

Ende der 1950er Jahre wurden Computer so leistungsfähig, dass spezielle Programme, Compiler, Quelltexte in höheren Programmiersprachen automatisch in Maschinenbefehle, also ausführbare Programme, übersetzen konnten. Ausführbare Programme können dann, wie beim EDVAC, in den Speicher geladen und abgearbeitet werden.

Mit Fortran, COBOL, ALGOL und LISP entstanden in den späten 1950er Jahren die ersten standardisierten höheren Programmiersprachen. Programme in diesen Sprachen laufen durch einen entsprechenden Compiler übersetzt auf unterschiedlichen Rechnern. Sie können teilweise auch noch auf modernen Computern eingesetzt werden.

Vom Algorithmus zum Programm

Berechnung des größten gemeinsamen Teilers

Es soll ein Programm zur Bestimmung des größten gemeinsamen Teilers (ggT) zweier Zahlen erstellt werden. Zunächst muss ein geeigneter Algorithmus gefunden werden.

Der euklidische Algorithmus, der bereits um 300 v. Chr. beschrieben wurde, ermittelt den größten gemeinsamen Teiler (ggT) zweier natürlicher Zahlen A und B:

  1. Sei A die größere der beiden Zahlen A und B (gegebenenfalls vertauschen).
  2. Setze A = A - B.
  3. Wenn A und B ungleich sind, dann mit Schritt 1 fortfahren, wenn sie gleich sind, dann den Algorithmus beenden: Diese Zahl ist der größte gemeinsame Teiler.

Verwendung einer Programmiersprache

Sobald eine formale Beschreibung eines Algorithmus, also eine genau definierte Verarbeitungsvorschrift, vorliegt, kann der Algorithmus umgesetzt (implementiert) werden. Dazu wird eine geeignete Programmiersprache ausgewählt.

Zur Umsetzung wird heute meist eine höhere Programmiersprache verwendet, die von einem Computer eventuell nicht direkt ausgeführt werden kann, sondern zuerst compiliert oder interpretiert werden muss. In Sprachen wie Pascal dienen Variablen, Ausdrücke, Vergleiche, Zuweisungen und Kontrollstrukturen zur Umsetzung des ggT-Algorithmus:

                               (* Schritt3:             *)
WHILE A <> B DO                (* Solange A ungleich B  *)
BEGIN
                               (* Schritt1:             *)
    IF B > A THEN              (* Falls B größer als A  *)
    BEGIN                  
        H = A; A = B; B = H;   (* A und B vertauschen   *)
    END;                         
                               (* Schritt2:             *)
    A = A-B;                   (* A durch A-B ersetzen  *)
END;

Berücksichtigung aller Sonderfälle

Bei der Umsetzung wird mit der Prüfung von Schritt 3 begonnen. Der ursprüngliche Algorithmus berücksichtigt nicht den Fall, dass A und B bereits zu Beginn gleich sein können. Wäre die Aufgabe, den größten Teiler von 103 und 103 zu finden, würde ein Mensch sofort das Ergebnis 103 nennen, er würde den Algorithmus gar nicht bemühen. Der originale Algorithmus würde aber null ergeben. Die Umsetzung auf einem Rechner muss auch alle Sonderfälle berücksichtigen. Durch das Vorziehen von Schritt 3 wird der Sonderfall hier korrekt behandelt.

Elementare Schritte

Pascal und andere Programmiersprachen besitzen keine Operation zum Vertauschen von Zahlen. Dies muss daher in elementarere Schritte umgesetzt werden. Eine zusätzliche Variable H, eine so genannte Hilfsvariable, erlaubt die Vertauschung mit Hilfe von drei Zuweisungen:

    H := A;     (* Wert von A in der Hilfsvariablen H retten *)
    A := B;     (* A mit dem Wert von B überschreiben        *)
    B := H;     (* B mit dem Wert von H (=A) überschreiben   *)

Dies ist auch ein kleiner Algorithmus.

Ein vollständiges Programm

Damit hieraus ein korrektes Programm wird, muss der Algorithmus noch um Ein- bzw. Ausgabeanweisungen, oft jedoch auch um Variablen und eine Programmstruktur ergänzt werden. Diese sind nicht Teil des eigentlichen Algorithmus:

PROGRAM Ggt(Input,Output);             (* Programmkopf        *)
    VAR A,B,H: Integer;                (* Variablendefinition *)
BEGIN
    ReadLn(A,B);                       (* Eingabe von A und B *)
    WHILE A <> B DO                    (* Euklidischer Algorithmus *)
    BEGIN 
        IF B > A THEN 
        BEGIN          
            H := A; A := B; B := H;
        END;
        A := A-B;
    END;
    WriteLn(A)                         (* Ausgabe von A       *) 
END.                                   (* Programmende        *)

Übersetzung und Ausführung

Erst dieses Programm kann mit einem Texteditor in eine Datei geschrieben werden, die dann übersetzt und ausgeführt werden kann. Hierzu ist ein Compiler erforderlich, der den Code in der Programmiersprache in Maschinensprache übersetzt und das Ergebnis in eine ausführbare Datei schreibt. Diese kann dann über ein Betriebssystem gestartet werden. Das Programm muss dabei nur einmal übersetzt werden. Es kann danach beliebig oft gestartet werden.

Einige Programmiersprachen benötigen keinen Compiler, aber stattdessen einen Interpreter, der Programme ohne vorherige Übersetzung ausführen kann. Der Interpreter selbst ist dann ein ausführbares Programm in Maschinensprache.

Eine weitere Möglichkeit besteht in der Verwendung von Zwischencode (Bytecode), der vom Compiler an Stelle des Maschinencodes generiert wird. Ein Beispiel dafür ist Java: Der Java-Compiler erzeugt Bytecode, welcher dann auf der sogenannten virtuellen Maschine ausgeführt wird. Die virtuelle Maschine interpretiert oder übersetzt dann den Bytecode für das darunterliegende Betriebssystem.

Mittels spezieller Programme, sogenannter Decompiler, ist es in begrenztem Maße möglich, aus dem Maschinencode wieder einen in Hochsprache lesbaren Quelltext zu erzeugen.

Siehe auch

Literatur


Wikimedia Foundation.

Schlagen Sie auch in anderen Wörterbüchern nach:

  • P-NET — Dieser Artikel wurde aufgrund von inhaltlichen Mängeln auf der Qualitätssicherungsseite der Redaktion Informatik eingetragen. Dies geschieht, um die Qualität der Artikel aus dem Themengebiet Informatik auf ein akzeptables Niveau zu bringen. Hilf… …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”