Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik I Thema 2: Strukturierte.

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Objektorientierte Programmierung
Algebraische Zahlen: Exaktes Rechnen mit Wurzeln
Programmierung II Prof. Dr. Michael Löwe
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Zusammenfassung der Vorwoche
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Programmieren in Logik
Kapitel 4 Datenstrukturen
On a Buzzword: Hierachical Structure David Parnas.
Scratch Der Einstieg in das Programmieren. Scatch: Entwicklungsumgebung Prof. Dr. Haftendorn, Leuphana Universität Lüneburg,
Universität Stuttgart Institut für Kernenergetik und Energiesysteme Was ist Refactoring? Bevor man die Integration angeht, mag es angebracht sein, den.
es gibt (fast) nichts, was nicht anders gemacht werden könnte
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
Java: Referenzen und Zeichenketten
Ein Beispiel in Java.
Polymorphie (Vielgestaltigkeit)
Polymorphie (Vielgestaltigkeit)
WS Algorithmentheorie 02 - Polynomprodukt und Fast Fourier Transformation Prof. Dr. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
© 2006 W. Oberschelp, G. Vossen Rechneraufbau & Rechnerstrukturen, Folie 2.1.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Diskrete Mathematik I Vorlesung Arrays-
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Zusammenfassung Vorwoche
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Methoden sind mit einem Namen versehene Programmabschnitte besitzen Rückgabetyp, Namen, Parameterliste.
Die Skriptsprache Perl (8) Wolfgang Friebel DESY Zeuthen.
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
DVG Klassen und Objekte
Weiteres Programm Studium des Breitendurchlaufs Hierzu
Heute: Scherenzange zeichnen
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Prof. Dr. Gerhard Schmidt pres. by H.-J. Steffens Software Engineering SS 2009Folie 1 Objektmodellierung Objekte und Klassen Ein Objekt ist ein Exemplar.
Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik I Thema 0: Einführung Prof.
Prof. Dr. Max Mühlhäuser Dr. Guido Rößling
© Gabriele Sowada © Gabriele Sowada 2 Manuell Beispiel 1 demonstriert die Vorgehensweise bei der manuellen Programm- Eingabe am.
Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik I Thema 14: Schrittweise.
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Grundlagen der Informatik 1 Thema 1: Grundelemente der Programmierung
1. Verhalten der Objekte: Operationen Werden in den Klassen definiert Werden (i.d.R.) auf einem Objekt aufgerufen Wird das Empfängerobjekt genannt Weitere.
Polynome und schnelle Fourier-Transformation
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 8: Akkumulation von.
Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik I Thema 16: Ausnahmebehandlung.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Vom Umgang mit Daten. public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i]
HORIZONT 1 XINFO ® Das IT - Informationssystem PL/1 Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
SAP Seminar 2007 Materialstammsätze anlegen
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
MODULA-2.
PHP: Operatoren und Kontrollstrukturen
Anführungszeichen?! echo 'Apfel$atf'; // ergibt: Apfel$aft
Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)
Tutorium Software-Engineering SS14 Florian Manghofer.
Implementieren von Klassen
 Präsentation transkript:

Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik I Thema 2: Strukturierte Datentypen Prof. Dr. Max Mühlhäuser Dr. Guido Rößling 1

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Strukturen Die Eingabe/Ausgabe einer Prozedur ist häufig nicht ein einzelner atomarer Wert (Zahl, Boolean, Symbol), sondern ein Datenobjekt mit vielen Eigenschaften –Bei einer CD etwa Titel und Preis –Wir brauchen Mechanismen, um Daten zusammenzufassen Einer dieser Mechanismen sind Strukturen –Eine Strukturdefinition hat folgende Form: –Beispiel 2 (define-struct s (field1 … fieldn)) (define-struct point (x y))

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Strukturdefinition Diese Definition erzeugt eine Reihe von Prozeduren: make -s –Eine Konstruktor Prozedur, die n Argumente bekommt und einen neuen Struktur-Wert zurückliefert –z.B. (define p (make-point 3 4)) erzeugt einen neuen Punkt s ? –Eine Prädikat-Prozedur, die true zurückliefert für einen Wert der durch make -s erzeugt wurde und false für jeden anderen Wert –z.B. (point? p) true s-field –Für jedes Feld einen Selektor, der eine Struktur als Argument bekommt und den Wert des Feldes extrahiert –z.B. (point-y p) 4 3 (define-struct s (field1 … fieldn)) (define-struct point (x y))

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Design von Prozeduren für zusammengesetzte Daten Wann brauchen wir Strukturen? –Immer dann, wenn die Beschreibung eines Objekts aus mehreren unterschiedlichen Informationen besteht Wie ändert sich unser Design-Rezept? –Datenanalyse: Problembeschreibung durchsuchen nach Beschreibungen relevanter Objekte, dann entsprechende Datentypen anlegen, Vertrag des Datentyps beschreiben –Definition eines Vertrags kann die neu definierten Typnamen benutzen, z.B. ;; bafoegberechtigt : Student bool –Template: Header + Body, in dem alle möglichen Selektoren aufgeführt werden –Implementation des Bodies: Entwurf eines Ausdrucks, der primitive Ausdrücke, andere Funktionen, Selektor-Ausdrücke und die anderen Parameter enthält 4

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Beispiel 5 ;; Data Analysis & Definitions: (define-struct student (last first teacher)) ;; A student is a structure: (make-student l f t) ;; where l, f, and t are symbols. ;; Contract: subst-teacher : student symbol -> student ;; Purpose: to create a student structure with a new ;; teacher name if the teacher's name matches 'Fritz ;; Examples: ;;(subst-teacher (make-student 'Fin 'Matthew 'Fritz) 'Elise) ;; = (make-student 'Fin 'Matthew 'Elise) ;; ;;(subst-teacher (make-student 'Smith 'John 'Bill) 'Elise) ;; = (make-student 'Smith 'John 'Bill)

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Beispiel (fortgesetzt) 6 ;; Template: ;; (define (subst-teacher a-student a-teacher) ;;... (student-last a-student)... ;;... (student-first a-student)... ;;... (student-teacher a-student)...) ;; Definition: (define (subst-teacher a-student a-teacher) (cond [(symbol=? (student-teacher a-student) 'Fritz) (make-student (student-last a-student) (student-first a-student) a-teacher)] [else a-student])) ;; Test 1: (subst-teacher (make-student 'Fit 'Matthew 'Fritz) 'Elise) ;; expected value: (make-student 'Fit 'Matthew 'Elise) ;; Test 2: (subst-teacher (make-student 'Smith 'John 'Bill) 'Elise) ;; expected value: (make-student 'Smith 'John 'Bill)

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Die Bedeutung von Strukturen im Substitutionsmodell (1/2) Wie funktioniert define-struct im Substitutionsmodell? Diese Struktur erzeugt folgende Operationen: –make-c : einen Konstruktor –c-f1 … c-fn : eine Serie von Selektoren –c? : ein Prädikat 7 (define-struct c (f1 … fn))

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Die Bedeutung von Strukturen im Substitutionsmodell (2/2) Es wird wie bei jeder Kombination vorgegangen: –Auswertung des Operators und der Operanden –Der Wert von (make-c v1 … vn) ist (make-c v1 … vn) Konstruktoren sind also selbstauswertend! –Die Auswertung von (c-fi v) ergibt vi falls v = (make-c v1 …vi … vn) einen Fehler in allen anderen Fällen –Die Auswertung von (c? v) ergibt true, falls v = (make-c v1 … vn) false, sonst Probieren Sie es mit dem DrScheme Stepper aus! 8

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Datenabstraktion Wir haben für Prozeduren –primitive Ausdrücke ( +, -, and, or, …) –Kombinationsmittel (Prozeduranwendung) –Abstraktionsmittel (prozedurale Abstraktion) Das gleiche gibt es für Daten: –primitive Daten (Zahlen, Boolean, Symbole) –zusammengesetzte Daten (z.B. Strukturen) –Datenabstraktion 9

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Warum brauchen wir Datenabstraktion? Beispiel: Implementieren einer Operation zum Addieren von rationalen Zahlen: –Rationale Zahlen bestehen aus Zähler und Nenner, z.B. 1/2 oder 7/9. –Die Addition zweier rationaler Zahlen hat zwei Ergebnisse: Den resultierenden Zähler und den resultierenden Nenner. –Eine Prozedur kann aber nur einen Wert zurückgeben. –Wir brauchen also zwei Prozeduren: Eine gibt den resultierenden Zähler, die andere den Nenner zurück. –Wir müssten uns merken, welcher Zähler zu welchem Nenner gehört. Datenabstraktion ist eine Methode, die mehrere Datenobjekte kombiniert, so dass sie wie eines gehandhabt werden können. Wie das aber geschieht versteckt die Datenabstraktion. 10

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Warum brauchen wir Datenabstraktion? Die neuen Datenobjekte sind abstrakte Daten: –Sie werden benutzt, ohne Annahmen über ihre Implementierung zu machen. Datenabstraktion hilft dabei, … –das konzeptuelle Level zu erhöhen, auf dem wir Programme entwerfen, –die Modularität der Designs zu erhöhen und –die Ausdrucksstärke der Programmiersprache zu verbessern. Eine konkrete Repräsentation der Daten ist unabhängig von Programmen definiert, die die Daten verwenden. Die Schnittstelle zwischen der Repräsentation und den Programmen, die die abstrakten Daten verwenden, sind ein paar Prozeduren, die Selektoren und Konstruktoren genannt werden. 11

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Spracherweiterungen für die Handhabung von abstrakten Daten Konstruktor: Prozedur, die Instanzen der abstrakten Daten aus Werten erzeugt, die ihr übergeben werden Selektor: Prozedur, die einen der Werte zurückgibt, aus denen das abstrakte Datenobjekt zusammengesetzt ist Die Komponentenwerte, die von einem Selektor zurückgegeben werden, können –der Wert einer internen Variablen sein oder –berechnet worden sein. Die von define-struct erzeugten Konstruktoren/Selektoren sind ein Spezialfall –Der R ü ckgabewert eines Selektors ist immer einer der Werte, die beim zugehörigen Konstruktoraufruf übergeben wurden (werden dabei nicht berechnet) 12

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Beispiel: Rationale Zahlen Mathematisch dargestellt durch ein Paar von Ganzzahlen: 1/2, 7/9, 56/874, 78/23, etc. Konstruktor: (make-rat numerator denominator) Selektor: (numer rn) (denom rn) Das ist alles, was der Benutzer wissen muss! 13

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Benutzerdefinierte Operationen für rationale Zahlen Multiplikation von x = n x /d x und y = n y /d y (n x /d x ) * (n y /d y ) = (n x *n y ) / (d x *d y ) 14 ;; mul-rat: rat rat -> rat (define (mul-rat x y) (make-rat (* (numer x) (numer y)) (* (denom x) (denom y))))

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Eine weitere Operation Addition von x = n x /d x und y = n y /d y n x /d x + n y /d y = (n x *d y + n y *d x ) / (d x *d y ) 15 ;; add-rat: rat rat -> rat (define (add-rat x y) (make-rat (+ (* (numer x) (denom y)) (* (numer y) (denom x))) (* (denom x) (denom y)))) Subtraktion und Division werden ähnlich wie Addition und Multiplikation implementiert.

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Eine Abfrage Gleichheit: n x /d x = n y /d y gdw. n x *d y = n y *d x 16 gdw steht für: genau dann, wenn ;; equal-rat: rat rat -> bool (define (equal-rat? x y) (= (* (numer x) (denom y)) (* (numer y) (denom x))))

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Eine Ausgabeoperation ;; print-rat: rat -> String (define (print-rat x) (string-append (number->string (numer x)) "/" (number->string (denom x)))) 17 Um rationale Zahlen auszugeben, definieren wir eine Ausgabeprozedur, die auf der Datenabstraktion aufbaut. Dies ist ihr erstes Beispiel mit Stringmanipulation! string-append setzt mehrere Strings zusammen. number->string wandelt eine Zahl in einen String um. Das wäre mit Symbolen nicht möglich.

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Unterhalb der Datenabstraktion Wir haben die Operationen add-rat, mul-rat und equal-rat implementiert, indem wir make-rat, denom, numer verwendet haben. –Ohne dass make-rat, denom, numer implementiert wurde ! –Auch ohne zu wissen, wie diese implementiert werden Wir müssen jetzt noch make-rat, numer, denom definieren. –Dafür müssen wir Zähler und Nenner zusammenkleben. –Hierzu legen wir eine Scheme-Struktur für das Speichern von Paaren an: 18 (define-struct xy (x y))

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Darstellung von rationalen Zahlen (define (make-rat n d) (make-xy n d)) (define (numer r) (xy-x r)) (define (denom r) (xy-y r)) 19 Wir können den Konstruktor und die Selektoren mit Hilfe der xy Struktur definieren.

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Benutzen der Operationen für rationale Zahlen (define one-third (make-rat 1 3)) (define four-fifths (make-rat 4 5)) (print-rat one-third) 1/3 (print-rat (mul-rat one-third four-fifths)) 4/15 (print-rat (add-rat four-fifths four-fifths)) 40/25 20

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Abstraktionsebenen Programme werden als Ebenen von Spracherweiterungen aufgebaut. Jede Ebene ist eine Abstraktionsebene. Jede Abstraktion versteckt einige Implementierungsdetails. In unserem Beispiel gibt es vier Abstraktionsebenen. 21 add-rat mul-rat equal-rat … make-rat numer denom Rationale Zahlen als Zähler und Nenner Rationale Zahlen als Struktur Rationale Zahlen im Problembereich make-xy xy-x xy-y Irgendeine Implementierung von Strukturen Programs that use rational numbers

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Unterste Ebene Ebene der Paare Die Prozeduren make-xy, xy-x und xy-y werden bereits vom Interpreter aufgrund der Strukturdefinition erzeugt. Die tatsächliche Implementierung von Paaren bzw. Strukturen wird versteckt. 22 Rationale Zahlen als Struktur make-xy xy-x xy-y Irgendeine Implementierung von Strukturen

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Zweite Ebene Ebene der rationalen Zahlen als Datenobjekte Die Prozeduren make-rat, numer und denom werden auf dieser Ebene definiert. Die tatsächliche Implementierung der rationalen Zahlen wird versteckt. 23 make-rat numer denom Rationale Zahlen als Zähler und Nenner Rationale Zahlen als Struktur

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Dritte Ebene Ebene der Dienst-Prozeduren für rationale Zahlen Die Prozeduren add-rat, mul-rat, equal-rat, etc. sind auf dieser Ebene definiert. Die Implementierung dieser Prozeduren wird versteckt. 24 add-rat mul-rat equal-rat … Rationale Zahlen als Zähler und Nenner Rationale Zahlen im Problembereich

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Oberste Ebene Programmebene Rationale Zahlen werden in Berechnungen verwendet (analog zu normalen Zahlen). 25 Rationale Zahlen im Problembereich Anwendungen von rationalen Zahlen

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Abstraktionsbarrieren Jede Ebene ist so entworfen, dass sie Implementierungsdetails vor höheren Ebenen versteckt. Diese Ebenen sind Abstraktionsbarrieren. 26

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Vorteile von Datenabstraktion Die Abstraktionsebenen eines Programms können nacheinander entworfen werden. Dadurch unterstützt Datenabstraktion top-down Design. –Wir können graduell entscheiden, wie Daten dargestellt werden und wie Konstruktoren, Selektoren und Dienst-Prozeduren implementiert sein müssen. Wir müssen uns keine Gedanken über Implementierungsdetails von tieferen Ebenen machen. Eine Implementierung kann später einfach verändert werden, ohne dass Prozeduren, die auf einer höheren Ebene geschrieben wurden, verändert werden müssen. 27

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Ändern der Darstellung von Daten Vor ein paar Folien haben wir gesehen: Unsere rationalen Zahlen sind nicht immer reduziert. Wir entscheiden uns dafür, die rationalen Zahlen immer reduziert darzustellen. –40/25 und 8/5 sind dieselben Zahlen. –Wegen der Datenabstraktion ist es für die Dienst-Prozeduren egal, ob die rationalen Zahlen reduziert sind oder nicht. –Die Prozeduren wie add-rat oder equal-rat funktionieren in beiden Fällen korrekt. 28 (print-rat (add-rat four-fifths four-fifths)) 40/25

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Ändern der Darstellung von Daten (define (make-rat n d) (make-xy (/ n (gcd n d)) (/ d (gcd n d)))) 29 Wir können den Konstruktor ändern… …oder die Selektoren (define (numer r) (/ (xy-x r) (gcd (xy-x r) (xy-y r)))) (define (denom r) (/ (xy-y r) (gcd (xy-x r) (xy-y r)))) gcd ist eine eingebaute Prozedur zum Berechnen des größten gemeinsamen Teilers zweier natürlicher Zahlen

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Mit unterschiedlichen Daten umgehen Bis jetzt haben unsere Prozeduren immer nur einen Typ von Daten verarbeitet –Zahlen –Booleans –Symbole –Exemplare einer bestimmten Struktur Häufig möchten wir jedoch, dass Prozeduren mit unterschiedlichen Arten von Daten funktionieren Außerdem werden wir lernen, wie man Prozeduren vor falscher Benutzung schützt 30

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Beispiel Wir haben (define-struct point (x y)) für Punkte Viele Punkte liegen auf der x-Achse Für diesen Fall möchten wir Punkte nur durch eine Zahl darstellen –A = (make-point 6 6), B= (make-point 1 2) C = 1, D = 2, E = 3 31

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Mit unterschiedlichen Daten umgehen Um unsere Repräsentation von Punkten zu dokumentieren, machen wir folgende informelle Datentypdefinition Der Vertrag, die Beschreibung und der Header einer Prozedur distance-to-0 ist nun einfach: Wie können wir zwischen den Datentypen unterscheiden? –Mit Hilfe der Prädikate: number?, point? etc. 32 ;; a pixel-2 is either ;; 1. a number ;; 2. a point-structure ;; distance-to-0 : pixel-2 -> number ;; to compute the distance of a-pixel to the origin (define (distance-to-0 a-pixel)...)

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Mit unterschiedlichen Daten umgehen Basisstruktur: Prozedurbody mit cond -Ausdruck, der nach Typ unterscheidet Im zweiten Fall wissen wir, dass der Input aus zwei Koordinaten besteht… 33 (define (distance-to-0 a-pixel) (cond [(number? a-pixel)...] [(point? a-pixel)...])) (define (distance-to-0 a-pixel) (cond [(number? a-pixel)...] [(point? a-pixel) …(point-x a-pixel)…(point-y a-pixel)…]))

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Mit unterschiedlichen Daten umgehen Die Fertigstellung der Funktion ist nun einfach… 34 (define (distance-to-0 a-pixel) (cond [(number? a-pixel) a-pixel] [(point? a-pixel) (sqrt (+ (sqr (point-x a-pixel)) (sqr (point-y a-pixel))))])) Eingebaute Prozeduren: (sqr x) : x zum Quadrat (sqrt x) : Quadratwurzel von x

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Mit unterschiedlichen Daten umgehen Weiteres Beispiel: Grafische Objekte –Varianten: squares, circles,… –Prozeduren: Umfang berechnen, zeichnen, … 35 ;; A graphical object is either ;; a circle structure: ;; (make-circle p s) ;; where p is a point describing the center ;; and s is a number describing the radius; or ;; a square structure: ;; (make-square nw s) ;; where nw is the north-west corner point ;; and s is a number describing the side length. (define-struct circle (center radius)) (define-struct square (nw length)) ;; Examples:(make-circle (make-point 5 9) 87) ;; (make-square (make-point 20 5) 5)

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Mit unterschiedlichen Daten umgehen Umfang (perimeter) berechnen: –Anwendung unseres Design-Rezepts… –Anwendung unseres Design-Rezepts… (fortgesetzt) 36 ;; perimeter : graphical-object-> number ;; to compute the perimeter of a-shape (define (perimeter a-shape) (cond [(square? a-shape)... ] [(circle? a-shape)... ])) ;; perimeter : graphical-object-> number ;; to compute the perimeter of a-shape (define (perimeter a-shape) (cond [(square? a-shape)..(square-nw a-shape)..(square-length a-shape)..] [(circle? a-shape)..(circle-center a-shape)..(circle-radius a-shape)..]))

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Mit unterschiedlichen Daten umgehen Umfang (perimeter) berechnen: –Endresultat 37 ;; perimeter : shape -> number ;; to compute the perimeter of a-shape (define (perimeter a-shape) (cond [(square? a-shape) (* (square-length a-shape) 4)] [(circle? a-shape) (* (* 2 (circle-radius a-shape)) pi)]))

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 Programmdesign und heterogene Daten Datenanalyse wird sehr viel wichtiger –Welche Klassen von Objekten gibt es und was sind ihre Attribute? –Welche sinnvollen Gruppierungen von Klassen gibt es? Sogenannte Subklassenbildung –Im Allgemeinen entsteht eine Hierarchie von Datendefinitionen Templates –1. Schritt: cond -Ausdruck der die unterschiedlichen Typen innerhalb einer Gruppe unterscheidet –2. Schritt: zu jedem Zweig entsprechende Selektoren einfügen –Alternativ: in jedem Zweig datentyp-spezifische Prozedur aufrufen (z.B.: Prozeduren perimeter-circle, perimeter-square ) Programmkörper –In jedem Zweig der Fallunterscheidung separat die verfügbaren Informationen je nach Anwendung kombinieren –Alternativ: Datentyp-spezifische Prozeduren nacheinander implementieren, nach bewährtem Designrezept vorgehen Übersicht über neuen Designprozess siehe HTDP Fig

Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T2 39 Get your data structures correct first, and the rest of the program will write itself. David Jones