Dokumentation zur Ausarbeitung des Artikels von Martin Fowler

Größe: px
Ab Seite anzeigen:

Download "Dokumentation zur Ausarbeitung des Artikels von Martin Fowler"

Transkript

1 Dokumentation zur Ausarbeitung des Artikels von Martin Fowler Inversion of Control Containers and the Dependency Injection pattern von André Kley Julian Päuler

2 1.Martin Fowler 2.Einleitung 3.IoC / Dependency Injection 3.1 Constructor Injection 3.2 Setter Injection 3.3 Interface Injection 4.Service Locator 4.1 Nutzung eines abgetrennten Interfaces 4.2 Dynamischer Service Locator 4.3 Nutzung von Locator und Injection 5. Service Locator vs Dependency Injection 6. Constructor vs Setter Injection 7. Fazit 8. Eigene Beispiele 9. Quellen 1. Martin Fowler (Folie 3) Martin Fowler ist Autor und renommierter Referent zum Thema Softwarearchitektur, spezialisiert auf objekt-orientierte Analyse und Design, UML, Entwurfsmuster und agile Softwareentwicklung. Er schrieb fünf bedeutende Bücher zum Thema Softwareentwicklung. Heute arbeitet er als Chefentwickler beim Consulting-Unternehmen ThoughtWorks. 2. Einleitung (Folie 4/5) Ein generelles Problem in der Softwareentwicklung ist die Art der Zusammenführung unterschiedlicher Elemente: Wie bekommt man diese Web Controller Architektur mit einem Datenbank Interface unter einem Dach, wenn beide von unterschiedlichen Teams entwickelt wurden, die sich gegenseitig nicht kennen. class MovieLister... public Movie[] moviesdirectedby(string arg) { List allmovies = finder.findall(); for (Iterator it = allmovies.iterator(); it.hasnext();) { Movie movie = (Movie) it.next(); if (!movie.getdirector().equals(arg)) it.remove(); return (Movie[]) allmovies.toarray(new Movie[allMovies.size()]); Der Kern des Artikels ist dieses finder Objekt oder die Art wie man das lister Objekt mit diesem bestimmten finder Objekt verbindet. Der Grund warum dies interessant ist, ist dass man die moviesdirectedby Methode komplett unabhängig von der Speicherung der Filme nutzen möchte.

3 Somit ist alles was diese Methode macht ein Verweis auf einen finder zu legen und alles was der finder macht, ist zu wissen wie man auf die findall Methode zu antworten hat. Dies kann man hervorheben durch die Definition eines Intefaces für den finder : public interface MovieFinder { List findall(); Nun ist alles sehr gut entkoppelt, aber letztendlich muss man eine konkrete Klasse einführen, die die Filme herausgibt: class MovieLister... private MovieFinder finder; public MovieLister() { finder = new ColonDelimitedMovieFinder("movies1.txt"); Wenn man diese Klasse nur für sich nutzt, ist alles schön und gut. Wenn aber jemand anderes von dieser Funktion Gebrauch machen möchte, aber seine Filmlisten komplett anders abspeichert (z.b.: über eine SQL Datenbank, eine XML Datei, einen Web Dienst, oder einfach ein anderes Format von einer Textdatei), benötigt man eine andere Klasse die diese Daten erfasst. Da bereits eine MovieFinder Schnittstelle definiert ist, braucht man die moviesdirectedby Methode nicht zu ändern. Aber man braucht immer noch eine Art und Weise wie man eine Instanz der richtigen finder Implemenation integriert, die nur noch von der Schnittstelle abhängig ist. Man benötigt eine Implementationsklasse vom finder die nicht beim Kompilieren eingebunden wird. Stattdessen soll der lister mit allen jetzigen und zukünftigen Implementierungen zusammenarbeiten. Das Problem dabei ist, wie erstellt man diese Verknüpfung, so dass die lister Klasse die Implementierungsklasse ignoriert, aber dennoch mit den Instanzen kommunizieren kann. Man benötigt dafür Plugins, die Dienste gewährleisten, so dass man unterschiedliche Implemenationen in unterschiedlichen Verwendungen nutzen kann. Somit ist das Kernproblem, die Einbindung dieser Plugins in die Applikation. Dies wird gelöst durch die Umkehrung der Kontrolle ( Inversion of Control, IoC). Frei nach dem Motto: Don t call us, we call you. (Hollywood Prinzip)

4 3. IoC / Dependency Injection (Folie 6) Frühere Benutzerschnittstellen wurden durch die Applikation kontrolliert. Man hatte dort eine Sequenz von Kommandos wie Name eingeben, Adresse eingeben. Das Programm führte durch die Eingaben und erwartete die entsprechenden Antworten. Durch grafische Benutzeroberflächen beinhaltete das Benutzerschnittstelle Framework diese Schleifen, das Programm hingegen liefert Ereignisabfragen für die verschiedenen Felder des Dialogs. Die Hauptkontrolle das Programms wurde umgekehrt, weg von einem, hin zum Framework. Für diese neue Art von Containern ist die Unkehrung, die Art wie sie eine Plugin Implementation suchen. In diesem Beispiel hat der lister die finder Implementation durch direktes Ansprechen gefunden. Dies unterscheidet den finder vom Plugin. Der Ansatz den diese Container verfolgen ist die Sicherstellung, dass jeder Nutzer des Plugins bestimmten Konventionen folgt, die es einem separaten Assembler-Modul erlauben die Implementation in den lister einzubinden. Als Resultat vieler Diskussionen mit IoC Vertretern hat man sich auf den Namen Dependency Injection (Unabhängige Injizierung) geeinigt, da der Name IoC viel zu allgemein gehalten ist. 3.1 Constructor Injection (Folie 7/8/9) In den aktuellen IoC Diskussionen wird es auch als Typ 3 bezeichnet. PicoContainer benutzen einen Konstruktor um zu entscheiden, wie sie eine finder Implementierung in die lister Klasse injizieren. Für diese Aufgabe muss die movie lister Klasse einen Konstruktor deklarieren, der alles beinhaltet was injiziert werden muss. class MovieLister... public MovieLister(MovieFinder finder) { this.finder = finder; Der finder wird ebenfalls vom PicoContainer gesteuert und injiziert somit den Dateinamen der Textdatei mittels eines Containers. class ColonMovieFinder... public ColonMovieFinder(String filename) { this.filename = filename; Der PicoContainer braucht dann nur noch die Anweisung welche Implementierungsklasse mit welcher Schnittstelle verbunden werden soll und welche Zeichenkette in den finder injiziert werden soll. private MutablePicoContainer configurecontainer() { MutablePicoContainer pico = new DefaultPicoContainer(); Parameter[] finderparams = {new ConstantParameter("movies1.txt"); pico.registercomponentimplementation(moviefinder.class, ColonMovieFinder.class, finderparams); pico.registercomponentimplementation(movielister.class); return pico;

5 Dieser Konfigurations-Code wird typischerweise in einer anderen Klasse festgehalten. Für dieses Beispiel schreibt jeder der den lister nutzen möchte, den entsprechenden Konfigurations-Code in eine eigene Setup Klasse. Man könnte die Konfigurationsinformationen natürlich auch in eine separate Datei speichern, die dann von einer Klasse eingelesen wird. Der PicoContainer bietet das nicht, aber ein es eng verwandtes Projekt namens NanoContainer, welches die entsprechenden Funktionen mitbringt, um eine XML Konfigurationsdatei zu nutzen. Solche NanoContainer parsen den XML und konfigurieren den hinterlegten PicoContainer. Die Philosophie des Projektes ist die Trennung des Konfigurationsdateiformates von dem zugrunde liegenden Mechanismus. PicoContainer unterstützen nicht nur die Constructor Injection, sondern auch die Setter Injection. Dennoch bevorzugen die Entwickler Constructor Injection. 3.2 Folie 10/11/12: Setter Injection mit Spring In den aktuellen IoC Diskussionen wird es auch als Typ 2 bezeichnet. Das Spring Framework ist ein weitreichendes Framework für die Java Enterprise Entwicklung. Es beinhaltet eine Abstraktionsschicht für Transaktionen, persistente Frameworks, Web-Anwendungsentwicklung und JDBC. Wie PicoContainer unterstützt es beides: Constructor und Setter Injection. Aber die Entwickler bevorzugen die Setter Injection. Um den movie lister die Injektion zu ermöglichen, definiert man eine setting-methode (Setter). Ebenso definiert man einen Setter für den String des finders. class MovieLister... private MovieFinder finder; public void setfinder(moviefinder finder) { this.finder = finder; class ColonMovieFinder... public void setfilename(string filename) { this.filename = filename; Der dritte Schritt ist die Konfiguration der Dateien. Spring unterstützt die Konfiguration durch XML Dateien und auch durch Code, aber XML ist der bevorzugte Weg <beans> <bean id="movielister" class="spring.movielister"> <property name="finder"> <ref local="moviefinder"/> </property> </bean> <bean id="moviefinder" class="spring.colonmoviefinder"> <property name="filename"> <value>movies1.txt</value> </property> </bean> </beans>

6 3.3 Folie 13: Interface Injection In den aktuellen IoC Diskussionen wird es auch als Typ 1 bezeichnet. Die dritte Injection-Technik ist die Definierung und Nutzung von Interfaces (Schnittstellen) für die Injektion. Zu Beginn dieser Technik definiert man eine Schnittstelle über welche man die Injektion durchführt. Hier ist die Schnittstelle um den movie finder in ein Objekt zu injizieren. public interface InjectFinder { void injectfinder(moviefinder finder); Diese Schnittstelle wird nun durch denjenigen definiert, der auch die MovieFinder Schnittstelle liefert. Sie muss durch jede Klasse implementiert sein, die einen finder nutzen will, wie z.b. auch der lister. class MovieLister implements InjectFinder... public void injectfinder(moviefinder finder) { this.finder = finder; Der gleiche Ansatz wird genutzt um einen Dateinamen in die finder Implementation zu injizieren: public interface InjectFinderFilename { void injectfilename (String filename); class ColonMovieFinder implements MovieFinder, InjectFinderFilename... public void injectfilename(string filename) { this.filename = filename; Nun noch Konfigurations-Code um die Implementierung zu integrieren. Zuerst wie gehabt die Komponenten registrieren. Danach ein neuer Schritt: Jedes Interface benötigt Code für die Injektion der abhängigen Objekte. Dies geschieht durch Registrierung der Injector Objekte mit den Containern. class Tester... private void registercomponents() { container.registercomponent("movielister", MovieLister.class); container.registercomponent("moviefinder", ColonMovieFinder.class); private void registerinjectors() { container.registerinjector(injectfinder.class, container.lookup("moviefinder")); container.registerinjector(injectfinderfilename.class, new FinderFilenameInjector()); Bei der Interface Injection muss für jede Art der Abhängigkeit eine Schnittstelle definiert werden. Diese Notwendigkeit entfällt bei den anderen Varianten.

7 4. Service Locator (Folie 14/15) Der Hauptvorteil einer Dependency Injection ist, dass sie die Abhängigkeit der MovieLister Klasse von der konkreten MovieFinder Implementation löst. Das erlaubt mir die Weitergabe und die Implementation in passende Implemenatationen anderer Umgebungen. Aber Injektion ist nicht der einzige Weg diese Abhängigkeit zu beseitigen, ein Weiterer ist die Nutzung eines Service Locator. Die Grundidee hinter einem Service Locator besteht in einem Objekt, dass alle Dienste beschafft, die die Applikationen benötigen könnte. Ein Service Locator für diese Applikation hätte eine Methode die einen movie finder zurückgibt, wenn dieser benötigt wird. Natürlich löst dies nicht das Grundproblem, man muss weiterhin den Locator in den Lister bekommen, was zu den folgenden Abhängigkeiten führt: In diesem Beispiel ist der Service Locator eine einfache Registry. Der lister kann diese nutzen, um den finder zu bekommen, sobald er instanziert wird: class MovieLister... MovieFinder finder = ServiceLocator.movieFinder(); class ServiceLocator... public static MovieFinder moviefinder() { return soleinstance.moviefinder; public static void load(servicelocator arg) { soleinstance = arg; public ServiceLocator(MovieFinder moviefinder) { this.moviefinder = moviefinder; private static ServiceLocator soleinstance; private MovieFinder moviefinder;

8 Der Service Locator muss dann nur noch konfiguriert werden: private void configure() { ServiceLocator.load(new ServiceLocator(new ColonMovieFinder("movies1.txt"))); 4.1 Nutzung eines abgetrennten Interfaces für den Locator (Folie 16) Eins der Probleme des obigen Ansatzes ist, dass der MovieLister abhängig von der kompletten ServiceLocator Klasse ist, obwohl er nur einen einzigen Dienst nutzt. Man kann dieses Problem reduzieren, indem man ein Interface zwischen dem MovieLister und dem Service Locator schiebt. Somit kann der lister seinen Teil vom Service Locator ansprechen, ohne ihn komplett nutzen zu müssen. In diesem Fall stellt der Provider des listers auch eine Locator Schnittstelle bereit, die er benötigt um den finder zu bekommen. Der Locator muss dann diese Schnittstelle implementieren um Zugang zu dem finder bereitzustellen. 4.2 Dynamischer Service Locator (Folie 17) Das obige Beispiel war statisch, da die ServiceLocator Klasse Methoden für jeden Dienst besaß den sie benötigte. Das ist aber nicht der einzige Weg dies zu tun. Man kann ebenfalls einen dynamischen Service Locator erstellen, der einem erlaubt jeden Dienst, den man benötigen könnte, zu integrieren und während der Laufzeit auszuwählen. Dazu benutzt der ServiceLocator eine HashMap, die die Services enthält. Sie bietet generische Methoden zum Erhalten und Laden der Dienste an. Das Konfigurieren umfasst dann das Laden eines Dienstes mit einem entsprechenden Schlüssel.

9 Im Großen und Ganzen ist dieser Ansatz sicherlich flexibel aber nicht sehr explizit. Die einzige Art herauszufinden wie man einen Service erreicht ist die Nutzung von Textschlüsseln. Bei expliziten Methoden ist es einfacher diese zu finden, nämlich durch Nachschauen in den Schnittstellendefinitionen. 4.3 Nutzung von Locator und Injection (Folie 18) Dependency Injection und Sercice Locator sind keine sich gegenseitig ausschließende Konzepte. Ein gutes Beispiel beide zusammen zu nutzen ist das Avalon Framework. Avalon nutzt einen Service Locator, aber benutzt Injektion um den Komponenten mitzuteilen wo sie den Locator finden können. public class MyMovieLister implements MovieLister, Serviceable { private MovieFinder finder; public void service( ServiceManager manager ) throws ServiceException { finder = (MovieFinder)manager.lookup("finder"); Die Service-Methode ist ein Beispiel für die Interface Injection, die dem Container erlaubt einen Service Manager in MyMovieLister zu injizieren. Der ServiceManager ist ein Beispiel für einen Service Locator. Hier speichert der Lister den Manager nicht in einem Feld, stattdessen benutzt er ihn um den finder direkt zu speichern. 5. Service Locator vs Dependency (Folie 19) Beide Implementationen stellen das fundamentale Entkoppeln bereit und bei beiden ist der Applikationscode unabhängig von der konkreten Implementation des Service Interfaces. Service Locator: - die Applikations Klasse fragt explizit den Locator. - jeder Nutzer ist Abhängig vom Locator - um die Abhängigkeiten zu sehen, muss man den Code durchsuchen Dependency Injection: - es gibt keine explizite Anfrage, der Service erscheint in der Applikations Klasse durch Inversion of Control. - schwieriger zu debuggen (Erfahrungswert von M.F.) - man sieht die Abhängigkeiten einfacher (Im Konstrukor oder bei den Set-Methoden) Wenn man nun verschieden Klassen entwirft, die auf einen Service zugreifen sollen, ist es nicht schwer den Service Locator zu benutzen. Wenn man im Beispiel den MoveLister weitergeben möchte, ist das kein Problem. Man muss dann nur den Locator so konfigurieren, dass man die richtige Service Implementation wählt. (Per Code oder Datei) Hierbei ist Dependency Injection nicht wirklich notwendig. Der Unterschied ist, wenn man seine lister Klasse an eine Anwendung anbinden möchte, die von anderen geschrieben wurde. Denn dann kennt man die API des Service Locator nicht. Jeder Kunde könnte seinen eigenen nicht kompatiblen Service Locator besitzen. Man könnte um das Problem herum kommen, indem man ein abgetrenntes Interface nutzt. Jeder Kunde müsste dann einen Adapter schreiben, der das Interface an seinen Locator bindet. Aber auf jeden Fall muss ich zuerst den Service Locator sehen um meine spezifiziertes Interface zu

10 binden. Dadurch beginnt die Einfachheit der direkten Verbindung zu einem Locator zu schwinden. 6. Constructor vs Setter (Folie 20) Sowohl mit der Constructor Injection als auch mit der Setter Injection ist es sehr einfach Bindungen zwischen Komponenten herzustellen. Man muss nichts kurioses in den Komponenten machen und es ist einfach für den Injector alles zu konfigurieren. Bei der Interface Injection hingegen muss man sehr viele Interfaces schreiben. Sie ist dadurch zwar flexibler aber wird nur bei ganz wenigen Containern angewandt (Avalon). Gerade wegen diesem großen Aufwand verwenden heutzutage die meisten lightweight Container Setter oder Constructor Injection. Constructor Injection: - jedes Objekt ist sofort verfügbar - geringfügig weniger Code - unveränderbare Felder können versteckt werden Setter: - keine langen Argumentenlisten die unübersichtlich werden könnten - Setter bekommen eindeutige Namen (Bei Konstruktoren müssen die Variablen an der richtigen Position stehen) - Konstruktoren werden nicht automatisch vererbt 7. Fazit (Folie 21) Beim entwicklen von Anwendungsklassen sind Service Locator und Dependency Injection fast gleich. M.F. empfiehlt den Service Locator zu nutzen, es sei denn man entwickelt mehrere Klassen die in verschiedene Anwendungen laufen sollen. Nutzt man Dependency Injection empfiehlt es sich mit der Constructor-Injection zu starten. Man sollte aber bereit sein auf Setter Injection umzustellen, falls es zu oben genannten Problemen kommt.

11 8. Eigene Beispiele Beispiele zur Dipendency Injection Voraussetzung: Java SDK/JDK muss installiert sein Constructor Injection mit PicoContainern Download der picocontainer.jar auf Diese.jar Datei muss in den Java Installation Pfad kopiert werden, unter...\lib\ext Wie folgt müssen jetzt die Java Klassen erstellt werden. Girl.java public class Girl { Kissable kissable; public Girl(Kissable kissable) { this.kissable = kissable; public void kisssomeone() { kissable.kiss(this); Diese Klasse wird die kiss Methode bei dem im Konstruktor regestriertem Interface aufrufen. Kissable.java public interface Kissable { void kiss(object kisser); Boy.java public class Boy implements Kissable { public void kiss(object kisser) { System.out.println("I'm a Boy and I was kissed by a " + kisser);

12 OldWoman.java public class OldWoman implements Kissable { public void kiss(object kisser) { System.out.println("I'm an old woman and I was kissed by a " + kisser); Die beiden Klassen Boy und OldWoman können jeweils am Interface registriert werden (siehe unten). testwithpico.java import org.picocontainer.mutablepicocontainer; import org.picocontainer.defaults.*; public class testwithpico{ // Zur Testausführung public testwithpico(){ MutablePicoContainer pico = configurecontainer(); Girl girl = (Girl) pico.getcomponentinstance(girl.class); girl.kisssomeone(); // Anmelden der benötigten Klassen private MutablePicoContainer configurecontainer() { MutablePicoContainer pico = new DefaultPicoContainer(); //pico.registercomponentimplementation(kissable.class, Boy.class); pico.registercomponentimplementation(kissable.class, OldWoman.class); pico.registercomponentimplementation(girl.class); return pico; public static void main(string args[]) { testwithpico lala = new testwithpico();

13 Durch den Befehl registercomponentimplementation wird die jeweilige Klasse an dem Interface registriert, bzw. die Girl Klasse wird hier am PicoContainer registriert und bekommt später beim anlegen das Kissable Objekt per Konstruktor zugewiesen. Je nachdem ob die Boy oder OldWoman Klasse registriert wird sieht dies dann so aus: System ausgabe: I'm a Boy and I was kissed by a Girl System ausgabe: I'm an old woman and I was kissed by a Girl

14 Setter Injection mit Spring Download des Spring Frameworks auf Die.jar Dateien o spring.jar aus spring-framework...\dist und die o commons-logging.jar aus spring-framework...\lib\jakarta-commons o müssen in den Java Installation Pfad kopiert werden, unter...\lib\ext. Wie folgt müssen jetzt die Java Klassen erstellt werden. Girl.java public class Girl { Kissable kissable; public void setkissable(kissable kissable) { this.kissable = kissable; public void kisssomeone() { kissable.kiss(this); Anstelle des Konstruktor wird diese Klasse nun per Set Methode registriert. TestWithSpring.java import org.springframework.context.applicationcontext; import org.springframework.context.support.filesystemxmlapplicationcontext; public class testwithspring{ // Zur Testausführung public testwithspring(){ ApplicationContext ctx = new FileSystemXmlApplicationContext("conf.xml"); Girl girl = (Girl) ctx.getbean("girl_id"); girl.kisssomeone(); public static void main(string args[]) { testwithspring lala = new testwithspring();

15 An den restlichen Klassen ändert sich nichts. Die Konfiguration wird nun per XML Datei definiert. conf.xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" " <beans> <bean id="girl_id" class="girl"> <property name="kissable"> <ref local="kissable_id"/> </property> </bean> <bean id="kissable_id" class="boy"> // hier OldWoman oder Boy </bean> </beans> Die Girl Klasse wird unter der id Girl_id registriert, die Boy Klasse unter der id Kissable_id. Die Girl Klasse hat Set Methode mit dem Namen SetKissable daher muss hier durch property name auch kissable angegeben werden, dieses Methode bekommt ein Objekt vom Typ Kissable_id (also der Boy Klasse). Die TestWithSpring.java ausführen, ausgabe wie oben. Interface Injection Die Java Klassen müssten wie folgt abgeändert werden bzw. ein Interface würde hinzu kommen. Diese Art der Injection ist anscheinend nicht sehr beliebt, bis auf das Hivemind Framework das die Interface Injection unterstützen soll, ist uns kein weiteres Framework bekannt.

16 Girl.java public class Girl implements InjectKissable{ Kissable kissable; public void injectkissable(kissable kissable){ this.kissable = kissable; public void kisssomeone() { kissable.kiss(this); InjectKissable.java public interface InjectKissable { void injectkissable(kissable kissable); Service Locator Wie folgt müssen die Java Klassen erstellt werden. Girl.java public class Girl { Kissable kissable = ServiceLocator.getKissable(); public void kisssomeone() { kissable.kiss(this); ServiceLocator.java public class ServiceLocator{ public ServiceLocator(Kissable kissable) { this.kissable = kissable; public static Kissable getkissable() {

17 return soleinstance.kissable; public static void load(servicelocator arg) { soleinstance = arg; private static ServiceLocator soleinstance; private Kissable kissable; testwithsl.java public class testwithsl{ // Zur Testausführung public testwithsl(){ configure(); Girl girl = new Girl(); girl.kisssomeone(); // Anmelden der benötigten Klassen private void configure() { ServiceLocator.load(new ServiceLocator(new Boy())); public static void main(string args[]) { testwithsl lala = new testwithsl(); Die restlichen Klassen bleiben unverändert. In der configure Methode wird die Boy Klasse am ServiceLocator angemeldet. Die TestWithSL.java ausführen, ausgabe wie oben. 9. Quellen

18

Inversion of Control Containers and the Dependency Injection pattern

Inversion of Control Containers and the Dependency Injection pattern Ausarbeitung des Artikels von Martin Fowler Inversion of Control Containers and the Dependency Injection pattern http://martinfowler.com/articles/injection.html Inhaltsverzeichnis 1. Martin Fowler 5. Service

Mehr

Dieser Artikel bietet eine Einführung in die Konzepte der Lightweight Container und beschreibt das grundlegende Konzept, das Inversion of Control.

Dieser Artikel bietet eine Einführung in die Konzepte der Lightweight Container und beschreibt das grundlegende Konzept, das Inversion of Control. Betrifft: Abnehmen leicht gemacht - Lightweight Container auf dem Vormarsch Autor: Guido Schmutz Art der Info: Whitepaper (Juni 2005) Quelle: Aus unserem TechnoCircle und TTC (Trivadis Technology Center)

Mehr

Dependency Injection in der Praxis: Spring, PicoContainer und Eclipse im Vergleich

Dependency Injection in der Praxis: Spring, PicoContainer und Eclipse im Vergleich Dependency Injection in der Praxis: Spring, PicoContainer und Eclipse im Vergleich Dipl.-Informatiker Martin Lippert Senior IT-Berater martin.lippert@it-agile.de http://www.it-agile.de/ Überblick Motivation

Mehr

Application Frameworks

Application Frameworks Seminar Software Engineering 1 Grundlagen Agenda Spring Framework Dependency Injection Aspektorientierte Programmierung Datenbankanbindung Modell View Controller Sicherheit Spring vs. Java EE Zusammenfassung

Mehr

Handbuch für die Erweiterbarkeit

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

Mehr

G s e a s m a t m ar a ch c i h tek e tur u I und IoC

G s e a s m a t m ar a ch c i h tek e tur u I und IoC Gesamtarchitektur I und IoC Schichten einer Web-Anwendung Initiiert durch J2EE und Spring: Strukturierte Sicht auf UI und Fachlogik (Domäne) Ergibt 5 Schichten: Man unterscheidet Präsentations- und Domänenmodell!

Mehr

Contexts and Dependency Injection. W3L AG info@w3l.de

Contexts and Dependency Injection. W3L AG info@w3l.de 1 Contexts and Dependency Injection W3L AG info@w3l.de 2015 2 Inhaltsverzeichnis Teil 1: Motivation Teil 2: Inversion of Control Teil 3: Contexts and Dependency Injection Teil 4: Beispiel zurück 3 Motivation

Mehr

7.1.5 Java RMI Remote Method Invocation (http://java.sun.com/products/jdk/rmi) (http://java.sun.com/j2se/1.3/docs/guide/rmi/spec/rmitoc.

7.1.5 Java RMI Remote Method Invocation (http://java.sun.com/products/jdk/rmi) (http://java.sun.com/j2se/1.3/docs/guide/rmi/spec/rmitoc. 7.1.5 Java RMI Remote Method Invocation (http://java.sun.com/products/jdk/rmi) (http://java.sun.com/j2se/1.3/docs/guide/rmi/spec/rmitoc.html) bietet leider nur begrenzte Verteilungsabstraktion Unterstützung

Mehr

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

Schlussendlich 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 -

Mehr

Mathematik Seminar WS 2003: Simulation und Bildanalyse mit Java. Software-Architektur basierend auf dem Plug-in-Konzept

Mathematik Seminar WS 2003: Simulation und Bildanalyse mit Java. Software-Architektur basierend auf dem Plug-in-Konzept Mathematik Seminar WS 2003: Simulation und Bildanalyse mit Java Software-Architektur basierend auf dem Plug-in-Konzept Aufteilung: Probleme mit normaler/alter Software Ziele des Software Engineerings Die

Mehr

Projektgruppe. Thomas Kühne. Komponentenbasiertes Software Engineering mit OSGi

Projektgruppe. Thomas Kühne. Komponentenbasiertes Software Engineering mit OSGi Projektgruppe Thomas Kühne Komponentenbasiertes Software Engineering mit OSGi Anforderungen der PG IDSE an ein Komponenten- Client Nativer Client Web Client Alternativen IDSE Nutzer Szenario Pipe IDSE

Mehr

Erzeugungsmuster. Kapselung der Objekt-Erzeugung

Erzeugungsmuster. Kapselung der Objekt-Erzeugung Erzeugungsmuster Kapselung der Objekt-Erzeugung Definition Erzeugungsmuster dienen für die Lose Koppelung, bei der erst zur Laufzeit der Typ des zu erzeugenden Objekts festgelegt wird. Abstract Factory

Mehr

Implementieren von Klassen

Implementieren von Klassen Implementieren von Klassen Felder, Methoden, Konstanten Dr. Beatrice Amrhein Überblick Felder/Mitglieder (Field, Member, Member-Variable) o Modifizierer Konstanten Methoden o Modifizierer 2 Felder und

Mehr

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

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik Programmieren II Innere Klassen Heusch 10, 13.10 Ratz 5.2.1, 9.8 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Innere Klassen Bisher kennen wir nur Klassen, die entweder zusammen

Mehr

Persistenz. Ralf Gitzel

Persistenz. Ralf Gitzel Persistenz Ralf Gitzel ralf_gitzel@hotmail.de 1 Themenübersicht Ralf Gitzel ralf_gitzel@hotmail.de 2 Übersicht Grundkonzepte Entity Beans Meine erste Entity Entity-Manager Lernziele Übungsaufgabe 3 Grundkonzepte

Mehr

Kapitel 5: Interfaces

Kapitel 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,

Mehr

Komponentenbasierte Softwareentwicklung mit PHP. Oliver Schlicht - bitexpert

Komponentenbasierte Softwareentwicklung mit PHP. Oliver Schlicht - bitexpert Komponentenbasierte Softwareentwicklung mit PHP Oliver Schlicht - bitexpert Überblick 1. Was ist eine Komponente? 2. Entwicklung eines Beispieldesigns 3. Dependency Injection 4. DI Container Garden 5.

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 15 Einstieg in die Informatik mit Java Collections Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 15 1 Überblick Collections 2 Hierarchie von Collections 3 Verwendung

Mehr

Creational Patterns. Seminar Software-Entwurf. Thomas Liro WS 2004/05.

Creational Patterns. Seminar Software-Entwurf. Thomas Liro WS 2004/05. Creational Patterns Seminar Software-Entwurf WS 2004/05 Thomas Liro Inhaltsüberblick Einordnung des Themas Beschreibung von Design Pattern Auswahl von Design Patterns Was sind Creational

Mehr

Properties und Proxies

Properties und Proxies g n årà Dr. Winfried Grünewald service@grnwld.de Properties und Proxies Dr. Winfried Grünewald, Stutensee 2011 Version 0.9 2/10 1 Einleitung Die Java Entwicklungsumgebung bietet mit den Properties-Dateien

Mehr

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

Objektorientierte 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

Mehr

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) 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)

Mehr

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de s & Servlet Integration Ralf Gitzel ralf_gitzel@hotmail.de 1 Themenübersicht Ralf Gitzel ralf_gitzel@hotmail.de 2 Übersicht Motivation Das Interface Stateful und Stateless s Programmierung einer Stateful

Mehr

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

Polymorphie/Späte Bindung Abstrakte Klassen Interfaces. Polymorphie/Späte Bindung Abstrakte Klassen Interfaces Programmieren I Martin Schultheiß Hochschule Darmstadt Wintersemester 2010/2011 1 / 20 Polymorphie/Späte Bindung Abstrakte Klassen Interfaces 2 / 20 Definition: Polymorphie Der Begriff Polymorphie (manchmal

Mehr

Enterprise JavaBeans Überblick

Enterprise JavaBeans Überblick Enterprise JavaBeans Überblick 1. Überblick Java EE 5 und Komponententechnologien 2. Einführung Java EE 5 Plattform 3. Enterprise JavaBeans Architektur 4. Ressourcen Management und Primäre Services 5.

Mehr

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

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

Mehr

Objektorientierte Programmierung. Kapitel 14: Interfaces

Objektorientierte 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/

Mehr

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter Kapitel 1 Der vierte Tag 1.1 Vererbung Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter Sprachen. Unter Vererbung versteht man die Möglichkeit, Eigenschaften vorhandener

Mehr

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007 Systemprogrammierung Projekt: Java RMI Wintersemester 2006 / 2007 Systemprogrammierung 1. Einleitung 2. Einführung in RPC 3. RMI 4. Code Beispiele 5. Live Vorstellung 6. Ausblick 7. Fazit 2 1. Einleitung

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1 Kapitel 13 Listen Listen 1 Ziele Implementierungen für Listen kennenlernen Einfach verkettete und doppelt verkettete Listen verstehen Listen-Implementierungen in der Java-Bibliothek kennenlernen Durch

Mehr

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

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1 Kapitel 12 Listen Listen 1 Ziele Implementierungen für Listen kennenlernen Einfach verkettete und doppelt verkettete Listen verstehen Listen-Implementierungen in der Java-Bibliothek kennenlernen Durch

Mehr

Spring Dynamic Modules for OSGi Service Platforms

Spring Dynamic Modules for OSGi Service Platforms Gerd Wütherich freiberuflicher Softwarearchitekt Spring Dynamic Modules for OSGi Service Platforms Server Anwendungen mit Spring und Eclipse Equinox Agenda OSGi Technologie: OSGi Technologie im Überblick

Mehr

Objektorientierung. Klassen und Objekte. Dr. Beatrice Amrhein

Objektorientierung. Klassen und Objekte. Dr. Beatrice Amrhein Objektorientierung Klassen und Objekte Dr. Beatrice Amrhein Überblick Konzepte der Objektorientierten Programmierung Klassen und Objekte o Implementierung von Klassen o Verwendung von Objekten 2 Konzepte

Mehr

P A X P A X. Power API for XML. DOM und SAX. PAX : Ideen und Konzepte. Wie PAX funktioniert. Wie PAX angewandt wird. WWW-Links. von Manfred Duchrow

P A X P A X. Power API for XML. DOM und SAX. PAX : Ideen und Konzepte. Wie PAX funktioniert. Wie PAX angewandt wird. WWW-Links. von Manfred Duchrow P A X Power API for XML von Manfred Duchrow P A X DOM und SAX : Ideen und Konzepte Wie funktioniert Wie angewandt wird WWW-Links 2 1 DOM (Document Object Model) Document Element Element Text Attribute

Mehr

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, 5.7.2007 Java Forum Stuttgart 2007

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, 5.7.2007 Java Forum Stuttgart 2007 Eclipse Equinox als Basis für Smart Client Anwendungen Christian Campo, compeople AG, 5.7.2007 Java Forum Stuttgart 2007 Übersicht Definition / Architektur Smart Client Smart Client mit RCP / Equinox Gesamtfazit

Mehr

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

14. Java Klassen. Klassen (Java) vs. Records (Pascal) Klassen - Konzeptuell. Klassen - Technisch Klassen (Java) vs. Records (Pascal) 14. Java Klassen Klassen, Typen, Objekte, Deklaration, Instanzierung, Konstruktoren, statische Felder und Methoden, Datenkapselung Pascal RECORDs in Pascal sind reine

Mehr

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

Institut 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

Mehr

Einstieg in die Informatik mit Java

Einstieg 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

Mehr

Programmieren in Java -Eingangstest-

Programmieren 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

Mehr

II.4.4 Exceptions - 1 -

II.4.4 Exceptions - 1 - n 1. Unterklassen und Vererbung n 2. Abstrakte Klassen und Interfaces n 3. Modularität und Pakete n 4. Ausnahmen (Exceptions) n 5. Generische Datentypen n 6. Collections II.4.4 Exceptions - 1 - Ausnahmen

Mehr

Informatik II Übung 6 Gruppe 7

Informatik II Übung 6 Gruppe 7 Informatik II Übung 6 Gruppe 7 Leyna Sadamori leyna.sadamori@inf.ethz.ch DEBRIEFING Übung 5 2 U5A1-4 Im Prinzip alles richtig. Falls am Ende noch Zeit, dann Einsicht in die Best Of s 3 THEORIE Java Vererbung,

Mehr

Oliver Paulus, oliver@code-project.org. 7. Februar 2006. Spring Framework Einführung. Oliver Paulus, oliver@codeproject.org. Was ist Spring?

Oliver Paulus, oliver@code-project.org. 7. Februar 2006. Spring Framework Einführung. Oliver Paulus, oliver@codeproject.org. Was ist Spring? oliver@code-project.org 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

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 27 Einstieg in die Informatik mit Java Klassen als Datenstrukturen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 27 1 Überblick: Klassen als Datenstruktur 2 Vereinbarung

Mehr

Vererbung, Polymorphie

Vererbung, Polymorphie Vererbung, Polymorphie Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 21.1.08 G. Bohlender (IANM UNI Karlsruhe) Vererbung, Polymorphie 21.1.08

Mehr

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014)

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014) Anleitung Ein einfaches RMI-Beispiel (ab Java.0) c Y. Pfeifer (Juni 014) 1 Ein einfaches RMI-Beispiel Vorgehensweise: 1. Java Projekt anlegen. Zwei Packages server & client erstellen Auf der Server-Seite

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Semestralklausur Einführung in die Programmierung Semestralklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList

Mehr

Multimedia im Netz Wintersemester 2012/13

Multimedia im Netz Wintersemester 2012/13 Multimedia im Netz Wintersemester 2012/13 Übung 10 Ludwig-Maximilians-Universität München Multimedia im Netz WS 2012/13 - Übung 10-1 Lösung zu Übungsblatt 08 Ludwig-Maximilians-Universität München Multimedia

Mehr

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

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015 Software Engineering Zur Architektur der Applikation Data Repository Franz-Josef Elmer, Universität Basel, HS 2015 Software Engineering: Mit acht bewährten Praktiken zu gutem Code 2 Schichtarchitektur

Mehr

Das Spring Framework eine Einführung

Das Spring Framework eine Einführung Das Spring Framework eine Einführung Sebastian Schelter Softwareengineering Freie Universität Berlin Arnimallee 14 14195 Berlin sebastian@alombra.de Abstract: Eine Einführung in die grundlegenden Konzepte

Mehr

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

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen Kapitel 9 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Attribute von Klassen, Methoden und Variablen Interfaces WS 07/08 1/ 18 2/ 18

Mehr

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java Innere Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 13.06.07 G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 1 / 11

Mehr

/** Main-Methode erzeugt einen neuen Editor zum Testen */ public static void main(string[] args) { new Editor();

/** Main-Methode erzeugt einen neuen Editor zum Testen */ public static void main(string[] args) { new Editor(); Bereich: Grafische Benutzeroberflächen (UI), Events (2) Editor Package: de.dhbwka.java.exercise.ui.editor Klasse: Editor Aufgabenstellung: Schreiben Sie einen kleinen Texteditor mit Swing! Keine Panik,

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Java Generics und Java API (1/2) Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck https://www.itm.uni-luebeck.de/people/fischer Datenstrukturen In vielen Sprachen

Mehr

Info B VL 11: Innere Klassen/Collections

Info B VL 11: Innere Klassen/Collections Info B VL 11: Innere Klassen/Collections Objektorientiere Programmierung in Java 2003 Ute Schmid (Vorlesung) Elmar Ludwig (Übung) FB Mathematik/Informatik, Universität Osnabrück Info B VL 11: Innere Klassen/Collections

Mehr

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom Einstieg in die Informatik mit Java, Vorlesung vom 2.5.07 Übersicht 1 2 definition 3 Parameterübergabe, aufruf 4 Referenztypen bei 5 Überladen von 6 Hauptprogrammparameter 7 Rekursion bilden das Analogon

Mehr

Polymorphismus 179. Function.h. #include <string>

Polymorphismus 179. Function.h. #include <string> Polymorphismus 179 #include Function.h class Function { public: virtual ~Function() {}; virtual std::string get_name() const = 0; virtual double execute(double x) const = 0; }; // class Function

Mehr

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Ü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,

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 16 Einstieg in die Informatik mit Java Innere Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 16 1 Einführung 2 Element-Klassen 3 Lokale Klassen 4 Anonyme Klassen

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 22 Einstieg in die Informatik mit Java Generics Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 22 1 Überblick Generics 2 Generische Klassen 3 Generische Methoden 4

Mehr

Info B VL 14: Java Collections/Reflections

Info B VL 14: Java Collections/Reflections Info B VL 14: Java Collections/Reflections Objektorientiere Programmierung in Java 2003 Ute Schmid (Vorlesung) Elmar Ludwig (Übung) FB Mathematik/Informatik, Universität Osnabrück Info B VL 14: Java Collections/Reflections

Mehr

Statische und Nichtstatische Methoden Properties/ Eigenschaften

Statische und Nichtstatische Methoden Properties/ Eigenschaften Statische und Nichtstatische Methoden Properties/ Eigenschaften Statische Methoden Definition und Merkmale von Properties Modifizierer Beispiele Nebeneffekte Dr. Beatrice Amrhein Statische / Nichtstatische

Mehr

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden Kapitel 8 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Methoden Überladen von Methoden Der this-zeiger Konstruktoren Vererbung WS 07/08

Mehr

2.13 Vererbung. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/ Article

2.13 Vererbung. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/ Article 2.13 Vererbung Klassen modellieren Objekte der realen Welt. Diese sind oft hierarchisch gegliedert. Beispiel: Ein Verlag bietet Bücher und CDs an. Beide Medien sind Artikel des Verlages. Book author: String

Mehr

ADT: Java Collections und ArrayList

ADT: Java Collections und ArrayList ADT: Java Collections und ArrayList Überblick der Klassen Object File Collections Map List Set ArrayList LinkedList SortedSet HashSet SortedSet Methode ArrayList Klasse I Beschreibung void add(int position,

Mehr

Integration von Web Services in J EE Anwendungen mit XFire. 1/26 André Janus - Integration von Web Services in J EE Anwendungen mit XFire

Integration von Web Services in J EE Anwendungen mit XFire. 1/26 André Janus - Integration von Web Services in J EE Anwendungen mit XFire Integration von Web Services in J EE Anwendungen mit XFire 1/26 André Janus - Integration von Web Services in J EE Anwendungen mit XFire univativ : = Umsetzung durch Studenten und Young Professionals.

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können

Mehr

Objektorientierte Programmierung mit C++ SS 2007

Objektorientierte Programmierung mit C++ SS 2007 Objektorientierte Programmierung mit C++ SS 2007 Andreas F. Borchert Universität Ulm 5. Juni 2007 Polymorphismus #include Function.h class Function { public: virtual ~Function() {}; virtual std::string

Mehr

Entwurfsmuster (Design Patterns)

Entwurfsmuster (Design Patterns) Entwurfsmuster (Design Patterns) SEP 303 Entwurfsmuster (Design Patterns) In der alltäglichen Programmierarbeit tauchen viele Probleme auf, die man schon einmal gelöst hat und die man in der Zukunft wieder

Mehr

Wahlpflichtfach Design Pattern

Wahlpflichtfach Design Pattern Wahlpflichtfach Design Pattern Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm Hochschule Harz FB Automatisierung und Informatik miwilhelm@hs-harz.de http://www.miwilhelm.de Raum 2.202 Tel. 03943 / 659 338

Mehr

Dependency Injection mit dem Unity Container

Dependency Injection mit dem Unity Container 1 Dependency Injection mit dem Unity Container Vom Problem zur Lösung unter Anwendung des Unity Containers W3L AG info@w3l.de 2015 2 Inhalt Problemstellung Einführung Dependency Injection Manuelle Objektkomposition

Mehr

Vererbung. Martin Wirsing. Ziele. Vererbung

Vererbung. Martin Wirsing. Ziele. Vererbung 2 Ziele Martin Wirsing en Begriff der einfachen verstehen und Redefinition von Oberklassenmethoden verstehen spolymorphie verstehen ie Klasse Object kennenlernen in Zusammenarbeit mit Michael Barth, Philipp

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 13 Einstieg in die Informatik mit Java Schnittstellen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 13 1 Einführung 2 Definition einer Schnittstelle 3 Implementierung

Mehr

Methoden und Wrapperklassen

Methoden und Wrapperklassen Methoden und Wrapperklassen CoMa-Übung IV TU Berlin 06.11.2012 CoMa-Übung IV (TU Berlin) Methoden und Wrapperklassen 06.11.2012 1 / 24 Themen der Übung 1 Methoden 2 Wrapper-Klassen CoMa-Übung IV (TU Berlin)

Mehr

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff Java Reflection Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff Java Reflection Die Java Reflection API liefert per Introspection Informationen über Klassen => Meta-Daten.

Mehr

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5. Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 23.5.07 G. Bohlender (IANM UNI Karlsruhe) Vererbung 23.5.07 1 / 22 Übersicht 1

Mehr

Programmiermethodik 1. Klausur

Programmiermethodik 1. Klausur Programmiermethodik 1. Klausur 27. 6. 2013 Name Matrikelnummer Aufgabe mögliche Punkte erreichte Punkte 1 21 2 20 3 19 4 19 5 21 6 20 Gesamt 120 1 Seite 2 von 18 Aufgabe 1) Objekt-Orientierung und Vererbung

Mehr

Vorlesung Datenstrukturen

Vorlesung Datenstrukturen Vorlesung Datenstrukturen Objektorientierung in C++ (3) Aspekte der Vererbung (1) Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 546 Zuweisung bei Vererbung Dr. Frank Seifert Vorlesung

Mehr

Spring Dynamic Modules for OSGi Service Platforms

Spring Dynamic Modules for OSGi Service Platforms Gerd Wütherich freiberuflicher Softwarearchitekt Spring Dynamic Modules for OSGi Service Platforms Server Anwendungen mit Spring und Eclipse Equinox Agenda OSGi Technologie: OSGi Technologie im Überblick

Mehr

11. Java Klassen. Klassen - Technisch. Klassen - Beispiel: Erdbebendaten. Klassen - Konzeptuell

11. Java Klassen. Klassen - Technisch. Klassen - Beispiel: Erdbebendaten. Klassen - Konzeptuell Klassen - Technisch Eine Klasse ist eine Einheit mit einem Namen, die Daten und Funktionalität beinhaltet 11. Java Klassen Klassen, Typen, Objekte, Deklaration, Instanzierung, Konstruktoren, statische

Mehr

Wie teuer ist dynamischer Polymorphismus? 194

Wie teuer ist dynamischer Polymorphismus? 194 Wie teuer ist dynamischer Polymorphismus? 194 Function f vtable data RTTI ~Function get_name type name type info "Sinus\0" execute Nicht-polymorphe Methoden und reguläre Funktionen können in C++ direkt

Mehr

Einstieg in die Informatik mit Java

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

Mehr

12. Java Klassen. Klassen - Technisch. Beispiel: Erdbebendaten. Klassen - Konzeptuell

12. Java Klassen. Klassen - Technisch. Beispiel: Erdbebendaten. Klassen - Konzeptuell Klassen - Technisch Eine Klasse ist eine Einheit mit einem Namen, die Daten und Funktionalität beinhaltet 12. Java Klassen Klassen, Typen, Objekte, Deklaration, Instanzierung, Konstruktoren, Kapselung,

Mehr

Durch die Teil-von-Beziehung soll ausgedrückt werden, dass ein Objekt A als (physikalischer) Teil eines Objekts B angesehen wird. Insbesondere kann ei

Durch die Teil-von-Beziehung soll ausgedrückt werden, dass ein Objekt A als (physikalischer) Teil eines Objekts B angesehen wird. Insbesondere kann ei Lösungsvorschläge zur Klausur zum Kurs 1618 Sommersemester 2001 am 22.9.2001 Aufgabe 1 a) Benutzungsbeziehung: class Kennzeichen class Fahrzeug boolean gueltigeskennzeichen (Kennzeichen kz) Objekte der

Mehr

Kapitel 6. Vererbung

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

Mehr

Modulare Anwendungen und die Lookup API. Geertjan Wielenga NetBeans Team Deutschsprachige Überarbeitung, Aljoscha Rittner NetBeans Dream Team

Modulare Anwendungen und die Lookup API. Geertjan Wielenga NetBeans Team Deutschsprachige Überarbeitung, Aljoscha Rittner NetBeans Dream Team Modulare Anwendungen und die Lookup API Geertjan Wielenga NetBeans Team Deutschsprachige Überarbeitung, Aljoscha Rittner NetBeans Dream Team Die Notwendigkeit modularer Anwendungen Die Notwendigkeit modularer

Mehr

EINFÜHRUNG IN DIE PROGRAMMIERUNG

EINFÜHRUNG IN DIE PROGRAMMIERUNG EINFÜHRUNG IN DIE PROGRAMMIERUNG OBJEKTORIENTIERTES PROGRAMMIEREN Tobias Witt 25.03.2014 10:30-12:00 Täglich Übungen zur Vertiefung Laptop hier nicht erforderlich Aber in den Übungen! Linux, OS X http://hhu-fscs.de/linux-install-party/

Mehr

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services C# - Einführung in die Programmiersprache Methoden Leibniz Universität IT Services 02.07.12 Methoden... sind Subroutinen in einer Klasse. können einen Wert an den Aufrufer zurückgeben. verändern die Eigenschaften

Mehr

Oracle Enterprise Scheduler (ESS) Unleashed Carsten Wiesbaum esentri AG Ettlingen Schlüsselworte Einleitung Oracle Enterprise Scheduler (ESS)

Oracle Enterprise Scheduler (ESS) Unleashed Carsten Wiesbaum esentri AG Ettlingen Schlüsselworte Einleitung Oracle Enterprise Scheduler (ESS) Oracle Enterprise Scheduler (ESS) Unleashed Carsten Wiesbaum esentri AG Ettlingen Schlüsselworte Automatisierung, Betrieb, Middleware Einleitung Der Oracle Fusion Middleware Stack beinhaltet eine leistungsstarke

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Überschreiben von Methoden

Überschreiben von Methoden Vergleich der DoME Realisierungen: Methode ausgeben Version 1 (ohne Vererbung): Anzeigen aller Informationen CD: A Swingin Affair (64 Min)* Frank Sinatra Titelanzahl: 16 Mein Lieblingsalbum von Sinatra

Mehr

Tag 8 Repetitorium Informatik (Java)

Tag 8 Repetitorium Informatik (Java) Tag 8 Repetitorium Informatik (Java) Dozent: Michael Baer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Informatik-Repetitorium

Mehr

Reflection. Arthur Zaczek. Nov 2014

Reflection. Arthur Zaczek. Nov 2014 Arthur Zaczek Nov 2014 1 Einleitung 1.1 Definition Reflection ist das Auslesen von Metainformationen über Klassen, deren Methoden & Eigenschaften zur Laufzeit. 1.2 Anwendungsfälle Analyse von Programmen

Mehr

Kurzanleitung RMI-Beispiel: gettime Seite 1 / 7. RMI Projekt gettime 1

Kurzanleitung RMI-Beispiel: gettime Seite 1 / 7. RMI Projekt gettime 1 Kurzanleitung RMI-Beispiel: gettime Seite 1 / 7 Inhaltsverzeichnis RMI Projekt gettime 1 Schritt 1: Interface Klasse definieren 1 Schritt 2: Implementation Class definieren 2 Schritt 3: RMI Compiler erstellen

Mehr

Decorator 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 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

Mehr

Repetitorium Informatik (Java)

Repetitorium Informatik (Java) Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Die OSGi Service Plattform

Die OSGi Service Plattform Die OSGi Service Plattform Seminarvortrag Bernhard Cleven Gliederung 1 Einleitung 2 Das Framework 3 Bundles 4 Services 5 Beispiel 6 Fazit Seite 1/ 17 Einleitung Warum OSGi? Durch Modularisierung flexible

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 34 Einstieg in die Informatik mit Java Klassen mit Instanzmethoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 34 1 Definition von Klassen 2 Methoden 3 Methoden

Mehr

Janeva:.NET meets J2EE

Janeva:.NET meets J2EE Inhalt: Motivation Was ist Janeva? Systemvoraussetzungen Installation Beispiel Converter Fazit Motivation Motivation: Janeva testen einen Überblick verschaffen Lauffähiges Beispiel Entscheidungshilfe über

Mehr

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

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java: Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen

Mehr