Programmiersprachen Vergleich und Evolution

Programmiersprachen Vergleich und Evolution (C vs. PASCAL) Referent: Nedyalko Georgiev Kolloquium: Strings & Structures (SS 11) Dozent: Prof. Dr. Jürg...
Author: Ilse Gerhardt
1 downloads 0 Views 193KB Size
Programmiersprachen Vergleich und Evolution (C vs. PASCAL) Referent: Nedyalko Georgiev Kolloquium: Strings & Structures (SS 11) Dozent: Prof. Dr. Jürgen Rolshoven Sprachliche Informationsverarbeitung Universität zu Köln 30.06.2011 1

Gliederung

1. Stufen der Programmiersprachen 2. Eigenschaften von C und PASCAL 3. Evolution der Datentypkonzepte 4. Erste Turbo Pascal IDEs

2

Stufen der Programmiersprachen (1) Maschinensprachen Der Maschinencode ist das Endergebnis der Kompilierung einer höheren Programmiersprache wie z.B. Pascal oder C oder von Assemblersprachen. Dieser aus Einsen und Nullen (Binärzeichen) bestehende Code ist die einzige Sprache, die ein Computer verstehen kann. Er bildet somit die Grundlage aller Programmiersprachen, welche nur als Hilfsmittel dienen, dass der Mensch in einer einfachen Weise die vom Computer zu lösenden Probleme formulieren kann. Algorithmen werden so ausgedrückt, dass das benutzte Rechnermodell sie direkt verarbeiten kann, dabei werden die Zeichenfolgen durch den Mikroprozessor geladen und ausgeführt. Die Programme sind an ein bestimmtes Rechnermodell gebunden und nicht auf andere Plattformen portierbar. Die Programme sind äußerst schwer lesbar. Dafür bieten Sie den Vorteil, dass sie schneller verarbeitet werden können.

43

25

68

77

213

26

98

107

35

190

84

93

183

237

66

56

238

209

18

19 3

Stufen der Programmiersprachen (2) Assemblersprachen

Assemblersprachen sind symbolische Darstellungen der Maschinencodes und damit ebenso maschinennah und schnell zu verarbeiten.

Dadurch sind sie sehr effizient und außerdem benötigen sie nur wenig Speicherplatz.

Der Nachteil ist allerdings, dass sie, genau wie die Maschinensprachen, an einen bestimmten Rechnertyp gebunden sind.

Auch Assemblersprachen sind noch recht schwer verständlich und wenig übersichtlich, erleichtern aber immerhin die Programmierung in Maschinensprache.

4

Stufen der Programmiersprachen (2) Assemblersprachen (Beispiel)

5

Stufen der Programmiersprachen (3) Höhere Programmiersprachen Höhere Programmiersprachen sind die heute am meisten verwendeten Programmiersprachen. Sie basieren auf der Maschinensprache und werden durch einen Compiler oder Interpreter in diese übersetzt (compiliert). Algorithmen werden in den HLL (High Level Languages) auf einfache und dem Problem angepasste Weise beschrieben. Programme in einer höheren Programmiersprache sind oft plattform- und rechnerunabhängig und können übertragen werden. Sie haben einen klaren und strukturierten Aufbau und sind relativ leicht nachvollziehbar. Da dem Computer an sich die Programme unverständlich sind, müssen sie immer erst compiliert werden. Sie belegen mehr Speicherplatz und sind in der Ausführung langsamer als vergleichbare reine Maschinencodes.

6

Stufen der Programmiersprachen (3) Höhere Programmiersprachen (Unterteilung) Imperative Programmiersprachen (Pascal, BASIC, C, COBOL, FORTRAN, Ada, ALGO 60) - Entsprechung der Von-Neumann-Architektur - beruhen auf dem Variablenkonzept

Funktionale Programmiersprachen (LOGO, LISP (COMMON LISP), Occam) - Beschreibung des Datenflusses - Variablenbegriff ist nicht vorhanden

Logische Programmiersprachen (PROLOG) - Besonderheit – es wird nicht die Lösung eines Problems beschrieben, sondern das Problem selbst

Objektorientierte Programmiersprachen (SMALLTALK 80, Delphi, C++, Visual Basic) - besitzen einen Objekttyp und Konzepte wie Vererbung und Polymorphie

7

PASCAL - Eigenschaften Die Programmiersprache Pascal wurde von Niklaus Wirth in Zürich 1972 als Lehrsprache eingeführt, um die strukturierte Programmierung zu etablieren.

Pascal ist eine Weiterentwicklung von Algol 60. Als Lehrsprache wurde es so einfach und strukturiert wie möglich gestaltet. Ihre große Verbreitung in der professionellen Programmierung fand es als Borland/Turbo Pascal (später Delphi) – gegenüber dem UrPascal wesentlich erweiterte und verbesserte Versionen.

Pascal zeichnet sich durch eine strikte und einfach verständliche Syntax sowie durch den Verzicht auf kontextabhängige Interpretationen des Codes aus. Somit erlaubt Pascal im Vergleich zu Sprachen wie C eine gute Lesbarkeit und auch eine bessere Unterstützung von strukturierter Programmierung.

Ein wichtiges Konzept, das Wirth zur Anwendung brachte, ist die starke Typisierung: Variablen sind bereits zur Übersetzungszeit einem bestimmten Datentyp zugeordnet, und dieser kann nicht nachträglich verändert werden. Typenstrenge bedeutet, dass Wertzuweisungen ausschließlich unter Variablen gleichen Typs erlaubt sind. 8

C - Eigenschaften Das Haupteinsatzgebiet von C liegt in der Systemprogrammierung einschließlich der Erstellung von Betriebssystemen und der Programmierung von eingebetteten Systemen. Der Grund liegt in der Kombination von erwünschten Charakteristiken wie Portabilität und Effizienz mit der Möglichkeit, Hardware direkt anzusprechen und dabei niedrige Anforderungen an die Laufzeitumgebung zu haben. Auch Programme für Endanwender werden oft in C erstellt. C wird oft für die Erstellung von Anbindungen genutzt (zum Beispiel Java Native Interface). Diese Anbindungen erlauben es Programmen, die in einer anderen Hochsprache geschrieben sind, Funktionen aufzurufen, die in C implementiert wurden. Der umgekehrte Weg ist oft ebenfalls möglich und kann verwendet werden, um in C geschriebene Programme mit einer anderen Sprache zu erweitern. Die Programmiersprache C wurde mit dem Ziel entwickelt, eine echte Sprachabstraktion zur Assemblersprache zu implementieren. Es sollte eine direkte Zuordnung zu wenigen Maschineninstruktionen geben, um die Abhängigkeit von einer Laufzeitumgebung zu minimieren. Als Resultat dieses Designs ist es möglich, C-Code auf einer sehr hardwarenahen Ebene zu schreiben, analog zu Assemblerbefehlen. Die Portierung eines C-Compilers auf eine neue Prozessorplattform ist, verglichen mit anderen Sprachen, wenig aufwändig. 9

PASCAL - Übersichtlich Function StringToUppercase(Zeile: String): String; type Kleinbuchstaben = ['a'..'z']; var temp: String; i : Byte; begin temp:=zeile; for i:=1 to Length(zeile) do if zeile[i] in Kleinbuchstaben then temp[i]:=chr(ord(temp[i])-32); StringToUppercase:=temp; end;

C – Unübersichtlicher da Hardwarenah char * StringToUpper(char * zeile) { char * temp; int i; int p = strlen(zeile); temp = (char *) malloc(p); for (i=0; zeile[i]!=0 && i='a' && zeile[i] u; for (int i = 1; i