Softwareproduktlinien Teil 9: Features vs. Aspekte
|
|
- Ingelore Fanny Diefenbach
- vor 6 Jahren
- Abrufe
Transkript
1 Softwareproduktlinien Teil 9: Features vs. Aspekte Sven Apel (Universität Passau) Christian Kästner (Universität Marburg) Gunter Saake (Universität Magdeburg)
2 AOP vs. FOP AOP und FOP implizieren keine konkreten Implementierungstechniken Unterscheiden sich in ihrer Philosophie AOP fokussiert auf querschneidende Belange FOP fokussiert auf Domänenabstraktionen Dennoch werden oft konkrete Implementierungstechniken mit ihnen in Verbindung gebracht AOP Pointcuts & Advice, Inter-Typ-Deklarationen FOP Klassen, Refinements, Mixin/Jampack-Komposition
3 Motivation AOP à la AspectJ und FOP à la Jak haben ähnliche Ziele Können beide für Produktlinien verwendet werden Wo liegen die Unterschiede und Gemeinsamkeiten? Wann nutzt man welchen Ansatz? Kann bzw. sollte man FOP und AOP kombinieren um Features zu implementieren?
4 Feature-Module à la Jak Basic Graph class Graph { Vector nv = new Vector(); Vector ev = new Vector(); Edge add(node n, Node m) { Edge e = new Edge(n, m); nv.add(n); nv.add(m); ev.add(e); return e; void print() { for(int i = 0; i < ev.size(); i++) ((Edge)ev.get(i)).print(); class Edge { Node a, b; Edge(Node _a, Node _b) { a = _a; b = _b; void print() { a.print(); b.print(); class Node { int id = 0; void print() { System.out.print(id);
5 Feature-Module à la Jak Basic Graph class Graph { Vector nv = new Vector(); Vector ev = new Vector(); Edge add(node n, Node m) { Edge e = new Edge(n, m); nv.add(n); nv.add(m); ev.add(e); return e; void print() { for(int i = 0; i < ev.size(); i++) ((Edge)ev.get(i)).print(); class Edge { Node a, b; Edge(Node _a, Node _b) { a = _a; b = _b; void print() { a.print(); b.print(); class Node { int id = 0; void print() { System.out.print(id); Weight refines class Graph { Edge add(node n, Node m) { Edge e = Super(Node,Node).add(n, m); e.weight = new Weight(); Edge add(node n, Node m, Weight w) Edge e = new Edge(n, m); nv.add(n); nv.add(m); ev.add(e); e.weight = w; return e; refines class Edge { Weight weight = new Weight(); void print() { Super(),print(); weight.print(); class Weight { void print() {...
6 Aspekte à la AspectJ Basic Graph class Graph { Vector nv = new Vector(); Vector ev = new Vector(); Edge add(node n, Node m) { Edge e = new Edge(n, m); nv.add(n); nv.add(m); ev.add(e); return e; void print() { for(int i = 0; i < ev.size(); i++) ((Edge)ev.get(i)).print(); class Edge { Node a, b; Edge(Node _a, Node _b) { a = _a; b = _b; void print() { a.print(); b.print(); class Node { int id = 0; void print() { System.out.print(id);
7 Aspekte à la AspectJ Basic Graph class Graph { Vector nv = new Vector(); Vector ev = new Vector(); Edge add(node n, Node m) { Edge e = new Edge(n, m); nv.add(n); nv.add(m); ev.add(e); return e; void print() { for(int i = 0; i < ev.size(); i++) ((Edge)ev.get(i)).print(); class Edge { Node a, b; Edge(Node _a, Node _b) { a = _a; b = _b; void print() { a.print(); b.print(); class Node { int id = 0; void print() { System.out.print(id); Color aspect ColorAspect { static class Colored { Color color; declare parents: (Node Edge) extends Colored; before(colored c) : execution(void print()) && this(c) { Color.setDisplayColor(c.color); static class Color {...
8 AOP vs. FOP
9 AOP vs. FOP Aspekt
10 Terminologie AOP FOP Analyse, Design Aspekt-Orientierte Modellierung Frühe Aspekte (early aspects) Aspekte als Funktionen Feature-Modellierung Feature-Ausdrücke Quarks und Co. Domänen-spezifische Optimierung Implementierung Aspekt = Klasse, Advice, Inter-Typ- Deklarationen AspectJ, AspectC++, Eos Feature-Modul = Klassen, Refinements, Mixin/Jampack- Komposition Jak, FeatureC++, FeatureHouse, Classbox/J, Jiazzi, ObjectTeams/Java
11 Heterogene vs. Homogene Erweiterungen Heterogen: unterschiedlichen Code an unter-schiedliche Stellen Homogen: gleichen Code an unterschiedlichen Stellen class Graph { Edge add(node n, Node m) { Edge e = new Edge(n, m); nv.add(n); nv.add(m); ev.add(e); e.weight = new Weight(); return e; Edge add(node n, Node m, Weight w) Edge e = new Edge(n, m); nv.add(n); nv.add(m); ev.add(e); e.weight = w; return e; class Edge { Weight weight = new Weight(); Edge(Node _a, Node _b) { a = _a; b = _b; void print() { a.print(); b.print(); weight.print(); class Node { int id = 0; Color color = new Color(); void print() { Color.setDisplayColor(color); System.out.print(id); class Edge { Node a, b; Color color = new Color(); Edge(Node _a, Node _b) { a = _a; b = _b; void print() { Color.setDisplayColor(color); a.print(); b.print();
12 Statische vs. Dynamische Erweiterungen Statisch: verändern die statische Struktur (syntaktische Struktur) Dynamisch: ändern das Verhalten (Ereignis und Aktion) class Node { int id = 0; Color color = new Color(); void print() { System.out.print(id); class Node { int id = 0; void print() { Color.setDisplayColor(color); System.out.print(id);
13 Einfache und Erweiterte Dynamische Erweiterungen Einfache dynamische Erweiterungen Erweitern von Methodenausführungen Ohne Bedingungen zur Laufzeit Kein Zugriff auf den Kontext des Ereignisses Außer Argumente, Rückgabewert und Objekt Komplexe dynamische Erweiterungen Alle Arten von Ereignissen Bedingungen zur Laufzeit (Kontrollfluss) Zugriff auf den dynamischen Kontext Einfache dynamische Erweiterungen sind Methodenerweiterungen mittels Overriding!
14 Beispiele für Einfache Dynamische Erweiterungen class Edge { int weight = 0; void setweight(int w) { weight = w; int getweight() { return weight; refines class Edge { void setweight(int w) { Super(int).setWeight(2*w); Jak int getweight() { return Super().getWeight()/2; AspectJ aspect DoubleWeight { void around(int w) : args(w) && execution(void Edge.setWeight(int)) { proceed(w*2); int around() : execution(void Edge.getWeight()) { return proceed()/2;
15 Beispiele für Komplexe Dynamische Erweiterungen class Node { void print() { Jak refines class Node { static int count = 0; void print() { if(count == 0) printheader(); count++; Super().print(); count--; void printheader() { /*... */ AspectJ aspect PrintHeader { before() : execution(void print()) &&!cflowbelow(execution(void print())) { printheader(); void printheader() { /* */
16 Vergleich von FOP und AOP statisch dynamisch FOP gute Unterstützung Attribute, Methoden, Klassen schlechte Unterstützung einfach dynamisch (Erweiterung von Methoden) AOP eingeschränkte Unterstützung Attribute, Methoden gute Unterstützung erweitert dynamisch heterogen gute Unterstützung Verfeinerungen und Kollaborationen eingeschränkte Unterstützung keine expliziten Kollaborationen homogen Keine Unterstützung Eine Verfeinerung pro Join-Point (Code-Replikation) gute Unterstützung Wildcards und logische Verknüpfung von Pointcuts
17 Vergleich von FOP und AOP statisch dynamisch FOP gute Unterstützung Attribute, Methoden, Klassen schlechte Unterstützung einfach dynamisch (Erweiterung von Methoden) AOP eingeschränkte Unterstützung Attribute, Methoden gute Unterstützung erweitert dynamisch heterogen gute Unterstützung Verfeinerungen und Kollaborationen eingeschränkte Unterstützung keine expliziten Kollaborationen homogen Keine Unterstützung Eine Verfeinerung pro Join-Point (Code-Replikation) gute Unterstützung Wildcards und logische Verknüpfung von Pointcuts
18 Kollaborationen anstatt von Aspekten Homogene Erweiterungen führen zu Replikation Graph Edge Node BaseGraph Graph Edge Node Color refines class Graph { Color color ; Color getcolor () { return color; void setcolor (Color c) { color = c; refines class Edge { Color color ; Color getcolor () { return col; void setcolor (Color c) { color = c; refines class Node { Color color; Color getcolor () { return col; void setcolor (Color c) { color = c;
19 Kollaborationen anstatt von Aspekten Dynamische Erweiterungen resultieren in Spagetti-Code print print print print AspectJ aspect PrintHeader { before() : execution(void print ()) &&!cflowbelow (execution(void print ())) { printheader (); void printheader () { /* */ Jak refines class Node { static int count = 0; void print () { if(count == 0) printheader (); count++; Super().print (); count--; void printheader () { /*... */
20 Aspekte anstatt von Kollaborationen Ein Aspekt pro Kollaboration Graph Edge Node BaseGraph OO-Struktur ist nicht explizit aspect AddWeight { Edge Graph.add(Node n, Node m, Weight w) { Edge res = add(n, m); res.weight = w; return res; Weight Edge.weight ; after(edge e) : this(e) && execution(void Edge.print ()) { /* */
21 Eine Frage der Skalierbarkeit Aspekt
22 Alternative: Ein Aspekt pro Rolle Aspektweben Aspektweben ersetzt Klassenverfeinerung und Superimposition ohne zusätzlichen Vorteil!
23 Fazit Der Einsatz von Aspekten und Kollaborationen ist abhängig vom zu implementierenden Problem Aspekte und Kollaboration sind unterschiedlich geeignet
24 Symbiose AOP und FOP
25 Die Symbiose von FOP und AOP OOP
26 Die Symbiose von FOP und AOP OOP FOP
27 Die Symbiose von FOP und AOP OOP AOP FOP
28 Die Symbiose von FOP und AOP OOP FOP FOP + AOP AOP
29 Aspectual Feature Modules Integration von Aspekten, Klassen und Verfeinerungen Basic Graph Graph Edge Node
30 Aspectual Feature Modules Integration von Aspekten, Klassen und Verfeinerungen Verfeinerung auf Basis von Rollen und Kollaborationen Basic Graph Graph Edge Node Weight Weight Graph Edge
31 Aspectual Feature Modules Integration von Aspekten, Klassen und Verfeinerungen Verfeinerung auf Basis von Rollen und Kollaborationen Basic Graph Graph Edge Node Weight Weight Graph Edge Color ColorAspect Color Aspektweben
32 Werkzeugunterstützung FeatureC++ & AspectC++ Aspectual Feature Modules für C++ Direkte Sprachunterstützung Compilieren erst mit FeatureC++ dann mit AspectC++ Compiler AHEAD Tool Suite & AspectJ Java-basierte Variante von Aspectual Feature Modules Aspekt-Dateien in Feature Modulen; übersetzen mit AspectJ Compiler (z.z. keine direkte Unterstützung in FeatureIDE)
33 33 Aspect Refinement
34 Wiederholung: Prinzip der Uniformität Features are implemented by a diverse selection of software artifacts, and any kind of software artifact can be subject of subsequent refinement. Feature A.java.html Feature B.java.xml Feature C.html.xml Build Script 34 Code Documentation
35 Aspekte Eine weitere Art von Softwareartefakt Aspekte kollaborieren mit anderen Artefakten, um ein Feature zu implementieren Feature A.java Feature B.java.aj.aj Aspectual Feature Module 35
36 Idee Feature A.java Feature B Feature C.java.aj.aj.aj Wieso können wir nicht auch Aspekte selbst verfeinern? 36
37 Beispiel AspectJ class Buffer { { Vector buf = buf new = Vector(); new Vector(); void void put(item put(item e) { buf.add(e); { buf.add(e); Item Item get(int get(int i) { return i) (Item)buf.get(i); { return (Item)buf.get(i); Buffer Item Base 37
38 Beispiel AspectJ class Buffer { Vector buf = new Vector(); void put(item e) { buf.add(e); Item get(int i) { return (Item)buf.get(i); Buffer Sync Buffer Item Base Sync abstract aspect BufferSync { pointcut syncpc() : execution(item Buffer.get(int)) execution(void Buffer.put(Item)); Object around() : syncpc() { lock(); Object res = proceed(); unlock(); return res; 38
39 Beispiel AspectJ class Buffer { Vector buf = new Vector(); void put(item e) { buf.add(e); Item get(int i) { return (Item)buf.get(i); Buffer Sync Buffer Item Base Sync abstract aspect BufferSync { pointcut syncpc() : execution(item Buffer.get(int)) execution(void Buffer.put(Item)); Object around() : syncpc() { lock(); Object res = proceed(); unlock(); return res; Stack Sync Stack Stack class Stack { LinkedList list = new LinkedList(); void push(item i) { list.addfirst(i); Item pop() { return (Item)list.getFirst(); aspect StackSync extends BufferSync { pointcut syncpc() : BufferSync.syncPC() execution(item Stack.pop()) execution(void Stack.push(Item)); 39
40 Limitierungen von AspectJ Aspektvererbung Aspekte, die verfeinert werden sind fest Enge Kopplung zwischen Aspekt und Verfeinerung Siehe Inflexible Erweiterungsmechanismen Abstrakte Aspekte Nur abstrakte Aspekte können verfeinert werden Verfeinerungen müssen vorausgeplant sein Advice-Konstrukte haben keinen Namen Können nicht verfeinert werden 40
41 Kollaborationen und Rollen für Aspekte Analog zu Klassenverfeinerungen Verfeinerungen zur Übersetzungszeit Jeder Aspekt kann verfeinert werden AspectJ-Erweiterung auf Basis von Jak (experimenteller Compiler arj), teilweise in FeatureC++ möglich A.java.aj A.java.aj A.java.aj B.java.aj.aj B.java.aj.aj 41 C.aj C.aj
42 Hinzufügen von Elementen und Erweitern von Methoden aspect Sync { void lock() { /* locking access */ void unlock() { /* unlocking access */ refines aspect Sync { int threads; void lock() { threads++; Super.lock(); void unlock() { threads--; Super.unlock(); pointcut syncpc() : execution(item Buffer.get(int)) execution(void Buffer.put(Item)); Object around() : syncpc() { lock(); Object res = proceed(); unlock(); return res; 42
43 Pointcut Refinement aspect Sync { pointcut syncpc() : execution(item Buffer.get(int)) execution(void Buffer.put(Item)); Object around() : syncpc() {/* synchronization */ refines aspect Sync { pointcut syncpc() : Super.syncPC() execution(* Stack.*(..)); 43
44 (Named) Advice Refinement aspect Sync { pointcut syncpc() : execution(* Buffer.*(..)); Object around syncmethod() : syncpc() { lock(); Object res = proceed(); unlock(); return res; refines aspect Sync { int count = 0; Object syncmethod() { count++; Object res = Super.syncMethod(); count--; return res; 44
45 Werkzeugunterstützung FeatureC++ & AspectC++ Ohne Advice Refinement AspectJ Experimenteller Compiler ARJ Erweiterung von AspectJ (z.z. keine direkte Unterstuetzung in FeatureIDE)
46 47 Fallstudien zur Nutzung von AOP
47 Warum Fallstudien Bisher Aspekte und Kollaborationen sind komplementär Einsatz von Aspekten und Kollaborationen ist abhängig vom Implementierungsproblem Aspekte und Kollaboration sind unterschiedlich geeignet Möglichkeit zu Aspect Refinement Fragen: Warum nicht einfach immer Kollaborationen oder immer Aspekte benutzen? Spielen ihre Unterschiede wirklich eine Rolle? Was wird in der Praxis gebraucht?
48 Vorgehen Empirische Analyse von 10 existierenden AspectJ Programmen AspectJ-Programme vorhanden AspectJ: Obermenge aller untersuchten Funktionalität FOP für empirische Analyse nicht ausreichend verbreitet Erfassung von Metriken Teils manuell Teils automatisiert: AJStats 1, AJDTStats
49 Analysierte AspectJ-Programme Tetris The popular game 1 KLOC Blekinge Institute of Technology OAS An online auction system 2 KLOC Lancaster University Prevayler Transparent persistence for Java 4 KLOC University of Toronto AODP Aspect-oriented implementation of the Gang-of-Four design patterns 4 KLOC University of British Columbia FACET An aspect-based CORBA event channel 6 KLOC Washington University HealthWatcher Web-based information system for public health systems 7 KLOC Lancaster University AJHotDraw 2D graphics framework 22 KLOC Sourceforge project Hypercast Multicast overlay network communication 67 KLOC University of Virginia, Microsoft AJHSQLDB SQL relational database engine 76 KLOC University of Passau Abacus A CORBA middleware framework 130 KLOC University of Toronto
50 fraction of the overall code base Verwendung von AOP 100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0% object-oriented code basic AOP advanced AOP
51 Aspect Refinement in P2P-PL 7 von 14 Aspekten wurden verfeinert Name No. of Ref. Description serialization 11 prepares objects for serialization responding 4 sends replies automatically tostring 12 introduces tostring methods log/debug 13 mix of logging and debugging pooling 3 stores and reuses open connections dissemination 3 piggyback meta-data propagation feedback 2 generates feedback by observing peers 53
52 Literatur zu Vergleich und Symbiose S. Apel, T. Leich, and G. Saake. Aspectual Feature Modules. IEEE Transactions on Software Engineering, 34(2), [Aspectual Feature Modules sehr ausführlich] S. Apel. How AspectJ is Used: An Analysis of Eleven AspectJ Programs. Journal of Object Technology, 9(1), [Analyse von 11 AspectJ-Programmen]
Softwareproduktlinien - Features vs. Aspekte
Softwareproduktlinien - Features vs. Aspekte Sven Apel (Universität Passau) Christian Kästner (Universität Marburg) Gunter Saake (Universität Magdeburg) AOP vs. FOP AOP und FOP implizieren keine konkreten
MehrSoftwareproduktlinien Teil 9: Features vs. Aspekte
Softwareproduktlinien Teil 9: Features vs. Aspekte Sven Apel (Universität Passau) Christian Kästner (Universität Marburg) Gunter Saake (Universität Magdeburg) 1 2 Fallstudien zur Nutzung von AOP Warum
MehrSo#wareproduktlinien - Feature-Orien4erung. Sven Apel (Universität Passau) Chris4an Kästner (CMU) Gunter Saake, Thomas Thüm (Universität Magdeburg)
So#wareproduktlinien - Feature-Orien4erung Sven Apel (Universität Passau) Chris4an Kästner (CMU) Gunter Saake, Thomas Thüm (Universität Magdeburg) 1 Wie Variabilität implemen4eren? Domain Eng. Feature-Modell
MehrSoftwareproduktlinien Teil 5: Präprozessoren (Variabilitätsannotationen)
Softwareproduktlinien Teil 5: Präprozessoren (Variabilitätsannotationen) Christian Kästner (Universität Marburg) Sven Apel (Universität Passau) Gunter Saake (Universität Magdeburg) Wie Variabilität implementieren?
MehrSoftwareproduktlinien - Laufzeitvariabilität
Softwareproduktlinien - Laufzeitvariabilität Christian Kästner (Universität Marburg) Sven Apel (Universität Passau) Gunter Saake, Thomas Thüm (Universität Magdeburg) 1 Wie Variabilität implementieren?
MehrSoftwareproduktlinien Teil 3: Laufzeit-Variabilität
Softwareproduktlinien Teil 3: Laufzeit-Variabilität Christian Kästner (Universität Marburg) Sven Apel (Universität Passau) Gunter Saake (Universität Magdeburg) 1 Application Eng. Domain Eng. Wie Variabilität
MehrErweiterte Programmierkonzepte für maßgeschneiderte Datenhaltung Teil 3: Software-Produktlinien
Erweiterte Programmierkonzepte für maßgeschneiderte Datenhaltung Teil 3: Software-Produktlinien Sven Apel, Christian Kästner, Gunter Saake Apel, Kästner, Saake EPMD Folie 3-2 Agenda Produktlinien und Programmfamilien
MehrSoftwareproduktlinien Teil 8: Aspektorientierung
Softwareproduktlinien Teil 8: Aspektorientierung Sven Apel (Universität Passau) Christian Kästner (Universität Marburg) Gunter Saake (Universität Magdeburg) Agenda Aspektorientierte Programmierung: Ideen
MehrSoftwareproduktlinien Teil 7: Feature-Orientierung
Softwareproduktlinien Teil 7: Feature-Orientierung Sven Apel (Universität Passau) Christian Kästner (Universität Marburg) Gunter Saake (Universität Magdeburg) 1 Application Eng. Domain Eng. Wie Variabilität
MehrSoftwareproduktlinien - Versionsverwaltungs- und Buildsysteme
Softwareproduktlinien - Versionsverwaltungs- und Buildsysteme Christian Kästner (Carnegie Mellon University) Sven Apel (Universität Passau) Gunter Saake, Martin Kuhlemann (Universität Magdeburg) 1 Application
MehrSoftwareproduktlinien - Refactoring von SPLs und ihren Produkten
Softwareproduktlinien - Refactoring von SPLs und ihren Produkten Sven Apel (Universität Passau) Christian Kästner (CMU) Martin Kuhlemann, Gunter Saake (Universität Magdeburg) Agenda Grundlagen Refaktorisierung
MehrSoftwareproduktlinien Teil 4: Versionsverwaltungs- und Buildsysteme
Softwareproduktlinien Teil 4: Versionsverwaltungs- und Buildsysteme Christian Kästner (Universität Marburg) Sven Apel (Universität Passau) Gunter Saake (Universität Magdeburg) 1 Application Eng. Domain
MehrEPMD Teil 6 Feature-Orientierung
EPMD Teil 6 Feature-Orientierung Christian Kästner (Universität Magdeburg) Sven Apel (Universität Passau) Gunter Saake (Universität Magdeburg) Kästner, Apel, Saake EPMD Folie 6-2 Grundidee Agenda Implementierung
MehrEinführung in AOP. Rico Schiekel - 012816 rschiekel@web.de. Agenda. Kernproblem der Objekt Orientierung
Einführung in AOP Informatikseminar Rico Schiekel - 012816 rschiekel@web.de Fachhochschule Ravensburg Weingarten Hochschule für Technik und Sozialwesen Einführung in AOP Agenda Kernproblem der Objekt Orientierung
MehrInstrumentation von Android Anwendungen mit ExplorViz
Instrumentation von Android Anwendungen mit ExplorViz Jan Witzany 28. September 2016 Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz 28. September 2016 1 / 19 Gliederung 1. Motivation
MehrTeil 5 Objektorientierung und ihre Grenzen
Erweiterte Programmierkonzepte für maßgeschneiderte Datenhaltung Teil 5 Objektorientierung und ihre Grenzen Christian Kästner, Gunter Saake, Sven Apel Erweiterte Programmierkonzepte für maßgeschneiderte
MehrFeature-Komposition auf Bytecode-Ebene
Feature-Komposition auf Bytecode-Ebene Claus Hunsen Sergiy Kolesnikov Sven Apel FOSD-Treffen 2012 Feature-Komposition Quellcode-Komposition Feature-Module (Quellcode) ➊ Komposition Variante (Quellcode)
MehrSoftware Product Lines
Software Product Lines Concepts, Analysis and Implementation Programmier-Paradigmen für Software-Produktlinien (3/3) ES Real-Time Systems Lab Prof. Dr. rer. nat. Andy Schürr Dept. of Electrical Engineering
MehrWas sind embedded DBMS? Eingebettete DBMS. Motivation für Embedded Databases. Besonderheiten Smartcards. in Programme eingebettet z.b.
Eingebettete DBMS Was sind embedded DBMS? in Programme eingebettet z.b. (embedded database management systems) Aktuelle Praxis und Herausforderungen Berkeley DB DB4O embedded systems z.b. Smartcard Christian
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Tafelübung 03 Vererbung, Polymorphie, Sichtbarkeit, Interfaces Clemens Lang T2 11. Mai 2010 14:00 16:00, 00.152 Tafelübung zu AuD 1/26 Klassen und Objekte Klassen und Objekte
MehrModerne Programmierparadigmen Objekt-Orientierung
Moderne Programmierparadigmen Objekt-Orientierung Sven Apel (Universität Passau) Christian Kästner (Universität Magdeburg) Sven Apel, Christian Kästner Moderne Programmierparadigmen Folie 2 Agenda Historie
MehrDie Rolle von Features und Aspekten in der Softwareentwicklung
Die Rolle von Features und Aspekten in der Softwareentwicklung Sven Apel Lehrstuhl für Programmierung Universität Passau Innstraße 33, 94032 Passau apel@uni-passau.de Abstract: Feature-orientierte Programmierung
MehrSoftwareproduktlinien Teil 11: Verbesserte Präprozessoren
Softwareproduktlinien Teil 11: Verbesserte Präprozessoren Christian Kästner (Universität Marburg) Sven Apel (Universität Passau) Gunter Saake (Universität Magdeburg) Agenda Wiederholung: Probleme von Präprozessoren
MehrObjekt-orientierte Programmierung
Objekt-orientierte Programmierung Eine (sehr) kurze Einführung Daniel Lübke Gliederung Motivation Grundlagen (Objekte, Klassen, Vererbung) Interfaces Klassenvariablen
MehrAdvanced Software Engineering WS0910 Kapitel4. Dr. Dominik Haneberg
Advanced Software Engineering WS0910 Kapitel4 Dr. Dominik Haneberg ASPEKT-ORIENTIERTE ENTWICKLUNG 08.02.2010 Advanced Software Engineering 2 Einführung Aspektorientierte Programmierung (AOP) ist ein Programmierparadigma,
MehrAnwendung der Aspektorientierung : Security
Seminar AOSD Anwendung der Aspektorientierung : Security Miao Tang Betreuer: Dipl.-Inform. Dirk Wischermann 1. Motivation Anwendung der AO: Security 2 Sicherheitsprobleme beim Design und bei der Programmierung
MehrAspekt Orientierte Programmierung
Kapitel 13 Aspekt Orientierte Programmierung 13.1 Aspekte in Apache Wir betrachten den Quellcode des Apache-Servers: Der Code zum XML-Parsen steckt in einer eigenen Klasse (rot) Quelle: aspectj.org 0 ausgearbeitet
MehrOOP. Tagesprogramm. Aspektorientierte Programmierung. Annotationen
1 2014-12-03 Tagesprogramm Aspektorientierte Programmierung Annotationen 2 Aspektorientierte Programmierung Programmierparadigma AspectJ separation of concerns Modularisierung Aspekte kapseln Verhalten
MehrAspektorientierte Programmierung
Aspektorientierte Programmierung Programmierparadigma AspectJ separation of concerns Modularisierung Aspekte kapseln Verhalten das mehrere Klassen betrifft Objektorientierte Programmiertechniken: Aspektorientiertheit,
MehrVerifikation und AO Florian Wagner
Verifikation und Aspektorientierung Inhalt Klassifikation und Analyse von Adivces AOP-Fehlermodell und Testkriterien Verifikation Model-Checking State-Based Incremental Testing 2 KLASSIFIKATION UND ANALYSE
MehrDecorator Pattern. Analyse- und Design-Pattern CAS SWE FS14. Roland Müller Samuel Schärer
Decorator Pattern Analyse- und Design-Pattern CAS SWE FS14 Roland Müller Samuel Schärer Entwurfsmuster der «Gang of Four» Strukturmuster fassen Klassen und Objekte zu grösseren Strukturen zusammen Adapter
MehrSoftwareproduktlinien Teil 12: Analyse von Produktlinien
Softwareproduktlinien Teil 12: Analyse von Produktlinien Christian Kästner (Universität Marburg) Sven Apel (Universität Passau) Gunter Saake (Universität Magdeburg) inkl. Folien von Das Problem Database
MehrEinfache Liste: Ein Stapel (Stack) Ansatz. Schaubild. Vorlesung 1. Handout S. 2. Die einfachste Form einer Liste ist ein Stapel (stack).
Programmieren I Martin Schultheiß Hochschule Darmstadt Sommersemester 2011 1 / 64 2 / 64 Motivation Hauptteil dieser Vorlesung sind die so genannten. Zur Motivation (und als Vorbereitung der Datencontainer-Klassen
MehrObjektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)
Stefan Brass: OOP (Java), 22. Aufzählungstypen 1/20 Objektorientierte Programmierung Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester
Mehr12 Abstrakte Klassen, finale Klassen und Interfaces
12 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,
MehrSoftwareproduktlinien - Analyse von Produktlinien
Softwareproduktlinien - Analyse von Produktlinien Christian Kästner (CMU) Sven Apel (Universität Passau) Gunter Saake, Thomas Thüm (Universität Magdeburg) Das Problem Variability = Complexity 33 optional,
Mehr1 Klassen und Objekte
1 Klassen und Objekte Datentyp - Spezifikation des Typs von Datenobjekten Datenstruktur - logische Ordnung von Elementen eines Datentyps - zur (effizienten) Speicherung, Verwaltung, Zugriff - auf die Elemente
MehrKapitel 9 Schnittstellen
Kapitel 9 Schnittstellen Korbinian Molitorisz IPD Tichy Lehrstuhl für Programmiersysteme KIT die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH) Agenda Was ist eine Schnittstelle?
MehrAspektorientierte Programmierung (aspect-oriented programming, AOP)
Aspektorientierte Programmierung (aspect-oriented programming, AOP) Abstract Die aspektorientierte Programmierung ist ein neues Programmierparadigma, das die Probleme und Nachteile, die aus der prozeduralen
MehrInnere Klassen. Innere Klassen. Page 1. Lernziele: innere Klassen, statische geschachtelte Klassen, anonyme Klassen.
Innere Klassen Innere Klassen Lernziele: innere Klassen, statische geschachtelte Klassen, anonyme Klassen. Literatur: Java Tutorial & Arnold, K., Gosling, J. und Holmes,D... Page 1 Innere Klassen Der erste
MehrObjects First With Java A Practical Introduction Using BlueJ. Mehr über Vererbung. Exploring polymorphism 1.0
Objects First With Java A Practical Introduction Using BlueJ Mehr über Vererbung Exploring polymorphism 1.0 Zentrale Konzepte dieses Kapitels Methoden-Polymorphie statischer und dynamischer Typ Überschreiben
MehrApplication Frameworks
Seminar Software Engineering 1 Grundlagen Agenda Spring Framework Dependency Injection Aspektorientierte Programmierung Datenbankanbindung Modell View Controller Sicherheit Spring vs. Java EE Zusammenfassung
MehrImplementierung v. Software-Produktlinien - Einführung und Überblick
Implementierung v. Software-Produktlinien - Einführung und Überblick Christian Kästner (Carnegie Mellon University) Sven Apel (Universität Passau) Gunter Saake, Thomas Thüm (Universität Magdeburg) 1 Agenda
MehrImplementierung v. Software-Produktlinien - Einführung und Überblick
Implementierung v. Software-Produktlinien - Einführung und Überblick Christian Kästner (Carnegie Mellon University) Sven Apel (Universität Passau) Gunter Saake, Thomas Thüm (Universität Magdeburg) 1 Agenda
MehrHauptseminar AOSD. Aspektorientierte Programmierung am Beispiel AspectJ
Hauptseminar AOSD Aspektorientierte Programmierung am Beispiel Seite 1 Aspektorientierte Programmierung Umfeld - eine Definition Elemente in Introduction Pointcut Join Point Advice Aspect Errors and Warnings
Mehr14 Abstrakte Klassen, finale Klassen, Interfaces
Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält, heißt ebenfalls abstrakt. Für eine abstrakte Klasse
MehrCiAO (CiAO is Aspect-Oriented)
CiAO (CiAO is Aspect-Oriented) Eine aspektorientiert entworfene Betriebssystemfamilie Daniel Lohmann Olaf Spinczyk Wolfgang Schröder-Preikschat Lehrstuhl für Informatik IV Verteilte Systeme und Betriebssysteme
Mehr14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen
Auswertung von Ausdrücken Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält, heißt ebenfalls abstrakt.
MehrFehlertoleranz durch aspektorientierte Programmierung
Fehlertoleranz durch aspektorientierte Programmierung Max Günther Technische Universität Dortmund 5. März 2013 1 / 34 Motivation Fehlertoleranz ist wichtig aber mühselig in Software einzubauen Abhilfe
MehrProgrammieren in Java
Einführung in die Objektorientierung Teil 4 Interfaces, innere Klassen und Polymorphie 2 Vererbung im Klassendiagram (Wiederholung) Vererbung repräsentiert eine ist ein Beziehung zwischen Klassen Ware
MehrII.4.5 Generische Datentypen - 1 -
1. Unterklassen und Vererbung 2. Abstrakte Klassen und Interfaces 3. Modularität und Pakete 4. Ausnahmen (Exceptions) 5. Generische Datentypen 6. Collections II.4.5 Generische Datentypen - 1 - Ähnliche
MehrAOP Day 07. eine Veranstaltung der SIG AspectJ. organisiert vom AOP-Komitee. und der guten Fee. powered by. Oliver Böhm Darko Palic Ludger Solbach
AOP Day 07 eine Veranstaltung der SIG AspectJ organisiert vom AOP-Komitee Oliver Böhm Darko Palic Ludger Solbach und der guten Fee Bori Gerhardt powered by Historisches (1) Dez. 2005: AspectJ Winter Camp
MehrJava Vererbung. Inhalt
Java Vererbung Inhalt 1 Zielsetzung... 2 1.1 Bewertung... 2 2 Grundlagen der Vererbung... 2 2.1 Super und Subklassen... 2 3 Überladen von Methoden... 4 3.1 Unterschiedliche Parameter... 4 3.2 Gleiche Parameter
MehrDeklaration einer Klasse Innere innerhalb Klassen einer in Ja anderen v a Klasse
Innere Klassen in Java Java 1.0: nur top-level Klassen Seit Java Version 1.1: Innere Klassen Deklaration einer Klasse innerhalb einer anderen Klasse Illustration Eigenschaften Vorteile Anwendungsmöglichkeiten
MehrBehutsame Modernisierung
Software Evolution mit Legacy Systemen Forum Forschungsförderung / ViSEK Trends im Software Engineering Software Evolution mit Legacy Systemen Behutsame Modernisierung Jan Wloka
MehrSoftwareproduktlinien Teil 12: Analyse von Produktlinien. Sven Apel (Universität Passau) Gunter Saake (Universität Magdeburg)
Softwareproduktlinien Teil 12: Analyse von Produktlinien ChristianKästner (Universität Marburg) Sven Apel (Universität Passau) Gunter Saake (Universität Magdeburg) inkl. Folien von Das Problem Database
MehrSchlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:
Musterlösung Übung 7 Aufgabe 1 Sehen wir uns zu allererst das gegebene Forth Programm an: 0 3 new - list constant list1 list1 5 new - list constant list2 list1 6 new - list constant list3 list2 2 new -
MehrAutomatische Verteilung in Pangaea. André Spiegel Freie Universität Berlin
Automatische Verteilung in Pangaea André Spiegel Freie Universität Berlin Einführung Pangaea ist ein System, das zentralisierte Java-Programme automatisch verteilen kann basierend auf statischer Quelltextanalyse
MehrJavakurs für Anfänger
Javakurs für Anfänger Einheit 13: Interfaces Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme 1. Teil: Interfaces Motivation Eigenschaften Besonderheiten Anonyme Klassen Lambda-Ausdrücke Praxis:
MehrKapitel 5: Interfaces
Liste P: Programmieren mit Java WS 2001/2002 Prof. Dr. V. Turau FH Wiesbaden Kapitel 5: Interfaces Folie 82 : Einleitung Betrachtet man die Programmierleistung für ein Produkt über einen längeren Zeitraum,
MehrAnwendung der Aspektorientierung: Design Patterns
Anwendung der Aspektorientierung: Design Patterns Seite 1 Agenda Allgemein: Design Patterns Adapter Decorator Observer Design Patterns in der AOP Adapter Decorator Observer Zusammenfassung Seite 2 Allgemein:
MehrAOP by Examples. JavaLand, 25. März 2015, Oliver Böhm. Photo from
AOP by Examples JavaLand, 25. März 2015, Oliver Böhm Photo from http://www.ukaop.org.uk/ 1 Wie alles begann U.S. Army Photo 1960 1980 2000 Assembler 1960 1980 2000 FORTRAN COBOL C Assembler 1960 1980 2000
MehrProgrammiermethodik 3. Klausur Lösung
Programmiermethodik 3. Klausur Lösung 9. 1. 2014 Name Matrikelnummer Aufgabe mögliche Punkte erreichte Punkte 1 20 2 16 3 45 4 19 5 20 Gesamt 120 1 Seite 2 von 10 Aufgabe 1) Objekt-Orientierung und Vererbung
MehrGebundene Typparameter
Gebundene Typparameter interface StringHashable { String hashcode(); class StringHashMap { public void put (Key k, Value v) { String hash = k.hashcode();...... Objektorientierte
MehrPrinzipien Objektorientierter Programmierung
Prinzipien Objektorientierter Programmierung Valerian Wintner Inhaltsverzeichnis 1 Vorwort 1 2 Kapselung 1 3 Polymorphie 2 3.1 Dynamische Polymorphie...................... 2 3.2 Statische Polymorphie........................
MehrZusammenfassung und Ausblick
Betriebssystemtechnik Operating System Engineering (OSE) Zusammenfassung und Ausblick Überblick Zusammenfassung: Software-Produktlinien Prinzipien Methoden Werkzeuge Herausforderungen für die Zukunft Automatische
MehrFeature Modelle. und ihre Anwendung. Feature Modelle und ihre Anwendungen. Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn
Feature Modelle und ihre Anwendung Feature Modelle und ihre Anwendungen 22.07.2010 1 Software-Produktlinien Zusammenfassung mehrerer verwandter Softwaresysteme zu einer Domäne (Anwendungsgebiet) Softwaresysteme
MehrInstitut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke
Institut für Programmierung und Reaktive Systeme Java 6 Markus Reschke 13.10.2014 OOP Objekte = Verhalten (durch Methoden) + Daten (durch Attribute) Klassen = Baupläne für Objekte Kapselung von Programmteilen
MehrQualitätssicherung in der Softwareentwicklung
VU 3 Institut für Softwaretechnologie (IST) TU Graz Sommersemester 2012 Übersicht der Vorlesung 1 Invarianten in JML 2 3 4 5 JML Beispiele Invariant package org.jmlspecs.samples.jmlrefman Purse [Burdy
MehrKapitel 4: Klassen und Unterklassen
Liste P: Programmieren mit Java WS 2001/2002 Prof. Dr. V. Turau FH Wiesbaden Kapitel 4: Klassen und Unterklassen Folie 54 : Unterklassen Die Bildung von Unterklassen und das Konzept der Vererbung sind
MehrProseminar: C# und.net. 6. Vortag Generische Klassen. Sebastian Wolf
Proseminar: C# und.net 6. Vortag Generische Klassen Sebastian Wolf 1 Gliederung: 1. Einleitung 2. C# 2.0 3. Beschränkte Generizität 4. Generische Methoden 5. Überladene generische Klassen 6. Was passiert
Mehr3. GI-Workshop EPK 2004 Geschäftsprozessmanagement mit Ereignisgesteuerten Prozessketten Luxemburg. ARIS meets RUP
3. GI-Workshop EPK 2004 Geschäftsprozessmanagement mit Ereignisgesteuerten Prozessketten Luxemburg ARIS meets RUP Der ARIS Unified Information System Development Process Martin Plümicke Berufsakademie
MehrAnwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie
Anwendungsentwicklung mit Java Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie Vererbung (1) 2 Problem: Objekte mit gleichen Attributen/Methoden, aber nicht völlig identisch, z.b., LKW, PKW,
MehrC++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11
C++ Teil 12 Sven Groß 18. Jan 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 12 18. Jan 2016 1 / 11 Themen der letzten Vorlesung Wiederholung aller bisherigen Themen: Datentypen und Variablen Operatoren Kontrollstrukturen
MehrInterface. So werden Interfaces gemacht
Design Ein Interface (=Schnittstelle / Definition) beschreibt, welche Funktionalität eine Implementation nach Aussen anzubieten hat. Die dahinter liegende Algorithmik wird aber der Implementation überlassen.
MehrSoftwareproduktlinien - Analyse von Produktlinien
Softwareproduktlinien - Analyse von Produktlinien Christian Kästner (CMU) Sven Apel (Universität Passau) Gunter Saake, Thomas Thüm (Universität Magdeburg) Das Problem Variability = Complexity 33 optional,
MehrKapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz
Kapitel 13 Abstrakte Methoden und Interfaces 13. Abstrakte Klassen und Interfaces 1. Abstrakte Klassen 2. Interfaces und Mehrfachvererbung Folie 12.2 Abstrakte Methoden und Klassen Manchmal macht es überhaupt
MehrObjektorientierte Programmierung. Kapitel 14: Interfaces
14. Interfaces 1/26 Objektorientierte Programmierung Kapitel 14: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2013/14 http://www.informatik.uni-halle.de/ brass/oop13/
MehrOO Programmiersprache vs relationales Model. DBIS/Dr. Karsten Tolle
OO Programmiersprache vs relationales Model Vorgehen bisher Erstellen eines ER-Diagramms Übersetzen in das relationale Datenmodell Zugriff auf das relationale Datenmodell aus z.b. Java ER rel. Modell OO
MehrSoftwaretechnik WS 16/17. Übungsblatt 01
Softwaretechnik WS 16/17 Übungsblatt 01 Was ist eine Klasse? Definition der Object Management Group: A class describes a set of objects that share the same specifications of features, constraints, and
MehrPraktische Softwaretechnologie Vorlesung 3
Praktische Softwaretechnologie Vorlesung 3 Martin Giese Johann Radon Institute for Computational and Applied Mathematics Österr. Akademie der Wissenschaften Linz PSWT 2006 24. Oktober 2006 p.1/26 Klassendefinition
MehrEinführung in die Programmiersprache Java II
Einführung in die Programmiersprache Java II ??????????? UML OOP "Object oriented programming is bad" - professional retard 90s... UML Entwicklungsziele verschiedenen existierenden objektorienten Modellierungsmethoden
MehrGrundlagen der Programmierung Prof. H. Mössenböck. 15. Pakete
Grundlagen der Programmierung Prof. H. Mössenböck 15. Pakete Idee Paket = Sammlung zusammengehöriger Klassen (Bibliothek) Zweck mehr Ordnung in Programme bringen bessere Kontrolle der Zugriffsrechte (wer
MehrTh. Letschert OOP 2 2. Geheimnisprinzip und Sichtbarkeitsbeziehungen
Th. Letschert OOP 2 2. Geheimnisprinzip und Sichtbarkeitsbeziehungen Th Letschert FH Gießen-Friedberg Th. Letschert OOP 2 Sichtbarkeitsbeziehungen und Geheimnisprinzip Sichtbarkeitsbeziehungen realisieren
Mehr10. Programmierungs-Phase: Objektorientierung Software Engineering
10. Programmierungs-Phase: Objektorientierung Software Engineering Fachhochschule Darmstadt Haardtring 100 D-64295 Darmstadt Prof. Dr. Bernhard Humm FH Darmstadt, 15. Dezember 2005 Einordnung in den Kontext
MehrParallele und funktionale Programmierung Wintersemester 2015/ Übung Abgabe bis , 10:00 Uhr
3. Übung Abgabe bis 10.11.2015, 10:00 Uhr Aufgabe 3.1: Java-Synchronisation a) An welchen Stellen im Code kann das Schlüsselwort synchronized verwendet werden? b) Wie nennt sich die Synchronisations-Art,
MehrProgrammiermethodik. Übung 3
Programmiermethodik Übung 3 Wintersemester 2011 / 12 Fachgebiet Software Engineering george@uni-kassel.de Agenda Besprechung HA2 JUnit4 Implementierung Klassendiagramm Klassen Attribute Methoden Assoziationen
MehrNew Features Oracle Forms 11g Nichts Neu für Forms?
New Features Oracle Forms 11g Nichts Neu für Forms? Perry Pakull Technology Manager perry.pakull@trivadis.com Zürich, 20.04.2010 Basel Baden Bern Lausanne Zürich Düsseldorf Frankfurt/M. Freiburg i. Br.
MehrProgrammieren in Java -Eingangstest-
Programmieren in Java -Eingangstest- Nummer: 1. Studiengang: Informatik B.Sc. Informatik M.Sc. ESE B.Sc. ESE M.Sc. Sonstiges: Fachsemester: Bitte Fragen, die Sie nicht beantworten können unbedingt mit
MehrPrä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.
MehrFeature-Oriented Programming [1]
Betriebssystemtechnik Operating System Engineering (OSE) Feature-Oriented Programming [1] (D. Batory) Motivation Software wird heute auf einem zu niedrigen Abstraktionsniveau modelliert im Zentrum der
MehrFH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0
9 Objektorientierte Programmierung in Java Prof. Dr. Ing. André Stuhlsatz Wiederholung: Gerüstbeispiel Ein Duo, Quarto oder Sexto ist ein Gerüst. Die Klassen Duo, Quarto und Sexto sollen durch Vererbung
MehrHandbuch 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
MehrAnwendungsentwicklung mit Spring
Anwendungsentwicklung mit Spring Eberhard Wolff Managing Director Interface21 GmbH Interface21 - Spring from the Source Interface21 Produkte u.a. Spring Framework Spring from the Source Consulting, Training,
MehrEinstieg in die Informatik mit Java
1 / 35 Einstieg in die Informatik mit Java Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 35 1 Grundlagen 2 Verdeckte Variablen 3 Verdeckte Methoden 4 Konstruktoren
Mehr7. 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
MehrÜbergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1
Übergang von funktionaler zu OOP Algorithmen und Datenstrukturen II 1 Imperative vs. funktionale Programmierung Plakativ lassen sich folgende Aussagen treffen: funktional: imperativ: Berechnung von Werten
MehrWeitere Beispiele. Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts. 7. Schnittstellen. Schnittstelle: Syntax
Weitere Beispiele Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts public interface Funktion { boolean istimdefbereich(double x); double wert(double x); String gibbeschreibung(); public interface
MehrProgrammieren 2 Java Überblick
Programmieren 2 Java Überblick 1 Klassen und Objekte 2 Vererbung 3 Schnittstellen 5 Exceptions 6 Funktionsbibliothek 7 Datenstrukturen und Algorithmen 8 Ein-/Ausgabe 9 Graphische Benutzeroberflächen 10
Mehr