kapitel 5strukturen information aus der realen welt werden in einem informationsverarbeitenden...

25
Kapitel 5 Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte) Abstraktion der Wirklichkeit dar und spiegeln in vielen Fällen die Strukturen der Wirklichkeit wider. In diesem Kapitel wird ein Überblick über die wichtigsten abstrakten Datenstrukturen gegeben, wobei dieser Begriff zum Begriff des „Datentyps“ erweitert wird. Anmerkung: Dieses Kapitel abstrahiert die Objekte mit denen Sie in „Einführung in die Programmierung“ umgehen. Dort werden diese abstrakten Objekte konkret für Java vorgestellt. Inhalt 1. Datenstrukturen - Datentypen 2. Datentypen: Ein Überblick 3. Konkrete Datentypen 4. Abstrakte Datentypen

Upload: adalmar-arb

Post on 06-Apr-2016

214 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)

Kapitel 5 Strukturen

Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte) Abstraktion der Wirklichkeit dar und spiegeln in vielen Fällen die Strukturen der Wirklichkeit wider.In diesem Kapitel wird ein Überblick über die wichtigsten abstrakten Datenstrukturen gegeben, wobei dieser Begriff zum Begriff des „Datentyps“ erweitert wird.Anmerkung: Dieses Kapitel abstrahiert die Objekte mit denen Sie in „Einführung in die Programmierung“ umgehen. Dort werden diese abstrakten Objekte konkret für Java vorgestellt.

Inhalt1. Datenstrukturen - Datentypen2. Datentypen: Ein Überblick3. Konkrete Datentypen4. Abstrakte Datentypen

Page 2: Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)

5.1 Datenstrukturen - Datentypen

In der Literatur wird meist der Begriff „Datenstruktur“ verwendet. In diesem Unterkapitel soll der Unterschied zwischen diesem Begriff und dem Begriff des „Datentyps“ erläutert werden.

Inhalt1. Datenstrukturen2. Datentypen3. Variablen eines Datentyps

Page 3: Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)

5.1.1 Datenstrukturen

In der Informatik werden Objekte der realen oder abstrakten Welt erfasst Bei der Erfassung beschränkt man sich möglichst auf die für den weiteren

Transport / Speicherung/Verarbeitung/Umsetzung notwendige Information Zur internen Repräsentation werden diese Objekte abstrahiert

Zur Abstraktion gehört die Erkennung von Strukturen - zunächst im Sinne einer Aggregation.

Also Aus welchen Teilobjekten bestehen Objekte ? In welchem Verhältnis stehen die Teilobjekte zueinander ? Welches sind die „atomaren“ Teilobjekte ?

es existieren noch weitere strukturelle Beziehungen (z.B. Vererbung) Anschließend werden diese Objekte typisiert.

Typisierung ist die Einteilung von abstrakten internen Objekten in Gruppen mit gleichen oder ähnlichen Eigenschaften.

Page 4: Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)

5.1.2 Datentypen

Typen sind also nicht die intern repräsentierten Objekte, sondern beschreiben die Eigenschaft einer Gruppe von Objekten.

Zu diesen Eigenschaften gehören: Struktur Wertebereich anwendbare Operatoren, Funktionen, Relationen Beziehungen zu anderen Typen interne Repräsentationsweise …

Einige Anmerkungen:: Der Begriff „Datentyp“ ist weitergehend als der Begriff „Datenstruktur“ In der Objektorientierten Programmierung wird statt „Datentyp“ auch der Begriff

„Klasse“ verwendet (Klassen beschreiben mehr Eigenschaften) Konkrete Repräsentanten eines Datentyps werden (u.a) „Variable“ oder

- bei OO-Sprachen - „Instanz“ genannt

Beispiel:

Imaginäre Zahlen

Page 5: Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)

5.1.3 Variable eines Datentyps

Einen speziellen (rechnerinternen) Repräsentanten eines Datentyps bezeichnet man als Variable. Die Festlegung, von welchem Datentyp eine Variable ist, bezeichnet man als Variablendeklaration.

Die Zuordnung eines Typs „Typ“ an eine Variable X wird (zunächst) wiefolgt notiert: var x : Typ;

Eine Variable hat alle Eigenschaften eines Datentyps.Zusätzlich dazu hat eine Variable:

einen konkreten Wert. Der Wert muss aus dem Wertebereich des Datentyps sein (oder undefiniert) Die Zuweisung eines Wertes „Wert“ an eine Variable X sei (zunächst) wie folgt

notiert: x = Wert; einen konkreten Speicherplatz

Dieser Speicherplatz ist so dimensioniert, dass die Struktur der Variable abgebildet werden kann

Dieser Speicherplatz wird (meist) implizit durch die Deklaration zugeordnet Beispiel: var x : Datentyp; // x ist vom Typ: „Datentyp“

x = 531; // Zuweisung von 531 an X

Page 6: Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)

5.2 Datentypen: Überblick

Nachdem sich nun der Begriff des „Datentyps“ als Oberbegriff der „Datenstruktur“ erwiesen hat, konzentrieren wir uns im Rest des Kapitels auf wichtige Datentypen.In diesem Unterkapitel wird ein Klassifikationssystem für die in der Informatik verwendeten Datentypen aufgestellt und kurz erläutert

Inhalt1. Klassifikation der Datentypen2. Erläuterung der Klassifikation

Page 7: Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)

5.2.1 Klassifikation der Datentypen

Datentypen

IdealisierteAbstrakteKonkrete

Einfache StrukturiertePointer(Zeiger)

Boolean(Wahrheitswert)

Integer(Ganzzahl)

Char (Zeichen)

Enumeration (Aufzählung)

Ordinale Real(Fließkomma)

Array (Feld)

Record (Verbund)

Union(Variantenverb.)

...

...

Page 8: Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)

5.2.2 Erläuterung der Klassifikation

Idealisierte Datentypen aus der Mathematik bekannte Datentypen: R, N, Z, ... Variablen dieser Typen sind oft nicht endlich darstellbar (Bsp: 2) In einem Computer-Algebra-System symbolisch darstellbar (Bsp: 2^( 1/2))

Konkrete Datentypen in einem Rechner von Hard- oder Software bereitgestellte Datentypen entweder vordefiniert oder durch den Benutzer definierbar

Abstrakte Datentypen verbergen ihren inneren Aufbau vor dem Benutzer bestehen aus beliebigen Strukturen über konkrete/idealisierte Datentypen, sowie aus

Zugriffsfunktionen bzw. Prozeduren Beispiel: Baum

2 12 15

79

6 61

13

insert (Element)

delete (Element)

search (Element)

Page 9: Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)

5.3 Konkrete Datentypen

Die am häufigsten abstrahierten Objekte der realen Welt sind, zumindest was die für eine weitere Verarbeitung notwendigen Informationen betrifft, einfach strukturiert und lassen sich demnach mit konkreten Datentypen abbilden.Dieses Unterkapitel gibt einen Überblick über alle konkreten Datentypen und beschreibt diese.

Inhalt1. Einfache Datentypen2. Strukturierte Datentypen3. Verweise

Page 10: Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)

5.3.1 Einfache: Boolean (Wahrheitswert)

zur Darstellung von Wahrheitswerten Wertebereich: true, false

intern in manchen Programmiersprachen als 1 bzw. 0 dargestellt Operatoren: und, oder, nicht, Vergleiche, ...

Operatoren entsprechend der bool‘schen Algebra oft auch allgemeine arithmetische Operationen möglich Vorsicht vor Integer-Arithmetik mit Boolean-Variablen

Notation: var booleanVar : boolean; Beispiel: var switch : boolean;

switch = false; // = 0 „Bool-Literal“switch = not(switch); // = not(0) = 1switch = switch and not(switch); // = 1 and 0 = 0switch = switch or not (switch); // = 0 or 1 = 1

Wir müssen uns gleich angewöhnen die „Dinge“ so zu bezeichnen, wie sie in der Informatik bezeichnet werden:Schlüsselwort var (Variablen)Bezeichner switch Schlüsselzeichen(-wort) : (Typ)Bezeichner boolean Schlüsselzeichen(-wort);Bezeichner switch Operator = (Boolean)Literal false Schlüsselzeichen(-wort);

Page 11: Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)

5.3.1 Einfache: Integer (Ganzzahl)

zur Darstellung ganzer Zahlen mit oder ohne Vorzeichen Wertebereich: Unterschiedlich

unsigned integer: Ganze Zahlen ohne Vorzeichen ( 0... 65535 ) oft 16 bit bzw. 32 bit als ‚short int‘ bzw. ‚long int‘ bezeichnet Vorsicht: 16 bit Integer ist verdammt wenig ((± 32267)

Speicherplatz ist nicht mehr teuer benutzen Sie ‚long int‘(Ausnahmen bestätigen die Regel)

Operatoren: Grundrechenarten, Vergleiche Operatoren entsprechend der „klassischen“ Algebra

Notation: var integerVar : integer; Beispiel: var i : integer;

i = 1; // = 1 „Integer-Literal“ i = i + 32;´ // = 1 + 32 = 33

i = i / 17; // = 33 / 17 = 1 !i = i + 65535; // bei unsigned Int.: Fehler !

Page 12: Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)

5.3.1 Einfache: Char (Zeichen)

zur Darstellung von Zeichen Vorsicht: Typischerweise wird die ASCII-Codierung zugrundegelegt,

kann aber auch Unicode sein Wertebereich: Alle Zeichen

Intern codiert als ASCII oder - neuerdings immer öfter - als UnicodeASCII: 8 Bit (7 benutzt), Unicode: 16 Bit

Intern oft als Integer repräsentiert Operationen: Vergleich

oft auch allgemeine arithmetische Operationen möglich Vorsicht vor Integer-Arithmetik mit char-Variablen

Notation: var charVar : char; Beispiel: var symbol : char;

symbol = „A“; // = „A“ „Char-Literal“symbol = symbol + 32;´ // = „A“ + 32 = „a“symbol = symbol - 128; // = „a“ - 128 = Fehler

Page 13: Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)

5.3.1 Einfache: Enum (Aufzählung)

zur Darstellung endlicher benutzerdefinierter Wertebereich Es ist guter Stil, Mengen mit (garantiert) kleiner Mächtigkeit (<10) als Enum-Type zu

deklarieren, anstatt sie z.B. als Integer zu kodieren. Intern werden Enum-Werte oft als Integer abgelegt

Operatoren: Vergleich oft auch allgemeine arithmetische Operationen möglich Vorsicht vor Integer-Arithmetik mit Enum-Variablen

Notation: var enumVar : enum { Wertemenge }; Beispiel: var ampelfarbe : enum {gruen,gelb,rot} ;

ampelfarbe = gruen; // = gruen „Enum-Literal“ // Vorsicht: C++ erlaubt das

ampelfarbe = ampelfarbe +1 ; ´ // = gruen + 1 = gelbampelfarbe = ampelfarbe +1 ; ´ // = gelb + 1 = rotampelfarbe = ampelfarbe +1 ; ´ // = rot + 1 = Fehler !

Page 14: Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)

5.3.1 Einfache: Real (Fließkomma)

zur näherungsweisen Darstellung reeller Zahlen Wertebereich: Unterschiedliche Genauigkeiten und Wertebereiche

Wertebereich entspricht typischerweise der IEEE 754 Norm, also: Float: 32 bit Double: 64 bit

Operationen: Grundrechenarten, erweiterte Arithmetik, Vergleich Notation: var realVar : real; Beispiel: //--- Variable declaration --------------------------

var pi, flaeche, radius : real; // all real !

//--- Initialisation --------------------------------pi = 3,141; // needs not to be more accurateradius = 5; // might be changed by user

//--- Computation of surface ------------------------flaeche = 2 * pi * (radius ^ 2); // common formula

Page 15: Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)

5.3.2 Strukturierte: Array (Feld)

Arrays sind eine Aggregationen von Daten des gleichen Typs(des „Basistyps“) Aggregation := Zusammenfassung, Anhäufung, Angliederung

Die Grenzen des Arrays sind (meist) statisch bestimmt Operation: Auswahl

Die Auswahl eines Datenelementes erfolgt über einen ganzzahligen Index über den (Auswahl-)Operator „ [ ] “

Vorsicht: Zugriff außerhalb des deklarierten Bereiches führt zu Fehlern Notation: var arrayVar : array[min .. max] of Datentyp

Beispiele Eindimensionales array: var Vektor : array[1..4] of real; Zweidimensionales array: var Matrix : array[1..3] of

array[1..2] of real; Operator var m : array[1..3] of

array[1..2] of real;var v : array[1..4] of real;v[3] = 5,03; v[4] = 4,12;m[1][2] = v[3] * 12 - v[4];

Page 16: Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)

5.3.2 Strukturierte: Record (Verbund)

Verbunde sind Aggregationen von Daten möglicherweise unter-schiedlichen Typs

manchmal auch „structure“ oder „struct“ genannt Operation: Auswahl

Die Auswahl erfolgt durch Angabe des Komponentennamens(durch einen Punkt vom Variablennamen getrennt)

Notation: var recordVar : record { komponent1 : type1; ... };

Beispiel: var d : record{ tag : Integer; monat : Integer; };

d.monat = 10; d.tag = 20;

Page 17: Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)

5.3.2 Strukturierte: Variant Record (Variantenverb.)

Verbunde, deren Struktur mögliche Alternativen zulassen manchmal auch „union“ genannt lassen „Varianten“ eines Record-Types zu

Operation: Auswahl (wie bei records über Punkt-Operator) Notation: var recVar : record {

komponent1 : type_1; ...;

TAGGED TYPE case variant (variant1,...) of { variant1 : type_n; ... } }

Unterelement „variant“ implizit definiert bei „tagged type“ Nur ein Unterelement aus variant1, ... (sinnvoll) verwendbar

Beispiel: var adam,eva : record { name : array [1..20] of char; adam.sex = m;

case sex (m,f) of { adam.muscle = 20,5;

f: {IQ: integer}; eva.sex = f; m: {muscle: real}; // in cm eva.IQ = 132;}

Page 18: Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)

5.3.2 Strukturierte: Variant Record

var adam,eva : record { name : array [1..20] of char; adam.sex = m;

case sex (m,f) of { adam.muscle = 20,5;

f: {IQ: integer;} eva.sex = f; m: {muscle: real;}} eva.IQ = 132;}

Umsetzung:

Variant Records mit „Untagged Types“ (z.B. C, C++ : Union) (2. Variante)struct {

char[20] name; enum {m,f} sex; // ... adam.sex = m; union { adam.muscle = 20,5; int IQ; eva.sex = f; real muscle;} // in cm eva.IQ = 132;} adam, eva;

name sex IQ /muscle

Page 19: Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)

5.3.2 Vereinfachung der Notation („type“)

var Person : record { surname : array [1..20] of char; forename : array [1..20] of char; birthday : record { year : integer; month : enum {jan,...}; day : integer; }; };var Akt_Datum : record { year : integer; month : enum {jan,feb,...}; day : integer; };

In (fast) allen Programmiersprachen ist es möglich, beliebig strukturierte Datentypen neu zu bezeichnen und diese Typ-Bezeichner wie vordefinierte Typen zu verwenden:

Notation: type NeuTyp : Typ; Beispiel: type Datum : record { year : integer;

month : enum {jan,feb,...}; day : integer; };

var Person: record {surname : array [1..20] of char; forename : array [1..20] of char; birthday : Datum }; var Akt_Datum: Datum;

Page 20: Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)

5.3.3 Pointer (Zeiger, Verweis)

Zeiger-Datentypen sind durch folgende Eigenschaften gekennzeichnet: Die Struktur ist identisch der eines Integer-Datentyp (also oft 16,32,... Bit) Der Wertebereich ist der des Adressbereiches eines Rechnersystems,

der zusätzliche Wert „nil“ bezeichnet einen ungültigen Zeiger. Operatoren sind:

Erzeugen eines Zeigers (Referenzierung &) Zugriff auf verwiesenen Bereich (Dereferenzierung *) Integer-Operatoren (Vorsicht !!!!)

Notation: var pointerVar : *Type; Beispiel: var x : *Integer; // Deklaration

var y,z : Integer; // Deklarationen y = 5; // Initialisierung der Variablen y

x = &y; // Referenzieren: x ist Zeiger auf yx* = 2; // Derefenzierung: das worauf x zeigt wird zu 2z = y; // Variable z bekommt den Wert von Variable y zugewiesen.// z hat jetzt den Wert 2

Page 21: Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)

Bsp.: x : *Integer; // Deklarationy : Integer; // Deklaration

y = 5; // Initialisierung der Variablen y

x = &y; // Referenzieren: x ist Zeiger auf y

x* = 2; // Dereferenzierung: das worauf x zeigt

x = 2; // Zuweisung ohne Dereferenzierung !

5.3.3 Pointer: Beispiel

nil 01 2 3 4 5 6 7 8 9 23 24 25 26 27 28

...

nil 51 2 3 4 5 6 7 8 9 23 24 25 26 27 28

...

25 51 2 3 4 5 6 7 8 9 23 24 25 26 27 28

...

2 21 2 3 4 5 6 7 8 9 23 24 25 26 27 28

...

25 21 2 3 4 5 6 7 8 9 23 24 25 26 27 28

...

Vorsicht:: Werte oft undefiniert

Wortadressen

Page 22: Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)

5.3.3 Pointer: Dynamische Datentypen

Mit konkreten, d.h. einfachen und strukturierten Datentypen lassen sich nur statische Struktur aufbauen

d.h. Strukturen, deren Speicherbedarf beliebig aber fest sind Bem.: Die Beliebigkeit ist begrenzt durch die Gesamtspeicherkapazität

Mit Zeiger-Datentypen lassen sich Strukturen aufbauen, die sich dynamisch auf- und abbauen lassen

d.h. Strukturen, deren Speicherbedarf sich dynamisch verändern kann d.h. der Speicherplatz muss auch dynamisch organisiert werden. Bem.: Auch hier ist die Beliebigkeit begrenzt durch die Gesamtspeicher-kapazität

Beispiel: type knoten : record{ symbol : char; links : *knoten; rechts : *knoten;}

var wurzel : knoten

B

C E D A

Huffman(Bsp. aus Kap.2)

Page 23: Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)

5.3.4 Beispiel: Kombinierte Datentypen

Um nun beliebig komplexe Strukturen der „realen“ Welt in einem Rechensystem abbilden zu können, kann man die vorgestellten Datentypen beliebig miteinander Kombinieren

Beispiel.:

type Person : record { type Date : record { surname : array [1..20] of char; year : integer; forename : array [1..20] of char; month : enum {jan,feb,...}; birthday : Date; day : integer; next : *Person; } previous : *Person;}

Page 24: Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)

Datenstrukturen

5.4 Abstrakte Datentypen

Grundsätzlich lassen sich alle Objekte der realen Welt ausschließlich mit Hilfe einfacher Datentypen abbilden. Diese Abbildung ist aber meist „unnatürlich“, weil sie die Struktur realer Objekte nicht ausreichend berücksichtigt. Abhilfe schaffen hier strukturierte Datentypen, die allerdings grundsätzlich nur endliche Objektmengen repräsentieren können. Hier schaffen Zeigertypen Abhilfe.

Kann man nun mit diesen Mitteln Strukturen realer Objekt natürlich abbilden, so fehlen diesen abstrakten Datentypen einige der Eigenschaften, die konkreten Datentypen von Datenstrukturen unterscheiden, dies sind insb.

Operationen und Beziehungen zu anderen Typen.

Einen vertieften Einblick in die bunte Welt abstrakter Datentypen bietet die Vorlesung des 2. Semesters

Page 25: Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)

5.5 Zusammenfassung des Kapitels

Wir sind damit auch an die Grenzen dessen gelangt, was in dieser Vorlesung über die „Statik“ von Objekten gesagt werden soll und wenden uns einem noch spannenderem Themenbereich zu ;-)

Datentypen

IdealisierteAbstrakteKonkrete

Einfache StrukturiertePointer(Zeiger)

Boolean(Wahrheitswert)

Integer(Ganzzahl)

Char (Zeichen)

Enumeration (Aufzählung)

Ordinale Real(Fließkomma)

Array (Feld)

Record (Verbund)

Union(Variantenverb.)

...

...