Abstrakte Datentypen. Daten und Operationen Mögliche Implementierungen Veränderbare Typen, Ergebnistypen

Ähnliche Dokumente
Objektorientierte Programmierung

Objektorientierte Programmierung

1 Klassen und Objekte

3. Klassen Statische Komponenten einer Klasse. Klassenvariablen

Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen. J. W. v. Goethe.

Einstieg in die Informatik mit Java

3.2 Objekte und Klassen. Wir werden uns in diesem Kapitel näher mit Objekten und Klassen in Java beschäftigen.

Objektorientierte Programmierung

Propädeutikum Programmierung in der Bioinformatik

Objektorientierte Programmierung

7. Objektorientierung. Informatik II für Verkehrsingenieure

Wir wollen in einer Bank die Konten der Kunden modellieren (um sie dann entspr. zu verarbeiten

Objektorientierung. Klassen und Objekte. Dr. Beatrice Amrhein

Überblick. Peer Kröger (LMU München) Einführung in die Programmierung WS 14/ / 492

Repetitorium Informatik (Java)

Klassenmethoden. Klassenvariablen. Für das Auslesen des Studentenzählers definieren wir eine öffentliche Klassenmethode:

12 Abstrakte Klassen, finale Klassen und Interfaces

Tag 8 Repetitorium Informatik (Java)

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie

Objektorientierte Programmierung Studiengang Medieninformatik

Kapitel 2: OO Grundlagen

C++ Teil 9. Sven Groß. 17. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil Juni / 17

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3

1. Teilklausur Gruppe A. Bitte in Druckschrift leserlich ausfüllen!

Implementieren von Klassen

Tag 7 Repetitorium Informatik (Java)

Einstieg in die Informatik mit Java

Gliederung der Folien

Probeklausur: Programmierung WS04/05

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Informatik II (D-ITET) Informatik II (D-ITET) Übungsstunde 1. Distributed Systems Group, ETH Zürich

14. Java Klassen. Klassen (Java) vs. Records (Pascal) Klassen - Konzeptuell. Klassen - Technisch

Einstieg in die Informatik mit Java

Algebraische Spezifikation. André Kießling

Algorithmen und Datenstrukturen 06

Programmieren für Wirtschaftswissenschaftler SS 2015

14 Zuweisungen und Zustand

Tutorium 2. Strings. Skript zur Vorlesung Einführung in die Programmierung

Letztes Mal. static int ggt(int a, int b) { if (a == b) return a; else if (a > b) return ggt(a-b,b); else if (a < b) return ggt(a,b-a);

Praktische Informatik 1

Software Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter

IT I: Heute. Klasse Object. equals, hashcode, tostring. HashSet IT I - VO 6 1

Methoden und Wrapperklassen

14. Java Klassen. Klassen, Typen, Objekte, Deklaration, Instanzierung, Konstruktoren, statische Felder und Methoden, Datenkapselung

Programmieren in Java

Beispiel: die Klasse Brüche

Software Entwicklung 1

Sichtbarkeiten, Klassenmember und -methoden

7. Klassenmethoden Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

Programmieren in Java

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen

14 Abstrakte Klassen, finale Klassen, Interfaces

Abschnitt 11: Beispiel: Die Klasse String (Teil 1)

Klassen mit Instanzmethoden

Algorithmen und Datenstrukturen 07

C++ Teil 10. Sven Groß. 17. Dez IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Dez / 14

Ein einfaches Adventure-Game für die Stufe EF, entwickelt von U. Helmich, inspiriert durch viele bekannte Spiele.

14 Abstrakte Klassen, finale Klassen, Interfaces

Teil 2: Weitere Aspekte der Objektorientierung

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Objekte und Klassen. INE2 M. Thaler, Office TG ZHAW, M. Thaler, K. Rege, G. Burkert, E.

Einstieg in die Informatik mit Java

Mehrsortige Strukturen

Einstieg in die Informatik mit Java

Programmieren in Java

Software Entwicklung 1

Kapitel 10. Verweise und Referenzen. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Übung Programmierung WS 2007/08 - Blatt 6

Parameterübergabemechanismen für den Methodenaufruf

Inhaltsüberblick. I. Grundbegriffe - Objekte und Klassen. Organisatorisches. I. Grundbegriffe - Objektorientierte Konzepte

13 Abstrakte Datentypen

Javakurs für Anfänger

OOSE 01 JAVA MIT BLUEJ UND UML-BY-EXAMPLE

Grundelemente objektorientierter Sprachen (1)

Grundelemente objektorientierter Sprachen (1)

Aufgabe 1 (Programmanalyse, Punkte)

Abschnitt 10: Datenstrukturen

UNIVERSITÄT SIEGEN Fachbereich 12, Elektrotechnik und Informatik Fachgruppe Betriebssysteme / verteilte Systeme

Einführung in die Programmiersprache Java II

Übersicht. Vorstellung des OO-Paradigmas

Die abstrakte Klasse Expression:

Java Kurs für Anfänger Einheit 5 Methoden

4. Vererbung Die Klasse Object. Die Klasse Object

Einstieg in die Informatik mit Java

Objektorientierte Programmierung

Grundelemente objektorientierter Sprachen (1)

Softwareentwicklung II (IB) Datenkapselung. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

Einführung in die Programmierung

Abschnitt 7: Beispiel: Die Klasse String (Teil 1)

Einführung in die Programmiersprache Java II

Programmieren II Abstrakte Klassen / Virtuelle Methoden. Programmieren II Abstrakte Klassen / Virtuelle Methoden

Objektorientierte Programmierung Studiengang Medieninformatik

1 Einleitung Generizität Syntax... 2

Institut für Programmierung und Reaktive Systeme 9. Januar Programmieren I. 6. Übungsblatt

Aufgabenblatt: OOP - Seite 1. (2.) Geometrie: Erstellen Sie eine Klasse CPyramid, die sich von der Klasse Square ableitet:

Transkript:

Abstrakte Datentypen Daten und Operationen Mögliche Implementierungen Veränderbare Typen, Ergebnistypen

Einheit von Daten und Operationen Daten und Operationen auf Daten gehören zusammen Konto: Daten: name, nummer, kontostand Datum Operationen überweisen, abheben, Daten: tag, monat, jahr Operationen istschaltjahr, addieretage, Student Daten: name, geburtsdatum, semester Operationen scheinausstellen, einschreiben, Programmierer sollte dies beherzigen Modellierung Programmiersprache muss das unterstützen Klassen, Module, Units

Datenkapselung Daten sollen nur kontrolliert verändert werden Kontostand nur durch überweisen, abheben Datum nur durch adddays, addmonth addsekunde getstunde Daten geheim getminute getsekunde Erzeugung Konstruktoren Ablesung Selektoren ( getter Veränderung Mutatoren ( setter Methoden bilden Kapsel um die Daten addminute addstunde Class UhrZeit Repräsentation im Inneren versteckt Class Konto{ private kontostand; } Class Datum{ private msecseit1970; } Class Student{ private Date geburtsdatum; private String name, vorname; Repräsentation kann man nachträglich ändern, ohne dass der Anwender etwas merkt Ob Uhrzeit ern als msec seit Mitternacht oder als Tripel (h,m,s gespeichert wird ist egal

Benutzersicht - Programmierersicht Klassendiagramme Signaturen aller Methoden public - private # protected Wichtig für Entwurf Implementierung Dokumentation Zusätzliche Spezifikation notwendig 0 getmin( 59 { getmin( = A} addminute(; { getmin( = A1 } Klassendiagramm UML-Notation Uhrzeit # # msecs «constructor» «constructor» Uhrzeit( Uhrzeit( «getter» «getter» getstunde( getstunde( getminute( getminute( getsekunde( getsekunde( «setter» «setter» addstunde( addstunde( n n addminute( addminute( n n addsekunde( addsekunde( n n Die Namen der formalen Parameter sind irrelevant, daher werden wir sie später oft weglassen class Uhrzeit{ protected msecs; public Uhrzeit( { } } public getstunde({ } Implementierung z.b. in Java

Daten und Operationen in der Mathematik Aus der Mathematik kennen wir Ein Gruppe ist eine Menge G mit Operationen : G G G -1 : G G e : G die gewisse Gleichungen erfüllen.. e G -1 Eine Boolesche Algebra ist eine Menge B mit Operationen, : B B B : B B 0,1 : B die gewisse Gleichungen erfüllen Ein Körper ist eine Menge K mit Operationen,-,*, -1 : K K K 0,1 : K Wobei gewisse Gleichungen erfüllt sein müssen. Die Operation -1 ist partiell d.h. nicht überall definiert. Ein Vektorraum über einem Körper K ist eine Menge V mit Operationen, - : V V V 0 : V : K V V Gruppe «constructor» «constructor» Gruppe( Gruppe( «operators» «operators» Gruppe Gruppe mal(gruppe mal(gruppe Gruppe Gruppe invers( invers( Gruppe Gruppe neutral( neutral( Solche mathematischen Gebilde, bestehend aus einer oder mehreren Mengen und Operationen und evtl. noch Gleichungen, nennt man Algebren.

Die komplexen Zahlen Grundmenge C=R R = { (x,y x,y R } Statt (x,y schreibt man auch : xiy Operationen : C C C * : C C C Re, Im : C R Im(z i z Definition der Operationen: (x 1,y 1 (x 2,y 2 = (x 1 x 2,y 1 y 2 (x 1,y 1 * (x 2,y 2 = (x 1 *x 2 - y 1 *y 2, x 1 *y 2 y 1 *x 2 Eine reelle Zahl r kann man mit der komplexen Zahlen (r,0 identifizieren r (r,0. Dabei werden die Operationen erhalten: Re(z r 1 r 2 (r 1,0 (r 2,0 = (r 1 r 2,0 r 1 r 2 r 1 * r 2 (r 1,0 * (r 2,0 = (r 1 * r 2,0 r 1 * r 2 Für die spezielle Zahl i = (0,1 gilt: i * i = (0,1 * (0,1 = (0*0-1*1,0*11*0 = (-1,0-1 Für eine beliebige komplexe Zahl c=(x,y hat man: c = (x,y = (x,o (0,y = x*(1,0 y*(0,1 = x i*y

Spezifikation Grundmenge: R R Operationen: : * : Re : R Im : R Gleichungen: Definierende Gleichungen für add, mult, Re, Im (x 1,y 1 (x 2,y 2 = (x 1 x 2,y 1 y 2 (x 1,y 1 * (x 2,y 2 = (x 1 *x 2 - y 1 *y 2, x 1 *y 2 y 1 *x 2 Re(x,y = x Im(x,y = y Zusätzliche Gleichungen analog wie für R. Gleichungen können bisher nur als Kommentare angegeben werden «constructors» «constructors» ( ( (float, (float, float float «ops» «ops» sum(, prod(, prod(, «getter» «getter» float float getrealteil( getrealteil( float float getimaginärteil( getimaginärteil( String String tostring( tostring(

Implementierung in Java Datentypen modelliert durch Klassen Grundmenge: Kombination von Feldern Operationen Methoden Hier: Grundmenge float float Re getrealteil Im getimaginärteil

Operationen als statische Methoden In der Darstellung der Operation : sind beide Argumente gleichberechtigt. dies modellieren wir, wenn wir add als Klassenmethode (static implementieren:

Ein Testaufruf Statische Methoden wie sum, prod sind Methoden der Klasse. Ein Aufruf verlangt als Adressat der Methode den Namen der Klasse:.sum(z1,z2 Bei dem Aufruf aus der definierenden Klasse, kann der Adressat entfallen. prod(z1,z2

Objektorientierte Modellierung Bei einer Objektmethode ist das Objekt, nicht die Klasse, der Adressat der Methode. Eine Operation vom Typ f : K C 1 C 2 C n D wird in der Klasse K durch eine Java-Methode der folgenden Signatur implementiert: D f (C 1 x 1, C 2 x 2,, C n Das fehlende Argument der Operation ist implizit this K «ops» «ops» D f(c f(c 1, 1,, C n n.. Operationen liefern neuen Wert Ein Aufruf ist ein Expression und liefert einen Wert vom Typ D.

Komplexe Zahlen - OO Die Operationen : * : werden als Objekt-Methoden mit der Signatur plus( z mal( z implementiert. Das erste Argument der Operation ist Empfänger der Methode. this Komplexe Zahlen Zahlen «construktors» «construktors» ( ( (float, (float, float float «Ops» «Ops» plus( plus( mal( mal( «getter» «getter».. Operationen liefern neue komplexe Zahl Ein Aufruf ist ein Expression vom Typ :

als veränderbarer Typ Die Operationen : * : werden jetzt als Anweisungen implementiert: Berechne Ergebnis Speichere es im Empfänger Operationen verändern das Objekt this kein new «Konstruktoren» «Konstruktoren» «Operatoren» «Operatoren» add( add( mult( mult( «Selektoren» «Selektoren» z *= i ; z = z;

Veränderung von Objekten Ein StringBuffer ist eine veränderbare (mutable Variante von String Umwandlungen mit Konstruktoren StringBuffer(String s String(StringBuffer b Methoden verändern this StringBuffer append(stringbuffer sb; StringBuffer insert( offset, String str Der alte name ist verändert

Veränderbare Typen - Ergebnistypen Veränderbare Typen (engl.: mutable Types Methoden verändern ihr Objekt Beispiel: Konto, Telefonbuch, Arrays Konto meins = new Konto( HP,1000; Konto deins = new Konto( Du,200; deins.überweise(meins,500; System.out.prln(meins.getKontoStand(; Ergebnistypen Können nicht verändert werden Methoden liefern immer ein neues Objekt. Altes Objekt bleibt unverändert Beispiel: String,, Der alte name unverändert

Veränderbare - und Ergebnistypen Veränderbare Typen erkennt man an der Signatur der Operationen: Aufgabe: Implementiere f : K C 1 C n K In einer Klasse K als Mutator f(c 1 x 1,,C n x n K fehlt als Argument, Ergebnistyp. Aufrufe sind Anweisungen, sie verändern ihren Aufrufer x.f(a 1,,a n x wird modifiziert In einem Ergebnis- oder Werttyp K (engl.: immutable als: K f(c 1 x 1,,C n x n Aufrufe sind Expressions, sie liefern ein komplett neues Objekt K y = x.f(a 1,,a n ; x bleibt unverändert «Konstruktoren» «Konstruktoren» «Mutatoren» «Mutatoren» add( add( mult( mult( «Selektoren» «Selektoren» veränderbar «Konstruktoren» «Konstruktoren» «Operationen» «Operationen» plus( plus( mal( mal( «Selektoren» «Selektoren».. Ergebnistyp