API-Design für Java-Entwickler. Kai
|
|
|
- Christina Egger
- vor 8 Jahren
- Abrufe
Transkript
1 API-Design für Java-Entwickler Kai
2 Demnächst im Handel J Java-APIs RESTful HTTP, Web-APIs Messaging Skalierbarkeit API-Management 2
3 3
4 Client-Code De-Facto-API Potentielle API 4
5 Lesbarer Client-Code Kompatible API, Geheimnisprinzip Änderbarkeit 5
6 implizite Objekt-API 6
7 Für wen ist API-Design relevant? 7
8 APIs sind allgegenwärtig! 8
9 Anti-Pattern: API-Design aus Versehen 9
10 API-Design ist eine Frage der Priorität! 10
11 11
12 Kommunikationsproblem bei Softwarewiederverwendung? Lösung: Kommunikation durch API APIs werden für Menschen geschrieben Perspektive ist beim API-Design entscheidend 12
13 Entwurf mit Benutzerperspektive 13
14 Empfohlene Vorgehensweise Anwendungsfälle Klein mit den wichtigsten Anforderungen beginnen API häufig schreiben, mit Beispielen entwerfen Regelmäßiges Feedback Feedback API schreiben 14
15 Empfohlene Vorgehensweise Tests für Entwurf, Dokumentation und Kompatibilitätsprüfung nutzen Consumer-driven Contract Testing 15
16 Qualitätsmerkmale 16
17 17
18 Entwurfsziele Konsistent Intuitiv verständlich Dokumentiert Einprägsam und leicht zu lernen Lesbaren Code fördernd Minimal Stabil Einfach erweiterbar Grundvoraussetzung: Nützlich und korrekt implementiert :-) 18
19 Konsistent Konzeptionelle Integrität bedeutet kohärentes Design mit der Handschrift eines Architekten 19
20 Konsistent java.util.zip.gzipinputstream java.util.zip.zipoutputstream java.awt.textfield.settext(); java.awt.label.settext(); javax.swing.abstractbutton.settext(); java.awt.button.setlabel(); java.awt.frame.settitle(); 20
21 Inkonsistent vs semantisch genau arr = [1, 2, 3] arr.length # => 3 arr.size # => 3 arr.count # => 3 length: Anzahl der Elemente im Array in konstanter Zeit (unabhängig der Länge), z.b. String size: z.b. Collections count: Aufruf typischerweise mit Parameter, traversiert das Objekt und zählt die Matches 21
22 Intuitiv verständlich Idealerweise ist Client-Code ohne Dokumentation verständlich Vorwissen ausnutzen und bekannte Konzepte wiederverwenden Starke Begriffe etablieren und diese konsequent wiederverwenden 22
23 Java Collection API java.util.list add addall contains containsall remove removeall java.util.set add addall contains containsall remove removeall java.util.map put putall containskey, containsvalue - remove - 23
24 Dokumentiert Gute Dokumentation ist unverzichtbar 24
25 Dokumentationsaufbau 25
26 Entwickler lernen und verstehen mit Beispielen 26
27 Einprägsam und leicht zu lernen Einflussfaktoren > Konsistenz, Verständlichkeit und Dokumentation > Größe (Anzahl der Konzepte) > Vorwissen der Benutzer > Time to First Hello World 27
28 Führt zu leicht lesbaren Code EntityManager em =...; CriteriaBuilder builder = em.getcriteriabuilder(); CriteriaQuery<Order> cq = builder.createquery(order.class); Root<Order> order = cq.from(order.class); order.join(order_.positions); cq.groupby(order.get(order_.id)).having( builder.gt(builder.count(order), 1)); TypedQuery<Order> query = em.createquery(cq); List<Order> result = query.getresultlist(); 28
29 Führt zu leicht lesbaren Code EntityManager em =...; List<Order> list = new JPAQuery(em).from(QOrder.order).where(order.positions.size().gt(1)).list(order).getResults(); 29
30 Schwer falsch zu benutzen new java.util.date(2016, 11, 17); int year = ; int month = 11-1; new java.util.date(year, month, 17); 30
31 Minimal Hinzugefügte Elemente können nachträglich nur schwer entfernt werden Im Zweifel Elemente weglassen Trade-off: Minimalität vs. Komfort Gut: java.util.list.removeall() Schlecht: java.util.list.removealleven() 31
32 Minimal Auslagerung in Hilfsklassen z.b.: java.util.arrays, java.util.collections Nachteile: Performance und Nebenläufigkeit (putifabsent() wäre in separater Hilfsklasse nicht threadsicher) Schlechter OO-Stil Hilfsklassen oft Sammelsuirum 32
33 Stabil API-Änderungen sollten nur mit Sorgfalt durchgeführt werden Client Client Client Vertrag API v1 33
34 Open Closed Principle Laut Bertrand Meyer sollen Module nicht verändert, sondern nur durch Vererbung erweitert werden (kein gutes OO- Design-Prinzip) Refactorings sind einfach, falls die Änderungen nur die eigene Codebasis betreffen Bessere Idee von Martin Fowler: Published Interface ( 34
35 Einfach erweiterbar Welche Änderungen wird es in Zukunft geben? Erweiterung idealerweise abwärtskompatibel, sonst neue API-Version notwendig Anpassungsaufwand für Clients minimieren 35
36 Abwärtskompatibilität 36
37 Kompatibilität Trade-off: Abwärtskompatibilität vs. Flexibilität Code-Kompatibilität Schwächste Form der Kompatibilität Konflikte beim Entfernen und Verändern von API-Elementen Konflikte eventuell bei Vererbung 37
38 Kompatibilität /** 1.0 */ class ApiBaseClass { } class MyOwnClass extends ApiBaseClass { List<ResultItem> getresults() {... } } 38
39 Kompatibilität class ApiBaseClass { /** 1.1 */ List<String> getresults() {... } } class MyOwnClass extends ApiBaseClass { List<ResultItem> getresults() {... } } 39
40 Kompatibilität Binär-kompatibel: Programm kann neue Version ohne erneute Kompilierung verwenden Beispiel: > Kompilieren mit log4j > Linken gegen log4j Grundvoraussetzung: Dynamisches Linken > Einsprungadresse von virtuellen Methoden wird zur Laufzeit bestimmt 40
41 Funktionale Kompatibilität Version kann gelinkt werden und erfüllt ihre erwartete Funktion Erwartetes Verhalten Tatsächliches Verhalten Tatsächliches Verhalten der neuen Version 41 Bekannt als Amöben-Effekt (Jaroslav Tulach)
42 Wie wird Kompatibilität sichergestellt? 42
43 Versionierte Regressionstests Offizielles (dokumentiertes) API-Verhalten muss getestet werden Automatisierte Tests stellen Verhaltenskompatibilität sicher Niemals vollständig, Erweiterungen nach Rücksprache mit Clients Was gehört zu API? com.company.foo.api com.company.foo.internal 43
44 Umgang mit inkompatiblen Änderungen 44
45 API in Version 1.0 public interface FinanceService { /** * Returns brutto sum. 1.0 */ int getsum(); } 45
46 API in Version 1.0 public interface FinanceService { /** * Returns brutto sum. 1.0 */ int getsum(); } 46
47 API in Version 1.1 mit semantischer Änderung public interface FinanceService { /** * Returns netto sum. 1.0 // 1.1? */ int getsum(); } 47
48 API in Version 1.1 Semantische und syntaktische Änderungen verbinden public interface FinanceService { /** * Returns netto sum. 1.1 */ int getnettosum(); } 48
49 API in Version 1.1 Rückwärtskompatibilität beachten public interface FinanceService { /** * Returns brutto sum. 1.0 */ int getsum(); } /** * Returns netto sum. 1.1 */ int getnettosum(); 49
50 public interface FinanceService { /** * Returns brutto sum. 1.0 As of version 1.1 for * API improvements, use * {@link #getbruttosum() * instead. Will be removed in * version 1.2. int getsum(); } /** * Returns brutto sum. 1.1 */ int getbruttosum(); 50
51 Design-Repertoire 51
52 Erzeugungsmuster Factories und Builder statt Konstruktoren entitymanager.createnamedquery(queryname).getresultlist(); CalculatePriceCommand.new(order).run(); Vorteil Verwendung unterschiedlicher Subtypen Erzeugung komplexer Objekte vereinfachen Keine Konstruktoren mit vielen Parametern 52
53 Effective Java 2nd Edition Static Factory, statt Konstruktoren nutzen 53
54 Alternative: Class Clusters 54
55 Beispiel: Class Cluster public class Widget { private Widget body; public Widget(Params p) { } if (p.featuretoggle().enabled()) { body = new WidgetA(); } else { body = new WidgetB(); } } public void performaction() { } body.performaction(); } 55
56 Fluent Interface Interne DSL zur Verbesserung der Lesbarkeit des Quellcodes Umsetzung mit: Methodenketten (und Methodenschachtelung) 56
57 Fluent Interface (Beispiel) Grammar ::= 'assertthatstring' '('[a-z]+')' ( 'notnull' 'islowercase' 'startswith' '('[a-z]+')' 'endswith' '('[a-z]+')' )+ 57
58 Fluent Interface (Beispiel) 58
59 Fluent Interface (Beispiel) // ohne Fluent Interface assertnotnull(text); asserttrue(text.startswith("a")); asserttrue(text.endswith("z")); asserttrue(text.islowercase()); // mit Fluent Interface assertthatstring(text).notnull().startswith("a").endswith("z").islowercase(); 59
60 Vererbung Kontroverse Ansätze: > Open Inheritance > Designed Inheritance Standardmäßig alle konkreten Klassen final machen > Vererbung verletzt Datenkapselung > Klassen müssen speziell für Vererbung entworfen werden > Für Wiederverwendung Kompositionen nutzen Beispiele: > Richtig: Set extends Collection > Falsch: Stack extends List 60
61 Template-Methode abstract class OrderSorter { public void sort(list<order> orders) { if(compare(o1, o2)) { } abstract compare(order o1, Order o2); } 61
62 Service Provider Interfaces (SPI) von der sonstigen API trennen 62
63 Template-Methode public class OrderSorter { private final Comparator<? super Order> comp; public OrderSorter(Comparator<? super Order> comp) { } this.comp = comp; public void sort(list<order> orders) { } Collections.sort(orders, comp); } 63
64 Kontextobjekt als Parameter für SPI Schlechter Stil: public interface MyServiceProviderInterface { void callbackmethod(string param); } Besser: public interface ServiceProviderInterface { void callbackmethod(context param); } public class Context { String message(); Integer id(); } 64
65 Interface-Evolution Hinzufügen einer neuen abstrakten Methode war vor Java 8 eine inkompatible Änderung interface NewInterface extends OldInterface { void newmethod(); } Ab Java 8 Default-Methoden Bevorzuge Klassen vor Interfaces 65
66 Checked Exceptions void submit( Abstract abstract ) throws IOException {... } Falsches Abstraktionsniveau 66
67 Checked Exceptions Kann diese Ausnahmesituation im korrekten Programm auftreten? void submit( Abstract abstract ) throws TooLongAbstractException {... } Kann sich ein Client davon erholen? 67
68 Anwendungsfälle für Checked Exceptions sind selten (konservative Formulierung :-) 68
69 Unchecked Exceptions Gehört eine Unchecked Exception zur API? void submit( Abstract abstract ) { if( abstract == null ) { throw new NullPointerException( "abstract must not be null."); }... } 69
70 Unchecked Exceptions /** * NullPointerException * if abstract is null */ void submit( Abstract abstract ) { if( abstract == null ) { throw new NullPointerException( "abstract must not be null."); }... } Dokumentiere alle Exceptions, die von einer Methode geworfen werden (Vorbedingungen). 70
71 Invarianten und Bedingungen Klassen sind selbst für die Einhaltung ihrer Invarianten verantwortlich (nicht Client) Klassen sollten ihre Vorbedingungen möglichst gut überprüfen Nachbedingungen werden mit Tests überprüft 71
72 Immutability / Minimale Änderbarkeit Klassen, die public und konkret sind, sollten standardmäßig final und immutable sein Vorteile: > Thread-safe > Wiederverwendbar > Einfach Nachteile: > Separates Objekt für jeden Wert Falls änderbar, dann sollte Zustandsraum klein sein 72
73 Sinnvolle Defaults Vermeidung von Boilerplate-Code Geringe Einstiegshürden und Unterstützung für Neueinsteiger Defaults müssen dokumentiert sein Boolean sind standardmäßig false (entsprechende Namen wählen) // Tests werden standardmäßig ausgeführt // skiptests=false 73
74 Globaler Zustand / Konfiguration Globaler Zustand ist problematisch weil: > Schwer testbar, nicht flexibel > Fehleranfällig, schwer verständlich Empfehlung: > Sei funktional, vermeide Zustand > Einbindung einer Bibliothek sollte keine Änderungen des globalen Zustand notwendig machen > Falls doch, dann ist es eine Applikation und keine Bibliothek Beispiel: > Log4j wird beim Laden automatisch konfiguriert > Unterschiedliche Konfigurationen für Log4j in einem Prozess nicht möglich 74
75 Bedeutung von Typen & Namen Namen sind wie Kommentare (nützlich, aber schnell veraltet) String findaddress( String userid ); Address foo( UserId blah ); Typen sind aussagekräftiger und verlässlicher als Namen und Kommentare 75
76 Bedeutung von Typen Mit Typen Dokumentieren Gibt -1, 0 oder 1 zurück int compare( Object o1 ); Result compare( Object o1 ); enum Result { LESS_THEN, EQUAL, GREATER_THEN; } Rückagebtypen und Argumente mit benannten Alternativen einschränken 76
77 Kai
Praktisches API-Design
Praktisches API-Design Kai Spichale adesso AG 13.07.15 Eine API ist wie die Spitze eines Eisbergs.. 2 http://www.pixelio.de/media/685029 Klassische Funktionen einer API Entkopplung von Implementierung
! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete! 4. Ausnahmen (Exceptions) II.4.
! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete! 4. Ausnahmen (Exceptions) II.4.4 Exceptions - 1 - Ausnahmen (Exceptions( Exceptions) Treten auf, wenn zur
Einstieg in die Informatik mit Java
Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form
Faustregeln zu Zusicherungen
Faustregeln zu Zusicherungen Zusicherungen sollen stabil sein (vor allem an Wurzel der Typhierarchie) keine unnötigen Details festlegen explizit im Programm stehen unmissverständlich formuliert sein während
Java-Schulung Grundlagen
Java-Schulung Grundlagen Java 2 Standard Edition JDK 5 / 6 31.05.2008 Marcel Wieczorek 1 Themenübersicht Basiswissen Objektorientierung Datentypen Fehlerbehandlung Sonstiges Einführung Klassen, Strings
7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen
7. Schnittstellen Grundlagen zu Schnittstellen 7. Schnittstellen Eine Schnittstelle (Interface) ist eine Spezifikation eines Typs in Form eines Typnamens und einer Menge von Methoden, die keine Implementierungen
Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck
Javadoc Programmiermethodik Eva Zangerle Universität Innsbruck Überblick Einführung Java Ein erster Überblick Objektorientierung Vererbung und Polymorphismus Ausnahmebehandlung Pakete und Javadoc Spezielle
Bean-Mapping mit MapStruct
Machst Du noch Reflection oder annotierst Du schon? Bean-Mapping mit MapStruct Thomas Much [email protected] www.muchsoft.com 1 20 Jahre Java, 18 Jahre Beans JavaBeans JAXBEntities 2015 2006 2005 2000
SEP 114. Design by Contract
Design by Contract SEP 114 Design by Contract Teile das zu entwickelnde Programm in kleine Einheiten (Klassen, Methoden), die unabhängig voneinander entwickelt und überprüft werden können. Einheiten mit
Allgemein: Klassen testbar machen. 5. Mocking. Mocks programmieren. Zusammenspiel von Klassen testen
5. Mocking Allgemein: Klassen testbar machen Wie werden Klassen testbar Entwicklung von Mocks mit der Hand Einführung in JMock Spezifikation von Mocks mit JMock Wann ist Mocking-Werkzeug sinnvoll Literatur:
Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1
Kapitel 11 Fehler und Ausnahmen Fehler und Ausnahmen 1 Ziele Fehlerquellen in Programmen und bei der Programmausführung verstehen Das Java-Konzept der Ausnahmen als Objekte kennenlernen Ausnahmen auslösen
Gebundene Typparameter
Gebundene Typparameter interface StringHashable { String hashcode(); class StringHashMap { public void put (Key k, Value v) { String hash = k.hashcode();...... Objektorientierte
Java Einführung Abstrakte Klassen und Interfaces
Java Einführung Abstrakte Klassen und Interfaces Interface Interface bieten in Java ist die Möglichkeit, einheitliche Schnittstelle für Klassen zu definieren, die später oder/und durch andere Programmierer
Testen mit JUnit. Motivation
Test First Design for Test in Eclipse (eigentlich: ) zu einer Klasse Beispiel zur Demonstration Ergänzungen Test First "Immer dann, wenn Du in Versuchung kommst, etwas wie eine print- Anweisung oder einen
Spec# Einführung. Formale Software-Entwicklung Seminar SS 07 Universität Karlsruhe Hilal Akbaba
Spec# Einführung Formale Software-Entwicklung Seminar SS 07 Universität Karlsruhe Hilal Akbaba Inhalt Einführung in C# Das Spec# System Die Konstrukte Vererben der Verträge System Architektur Einführung
Systematisches Testen
Systematisches Testen SEP 136 Unit Testing Objektorientierte Entwicklung Entwicklung von vielen unabhängigen Einheiten (Klassen, Methoden), aus denen das Gesamtprogramm zusammengesetzt wird. Ziel: Wenn
Client-Server-Beziehungen
Client-Server-Beziehungen Server bietet Dienste an, Client nutzt Dienste Objekt ist gleichzeitig Client und Server Vertrag zwischen Client und Server: Client erfüllt Vorbedingungen eines Dienstes Server
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Tafelübung 04 Referenzen, Overloading, Klassen(hierarchien) Clemens Lang T2 18. Mai 2010 14:00 16:00, 00.152 Tafelübung zu AuD 1/13 Organisatorisches Nächster Übungstermin
Beispiel für überladene Methode
Beispiel für überladene Methode class Gras extends Futter {... abstract class Tier { public abstract void friss (Futter x); class Rind extends Tier { public void friss (Gras x) {... public void friss (Futter
Handbuch für die Erweiterbarkeit
Handbuch für die Erweiterbarkeit Inhalt Pakete für die Erweiterbarkeit... 2 Actions... 2 Items... 2 Itemset... 2 Die UseCaseNewAction... 3 Eigene Shapes... 4 Der Shape Container... 5 User Objects... 6
1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)
Praktische Informatik (Software) Vorlesung Softwareentwicklung 1 Prof. Dr. A. Ferscha Hauptklausur am 01. 02. 2001 Zuname Vorname Matr. Nr. Stud. Kennz. Sitzplatz HS / / / Punkte Note korr. Fügen Sie fehlende
Info: Standard DO-178B. 5. Mocking. Zusammenspiel von Klassen testen. Allgemein: Klassen testbar machen
Info: Standard DO-178B Zertifizierung Federal AviationAdministration (FAA), Software für Luftverkehrssysteme durch Standard DO-178B für requirement-based Tests and Code Coverage Analyse DO-178B-Levels
OOP. Tagesprogramm. Dynamische Typinformation. Homogene Übersetzung der Generizität. Generizität und Typumwandlungen
1 2016-11-30 Tagesprogramm Dynamische Typinformation Homogene Übersetzung der Generizität Generizität und Typumwandlungen 2 2016-11-30 Dynamische Typinformation Dynamische Typabfragen Abfrage der Klasse
Daniel Warneke [email protected] 08.05.2006. Ein Vortrag im Rahmen des Proseminars Software Pioneers
Design Patterns Daniel Warneke [email protected] 08.05.2006 Ein Vortrag im Rahmen des Proseminars Software Pioneers Design Patterns 1/23 Übersicht Einleitung / Motivation Design Patterns Beispiele Rolle des
Java: Eine Übersicht. Dennis Giffhorn. Lehrstuhl für Programmierparadigmen Universität Karlsruhe
Java: Eine Übersicht Dennis Giffhorn Lehrstuhl für Programmierparadigmen Universität Karlsruhe Allgemeines Objektorientiert Syntaxfamilie von C/C++ Statisch getypt Entwickelt von Sun Microsystems class
Theorie und Praxis einer JSON-RPC-basierten Web-API
Theorie und Praxis einer JSON-RPC-basierten Web-API Christian Krause [email protected] Raritan Deutschland GmbH Chemnitzer LinuxTage 2015 Gliederung 1 2 Remote Procedure Call Interface Definition
1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen
1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen II.2.3 Datenabstraktion - 1 - public class Rechteck { Selektoren
Einführung in die Programmierung
Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In
Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik
Klassen und höhere Datentypen Objekte, Felder, Methoden Küchlin/Weber: Einführung in die Informatik Klassen Klasse (class) stellt einen (i.a. benutzerdefinierten) Verbund-Datentyp dar Objekte sind Instanzen
Objektorientierte Programmierung
Universität der Bundeswehr Fakultät für Informatik Institut 2 Priv.-Doz. Dr. Lothar Schmitz FT 2006 Zusatzaufgaben Lösungsvorschlag Objektorientierte Programmierung Lösung 22 (Java und UML-Klassendiagramm)
Web-Anwendungen mit Arquillian testen
Michael Kotten open knowledge @michaelkotten @_openknowledge Wozu denn testen? Ich mach doch keine Fehler! Wozu denn testen? > Notwendig bei komplexen Systemen > Sicherung von > Qualität > Funktionalität
Ich liebe Java && Ich liebe C# Rolf Borst
Ich liebe Java && Ich liebe C# Rolf Borst Java oder C#? Einführung public class Einfuehrung { private int gesamtzahl = 0; /* Ermittelt die Anzahl der geraden und durch drei teilbaren Zahlen */ public String
8. Generics Grundlagen der Programmierung 1 (Java)
8. Generics Grundlagen der Programmierung 1 (Java) Fachhochschule Darmstadt Haardtring 100 D-64295 Darmstadt Prof. Dr. Bernhard Humm FH Darmstadt, 6. Dezember 2005 Einordnung im Kontext der Vorlesung 1.
Invarianten und sichere Vererbung
Kapitel 7 Invarianten und sichere Vererbung Idee der Vererbung: class U extends O... bedeutet: Jedes U ist auch als O verwendbar, denn es hat mindestens dieselben Members im O-Subobjekt (Typkonformanz,
Praktikum Datenbanksysteme. Ho Ngoc Duc IFIS - Universität zu Lübeck 01.06.2005
Praktikum Datenbanksysteme Ho Ngoc Duc IFIS - Universität zu Lübeck 01.06.2005 Tomcat-Installation $JAVA_HOME (z.b. /home/dbp00/j2sdk1.4.2) $CATALINA_HOME (/home/dbp00/jakarta-tomcat-4) Skripte zum Start/Stop:
Exceptions. Prof. Dr. Margarita Esponda SS 2012. M. Esponda-Argüero
Exceptions Prof. Dr. Margarita Esponda SS 2012 1 Ausnahmen Eine Ausnahme (Exception) ist ein Fehler oder ein nicht geplantes Ereignis, das während der Ausführung eines Programms vorkommt und dessen normalen
6 Speicherorganisation
Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen Speicherbereich für
1 Organisatorisches. 2 Compilezeit- und Laufzeitfehler. 3 Exceptions. 4 Try-Catch-Finally
Themen der Übung CoMa-Übung VI 1 Organisatorisches Compilezeit- und Laufzeitfehler 3 Try-Catch-Finally TU Berlin 8.11.01 Bewertung der OA 5 fehlerhaft, Madeleine arbeitet dran CoMa-Übung VI (TU Berlin)
Oliver Paulus, [email protected]. 7. Februar 2006. Spring Framework Einführung. Oliver Paulus, [email protected]. Was ist Spring?
[email protected] 7. Februar 2006 Inhalt 1 2 3 4 5 6 7 8 9 Inhalt 1 2 3 4 5 6 7 8 9 Inhalt 1 2 3 4 5 6 7 8 9 Inhalt 1 2 3 4 5 6 7 8 9 Inhalt 1 2 3 4 5 6 7 8 9 Inhalt 1 2 3 4 5 6 7 8 9 Inhalt 1 2
1. Zeilenendkommentare: //... 2. geklammerte Kommentare: /*... */ 3. Dokumentationskommentare: /**... */
1 Kommentare im Source-Code Kommentare werden im Source-Code überlesen und wirken wie "white Space" (Leerzeichen, Tabulator, Zeilenvorschub). Mit Ausnahme des @deprecated-tag in Dokumentationskommentaren
Interfaces und Vererbung
Interfaces und Vererbung Einführung in Java Folie 1 von 31 12. Mai 2011 Ivo Kronenberg Inhalt Interfaces Statische und dynamische Typen Visiblitätsmodifier Vererbung Überschreiben von Methoden Konstruktoren
Höhere Programmierkonzepte Testklausur
Höhere Programmierkonzepte Testklausur Prof. Dr. Nikolaus Wulff Zum 15. Januar 2016 1 Ein Google-Map Algorithmus (5 Punkte) 1 2 typedef void X; 3 typedef void Y; 4 5 void map(unsigned int n / tuple length
1 Polymorphie (Vielgestaltigkeit)
1 Polymorphie (Vielgestaltigkeit) Problem: Unsere Datenstrukturen List, Stack und Queue können einzig und allein int-werte aufnehmen. Wollen wir String-Objekte, andere Arten von Zahlen oder andere Objekttypen
Java Einführung Collections
Java Einführung Collections Inhalt dieser Einheit Behälterklassen, die in der Java API bereitgestellt werden Wiederholung Array Collections (Vector, List, Set) Map 2 Wiederholung Array a[0] a[1] a[2] a[3]...
3 Objektorientierte Konzepte in Java
3 Objektorientierte Konzepte in Java Bisherige Beobachtungen zu Objekten: werden in Klassen zusammengefasst besitzen Eigenschaften und Verhalten verbergen private Informationen werden geboren, leben und
Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java
Objektorientierte Programmierung mit Java Eine praxisnahe Einführung mit BlueJ Klassenentwurf Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? 1.0 Zentrale Konzepte
Javakurs zu Informatik I. Henning Heitkötter
Javakurs zu Informatik I Arrays vergleichen Implementieren Sie folgende Methode, die prüft, ob die Elemente der beiden Arrays an jeder Position übereinstimmen: public static boolean identisch(int[] a,
Programmieren von Webinformationssystemen
Programmieren von Webinformationssystemen Wolfgang Gassler Databases and Information Systems (DBIS) Institute of Computer Science University of Innsbruck dbis-informatik.uibk.ac.at 1 HTML Hypertext Markup
Rich Domain Model mit JPA 2.0
Rich Domain Model mit JPA 2.0 Adrian Hummel Consultant [email protected] Mischa Kölliker Principal Consultant [email protected] Java Forum Stuttgart, 1. Juli 2010 Basel Baden Bern
Javakurs für Anfänger
Javakurs für Anfänger Einheit 09: Vererbung Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil Einführung in die Vererbung Motivation Das Schlüsselwort extends Einführendes
Variablen manipulieren per JDI
Variablen manipulieren per JDI Zusammenfassung Jede moderne Java IDE verfügt über eine mächtige und dennoch meist einfach zu bedienende Benutzeroberfläche die das finden von Fehlern in lokalen oder entfernt
15 Fehlerobjekte: Werfen, Fangen, Behandeln
Tritt während der Programm-Ausführung ein Fehler auf, wird die normale Programm-ausführung abgebrochen und ein Fehlerobjekt erzeugt (geworfen). Die Klasse Throwable fasst alle Arten von Fehlern zusammen.
Java : Fehlerbehandlung.
Java : Fehlerbehandlung Prinzip Callerklassen / Workerklassen Arbeitet... Callerklasse Arbeitet... Workerklasse Arbeitet... Arbeitet weiter... Fer7g! Prinzip Callerklassen / Workerklassen Main- Methode
Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005
Einführung in Java PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Gliederung 1. Was ist Java / Geschichte von Java 2. Prinzip der Plattformunabhängigkeit 3. Wie kommt man vom Quellcode zum Programm
JUnit - Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 1
JUnit - Test Driven Development Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 1 Gliederung 1.Einleitung 1.1 Geschichte 1.2 Was sind Unit-Tests? 1.3 Failures/Errors 1.4 Ziele und Nutzen
3 Objektorientierte Konzepte in Java
3 Objektorientierte Konzepte in Java 3.1 Klassendeklarationen Fragen an die Klassendeklaration: Wie heißt die Klasse? Wer darf auf die Klasse und ihre Attribute/Methoden zugreifen? Ist die Klasse eine
Präsentation Interfaces
Einführung in Java Präsentation Interfaces Nozar Delassaei Marvi Inhalt 1. Erinnerung Klasse Objekte Beispiel Klasse Abstrakte Klasse Beispiel Abstrakte Klasse Mehrfachvererbung-1 Mehrfachvererbung-2 2.
Typumwandlungen bei Referenztypen
Typumwandlungen bei Referenztypen Genau wie es bei einfachen Typen Typumwandlungen gibt, gibt es auch bei Referenztypen Umwandlungen von einem Referenztypen in einen anderen Referenztypen, die wie bei
Software-Entwurfsmuster
Software-Entwurfsmuster Prinzip von Entwurfsmustern und einige elementare Beispiele Malte Spiess [email protected] Seminar Bildanalyse und Simulation mit Java im WS 2003/2004 Universität Ulm
Code-Erzeugung aus UML-Klassendiagrammen
Dominik 09.03.2009 Universität Ulm Gessenharter Inst. f. Programmiermethodik und Compilerbau Code-Erzeugung aus UML-Klassendiagrammen Theorie und Praxis Seite 2 REConf 2009 München Dominik Gessenharter
Design by Contract with JML
Thema: Design by Contract with JML Proseminar: Assertions Verfasser: Literatur: Betreuer: Natalya Moriz Gary T.Leavens and Yoonsik Cheon: Design by Contract with JML Prof. Dr. Heike Wehrheim 1 Inhalt DBC
Große Übung Praktische Informatik 1
Große Übung Praktische Informatik 1 2005-12-08 [email protected] http://www.informatik.uni-mannheim.de/pi4/people/fuessler 1: Announcements / Orga Weihnachtsklausur zählt als Übungsblatt,
Programmieren I. Kapitel 8. Vererbung
Programmieren I Kapitel 8. Vererbung Kapitel 8: Vererbung Ziel: Wesentliches objektorientiertes Konzept kennenlernen Subtypen Idee Probleme und Varianten Vererbung in Java dynamische Bindung abstrakte
Softwaretechnologie - Wintersemester 2012/2013 - Dr. Günter Kniesel
Übungen zur Vorlesung Softwaretechnologie - Wintersemester 2012/2013 - Dr. Günter Kniesel Übungsblatt 10 - Lösungshilfe Aufgabe 1. CRC-Karten (7 Punkte) Es geht um die Modellierung der folgenden Bibliotheks-Anwendung:
Nathan Burgener. Design by Contract. Modul SWE
NathanBurgener DesignbyContract ModulSWE NathanBurgener Inhaltsverzeichnis 1 WasistDesignbyContract...3 1.1 Überblick...3 1.2 DesignbyContractmitMethoden...4 1.3 DesignbyContractmitKlassen...5 1.4 Vererbung...6
Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung Warum Objektorientierung Daten und Funktionen möglichst eng koppeln und nach außen kapseln Komplexität der Software besser modellieren
Programmieren I + II Regeln der Code-Formatierung
Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme WS 2016/2017, SS 2017 Programmieren I + II Regeln der Code-Formatierung In diesem Dokument finden
Application Frameworks
Seminar Software Engineering 1 Grundlagen Agenda Spring Framework Dependency Injection Aspektorientierte Programmierung Datenbankanbindung Modell View Controller Sicherheit Spring vs. Java EE Zusammenfassung
Programmieren von Webinformationssystemen
Programmieren von Webinformationssystemen Nikolaus Krismer Databases and Information Systems (DBIS) Institute of Computer Science University of Innsbruck dbis-informatik.uibk.ac.at 1 PHP Ursprünglich:
Objektorientierte Programmierung. Kapitel 12: Interfaces
12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/
Äußere Form ArrayList Vererbung API. Einführung in Java. Arne Hüffmeier. Michelle Liebers, Dennis Hoffmann. Tilman Lüttje, Jean Wiele
Einführung in Java Arne Hüffmeier Michelle Liebers, Dennis Hoffmann Tilman Lüttje, Jean Wiele Angelehnt an Java-Vorkurs der Freitagsrunde 1 / 28 1 Äußere Form Kommentare Formatierung Schreibweise 2 ArrayList
Übungen zur Android Entwicklung
Übungen zur Android Entwicklung Aufgabe 1 Hello World Entwickeln Sie eine Hello World Android Applikation und laden diese auf den Emulator. Leiten Sie hierfür die Klasse android.app.activity ab und entwerfen
Kapitel 6. Vererbung
Kapitel 6 Vererbung Vererbung 1 Ziele Das Vererbungsprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen
Auszug aus JAX-WS Folien
Auszug aus JAXWS Folien Dieses Dokument ist ein Auszug aus unserem Skript zur Java Web Services Schulung. Es dient lediglich als Beispiel für unsere Kursunterlagen. Thomas Bayer Hauptstraße 33 75050 Gemmingen
Reversi: Server und manueller Spieler
Reversi: Server und manueller Spieler Plenum Programmierpraktikum 2006-12-14 Kodierung der Textdateien Einstellung für alle Projekte: Window Preferences Workspace Text file encoding. Auf UTF-8 stellen.
Einführung in Javadoc
Einführung in Javadoc Johannes Rinn http://java.sun.com/j2se/javadoc Was ist Javadoc? Javadoc ist ein Werkzeug, dass eine standardisierte Dokumentation für die Programmiersprache Java unterstützt. Vorteil:
Programmentwicklung ohne BlueJ
Objektorientierte Programmierung in - Eine praxisnahe Einführung mit Bluej Programmentwicklung BlueJ 1.0 Ein BlueJ-Projekt Ein BlueJ-Projekt ist der Inhalt eines Verzeichnisses. das Projektname heißt wie
Der EMF-generierte Code. 7. November 2012
Der EMF-generierte Code 7. November 2012 Überblick Wie sieht der aus einem EMF-Modell generierte Code aus? Wie ist die Beziehung zwischen Modell und Code? Wie kann generierter Code durch handgeschriebenen
Entwurfsprinzip. Entwurfsprinzip
Die Komposition (hat ein Beziehung) ist der Vererbung (ist ein Beziehung) vorzuziehen. Es können Familien von Algorithmen in eigenen Klassensätzen gekapselt werden. Das Verhalten lässt sich zu Laufzeit
A(T1) A(T2) A(T1) A(T2)
Kovarianz und Kontravarianz in Java Abstract In diesem Artikel werden die Java-Regeln für Kovarianz und Kontravarianz zusammengefasst. Hierzu wird Typkompatibilität definiert und die Fälle untersucht,
Javakurs für Anfänger
Javakurs für Anfänger Einheit 10: Mehr zur Vererbung und abstrakte Klassen Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Mehr zur Vererbung Methoden vererben und überschreiben
Informatik II (D-ITET) Übungsstunde 6
Informatik II (D-ITET) Übungsstunde 6 [email protected] Distributed Systems Group, ETH Zürich Ablauf Nachbesprechung Übung 5 Besprechung der Vorlesung Die neue Serie... Zeit zum Programmieren / für
1 Fehler-Objekte: Werfen, Fangen, Behandeln
1 Fehler-Objekte: Werfen, Fangen, Behandeln Tritt während der Programm-Ausführung ein Fehler auf, wird die normale Programm-ausführung abgebrochen und ein Fehler-Objekt erzeugt (geworfen). Die Klasse Throwable
Stapel (Stack, Keller)
Stapel (Stack, Keller) Eine wichtige Datenstruktur ist der Stapel. Das Prinzip, dass das zuletzt eingefügte Element als erstes wieder entfernt werden muss, bezeichnet man als LIFO-Prinzip (last-in, first-out).
Type Erasure in Java 5. Helmi Jouini Institut für Theoretische Informatik Universität Karlsruhe
Type Erasure in Java 5 Helmi Jouini Institut für Theoretische Informatik Universität Karlsruhe Warum Generics? Containerklassen in Java 1.4 sind generisch nutzbar aber typunsicher. Public class LinkedList
Einstieg in die Informatik mit Java
1 / 41 Einstieg in die Informatik mit Java Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 41 1 Überblick: Vererbung 2 Grundidee Vererbung 3 Verdeckte Variablen
Persistenz von Objekten relationale Datenbank Eigene Datenstruktur XML (JAXB) Proprietäre Dateiformate (Lochkarten)
Persistenz von Objekten relationale Datenbank Eigene Datenstruktur XML (JAXB) Proprietäre Dateiformate (Lochkarten) O/R Mapping - Objekte (Attribute) - 1:1, 1:n, n:m Beziehungen - Vererbungen (- Interfaces)
AuD-Tafelübung T-B5b
6. Übung Sichtbarkeiten, Rekursion, Javadoc Di, 29.11.2011 1 Blatt 5 2 OOP Klassen Static vs. Instanzen Sichtbarkeit 3 Stack und Heap Stack Heap 4 Blatt 6 1 Blatt 5 2 OOP Klassen Static vs. Instanzen Sichtbarkeit
Übung 1 mit C# 6.0 MATTHIAS RONCORONI
Übung 1 mit C# 6.0 MATTHIAS RONCORONI Inhalt 2 1. Überblick über C# 2. Lösung der Übung 1 3. Code 4. Demo C# allgemein 3 aktuell: C# 6.0 mit.net-framework 4.6: Multiparadigmatisch (Strukturiert, Objektorientiert,
Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.
Grundwissen Informatik Objekt Attribut Methoden Als Objekte bezeichnet man alle Gegenstände, Dinge, Lebewesen, Begriffe oder Strukturen unserer Welt ( Autos, Räume, Bakterien, Lehrer, Schüler, Kunden,
