2. Programmieren gegen Schnittstellen Advanced Programming Techniques

Ähnliche Dokumente
1. Programmieren gegen Schnittstellen Advanced Programming Techniques

5. Dokumentieren und Testen Advanced Programming Techniques. Wintersemester 2009 / 2010 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik

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

3. Dokumentieren und Testen Advanced Programming Techniques Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

6. Interfaces Grundlagen der Programmierung 1 (Java)

7. Komponenten Advanced Programming Techniques. Wintersemester 2009 / 2010 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik

2. Java Schnellkurs Advanced Programming Techniques. Wintersemester 2009/10 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik

11. Komponenten Grundlagen der Programmierung 1 (Java)

IT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1

Einstieg in die Informatik mit Java

Info B VL 14: Java Collections/Reflections

11. Funktionale Programmierung Advanced Programming Techniques Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

JAVA KURS COLLECTION

Mengen und Multimengen

Faulheit professionell: Fertige Datenbehälter. Das Java-Collections-Framework Typsicherheit Generische Klassen

Aufgabenblatt 4. Aufgabe 3. Aufgabe 1. Aufgabe 2. Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen

19 Collections Framework

OCP Java SE 8. Collections

Das Interface-Konzept am Beispiel der Sprache Java

Mengen und Multimengen

Objektorientierte Programmierung

Softwaretechnik WS 16/17. Übungsblatt 01

Kapitel 4: Bäume i. 1. Einleitung. 2. Ein Datenmodell für Listen. 3. Doppelt-verkettete Listen. 4. Bäume. 5. Das Collections-Framework in Java

19 Collections Framework

Grundlagen der Informatik 0

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Teil V. Generics und Kollektionen in Java

Weitere Beispiele. Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts. 7. Schnittstellen. Schnittstelle: Syntax

12 Collections Framework. Interfaces Maps and Collections. Collection Interface. Überblick. Collection = Containterklasse, die andere Objekte enthält.

Algorithmen und Datenstrukturen II

Problem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um. Dynamische Anpassung der Größe

Gliederung. Algorithmen und Datenstrukturen II. Java: Objektorientierung. Java: Objektorientierung. Objektorientierung in JAVA. D.

Polymorphie/Späte Bindung Abstrakte Klassen Interfaces. Polymorphie/Späte Bindung Abstrakte Klassen Interfaces

Geheimnisprinzip: (information hiding principle, Parnas 1972)

Java Schulung. Objektorientierte Programmierung in Java Teil V: Die Java Collection Klassen. Prof. Dr. Nikolaus Wulff

Programmierkurs Java

Programmieren 2 16 Java Collections und Generizität

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Übungsklausur Programmieren / Algorithmen und Datenstrukturen 1

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

Mocking Libraries Shootout

II.4.4 Exceptions - 1 -

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

16. Ausnahmebehandlung Programmieren / Algorithmen und Datenstrukturen 2

4. Algorithmen und Datenstrukturen I Grundlagen der Programmierung 1 (Java)

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

II.4.6 Collections - 1 -

Heute. Nachbetrachtung Wissensüberprüfung. Sortieren Interface Comparable TreeSet Sortieren von Arrays: Arrays.sort() 3.12.

Eine Normalform für Services Serviceorientierte Architektur konkret

Generische Polymorphie in Java-

Programmiertechnik II

Sammlungen Listen Mengen Abbildungen Algorithmen Wrapper

Java Einführung Collections

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

1. Einführung Advanced Programming Techniques. Wintersemester 2009/10 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik

12 Abstrakte Klassen, finale Klassen und Interfaces

Teil 2-3. Vorlesung. Modul: Programmierung B-PRG Grundlagen der Programmierung II

Aufgabe11. Methode test1. import java.util.hashmap; import java.util.arraylist; public class Aufgabe11 {

Einstieg in die Informatik mit Java

Objektorientierte Programmierung Studiengang Medieninformatik

15. Ausnahmebehandlung Programmieren / Algorithmen und Datenstrukturen 2

13 Abstrakte Datentypen

Programmieren I. Kapitel 13. Listen

Algorithmen und Datenstrukturen

Vererbung und Polymorphie

Übungsblatt Programmierung und Software-Entwicklung Generizität, Interfaces, Listen, Sortieralgorithmen & JUnit

ALP II Dynamische Datenmengen

Programmiertechnik II

7. Objektorientierung. Informatik II für Verkehrsingenieure

1 Klassen und Objekte

Objektorientierte Implementierung

Programmiertechnik II WS 2017/18

Programmiertechnik II SS Fakultät Informatik Bachelor Angewandte Informatik

1. Welches Interface ist nicht von Collection abgeleitet? A. B. C. D. List Set Map SortedSet. 2. Welche Aussagen sind richtig?

10. Pakete Einführung in die Programmierung (fbw) Sommersemester 2007 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

Abstrakte Datentypen und Java

Teil 2-3. Vorlesung. Modul: Programmierung B-PRG Grundlagen der Programmierung II

7. Programmierungs- Phase Software Engineering (FB EIT) Wintersemester 2007 / 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik

Die abstrakte Klasse Expression:

Teil II) Objektorientierte Implementierung 10) Verfeinern von UML-Assoziationen mit dem Java-2 Collection Framework

Beispiel: die Klasse Brüche

Ersetzbarkeit und Verhalten

Programmiermethodik 1. Klausur

Algorithmen und Programmierung II

Programmierkurs Java

Programmiermethodik 3. Klausur Lösung

Repetitorium Informatik (Java)

11. Vektoren und Pointer Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Grundkonzepte java.util.list

Programmieren in Java -Eingangstest-

Client-Server-Beziehungen

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Algorithmen und Datenstrukturen CS1017

Software Entwicklung 1

Einführung in die Programmierung

Informatik II. Übungsstunde 6. Distributed Systems Group, ETH Zürich

Programmiertechnik II

Transkript:

2. Programmieren gegen Schnittstellen Advanced Programming Techniques Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt Sommersemester 2011 1

Einordnung in den gesamten Kurs 2 1. Einführung 2. Programmieren gegen Schnittstellen 3. Software-Kategorien 4. Dokumentieren und Testen 5. Design Patterns 6. Komponenten 7. Regeln zum Design von Komponenten 8. Fehlerbehandlung 9. Konfigurationsmanagement 10. Debugging, Tracing, Logging 11. Sicherheit 12. Funktionale Programmierung: Scala 13. Language-Oriented Programming 14. Refactoring

Agenda Prinzipien Schnittstellen Literatur 3

Die Urmutter aller Design-Prinzipien: Orthogonalität / Separation of Concerns Dimension 2 Eine Änderung in einer Dimension hat keine Auswirkung auf andere Dimensionen, z.b. DBMS-Technologie kann unabhängig von GUI-Technologie geändert werden Dimension 1 Trennung der Zuständigkeiten (Separation of concerns): Trenne Software unterschiedlicher Belange in verschiedene Bereiche auf 4

Geheimnisprinzip (Information Hiding) David L. Parnas Das Geheimnisprinzip eines der wichtigsten Konzepte des Software Engineering: Die Implementierung komplexer Datenstrukturen soll in einer Klasse (Komponente) verborgen werden. Nutzer erhalten nur eine abstrakte Sicht auf die Daten (abstrakte Datenstrukturen) Der Datenzugriff erfolgt nur über die Methoden (Encapsulation = Kapselung). 5

Diskussion Geheimnisprinzip Die Datenkapselung hat folgende Vorteile: - Gekapselte Klassen sind einfacher nutzbar (reduzierte Komplexität) - Sie können ohne Auswirkung auf andere Klassen geändert werden Es bestehen jedoch auch Nachteile: - Zugriff etwas weniger effizient - Eingeschränkte Flexibilität des Zugriffs, da nur über Methoden der Klasse auf die Daten zugegriffen werden kann Folge: Es werden stets zwei Rollen unterschieden: Anbieter und Nutzer 6

Agenda Prinzipien Schnittstellen Literatur 7

Programmieren gegen Schnittstellen (Interfaces) Interfaces 8 Das Programmieren gegen cd Collections Schnittstellen (Interfaces) ist eines der wichtigsten Konzepte der Programmierung Interface: - beschreibt die Außensicht, das heißt die Sicht des Nutzers - ist einfach - ist vielseitig verwendbar Klasse: - enthält die Innensicht, das heißt die Sicht des Programmierers - ist komplex - ist speziell «interface» List + add() : void + get() : void + contains() : void + remove() : void «realize» ArrayList «realize» LinkedList

Analogie Mensch Jeder Mensch hat viele Eigenschaften. Aber für bestimmte Personengruppen sind nur bestimmte Eigenschaften wichtig: - Verkehrspolizist: Führerschein - Arbeitgeber: Lebenslauf, Aufgaben, Einkommen - Bibliothek: Leihausweis - Familie: jede Menge anderer Eigenschaften Eine Klasse, zum Beispiel Customer, kann viele Eigenschaften haben. Aber für bestimmte Collaborations sind nur bestimmte Eigenschaften wichtig: Kundenverwaltung: fachliche Attribute und Funktionen SortedSet: Comparable Client-Server Kommunikation: Serializable 9

Schnittstellen oder wie man es auch sehen kann ;-) Patient Katze Haustier 10 class Katze implements Patient, Haustier { } Quelle: Roger King

Definition Schnittstelle und Operation 11 Eine Schnittstelle (Interface) fasst Operationen zusammen. Sie wird spezifiziert durch: - (1) Einen eindeutigen Namen, - (2) Die Menge der zugehörigen Operationen - (3) Ein Schnittstellen-Protokoll im Sinne von Reihenfolgen und Restriktionen beim Aufruf der Operationen. Operationen (Operations) beschreiben das Verhalten von Komponenten. Sie werden spezifiziert durch: - (1) Signatur: Name der Operation, Parameter und Rückgabewerte und deren Typen, Ausnahmen - (2) Semantik: Verhalten der Operation - (3) Nichtfunktionale Eigenschaften: z.b. Performanz, Verfügbarkeit, Kosten etc.

Spezifikation von Schnittstellen Schnittstelle Name Operationen Signatur Semantik Schnittstellenname public interface OrderManager { Rückgabetyp Operationsname Eingabeparameter und -typ Order placeorder (Customer c, Article a) throws NotAvailableException; } Prosa, Vorbedingungen, Nachbedingungen, etc. Ausnahme Nicht-funktionale Eigenschaften Protokoll Prosa Prosa, Sequenzdiagramme etc. 12

Vorbedingungen und Nachbedingungen 13 Vorbedingungen (Pre-conditions) - Bedingungen, die vor Ausführung der Operation erfüllt sein müssen, z.b. Eigenschaften der Parameter - muss der Nutzer der Operation zusichern - der Anbieter darf die Arbeit einstellen, wenn die Vorbedingung verletzt ist (zusätzliche Prüfung erhöht die Sicherheit: bei Verletzung Abbruch mit Ausnahme) - Beispiel: Artikel muss verfügbar sein, wenn er bestellt wird Nachbedingungen (Post-conditions) - Bedingungen, die nach Ausführung der Operation erfüllt sein müssen, z.b. Eigenschaften des Ergebnisses - Muss der Anbieter der Operation zusichern - Nutzer der Operation kann davon ausgehen (Zusätzliche Prüfung erhöht die Sicherheit: bei Verletzung Abbruch mit Ausnahme) - Beispiel: Nach erfolgreicher Bestellung ist Rechnung erzeugt

Deklaration eines Interface in Java Interfaces enthalten: - Instanzmethoden - Konstanten Interfaces haben keine Konstruktoren. Interfaces enthalten keine Implementierung. interface Customer { public String getname(); public void setname(string name); } 14

Nutzung eines Interface in Java Man sagt: Eine Klasse implementiert ein Interface, wenn sie jede einzelne Methode des Interfaces bereitstellt. Eine Klasse kann beliebig viele Interfaces implementieren. Ein Interface kann von beliebig vielen Klassen implementiert werden. Eine Referenz auf ein Interface kann überall dort im Code eingesetzt werden, wo auch eine Referenz auf eine Klasse erlaubt ist. class CustomerImpl implements Customer { public CustomerImpl(String name) {...} public String getname() {...} public void setname(string name) {...} } 15

Beispiel: Zugriff auf Kundendaten (mit Interface) Customer mycustomer = new CustomerImpl("Willi");... Map <String, Customer> mycustomers; mycustomers = new HashMap <String, Customer>(); mycustomers.put("kunde1234", mycustomer);... mycustomer = mycustomer.get("kunde1234"); class SomeOtherClass { public boolean processcustomer(customer cust) {... }; } 16

Gegen Schnittstellen programmieren Configuration Application Interface <<uses>> Implementation 17

Nutzer- und Anbieterrollen: Interfaces Nutzer import import Anbieter // Deklaration und Konfiguration I i = new C(); // Nutzung i.m(); Nutzung C wird nur in der Konfiguration sichtbar Definition (Außensicht) public interface I { public void m (); } Implementierung (Innensicht) public class C implements I { public void m() { } } 18

Übersicht über Collections, Maps und deren Interfaces <<interface>> Collection <<interface>> Map <<interface>> List <<interface>> Set <<interface>> SortedMap HashMap TreeMap HashTable ArrayList Vector <<interface>> SortedSet LinkedList Stack TreeSet 19

Jede Menge *ables Adjustable Appendable Callable Cloneable Comparable Destroyable Externalizable Flushable Formatable Identifyable Iterable Joinable Manageable Printable Readable Referenceable Refreshable Runnable Scrollable Serializable Streamable Throwable Timeable Transferable Writeable 20

Nutzung von Schnittstellen: Das Prinzip der minimalen Annahme Prinzip der minimalen Annahme Nutze Schnittstellen, wo sie zur Verfügung stehen, z.b. List statt ArrayList, Map statt HashMap Nutze die allgemeinste Schnittstelle, die den erforderlichen Dienst bereitstellt, z.b. Collection statt List, Iterator statt ListIterator 21

Agenda Prinzipien Schnittstellen Literatur 22

Literatur Johannes Siedersleben (Hrsg.): Quasar: Die sd&m Standard-Architektur, Teil 1 https://www.fbi.h- da.de/fileadmin/personal/b.humm/publikationen/siedersleben_- _Quasar_1 sd_m_brosch_re_.pdf Abschnitt 1.3.1 Schnittstellen 23