Einführung Wat jibt´s denn? Mit Computa kenn´ ick mir aus! Guten Tag, Kapitel 1 Einführung Wat jibt´s denn? Mit Computa kenn´ ick mir aus! Guten Tag, darf ich Ihnen mal eine Frage stellen?
Was ist ein „Datentyp“? reals, arrays, records, stacks, integers, reals, arrays, records, stacks, files, characters, ... Was ist ein „Datentyp“?
Definition erforderlich! „Ein Datentyp legt die Menge der Werte fest, die eine Variable annehmen kann.“ ( Pascal User Manual) Definition erforderlich! Beachte: Nutzerdefinierte Datentypen in vielen Programmiersprachen
Zugriffsmechanismen: Na ja, na ja, ... Zugriffsmechanismen: filo vs. fifo ? stacks = queues alles sequences
! = Algebra Datentypen sind Algebren ? Menge von Objekten Datentyp: Operationen über diesen Objekten = Algebra
Algebra und Informatik Mathematik Algebra = universelle Algebra = algebraische Struktur ------------------ Trägermenge Operationenfamilie Informatik z.B.: real array benötigt real, array, integer ------------------ Algebra => Begriff erweitern ! mehrere Trägermengen Operationenfamilie
Algebra und Informatik Homogene oder einsortige Algebra Gruppe Monoid Ring Boolesche Algebra Verband Heterogene oder mehrsortige Algebra Datentyp Vektorraum endlicher Automat Syntax einer Programmiersprache Semantik - “ -
Algebra und Informatik Problem: Partialität vieler Operationen: Selektion, Division, Überlauf/Unterlauf, Lesen aus leerem Keller, Aufruf nichtdeklarierter Prozedur mehrsortige, partielle Algebren Theorie kompliziert partielle Operation totale Operation error
vier Operationen zweckmäßig Beispiel Datentyp „Zeichenkeller“ (stacks of characters): (mindestens) drei Trägermengen Char = {a, b, c, ..., z} Stack = Char * Bool = {true, false} vier Operationen zweckmäßig push : Char Stack Stack top : Stack Char pop : Stack Stack empty? : Stack Bool
Beispiel (Forts.) Definition der Operationen: Sei - leerer Keller sx - Füllung (Verkettung) des Kellers s mit Zeichen x push(x,s) = sx top(sx) = x pop(sx) = s true , falls s = empty?(s) = false , falls s top() = ? pop() = ? Einführung von error-Elementen
Beispiel (Forts.) Definition der Operationen: Sei - leerer Keller sx - Füllung (Verkettung) des Kellers s mit Zeichen x push(x,s) = sx top(sx) = x pop(sx) = s top() = char-err pop() = stack-err true , falls s = empty?(s) = bool-err, falls s = stack-err false , sonst
Char = Charp {char-err} Stack = Charp * {stack-err} Beispiel (Forts.) Trägermengen erweitern: Charp = {a, b, c, ..., z} Char = Charp {char-err} Stack = Charp * {stack-err} Bool = {true, false} {bool-err} Operationen - „strikt“ vervollständigen push : Char Stack Stack top : Stack Char pop : Stack Stack empty? : Stack Bool
Algebra mit vier Trägermengen und Operationen zwischen ihnen Beispiel (Forts.) Erweiterung um Boolesche Operationen oft nützlich: vel : Bool Bool Bool et : Bool Bool Bool non : Bool Bool (alle strikt vervollständigt) Ergänzung des Datentyps „Zeichenkeller“ um neue Sorte Int möglich, um z.B. die „Kellertiefe“ zu erfassen: depth : Stack Int Dann evtl. zweckmäßig, Rechnen über Int hinzuzunehmen: arithmetische ( +, - ) und Vergleichsoperationen < usw. Algebra mit vier Trägermengen und Operationen zwischen ihnen
- + Char Stack Bool < Int Beispiel (Forts.) Zeichenkeller non empty? top vel Char Stack Bool pop push depth et < - Int + Zeichenkeller Signatur