STRUKTURIERTES [height=4ex]img/javalogo PROGRAMMIEREN ·...

13
STRUKTURIERTES PROGRAMMIEREN Vorlesung im Sommersemester 2014 Prof. E.G. Schukat-Talamazzini Stand: 15. Oktober 2014 Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ Teil II Aufbau und Funktionsweise von Digitalrechnern HAL-2000 Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Zusammenfassung Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ Wie funktioniert ein Digitalrechner ? Alle Rechnersysteme beruhen auf derselben Architektur ! Heimcomputer (personal computer) Arbeitsplatzrechner (workstation) Betriebliche Großrechner (mainframe) Wissenschaftliche Großrechner (supercomputer) Eingebettete Systeme: Mobiltelefon, MP3-Player, DVD-Recorder Kfz-Bordcomputer, Autopilot, GPS-Navigator, Gorch Fock Elektroherd, Waschvollautomat, Walmarts Einkaufsberater ? proaktive Nagelschere, intelligenter Beichtstuhl ...

Transcript of STRUKTURIERTES [height=4ex]img/javalogo PROGRAMMIEREN ·...

STRUKTURIERTES PROGRAMMIEREN

Vorlesung im Sommersemester 2014

Prof. E.G. Schukat-Talamazzini

Stand: 15. Oktober 2014

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Teil II

Aufbau und Funktionsweise vonDigitalrechnern

HAL-2000

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Von Neumann-Architektur

Softwareschichten

Elementare Datentypen

Komplexe Datentypen

Zusammenfassung

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Wie funktioniert ein Digitalrechner ?

Alle Rechnersysteme beruhen auf derselben Architektur !

• Heimcomputer (personal computer)• Arbeitsplatzrechner (workstation)• Betriebliche Großrechner (mainframe)• Wissenschaftliche Großrechner (supercomputer)• Eingebettete Systeme:

• Mobiltelefon, MP3-Player, DVD-Recorder• Kfz-Bordcomputer, Autopilot, GPS-Navigator, Gorch Fock• Elektroherd, Waschvollautomat, Walmarts Einkaufsberater? proaktive Nagelschere, intelligenter Beichtstuhl ...

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Von-Neumann-Architektur eines DigitalrechnersJanos Baron von Neumann (1903–1957) · ungarischer Mathematiker

Register

Arbeitsspeicher Peripherie

BUS BUS

Rechnerkern

Daten & Programme

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Hardwarekomponenten der Rechnerarchitektur

BusStrang von parallelen Datenleitungen (z.B. 32 Bit)Steuereinheiten („controller“) zur Ankopplung der Geräte

Rechnerkern (CPU)central processing unit SteuerwerkRechenwerkRegistersatz

ALUarithm.-logical unit

Hauptspeichermit linearangeordneten Zellen:

Adresse Inhalt0 Zelle-01 Zelle-12 Zelle-2... ...... ...

PeripherieGeräte zur E/A,Speicherung undKommunikation:

Monitor MausTastatur NetzwerkISDN ModemFestplatte CD-ROMDiskette CD-BrennerDVD DruckerA/D-Wandler USBGrafikkarte

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Speicher, Daten und Variablen

Bitkleinste Speichereinheit · Zustände {0, 1}

Bitfolge„least/most significant bit“0 1 1 ... 1 1 0 0 115 14 13 ... 4 3 2 1 0

Bytekleinste Adressierungseinheit (Zelle à 8 Bit)

Wort4 Byte oder

{Halbwort „short“Doppelwort „long“

}Transport/Registereinheit · Ausrichtung

Bytefolgebig endian: (n, n + 1, n + 2, n + 3)little endian: (n + 3, n + 2, n + 1, n)

RegistersuperschnelleSpeicherzellen:

BZR BefehlszählerIR BefehlswortAR AkkumulatorBAR Adreßbasis... ... ...

VariablenbegriffmaschinenorientiertName AdresseTyp (implizit)Wert Bitmuster

keine Typdeklaration!

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

von Neumanns VerarbeitungsprinzipSequentielle Maschine mit linear angeordneten Speicherzellen

Maschinenzustand = Speicher + Register

• Programmablauf als Folge elementarer Maschinenbefehle.• Jede Instruktion bewirkt eine (kleine) Zustandsänderung.

Speicherinhalt = Daten + Programm

• Speicherwörter enthalten codierte{

DatenobjekteProgrammbefehle

}.

• Befehlsabarbeitung in Speicherfolge.Unterscheidung liegt nur im Hirn des ProgrammierendenProgramm modifiziert u.U. den eigenen Programmcodeakute Verwechslungsgefahr („segmentation fault“)

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Maschinenbefehle (Instruktionen)Datentransport · arithmetische/logische Operationen · „Sprünge“

Befehlsformat — digitale Codierung

Opcode31 ... 26

Operand 125 ... 13

Operand 212 ... 0︸ ︷︷ ︸

32 Bit Instruktion

Befehlsvorrat — welche Instruktionen versteht die Maschine?Prozessorspezifische Menge einschrittiger Anweisungen

• Lade Speicherinhalt in Register AR ← (n)

• Speichere Registerinhalt ab (n) ← AR

• Verknüpfe Speicherinhalte (k) ← (n) op (m)

• Unbedingter Sprung BZR ← (n)

• Bedingter Sprung if (AR==0) BZR ← (n)

• Indirekte Adressierung AR ← ((n))

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Steuerwerk der CPUDer Instruktionszyklus der Zentraleinheit

〈Algorithmus〉

1 FETCH:Beschaffe den Befehlscode, z.B. IR ← #(BZR)

2 INCREMENT:Erhöhe die Befehlsadresse, z.B. BZR ← BZR + 1

3 DECODE:Entschlüssele den Befehl im Instruktionsregister IR.

4 OPERANDS:Hole ggf. die benötigten Operanden aus dem Speicher.

5 EXECUTE:Führe den aktuellen Befehl in der ALU aus.

6 LOOP:Gehe (unbedingt!) zu Schritt 1 .

〈Algorithmus〉

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Ausdrücke in MaschinencodeGeschachtelte arithmetische und/oder logische Berechnungen

Maschinensprache unterstütztnur elementare AusdrückeKomplexe mathematische Ausdrückewie

z ← (x + y) · (x − y)

sind als äquivalente Folgeelementarer Berechnungen zuschreiben:

(z) ← (x) ADD (y)AR ← (x) SUB (y)(z) ← (z) MUL AR

Höhere ProgrammiersprachenRISC/CISC-Architekturen

Befehlsformat undOperandenstellen

• Dreiadressbefehle(k) ← (n) op (m)

• ZweiadressbefehleAR ← (n) op (m)

• EinadressbefehleAR ← (n) op AR

3A-Befehl 1A-Befehle:

(j) ← ARAR ← (n)AR ← (m) op AR(k) ← AR

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Anweisungen in MaschinencodeSprünge und Spaghetti-Code

KontrollflußanweisungenVerzweigungen, Schleifen,Unterprogrammaufrufemüssen vom Programmiererdurch Konstruktionen mitgeeigneten bedingtenSprunganweisungen realisiertwerden.

SprunganweisungenDer Prozessor rechnet mehr als derProgrammierer geschrieben hat.

SprunganweisungenSie durchbrechen das strengeSchachtelungsprinzip derstrukturierten Programmierung.

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Was kann ein Computer berechnen ?

Universelle Turingmaschine (UTM)Endlicher Automat mit linearem, unendlichem Speicher.(von Neumann-CPU mit ∞-Hauptsspeicher) Alan Turing 1936

Church’sche TheseEs gibt kein vernünftiges Berechnungsmodell, welches echtmächtiger ist als die UTM (bzw. λ-Kalkül). Alonzo Church 1939

Schwache These der Künstlichen Intelligenz (KI)Alles was sich ein menschliches Gehirn ausdenken kann,läßt sich auch durch einen Digitalrechnernachvollziehen/simulieren.

Satz (Unvollständigkeitssatz)Es gibt Aussagen, die einerseits logisch wahr sind,andererseits aber nicht durch einen endlichen Beweishergeleitet werden können. Kurt Gödel 1931

AT 1912–54

AC 1903-95

JvN 1903–57

KG 1906–78

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Was bleibt verbesserungsbedürftig ?Hardware — von Neumannscher FlaschenhalsJe Prozessortakt wird eine Aktion des Instruktionszyklus ausgeführt.

Ein Maschinenbefehl benötigt � 1 Takte.

• Fließbandverarbeitung feinkörnige Parallelität(„pipeline stall“ bei Datentransfer von/zu CPU)

Software — maschinenorientierte Programmiersprache (1GPL)• Symbolische Namen für Variablen und Marken ? Lesbarkeit Assemblerprogrammiersprachen (2GPL)

• Variablendeklaration zur Typfestlegung ? Bedeutungszuordnung Höhere Programmiersprachen (3GPL)

• Mathematische Ausdrücke als Berechnungsvorschrift ? Handlichkeit Höhere Programmiersprachen (3GPL)

• Schleifen, Verzweigungen, Unterprogramme ? Übersichtlichkeit (Block-)Strukturierte Programmiersprachen (4GPL)

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Beispiel — Addition zweier ZahlenProgrammiersprachen unterschiedlicher Generationen

Maschinenorientierte Sprache101000 1010010110111 0000100101110001111 1100111011100 0101001001110000101 0000010001101 1110011100101011100 1100101111001 0101110000100010010 1100000101001 0100100100011010011 1010010110100 1000100110110001011 1010001010110 1011110001001... ... ...

Hochsprache C

int a,b,c;... ... ...c = a+b;

MIPS Assemblercode... ... ...lw $t1,vara # load variable a into register t1lw $t2,varb # load variable b into register t2add $t3,$t2,$t1 # add contents of t1,t2, result in t3sw $t3,varc # store contents of t3 as variable c... ... ...

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Von Neumann-Architektur

Softwareschichten

Elementare Datentypen

Komplexe Datentypen

Zusammenfassung

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Systemarchitektur der Rechnersoftware

Mikroarchitektur

Instruction Set Architecture

Systemaufrufschnittstelle

Digitale Logik

Assemblersprache

Höhere Programmiersprache

Abstrakter Assembler

Portable höhere PS

Anwendung I Anwendung II

Interpretation durch Anwenderprogramm

Übersetzung

Ausführung durch Hardware

Interpretation durch Mikroprogramm

Interpretation durch Betriebssystem

SystemaufrufeÜbersetzung

Assemblerdurch

Übersetzung (Compiler)

z.B.

Java

z.B.

Bytecode

’javac’

Interpretation durch virtuelle Maschine JVM

SchichtenzunehmenderAbstraktion mitdefiniertenSchnittstellen.

Organisationschafft Ordnung inhochkomplexenSystemen.

Maschinenvirtuell Software

virtuell Software

... ... ...virtuell Software

real Hardware

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Schichten sind Maschinen

Virtuelle MaschineRealisierung in Software· Stellt nach oben eine definierte Schnittstelle zur Verfügung· Nutzt die Schnittstelle der darunterliegenden Maschine(n)

Reale MaschineRealisierung in Hardware· i.d.R. die unterste Schicht (CPU oder Steuerwerk)

Funktionsweise einer Schicht

• Programmiersprache mit wohldefinierter Syntax und Semantik

• Kommandoinventar Aufrufe mit aktuellen Parameterwerten

• Funktionsbibliotheken Binder fügt unteren Objektcode in oberen ein

• Mikroprogramme komplexe Maschinenbefehle via Firmware

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Transfer durch Übersetzung↓ Programmübersetzung · ↑ Programminterpretation

Lexikal. Analyse

Syntakt. Analyse

Typüberprüfung

Optimierung

Quellprogramm

OU

TP

UT

INP

UT

Maschinenprogramm

COMPUTER

ÜbersetzungCompiler transformiert denoberen Code in Code für dieuntere Maschine.

ProgrammflußStapelverarbeitung:· Übersetzungsphase· Exekutionsphase

Vor- & Nachteile⊕ Effizienz Modifikationsaufwand

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Transfer durch Interpretation↓ Programmübersetzung · ↑ Programminterpretation

Lexikal. Analyse

Syntakt. Analyse

Typüberprüfung

Quellprogramm

COMPUTER

Interpreter

OU

TP

UT

INP

UT

InterpretationOberer Code wird mit Hilfe derunteren Maschine ausgeführt.

ProgrammflußSchritthaltend (inkrementell):· anweisungsgetaktete Ausführung· wiederholte Analyse (Schleifen)

Vor- & Nachteile Effizienz⊕ interaktives Arbeiten

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Komponenten der SystemsoftwareBetriebssystemVerwaltung der Hardware-Ressourcen des RechnersJeder Systemaufruf blockiert das rufende Programm Organisation von Prozessen, Treibern, Strömen, Dateien

ProzessBündel aus ausführbarem Programmcode und seinen Ressourcen(z.B. Speicherplatz, Dateien, externe Kommunikationspfade)

• Multiprogramminglogisch gleichzeitige Ausführung mehrerer Prozesse

• Timesharinggleichzeitige Aktivität mehrerer Benutzer

Treiber und StrömeTreiber zur Bedienung der Controller für die GeräteStröme von Bytes zwischen Hauptspeicher und GerätenFeinorganisation: Dateien auf Festplatten mit E/A-Strömen

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Java und die PortabilitätProgrammiersprache JavaBlockstrukturierte & objektorientierteProgrammiersprache (*1995)

Java CompilerDer Aufruf javac übersetzt dieKomponenten eines in Javageschriebenen Programms.

Java BytecodeSehr elementare, aberplattformunabhängigeProgrammiersprache.(inkl. Systemaufrufe)

Java Virtual Machine (JVM)Die Softwareschicht, die Bytecode alsSchnittstelle (java) anbietet.

PlattformabhängigkeitJe ein Compilerprogrammfür jede Kombination aus· Quellsprache· Maschinensprache· Betriebssystem

Explosion!

ProgrammportabilitätIst für eineRechnerarchitektur dieJVM verfügbar, läuftdarauf jedesJava-Programm.

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Von Neumann-Architektur

Softwareschichten

Elementare Datentypen

Komplexe Datentypen

Zusammenfassung

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Datentypen höherer Programmiersprachen

Elementare DatentypenZusammenhängende Bitmuster des Speichers werden als(mathematische) Objekte gedeutet:• Zahlen ganze Zahlen, Gleitkommazahlen

• Symbole Ascii-Zeichensatz

• Wahrheitswerte „wahr“ , „falsch“, „egal“

Komplexe DatentypenEinfache Datenobjekte werden sukzessive zu komplexenDatenstrukturen zusammengesetzt:• Verknüpfungsoperationen Felder, Verbünde, Verweise

• Benutzerdefinierte Datentypen{statisch

dynamisch

}·{Schachtelung

Geflecht

}·{

ADTKlassen

}

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Binäre Darstellung von Zahlen„In einer kleinen Küche kannst Du keine großen Klopse kochen.“

ProblemDie meisten mathematischen Zahlensystemebesitzen einen unendlichen Wertebereich.

Es gibt aber nur endlich viele — nämlich 2n —verschiedene Bitmuster einer gegebenen Länge nzur Codierung.

ZahlbereichIN natürlichZ ganzQ rationalIR reellC komplex

Konsequenz

• eingeschränkter Skalenumfang −128 ≤ z ≤ +127Überlauf, wenn Zahl (betragsmäßig) zu groß ist.

• eingeschränkter Dynamikbereich |z| ≥ 10−38

Unterlauf, wenn Zahl (betragsmäßig) zu klein ist.

• eingeschränkte Genauigkeit z = 47.11883666Rundungsfehler nach Abschneiden (binärer) Nachkommastellen

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

DualzahldarstellungPolynomiale oder p-adische Darstellung zur Basis p = 2

DefinitionDie Folge 〈ζn−1, . . . , ζ0〉 mit

z =n−1∑i=0

ζi · βi , ζi ∈ {0, 1, 2, . . . , β − 1}

heißt Zifferndarstellung der natürlichen Zahlz ∈ IN zur Basis β.

β = 2 dualβ = 10 dezimalβ = 8 oktalβ = 16hexadezimal

Dualzahldarstellung von Dezimalziffern0 1 2 3 4 5 6 7 8 9 10 11 12 130 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101

Keine Eindeutigkeit (führende Nullen)15 = = [1510] = = [01510] = = [001510] = . . .

Basisabhängige Repräsentation15 = = [1510] = = [11112] = = [178] = = [F16]

BCD-Darstellung(Dezimal = vierstellig dual)

〈0100 0111 0001 0001〉BCD︸ ︷︷ ︸471110

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Festkommazahlen

Festkommadarstellung nichtnegativer ganzer ZahlenHardware realisiert Arithmetik mit fester Binärstellenzahl n.

• Alle Rechnungen sind korrekt modulo 2n.Zahlbereiche [0, 15] für n = 4, [0, 255] für n = 8, [0, 65535] für n = 16.

• Addition (mit Überlauf für n = 4):1210 + 910 = 11002 + 10012 = 1 01012 ≡ 01012 = 510

Dualzahlarithmetik durch Verschieben„Schriftliches“ Multiplizieren/Dividieren erfordert:

β · z = β ·n−1∑i=0

ζi · βi =

n−1∑i=0

ζi · βi+1 =n∑

i=1

ζi−1 · βi

z / β =

n−1∑i=0

ζi · βi / β =

n−1∑i=0

ζi · βi−1 =

n−2∑i=−1

ζi+1 · βi

Multiplikationlinks schiebenNull folgtÜberlauf?

Divisionrechts schiebenNull folgtRest?

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Zweierkomplementdarstellung negativer Zahlen

DefinitionMotiviert durch −z = 2n − z (mod2n) definieren wir vermöge

z def= 2n − z

das Zweierkomplement einer Zahl z ∈ Z.

ZweierkomplementarithmetikDie Subtraktion wird auf die Addition zurückgeführt:

x − y = x + (2n − y) = x + y (mod2n)

ZweierkomplementdarstellungBitmuster mit führender Eins negative Zahlen±0 ±1 ±2 ±3 ±4 ±5 ±6 ±7 ±80000 0001 0010 0011 0100 0101 0110 0111 —0000 1111 1110 1101 1100 1011 1010 1001 1000

(n = 4)

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Einerkomplementdarstellung negativer ZahlenDefinitionÄhnlich wie vorhin definieren wir vermöge

z def= 2n − 1− z = z − 1

das Einerkomplement einer Zahl z ∈ Z.

EinerkomplementdarstellungBitmuster mit führender Eins nichtpositive Zahlen±0 ±1 ±2 ±3 ±4 ±5 ±6 ±7 ±80000 0001 0010 0011 0100 0101 0110 0111 —1111 1110 1101 1100 1011 1010 1001 1000 —

(n = 4)

Bemerkungen1. Der Wert z kann komponentenweise aus z selbst berechnet werden.

2. Das Einerkomplement besitzt zwei Darstellungen der Null.

3. Die Wertebereiche von n-Bit-Festkommazahlen sind

−2n−1 ≤ z < +2n−1︸ ︷︷ ︸Zweierkomplement

bzw. −2n−1 < z < +2n−1︸ ︷︷ ︸Einerkomplement

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Gleitkommazahlen in MantissendarstellungGebrochene DualdarstellungDie β-adische Darstellung läßt sich mit Hilfe negativerBasispotenzen auf gebrochene Zahlen ausdehnen:

z =n−1∑i=−k

ζi · βi , ζi ∈ {0, 1, 2, . . . , β − 1}

z.B. z = ζ−3 · 18 + ζ−2 · 1

4 + ζ−1 · 12 + ζ0 · 1 + ζ1 · 2 + ζ2 · 4 + ζ3 · 8

DefinitionUnter der wissenschaftliche Notation einerreellen Zahl z ∈ IR versteht man die Darstellung

z = (−1)Vorzeichen ·Mantisse · βExponent .

Die Darstellung z = (−1)v ·M · 2E zur Basis β = 2heißt mantissennormiert, falls gilt:

M = 1.ζ1, . . . , ζm−1

Beispiel10(−1)0 · 4.711 · 103︸ ︷︷ ︸

471110

Beispiel10(−1)1 · 815 · 10−3︸ ︷︷ ︸

−0.81510

Beispiel21.1 · 22︸ ︷︷ ︸1102=610

Beispiel21.0100011 · 26︸ ︷︷ ︸

81.510

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Die IEEE-Norm #754

IEEE-Format single precision (32 Bit)31 Vorzeichen 31 30 Exponent 23 22 Mantisse 0

1 Bit 8 Bit 23 Bitmin/max 2·10e±38 7 dezimal

offset -127

IEEE-Format double precision (64 Bit)63 Vorzeichen 63 62 Exponent 52 51 Mantisse 0

1 Bit 11 Bit 52 Bitmin/max 2·10e±308 16 dezimal

offset -1023

Verschiebung statt ZweierkomplementZur Darstellung großer (z � 1) und kleiner (0 ≤ z � 1)Zahlen werden positive+negative Exponenten benötigt.

IEEE 754Basispotenzen:2E−127 bzw.2E−1023

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Die IEEE-Norm #754Bitmuster mit spezieller Bedeutung

positive Null (+0)0 00000000 00000 00000 00000 00000 000 = +1 · 1.0 · 2−127

negative Null (−0)1 00000000 00000 00000 00000 00000 000 = −1 · 1.0 · 2−127

positiv unendlich (+∞)0 11111111 00000 00000 00000 00000 000 = +1 · 1.0 · 2+128

negativ unendlich (−∞)1 11111111 00000 00000 00000 00000 000 = −1 · 1.0 · 2+128

undefiniert (NaN)

? 11111111 ????? ????? ????? ????? ??? = ±1 ·M · 2+128

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Datentypen für druckbare Zeichensätze

Der 7-Bit Ascii-Zeichencode8 000 020 040 060 100 120 140 160

16 00 10 20 30 40 50 60 70

00 0 nul dle 0 @ P ‘ p01 1 soh dc1 ! 1 A Q a q02 2 stx dc2 “ 2 B R b r03 3 etx dc3 # 3 C S c s04 4 eot dc4 $ 4 D T d t05 5 enq nak % 5 E U e u06 6 ack syn & 6 F V f v07 7 bel etb ’ 7 G W g w10 8 bs can ( 8 H X h x11 9 ht em ) 9 I Y i y12 A lf sub * : J Z j z13 B vt esc + ; K [ k {14 C ff fs , < L \ l |15 D cr gs - = M ] m }16 E so rs . > N ˆ n ˜17 F si us / ? O _ o del

EBCDICIBM

Ascii-7Standard ISO 7 Bit

Ascii-88 Bit ISO Latin 1

Unicode16 Bit ISO

Jede vernünftigeProgrammiersprachebesitzt mindestenseinen Datentyp fürZeichenketten.

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

WahrheitswerteDatentyp mit logischen Verknüpfungen ¬, ∧, ∨, 6≡, ⇒, ⇔

Wozu ein logikwertiger Datentyp ?Aussageterme (0<=n & n<=17) | (flag(url)==404)in Verzweigungen if (5>7) despair();oder Schleifen do vodka=12; while (!kommt(arzt))

Wieviele Wahrheitswerte ?Mindestens zwei („tertium non datur“) true und falseKomfortabel wäre ein dritter (’R’) NA (not available)

Woran erkenne ich eine lausig schlechte Programmiersprache ?An übertriebener Sparsamkeit am falschen Ort:

#define FALSE 0#define TRUE 1

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Von Neumann-Architektur

Softwareschichten

Elementare Datentypen

Komplexe Datentypen

Zusammenfassung

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Reihung (Feld, „array“)Zusammenfassung von Datenobjekten gleichen Typs

Beispiel 1DMeßwertzeitreihe (Zählproben, Abtastwerte)Zeitpunkt 1 2 3 4 ... 31Aktienkurs 10.5 10.5 12.2 9.8 ... 13.3

IndexbereichGanzzahliges Intervall (je Dimension) Start bei 1: {1, 2, 3, . . . , `− 1, `}

Start bei 0: {0, 1, 2, . . . , `− 1}Offset wählbar: {ω, ω + 1, . . . , ω + `− 1}

oder auch Zeichenketten, bel. Zahlenmengen (z.B. Perl)

Elementzugriff über den Indexa[i] , a[i,j] , a[i][j] , a[i,j,k] , ...

Beispiel 2DStereosignalWörterbuchS/W-Rasterbild

Beispiel 3DVideosequenzComputertomograph

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Feld und linearer SpeicherGrößen- und Anzahlangaben zur Feldvereinbarung

3 4 5 6 7 8

Nulladr.

Startadr.

ω=3

Speicherstrahl

N=6

Quantitative Charakterisierung einer Reihung

1. Elementtyp ∆ ∈ INSpeichergröße des Komponententyps [Bytes]

2. Dimension N ∈ INWieviele „Achsen“ : Vektor · Matrix · Quader · etc

3. Längen & Offsets (`1, ω1), . . . , (`N , ωN)je Achse: die Ausdehnung und ggf. der Startindex

4. Startadresse k ∈ INWo beginnt die erste Feldkomponente?

Nulladresse k0 = k − ω1Wo beginnt die Komponente a[0] eines 1D-Feldes?

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Feld und linearer SpeicherWo finde ich die Komponenten eines mehrdimensionalen Feldes ?

x

x ?

SpeicherabbildungsfunktionLexikographische Abfolge erster Index läuft am langsamsten(Matrix zeilenweise in C++, Java versus Matrix spaltenweise in Fortran)

adr(a[i1]) = k + ∆ · (i1 − ω1)

adr(a[i1, i2]) = k + ∆ · (i1 − ω1) · `2 + ∆ · (i2 − ω2)

adr(a[i1, i2, i3]) = k + i ′1 · `2`3 + i ′2 · `3 + i ′3 · 1

adr(a[i1, . . . , iN]) = k +N∑

n=1

∆ · (in − ωn) ·N∏

ν=n+1

Abkürzende Schweibweise i ′` = ∆ · (i` − ω`).

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Schachtelung und BindungFortgeschrittene Reihungskonzepte

SchachteldefinitionEin vierdimensionales Feld isteine eindimensionale Reihungvon dreidimensionalen Feldern.

FlatterrandtabellenBeispiel „Wortsequenzen“S e i no d e rN i c h t s e i nd a si s th i e rd i eF r a g e !

FeldvariablenbindungWann wird die Feldgrößeunwiderruflich festgeschrieben?

• statischzum Übersetzungszeitpunkt(vor Programmstart)

• dynamischzur Laufzeit (bei Erreichender Deklaration)

• flexibelLängenmodifikation nachBedarf

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Der Verbund (Datensatz, „record“)Zusammenfassung von Datenobjekten unterschiedlichen Typs

Verbund = Liste von Attribut-Wert-PaarenAttribut-Wert-Paare sind Variable.Name und Typ sind für einen Verbund konstant.

Elementzugriff über AttributnamenPunktnotation (viele Programmiersprachen)

AWP=

NameTypWert

Beispiel StammdatensatzElemente vom Typ string, int, bool

Name „Jagger“Vorname „Mick“GebTag 26GebMonat 7GebJahr 1943Ledig T

s.Names.Vornames.GebTags.GebMonats.GebJahrs.Ledig

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Geschachtelte VerbundeHierarchische VerschachtelungVerbundelemente dürfen beliebigen (komplexen!) Typ besitzen.Für die Typen der Unterverbunde werden Typnamen deklariert.

Überschaubarkeit · Selektion · Wiederverwendung

Beispiel geschachtelter StammdatenDatensatz wird modular strukturiert

Name Nachname „Jagger“Vorname „Mick“

GeburtTag 26Monat 7Jahr 1943

Ledig T

s.Names.Name.Nachnames.Name.Vornames.Geburts.Geburt.Tags.Geburt.Monats.Geburt.Jahrs.Ledig

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Schachtelung von Feldern und VerbundenGemischte hierarchische VerschachtelungReihungen können als Verbundkomponenten fungieren.Reihungen dürfen komplexen Komponententyp besitzen.

Kombination Reihung ⊂ Verbund

Name Nachname ...Vorname ...

Matrikel 4711

Punkte1 ...2 ...... ...14 ...

s.Names.Name.Nachnames.Name.Vornames.Matrikels.Punktes.Punkte[1]s.Punkte[2]...s.Punkte[14]

Kombination Verbund ⊂ Reihung stones[2].Name.Vorname „Keith“

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Wertvariablen und Referenzvariablen

Variablenbegriff (höhere Programmierung)

Name ZeichenketteTyp Wertebereich BezugssystemWert Datenobjekt

{NachrichtInformation

}VerweisEin neuer Name füreine alte Variable

bzw.Eine Variable ohneeigenen Wert

29 breite

Variable anonyme Variable

tiefe

Verweise

alter

hoehefloat

float 1.20

1.74

int

größe

Verweiswerteine Anschrift &x desreferenzierten Objekts x

Verweistypeine Stufe typ* überdem x-Datentyp

(De)referenzierungAdresse &(var)Inhalt *(ref)

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Verweise, Zeiger und Aliasnamen

WertvariableDer Wert kann im Programmlaufdurch Zuweisung verändert werden.

WertkonstanteDer Wert kann niemals verändertwerden. (symbolischer Wertname)

Referenzvariable („Zeiger“)

Der Objektverweis kann währenddes Programmlaufes nochumgesetzt werden.

Referenzkonstante („Alias“)

Der Bezug kann nach Deklarationnicht mehr verändert werden.(Objekt-Spitzname)

Anonyme VariableAnonyme Variablen ohne Verweissind für die Welt verloren.

Indirektionsstufen0 = Literal1 = Wertvariable2 = Referenzvariable3 = „Schnitzeljagd“ etc.

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Modelle des EnthaltenseinsHierarchien versus Geflechte

Wertkomponentenn > 1 exakte KopienSpeicherbedarf,Aktualisierung, Robustheit

ReferenzkomponentenZugriff per SchnitzeljagdZugriffszeit, Aktualisierung,Robustheit, DBS-Doktrin

Beispiel Übungsgruppen und Rechnerkurs

Leiter „Bernhard Pietsch“

Student1 →Franziska2 →Anne... ...18 →Jenny

Note1 „zwei“2 „fünf“... ...18 „drei“

und

Leiter „Sebastian Glaß“

Student1 →Stefanie2 →Maria... ...27 →Franziska

Note1 „vier“2 „drei“... ...27 „eins“

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Geflechte als dynamische Datenstrukturen

Beispiel lineare Liste"Brot"

"Wein"

"Paella"

"Lätta"

Listenelement=Verbund

Start Ware „Brot“Nach →0x1B44

Geflecht

Datenstruktur aus

VerbundReihungVerweis

Zyklische Verweiskettennull-Verweise

ProblemVerantwortung für die Softwarequalität:

• Wer stellt die Eigenschaften einergültigen Liste sicher?

• Wie sind die relevantenListenoperationen realisiert?

• Wo finde ich eine Beschreibung derBedeutung der Datenobjekte?

• Was passiert wenn jemand dieDatenstruktur umdefiniert?

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Abstrakter DatentypBündel aus Datenstruktur, Schnittstellenbeschreibung, Bedeutungsdefinition

ADT „Stapel“ (Stack)

Syntax SemantikSIGNATUR AXIOME(Schnittstelle) (Bedingungsgleichungen)

Stack empty ()bool isempty (Stack)Stack push (Stack, valtype)valtype top (Stack)Stack pop (Stack)

isempty (empty ()) = true

top (push (s, v)) = vpop (push (s, v)) = s

KapselungZugriffskontrolle für Datenelementeüber die Prozeduren

GeheimnisprinzipNur die Schnittstelle ist sichtbar,nicht die Realisierung

Objektorientierte ProgrammierungKapselung und Geheimnisprinzip werden von der PS erzwungen und beruhennicht allein auf der Selbstdisziplin des Programmentwicklers!

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Von Neumann-Architektur

Softwareschichten

Elementare Datentypen

Komplexe Datentypen

Zusammenfassung

Von Neumann-Architektur Softwareschichten Elementare Datentypen Komplexe Datentypen Σ

Zusammenfassung1. Die Von-Neumann-Architektur besteht aus einem linearen Speicher und

einem Rechnerkern mit Steuerwerk und einer arithmetisch-logischenOperationseinheit.

2. Sowohl Daten wie auch Programme liegen binärcodiert im selbenHauptspeicher.

3. Die Maschinenprogrammierung kennt Sprung- und Transportbefehle,aber weder Namen, Marken, Ausdrücke, Kontrollflußanweisungen nochexplizite Datentypen.

4. Die Software ist in Schichten organisiert, deren Funktionalität durchÜbersetzer und Interpreter vermittelt wird.

5. Höhere Programmiersprachen verfügen über elementare Datentypen fürDrucksymbole, Wahrheitswerte, Festkomma- und Gleitkommazahlen(IEEE 754).

6. Die komplexen Datentypen werden daraus induktiv durch Reihung oderVerbund von Komponenten gleichen/unterschiedlichen Typs aufgebaut.

7. Geflechte sind Datenstrukturen, die durch Verzeigerung ihrerKomponenten mit Referenzvariablen das Anlegen kostspieligerObjektkopien ersparen.

8. Abstrakte Datentypen und Objektorientierung ermöglichen odererzwingen Qualitätstandards für das korrekte Zusammenspiel vonDatenobjekten mit ihren Manipulationsroutinen.