12) Generische Datenstrukturen



Ähnliche Dokumente
12) Generische Datenstrukturen

Generische Datenstrukturen

Schnelles Prototyping (Rapid Application Development, RAD)

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Java Kurs für Anfänger Einheit 5 Methoden

Objektorientierte Programmierung. Kapitel 12: Interfaces

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Java Einführung Collections

Prinzipien Objektorientierter Programmierung

Objektorientierte Programmierung

Gebundene Typparameter

Einführung in die Java- Programmierung

Übungen zur Softwaretechnik

Java Einführung Abstrakte Klassen und Interfaces

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

Java Einführung Packages

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Innere Klassen in Java

Programmieren in Java

Algorithmen und Datenstrukturen

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

5. Abstrakte Klassen

Tutorium 5 - Programmieren

Einführung in die Programmierung

Dokumentation für das Spiel Pong

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Scala kann auch faul sein

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

1 Polymorphie (Vielgestaltigkeit)

Typumwandlungen bei Referenztypen

Robot Karol für Delphi

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Objektorientiertes JavaScript

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Erfahrungen mit Hartz IV- Empfängern

Software Engineering Klassendiagramme Assoziationen

Internet Explorer Version 6

U08 Entwurfsmuster (II)

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Access und die andern (Office) Programme. Armin Hess

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Übung 9 - Lösungsvorschlag

Vorkurs C++ Programmierung

Objektorientierte Programmierung

Aufgabenblatt Nr. 5 Generizität und TicTacToe

Java: Vererbung. Teil 3: super()

Client-Server-Beziehungen

Software Engineering Klassendiagramme Einführung

Objektorientierte Analyse

Die Bedeutung abstrakter Datentypen in der objektorientierten Programmierung. Klaus Kusche, September 2014

Installation und Inbetriebnahme von Microsoft Visual C Express

Gezielt über Folien hinweg springen

Formale Spezialisierungstechniken. am Beispiel des binären Baums. Hybride Programmiersprachen Daniel Krompass Berlin, 2009

Komponententest. Testen von Software Systemen. Übung 02 SS 2009 Version:

ARCO Software - Anleitung zur Umstellung der MWSt

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Whitepaper. Produkt: combit Relationship Manager / address manager. Dateiabgleich im Netzwerk über Offlinedateien

Version 1.0 [Wiederherstellung der Active Directory] Stand: Professionelle Datensicherung mit SafeUndSave.com. Beschreibung.

Kapitalerhöhung - Verbuchung

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

Dynamisches SQL. Folien zum Datenbankpraktikum Wintersemester 2009/10 LMU München

Probeklausur Softwareengineering SS 15

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Internet online Update (Internet Explorer)

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

.NET Code schützen. Projekt.NET. Version 1.0

Objektbasierte Entwicklung

Konzepte der Informatik

Factory Method (Virtual Constructor)

Große Übung Praktische Informatik 1

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Grundkonstrukte der Objektorientierung in Java, C# und C++

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Unterrichtsmaterialien in digitaler und in gedruckter Form. Auszug aus:

Verschlüsseln eines USB Sticks mit TrueCrypt Eine ausführliche Anleitung. Hochschule der Medien Stuttgart Christof Maier I Frank Schmelzle

Der lokale und verteilte Fall

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv

Leitfaden zur Durchführung eines Jahreswechsels in BüroWARE 5.x

4. AuD Tafelübung T-C3

Programmierkurs Java

Updatehinweise für die Version forma 5.5.5

Der Kontowecker: Einrichtung

Rundung und Casting von Zahlen

Internet online Update (Mozilla Firefox)

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

YouTube: Video-Untertitel übersetzen

Kapitalerhöhung - Verbuchung

Grundlagen von Python

Einführung in die Informatik Tools

Durchführung der Datenübernahme nach Reisekosten 2011

5. Übung zum G8-Vorkurs Mathematik (WiSe 2011/12)

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Kapitel 6. Vererbung

Transkript:

mpfohlene Literatur 12) Generische Datenstrukturen http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf rof. Dr. rer. nat. habil. Uwe Aßmann Lehrstuhl Softwaretechnologie Fakultät für Informatik TU Dresden Version 09-0.2, 24.11.08 Softwaretechnologie, rof. Uwe Aßmann 1 rof. U. Aßmann, Softwaretechnologie 2 2 Trends in der Softwareentwicklung lemente einer Hierarchie Rapid Application Development (RAD) Schneller viel Code schreiben Typisierung weglassen Zeit pike Bei den Assoziationen Beim rogrammieren gegen Schnittstellen Mächtige Operationen, die schnell zu schreiben sind Java Java 1.5 Formular Safe Application Development (SAD) Guten Code schreiben Typisierung, damit der Übersetzer viele Fehler entdeckt (statische Typisierung) Mehr ntwurfswissen aus dem ntwurf in die Implementierung übertragen Typisierung der Assoziationen Zuverlässigkeit Aus der Definition einer Datenstruktur können Bedingungen für ihre Anwendung abgeleitet werden Bestellung Lieferschein Rechnung rof. U. Aßmann, Softwaretechnologie 3 rof. U. Aßmann, Softwaretechnologie 4

roblem 1 ungetypter Schnittstellen: Laufzeitfehler roblem 2 ungetypter Schnittstellen: Unnötige Casts Bei der Konstruktion von s werden oft Fehler programmiert, die bei der Dekonstruktion zu Laufzeitfehlern führen Bei der Dekonstruktion von s müssen unnötig Casts spezifiziert werden Kann in Java < 1.4 nicht durch den Übersetzer entdeckt werden Typisierte s erhöhen die Lesbarkeit, da sie mehr Information geben listofrechnung.add(best); rogrammierfehler! Rechnung rechnung2 = new Rechnung(); listofrechnung.add(rechnung2); Diesmal ok rechnung = (Rechnung)listOfRechnung.get(i); rechnung = (Rechnung)listOfRechnung.get(i); Laufzeitfehler!! rof. U. Aßmann, Softwaretechnologie 5 Cast nötig, obwohl alles Rechnungen rof. U. Aßmann, Softwaretechnologie 6 Abhilfe: Generische Klassen Generische Datentypen in der -Hierarchie ine generische Klasse ist eine Klassenschablone, die mit einem Typparameter versehen ist. Die neue, generische -Hierarchie (seit Java 1.5) : lement, K: Key, V: Value In UML In Java Sprachregelung: Container of Collectio n Container content class Container<> { content[]; Ma p rof. U. Aßmann, Softwaretechnologie 7 rof. U. Aßmann, Softwaretechnologie 8

Instanz der Generischen Hierarchie robleme gelöst Map Bei der Konstruktion von s werden jetzt Äpfel von Birnen unterschieden Casts sind nicht nötig, der Übersetzer kennt den feineren Typ <<instantiates>> <Rechnung> listofrechnung = new Array<Rechnung>(); listofrechnung.add(best); Compilerfehler Map <Nr,Formular> Darf man Rechnungen, Bestellungen und Lieferscheine in diese s stecken? Ja. rechnung = listofrechnung.get(i); <Nr,Formular> rof. U. Aßmann, Softwaretechnologie 9 Kein Cast mehr nötig rof. U. Aßmann, Softwaretechnologie 10 Generizität funktioniert auch geschachtelt Benutzung von getypten und ungetypten Schnittstellen.. ist in Java 1.5 ohne robleme nebeneinander möglich // Das Archiv fasst alle Rechnungen aller bisherigen Jahrgänge zusammen <<Rechnung>> archiv = new Array<<Rechnung>>(); // listofrechnung fasst die Rechnungen des aktuellen Jahres zusammen <Rechnung> listofrechnung = new Array<Rechnung>(); archiv.add(listofrechnung); archiv.getindex(0).add(rechnung); archiv.getindex(0).add(best); funktioniert for (int jahr = 0; jahr < archiv.size(); jahr++) { listofrechnung = archiv.getindex(jahr); rechnung = listofrechnung.getindex(i); Übersetzungs- Fehler // Das Archiv fasst alle Rechnungen aller bisherigen Jahrgänge zusammen <<Rechnung>> archiv = new Array<<Rechnung>>(); // listofrechnung fasst die Rechnungen des aktuellen Jahres zusammen archiv.add(listofrechnung); archiv.getindex(0).add(rechnung); archiv.getindex(0).add(best); for (int jahr = 0; jahr < archiv.size(); jahr++) { listofrechnung = archiv.getindex(jahr); funktioniert rechnung = (Rechnung)listOfRechnung.getIndex(i); Übersetzt auch, aber Laufzeitfehler beim Cast... rof. U. Aßmann, Softwaretechnologie 11 rof. U. Aßmann, Softwaretechnologie 12

Typschranken generischer arameter (type bounds) Generische Methoden als Funktionale Objekte Beispiel: Comparable<> als Return-typ in der s-klasse sichert zu, dass die Methode compareto() existiert in Funktionalobjekt ist ein Objekt, das eine Funktion darstellt (reifiziert). class s { /** minimum function for a. Return value is typed * with a generic type with a type bound */ public static < extends Comparable<>> min(<> ce) { Iterator<> iter = ce.iterator(); curmin = iter.next; if (curmin == null) return curmin; for ( element = curmin; iter.hasnext(), element = iter.next) { if (element.compareto(curmin) < 0) { curmin = element; return curmin; Funktionalobjekte können Berechnungen kapseln und später ausführen (laziness) (ntwurfsmuster Command) s gibt eine Funktion in der Klasse des Funktionalobjektes, dass die Berechnung ausführt Generischer Name, z.b. execute() oder doit() Zur Laufzeit kann man das Funktionalobjekt mit arametern versehen Herumreichen Und zum Schluss ausführen rof. U. Aßmann, Softwaretechnologie 13 rof. U. Aßmann, Softwaretechnologie 14 Generische Methoden als Funktionale Objekte Unterschiede zu C++ <> BinOp Functional Accumulate Anwendung: Akkumulatoren und andere generische enoperationen B C, // A functional object that adds, once invoked interface BinOp<> { execute( p1, p2); // An interface for a collection of binary operation on // collections interface Functional<<>,B extends BinOp<>> { compute(<> p); class Accumulate<C,> implements Functional<C,BinOp<>> { cursum; element; BinOp<> binaryoperation; public compute(c coll) { for (int i = 0; i < coll.size(); i++) { element = coll.getindex(i); cursum = binaryoperation.execute(cursum,element); return cursum; In Java: einmalige Übersetzung des generischen Datentyps Verliert etwas ffizienz, da der Übersetzer alle Typinformation im generierten Code vergisst und nicht ausnutzt z.b. sind alle Instanzen mit unboxed objects als boxed objects realisiert C++ bietet Code-Templates (snippets, fragments) an, mit denen man mehr parameterisieren kann, z.b. Methoden In C++ können Templateparameter Variablen umbenennen: template class C <class T> { T attribute<t> Templateparameter können Variablen umbenennen rof. U. Aßmann, Softwaretechnologie 15 rof. U. Aßmann, Softwaretechnologie 16

Was haben wir gelernt nd Generische Datenstrukturen sind Klassenschablonen mit Typ-arameter Feinere statische Typisierung möglich Generische s besitzen den lement-typ als Typ-arameter lement-typ verfeinert Object Weniger Casts, mehr Typsicherheit rof. U. Aßmann, Softwaretechnologie 17 rof. U. Aßmann, Softwaretechnologie 18