strukturiertes [height=4ex]img/javalogo programmieren ·...
TRANSCRIPT
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.