38
Michael Gamer / 2015 Einführung in die Programmierung 1 Michael Gamer

Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer / 2015

Einführung in die Programmierung

1

Michael Gamer

Page 2: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Entwicklung der Programmiersprachen (1/5)

Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab 1950) • Codierung von Programmen direkt als Bitfolge für den Prozessor

• Einfache arithmetische Operationen und Verschieben von Daten

• extrem umständliche und aufwendige Programmierung

2

Page 3: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Entwicklung der Programmiersprachen (2/5)

Zweite Generation: Assemblersprachen (ab 1950) •Programmierung in für Menschen lesbarem Klartext •Verwendung mnemotechnischer Kürzel für Befehle

‣ MOV A,C ‣ ADD A

•Einsatz von Assemblersprachen ist heute noch gebräuchlich, insbesondere bei zeitkritischen Anwendungen. ‣ Spielesoftware ‣ Ansteuerung von Peripherie ‣ Betriebssystemkerne

3

Page 4: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Entwicklung der Programmiersprachen (3/5)

Dritte Generation (ab 1954): höhere Programmiersprachen •Prozedurale Sprachen

‣ FORTRAN, COBOL, ALGOL, PASCAL ‣ Erstmals Entwurf einer Programmiersprache (ALGOL)

•Aufkommen objektorientierter Sprachen (Smalltalk) •hybride Sprachen

‣ Verknüpfen objektorientierter Ansätze mit prozeduralen Elementen

‣ C++ •Deklarative Sprachen

‣ Symbolische Programmierung für nichtnumerische Probleme ‣ LISP, MuSIMP

4

Page 5: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Entwicklung der Programmiersprachen (4/5)

Vierte Generation („4GL“-Sprachen, ab 1960) • Es gibt kein Paradigma dieser Sprachen • Zielsetzung ist ein höheres Abstraktionsniveau als es bei den Sprachen der dritten Generation vorliegt.

• Skriptsprachen ‣ SQL, JCL

• Deskriptive Sprachen ‣ XML-Anwendungen

5

Page 6: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Entwicklung der Programmiersprachen (5/5)

Fünfte Generation (ab 1978) • logisch-funktionale Sprachen • Beschreibung von Problemen durch Rand- und Zwangsbedingungen

• „Inferenzmaschinen“ ‣ prominentes Sprachbeispiel: PROLOG

6

Page 7: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer / 2015

Stammbaum der Programmiersprachen

7

Entnommen einer Darstellung der Universität Cottbus

Page 8: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Computer: die grundsätzliche Arbeitsweise

8

0123456789

....

SpeicherAkkumulator

Register 1

Register 2

Register 3

Befehlsregister

PC

Befehlsinterpreter

Page 9: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer / 2015

Einführung in die Programmierung

9

Page 10: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Grundlegende Begriffe (1/2)

Compiler •Compiler sind hochkomplexe Programme zum Übersetzen von Programmiersprachen

•Das Programm, welches den vom Benutzer erzeugten Programmtext einer Computersprache enthält, wird in Maschinensprache übersetzt

Interpreter •sind einfacher aufgebaute Programme als Compiler •Ähnliche Arbeitsweise wie ein Compiler, jedoch wird das Computerprogramm hier nicht übersetzt, sonder die einzelnen Befehle analysiert und ausgeführt

•Wiederkehrende Anweisungen müssen stets neu übersetzt werden.

10

Page 11: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Grundlegende Begriffe (2/2)

Debugger • Programm zum Auffinden (und Beseitigen) von Fehlern in Computerprogrammen

• Es wird zusätzlicher Code im Anwendungsprogramm erzeugt ‣ Sichtbarmachung von Variableninhalten ‣ Ermöglicht das Setzen zusätzlicher Haltepunkte ‣ Programm kann „schrittweise“ ausgeführt und

nachvollzogen werden. Entwicklungsumgebung

• komplexes Programmsystem, welches Compiler, Debugger und weitere Werkzeuge zur Programmerstellung unter einer Oberfläche vereint.

11

Page 12: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Abläufe bei der Programmerstellung (1/2)

12

Programmerstellung durch Programmierer1

Übersetzung in Maschinensprache durch Compiler2

Starten des Programms durch Betriebssystem3

Page 13: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Abläufe bei der Programmerstellung (2/2)

13

Programmerstellung durch Programmierer1

Übersetzung in Bytecode durch Compiler2

Ablauf des Programms durch einen speziellen Interpreter für Bytecode3

Page 14: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Ziel: möglichst große Hardwareunabhängigkeit

Anforderungen • Software/Programme sollen auf unterschiedlichen Systemen (identisch) laufen

Problem: • unterschiedliche Prozessoren • unterschiedliche Hardwareumgebungen

Lösung: • Abstraktion von der Hardware durch (einheitliche) Schnittstelle zwischen Hardware und Software

14

Page 15: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Moderne Architektur hardwareunabhängiger Systeme (2/2)

15

Anwendungsprogramm

virtuelle Maschine

Hardware

Hardware-Abstraction-Layer

Page 16: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Moderne Speicherorganisation (1/2)

theoretische Programmgröße: beliebig •Einteilen des physischen Speichers in Segmente (Kacheln)

•Ablauf des Programms in einem geschlossenen Speicherbereich

•Bei Zugriff auf einen (im Hauptspeicher) nicht vorhandenen Speicherbereich ‣ ggf. Auslagern nicht benötigter Kacheln ‣ Einlagern des nachgefragten Speicherbereichs

•Hohe Anforderungen an das Verwaltungsprogramm

16

Page 17: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Moderne Speicherorganisation (2/2)

Aus-/Einlagerungsstrategien •FIFO (First In / First Out)

‣ Der Bereich wird zuerst ausgelagert, der zuerst eingelagert wurde

•LIFO (Last In / First Out) ‣ Der Bereich wird zuerst ausgelagert, der zuletzt eingelagert

wurde •LRU (Least recently used)

‣ Auslagerung der Kachel die am wenigsten benutzt wurde •MRU

‣ Auslagerung der Kachel die am meisten genutzt wurde • .... und viele Weitere

17

Page 18: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Zahldarstellungen (1/8)

Gebräuchlich ist die Darstellung im Dezimalsystem, dem sogenannten 10er-System: 123 = 1*102 + 2*101 +3*100 oder 3,141 = 3*100 + 1*10-1 + 4*10-2 + 1*10-3 In Bezug auf Computer ist das Dual- oder Zweiersystem gebräuchlich.

18

Page 19: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Zahldarstellungen (2/8)

Darstellung von Zahlen im Zweiersystem: 50 = 1*25+ 1*24 + 0*23 + 0*22 + 1*21 + 0*20 d.h. die Zahl 50 wird dargestellt als Folge von Nullen und Einsen, in diesem Falle: 5010 = 1100102. Natürlich geht das auch mit Dezimalzahlen, die einen Nachkommaanteil besitzen: 1,25 = 1*20 + 0*2-1 + 1*2-2 Ist der Nachkommaanteil jedoch keine Summe von Zweierpotenzen, kommt es zu Rundungsfehlern! 1,2 = 1*20 + 0*2-1 + 0*2-2 + 1*2-3 + 0*2-4 + 0*2-5 + 1*2-6+ .... Davon später mehr....

19

Page 20: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Zahldarstellungen (3/8): negative Zahlen

Unterscheidung im Dezimalsystem: Vorangestelltes Zeichen (-): • positive Zahlen: 20, 15, 1001 • negative Zahlen: -1, -2001

Bei (ganzzahligen) Dualzahlen gibt es grundsätzlich zwei Möglichkeiten: • Verwendung eines „Vorzeichenbits“ für „+“ resp.

„-„ • Reservierung bestimmter Bitfolgen (oberhalb

einer bestimmten Grenze) für negative Zahlen

20

Page 21: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Zahldarstellungen (4/8): negative Zahlen

Beide Varianten haben Vor- und Nachteile Vorzeichenbit:

• Vorteile: ‣ einfach zu realisieren ‣ einfache Ein- und Ausgabe vorzeichenbehafteter

Zahlen • Nachteile:

‣ Platzverschwendung, es kann eine Zahl weniger dargestellt werden

‣ Es gibt zwei verschiedene Darstellung für die Zahl Null: +0 und -0

21

Page 22: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Zahldarstellungen (5/8): negative Zahlen

Reservierung von Bitfolgen. Beispiel mit 4-bit Zahlen

22

Dezimal Dual0 01 12 103 114 1005 1016 1107 111

Dezimal Dual8 10009 100110 101011 101112 110013 110114 111015 1111

positiv negativ

Page 23: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Zahldarstellungen (6/8): negative Zahlen

Also (Darstellung im sogenannten Zweierkomplement):

23

Dezimal Dual Bedeutung0 0 01 1 12 10 23 11 34 100 45 101 56 110 67 111 7

Dezimal Dual Bedeutung8 1000 -89 1001 -710 1010 -611 1011 -512 1100 -413 1101 -314 1110 -215 1111 -1

Page 24: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Zahldarstellungen (7/8): negative Zahlen

In der heutigen Informatik ist dies die gebräuchliche Darstellung negativer Ganzzahlen. Die Darstellung der Zahl -n wird erzielt durch:

1. invertieren aller Bits der Zahl n 2. Addition von 1 auf die so entstandene Bitfolge

Eigenschaften: • eindeutige Darstellung der Zahl Null • leicht zu erzeugen • Achtung: Überlauf bei Absolutbetrag möglich, denn es gibt eine negative Zahl mehr als positive Zahlen darstellbar sind!

24

Page 25: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Zahldarstellungen (8/8): Gleitkommazahlen

Gleitkommazahlen werden in normalisierter Exponentialdarstellung gespeichert: 123,45 = 0,12345 * 103 0,0032 = 0,32 * 10-2 In der Darstellung m*10e heißen:

• m: Mantisse • e: Exponent

Beide Größen, m und e, sind im Computer als Dualzahlen abgelegt. Je nach Anzahl der zur Verfügung stehenden Bits variieren die Genauigkeit der Darstellung und der Zahlbereich.

25

Page 26: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Wertebereiche der (primitiven) Datentypen

26

Bezeichner Länge Wertebereichboolean 1 Wert:trueoderfalsechar 2 16bitUnicodeZeichenbyte 1 -27bis27-1short 2 -215bis215-1int 4 -231bis231-1long 8 -263bis263-1float 4 ~±3.410-38bis±3.401038

double 8 ~±1.810-308bis±1.810308

Page 27: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Programm, Programmieren, Algorithmus....?

Vom Problem zum Programm • Ein Problem aus der realen Welt wird durch Modellbildung in die Sprache eines Computers überführt.

• Hierzu dient eine Programmiersprache, dies ist eine formale Sprache, die definiert wurde, um auf einem Computer Programme zu implementieren.

• Ein Computerprogramm ist dabei ein in einer solchen Sprache verfaßte Anleitung zur Lösung eines Problems.

27

Page 28: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Algorithmen

• Zur Lösung eines Problems mit Hilfe des Computers ist in der Regel ein Algorithmus notwendig.

• Ein Algorithmus ist eine Arbeitsanleitung zum Lösen eines Problems bzw. einer Aufgabe, die so präzise formuliert ist, daß sie von einem Computer ausgeführt werden kann. ‣ endliche Abfolge von Befehlen ‣ liefert in endlicher Zeit ein Ergebnis

28

Page 29: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Vorarbeiten

Bevor ein Programm erzeugt werden kann muß dieses (sehr genau) geplant werden. Instrumente dazu sind: • Programmablaufpläne, Flußdiagramme • Struktogramme

Diese modellieren das Problem so, daß es in eine Computersprache übersetzt werden kann. Beispiel: Es soll die Summe der ersten 100 natürlichen Zahlen, d.h. der Wert S = 1 + 2 + 3 + ... + 100, berechnet werden.

29

Page 30: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Beispiel: Flußdiagramm

30

Summe = 0; Summand = 1;

Summe = Summe + Summand; Summand = Summand + 1;

Summand >100

ja nein

Ausgabe: Summe

Page 31: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Beispiel Struktogramm

31

Page 32: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Beispiel: „Fußgesteuerte Schleife“

32

Summe = 0; Summand = 0;

Ausgabe: Summe

Solange Summand <= 100

Summe = Summe + Summand Summand = Summand +1

Page 33: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Beispiel: „Kopfgesteuerte Schleife“

33

Summe = 0; Summand = 0; arbeite = true;

Ausgabe: Summe

Solange arbeite

Summe = Summe + Summand Summand = Summand +1 falls (summand=101) arbeite=false

Page 34: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Grundkonstrukte der Programmierung

Dieses einfache Beispiel enthält bereits die wesentlichen Grundelemente der Programmierung:

• Zuweisungen von Werten an Variable • Verändern von Werten von Variablen • Abfrage einer Variablen • Schleifenkonstrukte

‣ fußgesteuerte Schleifen: Die Bedingung wird am Ende eines Blocks abgefragt (wie im letzten Beispiel)

‣ kopfgesteuerte Schleifen: Die Bedingung wird am Anfang des Blocks abgefragt.

‣ fußgesteuerte Schleifen werden stets mindestens einmal durchlaufen!

34

Page 35: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Variable und Werte

Variable •Sollen in Programmen Daten gespeichert werden, so geschieht dies in Variablen

•Variable werden zuvor, unter Angabe Ihres Typs deklariert ‣ int counter; double kontostand;

Wertzuweisungen •Zuweisungen an eine Variable werden mit dem „=“ Zeichen durchgeführt: ‣ i=0; kontostand = -1010.76; ‣ zaehler = zaehler+1;

35

Page 36: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Anforderungen an Software

Anwenderforderungen: •Korrektheit •Benutzerfreundlichkeit •Effizienz

Betreiberanforderungen •Unabhängig von der Hardware •Leicht zu warten

Entwickleranforderungen •Einfache Wiederverwendung von Programmteilen •geringer Debugging Aufwand •Parallelisierbarkeit in der Entwicklung ⇒ Ergebnis: Prinzip der Objektorientierung

36

Page 37: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Objekte, Klassen und Methoden

Sichtweise der objektorientierten Programmierung: • Die Welt besteht aus Objekten • diese Objekte sind Instanzen von Klassen • Objekte besitzen Eigenschaften (Attribute) • Objekte kommunizieren durch den Austausch von Nachrichten

• Auf Objekte wird mit speziellen Verfahren, sogenannten Methoden, zugegriffen.

37

Page 38: Einführung in die Programmierung - Michael Gamer · 2020. 2. 13. · Die Entwicklung der Programmiersprachen wird in Generationen eingeteilt. Erste Generation: Maschinensprache (ab

Michael Gamer

Beispiel Objekt: Auto

38

AutoHubraum

Leergewicht Höchstgewicht

Anzahl der Räder Kilometerstand

.....

Kilometerstand setzen gefahrene KM buchen

KM Stand auslesen

Klassenname

Attribute

Methoden