Jewiki unterstützen. Jewiki, die größte Online-Enzyklopädie zum Judentum.
Helfen Sie Jewiki mit einer kleinen oder auch größeren Spende. Einmalig oder regelmäßig, damit die Zukunft von Jewiki gesichert bleibt ... Vielen Dank für Ihr Engagement! (→ Spendenkonten) |
How to read Jewiki in your desired language · Comment lire Jewiki dans votre langue préférée · Cómo leer Jewiki en su idioma preferido · בשפה הרצויה Jewiki כיצד לקרוא · Как читать Jewiki на предпочитаемом вами языке · كيف تقرأ Jewiki باللغة التي تريدها · Como ler o Jewiki na sua língua preferida |
Computerprogramm
Ein Computerprogramm oder kurz Programm ist eine den Regeln einer bestimmten Programmiersprache genügende Folge von Anweisungen (bestehend aus Deklarationen und Instruktionen), um auf einem Computer eine bestimmte Funktionalität, Aufgaben- oder Problemstellung bearbeiten/lösen zu können.[1]
Überblick
Ein Computerprogramm gehört zur Software eines Computers. Es liegt meist auf einem Datenträger als ausführbare Programmdatei, häufig im sogenannten Maschinencode vor, die zur Ausführung in den Arbeitsspeicher des Rechners geladen wird. Das Programm wird als Abfolge von Maschinen-, d. h. Prozessorbefehlen von dem/den Prozessoren des Computers verarbeitet und damit ausgeführt. Unter ‚Computerprogramm‘ wird auch der Quelltext des Programms verstanden, aus dem im Verlauf der Softwareentwicklung der ausführbare Code entsteht.
Eine Programmdatei, die 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 oder auch als Implementierung. 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) Anweisungen, die für den Programmierer i. A. verständlicher sind (z. B.: ADD, SUB, AND, OR etc) als der Maschinencode. Später ergänzten die höheren Programmiersprachen Schleifen, Abstraktion und modularen Aufbau.
Dateien, in denen der Programmcode gespeichert ist, sind meist durch eine Dateiendung gekennzeichnet. Quelltextdateien weisen damit auf die verwendete Hochsprache hin (<programm>.c: ein in C formuliertes Programm). Sie kann im Allgemeinen mit 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. Siehe auch Programmbibliothek.
Damit ein in einer Hochsprache geschriebenes Programm auf einem Prozessor ausgeführt werden kann, muss es in Maschinencode übersetzt werden. Eine Anweisung 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. Dieser übersetzt die Anweisungen der Programmiersprache, die für menschliche Benutzer verständlich und bearbeitbar sein sollen, in die semantisch entsprechenden Befehle der Maschinensprache des verwendeten Computers.
Die Anweisungen, die (als Teil von Programmen) einen konkreten Lösungsweg repräsentieren, werden als Algorithmus bezeichnet; Beispiel: Berechnen der Mehrwertsteuer.
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 Betriebssystem, Datenbanken, Grafik- und Audiodateien, Schriftarten oder Hilfetexte.
Ein größeres Computerprogramm besteht meist aus mehreren Modulen - die entweder zum Programm selbst 'gehören' oder die als 'Bausteine' (Unterprogramme) aus bereits bestehenden Programmbibliotheken bei der Ausführung des Programms benutzt werden. Im umgekehrten Fall können Computerprogramme Teil eines übergeordneten, ein größeres Aufgabengebiet abdeckenden Anwendungssystems sein; Beispiel: Gehaltsabrechnung, Finanzbuchhaltung, Meldewesen etc.
Die Entwicklung von Computerprogrammen ist das Gebiet der Softwaretechnik. Je nach Komplexität der zu entwickelnden Computerprogramme geschieht dies im Rahmen von Projekten. Die Aktivitäten der Beteiligten werden dabei meist unter Anwendung von Vorgehensmodellen, speziellen Methoden und Werkzeugen zur Softwareentwicklung ausgeführt.
Klassifizierungsmöglichkeiten
Neben den für Software im Allgemeinen geltenden Unterscheidungsmerkmalen lassen sich Computerprogramme (als Untervariante von Software) nach den folgenden, beispielhaft genannten Kriterien unterscheiden:
- Quellprogramme (in einer bestimmten Programmiersprache) oder Maschinenprogramme (ausführbar unter bestimmten Betriebssystemen) oder Programme in einem Zwischencode
- Hauptprogramme (aufgerufen über Betriebssystem-Kommandos) oder Unterprogramme (aufgerufen durch andere Programme). Sonderformen treten auf, wenn Programme z. B. über technische Steuerungskomponenten aufgerufen werden, z. B. über serviceorientierte Architekturen, automatisiertes Workflow-Management etc.
- Stapelprogramme (verarbeiten 'Stapel' von Daten) oder Dialogprogramme (stehen in Interaktion mit Benutzern)
- Nach dem Ort der Speicherung und Programmausführung unterschieden können Programme lokal (auf einem Arbeitsplatzrechner) gespeichert und ausgeführt werden oder auf einem Server installiert sein und trotzdem lokal (nach dem Laden über eine Online-Verbindung) ausgeführt werden oder nur auf dem Server gespeichert und dort auch ausgeführt werden. Bei verteilten Anwendungen werden Programmteile auf unterschiedlichen Rechnern ausgeführt, z. B. die Geschäftslogik und Datenhaltung im Server, Funktionen der Benutzeroberfläche am lokalen Rechner; im rein technischen Sinn stehen hierbei verschiedene Programme miteinander in Verbindung.
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. Das Programm konnte ihrerzeit nur von Hand ausgeführt werden, da es im 19. Jahrhundert noch keine funktionsfähige Maschine gab, die dazu in der Lage war.
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 zuerst in den Arbeitsspeicher zu übertragen. Das ist heute noch üblich. EDVAC wurde jedoch erst im Jahr 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 genannt, 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 kompiliert 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. Das muss daher in elementarere Schritte umgesetzt werden. Eine zusätzliche Variable H, eine sogenannte 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 *)
Das ist auch ein kleiner Algorithmus.
Ein vollständiges Programm
Damit daraus 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
Ein solches Programm wird unter Verwendung eines Texteditors erstellt und als Quellcode in einer Datei oder Programmbibliothek (für Quellcode) gespeichert. Anschließend kann der Quellcode zu einer festen Ablaufanweisung für den Computer 'übersetzt' werden. Dazu ist ein Compiler erforderlich, der den Code aus der jeweiligen Programmiersprache in die Maschinensprache übersetzt und als Ergebnis ein ausführbares Programm erstellt, das als Datei oder in einer Programmbibliothek (für ausführbare Programme) abgestellt wird. Dieses Programm kann dann über ein Betriebssystem zur Ausführung gestartet werden, und zwar beliebig oft (ohne neue Übersetzung).
Einige Programmiersprachen verwenden keinen Compiler, sondern einen Interpreter, der Programme erst zur Laufzeit in Maschinensprache übersetzt.
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.
Ebenso muss in manchen Rechnerumgebungen, i. d. R. bei Großrechnern, der vom Compiler erstellte Maschinencode noch mit einem Systemprogramm ('Linkage Editor' o. ä.) nachbearbeitet werden, wobei ggf. weitere Unterprogramme und Systemroutinen 'eingebunden' werden können. Erst das so entstandene Programm ist ausführbar.
Mittels spezieller Programme, sogenannter Decompiler, ist es in begrenztem Maße möglich, aus dem Maschinencode wieder einen in Hochsprache lesbaren Quelltext zu erzeugen.
Lebensphasen
Programme haben (mindestens) zwei klar getrennte Lebensphasen: der Zeitraum bis zum Zeitpunkt der Kompilierung (inklusive) wird Compilezeit genannt, welche im Gegensatz zur Laufzeit steht. In der Kompilezeit-Phase hat das Programm statische Eigenschaften, gegeben nur durch den festen Quellcode. Nach der Kompilierung und mit der Ausführung beginnt das binäre Programm dynamische Eigenschaften und Verhalten in zusätzlicher Abhängigkeit der jeweiligen Laufzeitumgebung (variierende Hardware, User-Interaktion etc) zu besitzen.
In detaillierterem Sinn lassen sich die Lebensphasen von Programmen auch als Software-Lebenszyklus verstehen. Demnach gehören zur inhaltlich präzisen Festlegung des Programm-Inhalts die Projektphasen ‚Problemstellung, Analyse und Entwurf‘, anschließend folgt die technische Implementierung, in der das Programm in Form von Quelltext entsteht. Danach befindet es sich in der Phase ‚Einführung‘. Nach diesen Entstehungsphasen von Programmen folgt deren ‚produktive Nutzung‘, bei Bedarf werden Anpassungen und Erweiterungen (‚Wartungs-/Pflegephase‘) vorgenommen.
Aus betriebswirtschaftlicher Sicht lassen sich auch Computerprogramme nach dem allgemeinen Produktlebenszyklus klassifizieren.
Urheberschutz
Ein Computerprogramm wird urheberrechtlich geschützt, wenn es individuelles Ergebnis einer eigenen geistigen Schöpfung ihres Urhebers ist (§ 69a Abs. 3 UrhG). Mit Umsetzung der Urheberrechtsrichtlinie aus dem Jahre 2001 wurde die Schutzschwelle für Computerprogramme in den EG-Mitgliedsstaaten harmonisiert. Es genügt ein Minimum an Individualität für den Schutz (kleine Münze). Es wird vermutet, dass sich die Individualität des Urhebers im Programm niedergeschlagen hat, wenn Spielraum dazu bestand. Geistiger Gehalt wird vermutet, wenn das Programm von einem menschlichen Urheber geschaffen wurde.
Siehe auch
Literatur
- John von Neumann: First Draft of a Report on the EDVAC (PDF, 0,4 MB), 1945
- Martín Abadi, Takayasu Itō: Theoretical Aspects of Computer Software, 1997
- Masami Hagiya, John C. Mitchell: Theoretical Aspects of Computer Software, 1994
Weblinks
Einzelnachweise
- ↑ ISO/IEC 2382-1:1993 definiert „computer program“: "A syntactic unit that conforms to the rules of a particular programming language and that is composed of declarations and statements or instructions needed to solve a certain function, task, or problem." Bis 2001 definierte die DIN 44300 "Informationsverarbeitung Begriffe" identisch.
Dieser Artikel basiert ursprünglich auf dem Artikel Computerprogramm aus der freien Enzyklopädie Wikipedia und steht unter der Doppellizenz GNU-Lizenz für freie Dokumentation und Creative Commons CC-BY-SA 3.0 Unported. In der Wikipedia ist eine Liste der ursprünglichen Wikipedia-Autoren verfügbar. |