Einführung in die Programmierung
By Martin on Regards: Article; education;Grundlagen zur Programmierung
Der Orginaltext wurde am 14.02.04 verfasst. Da der Text sich grundlegend mit der Programmierung befasst, hat sich am Inhalt nichts geändert. Anregungen und Kritik sind erwünscht.
- Einleitung
- Einführung
- Anweisungen
- Syntax
- Abarbeitung
- Algorithmus
- Programmiersprachen
- Basic
- Java
- Fortran
- Cobol
- Pascal
- Perl
- PHP
- C
- C++
- C#
- Assembler
- Niedrige Programmiersprachen
- Grundbegriffe
- Maschinensprache
- Niedrige Programmiersprachen
- Hohe Programmiersprachen
- Interpreter Sprachen
- Compiler
1 Einleitung
Bevor wir mit dem eigentlichen Programmieren beginnen, sollten wir uns zuerst dem theoretischen Teil, sprich den Grundbegriffen, widmen.
Alle Operationen die ein digitaler Computer vornimmt, basieren auf einem Bauteil, welcher erkennen kann ob ein Schalter bzw. ein Gatter geöffnet oder geschlossen ist. Ein Computer kann also zwischen zwei Zuständen unterscheiden, Strom an oder aus, Zustand 1 oder 0. Aus diesen Erkennungsbauteilen lassen sich logische Schaltungen anordnen, mit denen sich dann mathematische Operationen ausführen lassen. Die mathematischen Grundlagen dieser logischen Schaltungen legte der britische Mathematiker George Boole in der ersten Hälfte des 19. Jahrhunderts fest. Die von ihm erfundene Boolesche Algebra beschreibt das Rechnen, mit den logischen Ausdrücken wahr und falsch.
Ein Programm gibt dem Prozessor also Befehle, die beschreiben wie diese Logikschaltungen angesteuert werden. Diese Befehle müssen aber, damit der Prozessor sie versteht im Binärsystem als in einer Anordnung von 0 und 1 vorliegen. Ein Programm bedeutet also das Senden einer zeitlich genau abgestimmten Serie von An- und Aus-Signalen. Diese Signalfolgen ergeben den Maschinencode (Binärcode oder auch Maschinensprache genannt). Das Programmieren der ersten Computer war eine schwierige und mühevolle Aufgabe, weil die Programme von Hand gesteckt werden mussten. Die Programmierer benötigten oft Tage um einfache Aufgaben zu programmieren. Die nachfolgenden Computer erhielten Speichersysteme in denen die Programme gespeichert werden konnten. Statt ein Programm von Hand zu stecken, wurde es z.B. auf Lochkarten gespeichert und vom Computer eingelesen. Die Idee der Lochkarten hatte übrigens der französische Erfinder Joseph Marie Jacquard. Er verwendete bei dem Entwurf einer automatischen Webmaschine dünne, gelochte Holzbretter zur Steuerung komplizierter Webmuster.
Durch die Einführung dieser Speicher konnte ein einmal geschriebenes Programm auf beliebig vielen Rechnern ausgeführt werden, ohne jedes Mal die Relais oder Elektronenröhren neu verdrahten zu müssen. Immer noch musste aber ein Programm im Binärcode geschrieben werden. Es lag nahe für diese sehr zeitaufwändige Übersetzungsaufgabe Programme zu entwerfen. Diese Übersetzerprogramme erlaubten es nun, anstelle oft wiederkehrender Standardanweisungen, einfache kurze Merkwörter einzusetzen. Diese Merkwörter (Mnemonics) wurden dann vom Programm auf Fehler kontrolliert und übersetzt. Diese frühen Programmiersprachen heißen Assemblersprachen.
Ein großer Nachteil der Assemblersprachen war allerdings, dass die einmal geschriebenen Programme nur auf diesem einen Prozessortyp liefen. Dies führte zur Entwicklung sogenannter “Höherer Programmiersprachen”. Höhere Programmiersprachen bestehen ganz aus diesen Merkwörtern. Diese werden dann genau wie bei Assemblersprachen auf Fehler überprüft und übersetzt. Diese Übersetzer in den Binärcode heißen Compiler. Eine „Höhere Programmiersprache“ ist also nicht mehr so stark vom Prozessor, sondern vom Compiler abhängig. Dies führt aber dazu, dass “Höhere Programmiersprachen“ nicht mehr die volle Leistung des jeweiligen Prozessortyps ausschöpfen können und dadurch etwas langsamer sind. Eine Programmiersprache ist also ein Programm welches jedem Befehl Merkwörter zuordnet und dann in den Binärcode übersetzt.
1.1 Allgemeine Einführung
Ein Programm hat die Aufgabe ein Problem zu lösen. Dabei besteht jede Datenverarbeitung aus drei Schritten:
E … Eingabe von Daten (Input) V … Verarbeitung der Eingangsdaten zu neuen Daten, den Ausgabedaten (Processing) A … Ausgabe der Daten (Output)
1.2 Anweisungen
Unter einer Anweisung versteht man einen Befehl, der eine bestimmte Aktion ausführt. In jeder Programmiersprache müssen Anweisungen bestimmten Regeln entsprechen, die man in ihrer Gesamtheit als Syntax bezeichnet.
1.3 Syntax
Syntax bedeutet wenn man diese ins Deutsche übersetzt „Satzbau“. Eine Programmiersprache ist definiert durch eine Folge von Zeichen, die nach bestimmten Regeln aneinander gereiht werden. Eine Syntax gibt ausschließlich Regeln vor, nach denen man Folgen von Zeichen konstruieren kann.
1.4 Abarbeitung
Ein Computerprogramm wird immer Schritt für Schritt abgearbeitet. Bei einer solchen Abarbeitung wird immer nach dem selben Grundprinzip vorgegangen, das die Problemlösung beschreibt (=Algorithmus), dieses Prinzip wird von jeder Programmiersprache vorgegeben.
1.5 Algorithmus
Algorithmus bezeichnet eine Verarbeitungsvorschrift, die die Problemlösung beschreibt. Oder anders ausgedrückt, ein Algorithmus fasst alle Schritte zusammen, die man auf dem Weg zur Lösung gehen muss. Diese Verarbeitungsvorschrift ist genauestens formuliert, sodass sie direkt im geschrieben Programm umgesetzt werden kann.
1.6 Programmiersprachen
Basic
…bedeutet „Beginners All Purpose Symbolic Instruction Code“ zu Deutsch „Symbolischer Allzweck Befehlscode für Anfänger“. 1963 befassten sich Thomas E. Kurtz und John Kemeny am Dartmouth College mit dem Problem, das man Nicht-Technik-Studenten, die Arbeit am Computer näher bringen wollte, damit diese später in der Wirtschaft ein grundsätzliches Verständnis besitzen. Man ging dazu über, eine eigene Sprache zu entwickeln, die speziell auf die Bedürfnisse der Studenten abgestimmt sein sollte – die Geburtsstunde von BASIC. Wie aus dem Namen schon zu entnehmen ist, ist Basic leicht zu erlernen. Es wird bei dieser Programmiersprache kein strukturiertes Programmieren gefordert, deshalb ist es sehr leicht, unübersichtliche Programme zu schreiben.
Java
… wurde von „Sun“ entwickelt, mit dem Ziel, eine plattformunabhängige Programmiersprache zu entwickeln. Dies gelingt, indem das Java-Programm (der Quellcode) in eine Metasprache (übergeordnete Sprache) übersetzt wird & diese erst bei der Ausführung mittels der „Virtual machine“, also einem virtuellen Computer –quasi ein Interpreter, in die Maschinensprache der jeweiligen Plattform umgesetzt wird. Java ist eine objektorientierte Sprache. Fortran …ist die Abkürzung für Formula Translation (Formelübersetzung). Fortran wurde im Jahre 1954 entwickelt. Früher wurden alle wissenschaftlichen- technischen Anwendungen in dieser Sprache programmiert.
Cobol
…steht für Common Business Oriented Language was soviel wie „Allgemeine Geschäfts orientierte Sprache“ bedeutet. 1960 wurde Cobol entwickelt, anschließend im Jahre 1974 genormt und ist die meistbenutzte Programmiersprache für kaufmännische Aufgabenstellungen. Cobol ist besonders vorteilhaft bei der Verarbeitung großer Datenmengen.
Pascal
Die Programmiersprache ist nach dem Französischen Mathematiker Blaise Pascal(1623-1663) benannt. Sie ist 1971 von Niklas Wirth an der ETH Zürich entwickelt worden. Die Programmiersprache wurde 1983 genormt. Die Sprache ist sehr übersichtlich. Da wichtige Teile wie z.B. I/O Steuerung nicht genormt wurden, entstanden auch hier verschiedene Dialekte, dadurch konnte sich die Sprache nicht durchsetzten. Perl (Practical Extraction and Report Language) Perl wurde ursprünglich von Larry Wall entworfen, er stellte 1993 die Skriptsprache der Allgemeinheit zu Verfügung. Perl wurde ursprünglich unter „Unix“ entwickelt, ist jedoch inzwischen für die meisten Betriebssysteme verfügbar. Perl verfügt über leistungsfähige Routinefunktionen für Zeichenfolgen zum Extrahieren von Informationen aus Textdateien. Perl kann eine Zeichensprache assemblieren und an die Shell als Befehl senden. Aufgrund dessen wird dieses Sprache häufig bei Tasks für die Systemverwaltung eingesetzt. Dies ist ein weiterer Grund warum Systemadministratoren und Webentwickler Perl besonders gern einsetzen.
Bemerkung: Skriptsprachen, ermöglichen die Ausführung des Programmcodes ohne getrennte Übersetzungsphasen. Programme, die in Skriptsprachen geschrieben sind, werden auch Skripte genannt. Es handelt sich immer um Textdateien oder Textfragmente, die mit einem normalen Editor bearbeitet werden können.
PHP
Die Scriptsprache PHP wurde 1994 von Rasmus Lerdorf entwickelt. Er nannte seine Sprache Personal Home Page / Form Interpreter, da er sie für seine eigene Homepage verwendete um Formulare auszuwerten. Mittlerweile verbirgt sich hinter der Abkürzung der lange Name „PHP Hypertext Preprocessor“ Der PHP-Code wird auf dem Server verarbeitet. PHP unterstützt eine Vielzahl von Datenbanksystemen und kann durch eine Vielzahl von Modulen um wichtige Funktionen erweitert werden.
C
C wurde 1972 von Brian Kernighan und Dennis Ritchie in den Bell Laboratories entwickelt und ist sehr streng genormt. C hat ein sehr klares Sprachkonzept, verfügt über ein breites Anwendungsspektrum (z.B. Linux wurde in C programmiert) und über knappe Befehle. Da der Sprachumfang von C klein ist, kann es auch leicht auf den verschiedensten Plattformen implementiert werden und eignet sich hiermit auch für Hardwarezugriffe. Die Vorteile von C bestehen in seiner sehr variablen Architektur (C kann für die verschiedensten Anforderungen spezialisiert werden) und seine damals unglaubliche Effizienz (Programme waren bis zu 10-mal schneller als gleiche Programme in COBOL).
C++
C++ ist der Nachfolger von C und wird so genannt, weil es “Eins mehr” ist. In Sprachen wie Java(script) und PHP wird eine Zahl durch das Ansetzen von “++” um Eins erhöht. Die Sprache C++ wurde von Bjaarne Stroustrup in Jahre 1985 entwickelt. C++ ist baukastenförmig aufgebaut, wobei jeder Baustein ein Programmteil ist. Aufgrund dieser Baustein -Architektur ist C++ so effizient. Da lediglich die Objekte (Befehle) ins Programm integriert werden, die für ein Programm benötigt werden, befindet sich kein unnötiger Ballast im Quelltext.
CSharp
C# wird als C Sharp gesprochen. C# wurde von Microsoft in Kooperation mit Anders Hejlsberg, dem Designer der Sprache „Delphi“, entwickelt und ist am 14. Februar 2002 im Rahmen des .NET Framework veröffentlicht worden. C# ist grundsätzlich keine neue Programmiersprache, zumindest was die Syntax betrifft. C# ist mehr oder weniger aus der Syntax der C/C++ Sprachfamilie hervorgegangen. C# vereint die hohe Performance von C++ und die Einfachheit von Visual Basic. Das Konzept ist aber von Grund auf neu entwickelt worden und fügt sich hundertprozentig in die neue .NET-Technologie ein. Außerdem unterstützt C# vollständig die „component-based (komponentenbasierte)” Programmierung. Komponente sind Bausteine, die einmal entwickelt und immer wieder verwendet werden können. Das spart Entwicklungszeit. C# ist wie Java plattenformunabhängig. Das heißt, ein Programm läuft nicht nur unter dem Betriebssystem, unter dem es entwickelt wurde, son dern auf allen Systemen, für die eine Version des .NET Framework existiert. Wie C++ ist auch C# eine moderne objektorienierte Programmiersprache.
Assembler
Assembler ist eine Maschinensprache und somit die älteste Programmiersprache überhaupt. Assembler ist eine sehr schlichte Sprache, die die Maschinenbefehle direkt in eine für den Menschen lesbare Form abbildet. Dabei entspricht eine Assembleranweisung im Allgemeinen genau einer Maschinenspracheanweisung. Statt 00000101 00000011 11101000 kann man in Assembler kürzer und lesbarer „add ax1000“ schreiben. Eine Maschinensprache und damit auch der Assemblercode sind auf den jeweiligen Prozessor zugeschnitten, d.h. Maschinenspracheprogramme sind im Allgemeinen nicht portierbar!
Why assembly? Why didn’t developers use higher-level languages like C, or Pascal?
1.7 Niedrige Programmiersprachen
1.7.1 Grundbegriffe
Prozessor oder CPU ( Central Processing Unit), quasi das „Herz“ eines Computers, kann nur relativ einfache Befehle ausführen wie addieren, Daten von einer bestimmten Speicheradresse laden oder dort abspeichern, zu einer bestimmten Speicheradresse springen (z.B. Grafikkarte) und dort den Programmablauf fortführen, etc. Diese Befehle sind codiert, also sozusagen durchnumeriert, der Befehl „Springe zur Adresse D3AAH“ könnte z.B. den Code „CAD3AA“ haben. Es ist leicht nachvollziehbar, dass diese Befehle bzw. deren Codes von Prozessor zu Prozessor unterschiedlich sind.
1.7.1.2 Maschinensprache
Maschinensprache: Befehlssprache des jeweiligen Prozessors. Besteht in der Regel aus einigen hundert Befehlen, jeder davon ist eine Abfolge von ein bis vier Bytes. Typische Befehle: Wert in einem Prozessorspeicherplatz (Register) ablegen, von dort auslesen, einfachste Additionen und Vergleiche, …
Beispiel: Möchte man z.B. auf einem Intel-Prozessor (80x86) den Wert 1000 im Register ax ablegen, verwendet man folgenden Maschinensprachebefehl:
00000101 00000011 11101000
Das erste Byte bezeichnet den Code des entsprechenden Befehls (binär 5), die nächsten zwei Bytes den Datenanteil (binär 1000).
1.7.1.3 Niedrige Programmiersprachen
Niedrige Programmiersprachen sind z.B. Assembler und C. Diese verfügen über einen dem tatsächlichen CPU-Befehlssatz sehr ähnlichen Wortschatz. Es gibt für diese Plattform keinen Compiler oder Interpreter.
1.8 Hohe Programmiersprachen
Hohe Programmiersprachen sind Programme, die in einer Sprache geschrieben sind, die für den Menschen (relativ) leicht, jedoch für den Prozessor unlesbar ist. Man könnte auch sagen, dass die Problematik mittels eines Computerprogramms mit einer abstrakten, d.h. nicht CPU-abhängige Sprache gelöst werden kann. Im Gegensatz zur Assemblersprache, die maschinenorientiert ist, ist eine höhere Programmiersprache mehr problemorientiert und nicht plattformabhängig. Nachdem die Aufgabe mit einer dieser Sprachen gelöst wurde, muss diese Sprache in die Sprache des jeweiligen Computertyps, also CPU, (und Grafikkarte, etc) umgesetzt werden. Dazu gibt es zwei Strategien: den Interpreter und den Compiler.
1.9 Interpreter Sprachen
Englische Bezeichnung für “Übersetzer”. Beim Interpreter wird das jeweilige, in einer höheren Programmiersprache erstellte Programm unmittelbar vor dem Durchführen (zeilenweise) in die Maschinensprache übersetzt und anschließend ausgeführt. Daraus ergibt sich, dass die Ablaufgeschwindigkeit wesentlich geringer wird. Im Gegensatz zu einem Compiler erzeugt ein Interpreter keinen speicherbaren Maschinencode.
1.10 Compiler
Ein Übersetzungsprogramm, welches Programme einer höheren Programmiersprache in die vom Prozessor ausführbare Maschinensprache umwandelt. Allgemein: Die gesamte Programmbearbeitung mit einem Übersetzer (Compiler) erfolgt in drei Stufen, wobei auch drei Dateien erzeugt werden: In den Quell- oder Source-Code schreibt der Programmierer mit seiner gewählten Programmiersprache das Programm. Der Compiler übersetzt diesen vom Programmierer geschriebenen Quellcode und erzeugt den Object-Code, der noch nicht ausführbar ist. Er führt einen Syntaxtest durch und gibt im Fehlerfall Hinweise auf die Art des Kodierungs-Fehlers. Der Linker oder „Verbinder“ hängt noch Teile des Compilers wie Ein-/Ausgabe Routinen, Funktionsberechnungen oder fremde Routinen an. Nach dem Linken entsteht das ausführbare Element, das der Prozessor verarbeiten kann.
Andere passende Texte - Technische Grundlagen der Informatik.
Quellen:
- Informatik Skriptum aus der Schule
- Autor(en):Schmaranz, Klaus; Softwareentwicklung in C. Verlag: Springer, Berlin; Auflage: 1 (September 2001) ISBN: 3540419586
- Autor(en):Dirk Louis, Shinja Strasser; C# in 21 Tagen 2002 Verlag: Markt+Technik ISBN: 3-8272-6069-8
- Autor(en):Walter Doberenz, Thomas Kowalski; Visual C#.NET - Grundlagen und Profiwissen 2003
- Verlag: Carl Hanser ISBN 3-446-22021-6
- Autor(en): Joscha Feth; Dynamische Webseiten mit Flash und PHP 2002 Verlag: Markt+Technik ISBN: 3827262852
Links vom 14.02.2004
- http://php.martin-jansen.de/entstehung.php
- http://de.wikipedia.org/
- http://www.principia-natura.de
- http://www.guidetocsharp.de/
- http://www.masterportal24.com