Overwiew COM.

Slides:



Advertisements
Ähnliche Präsentationen
C Sharp (C#) Martin Saternus Senior Student Partner
Advertisements

M a r c – o l i v e r p a h l Informatik I – Kapitel 7 Klassen und höhere Datentypen Zusammenfassung des Kapitel 7 Küchlin, Weber, Einführung in die Informatik,
Objektorientierte Programmierung
der Universität Oldenburg
Transaction Synchronization for XML Data in Client Server Web Applications Stefan Böttcher & Adelhard Türling Universität Paderborn.
Anwendungen des OODM auf die ADB / NDB
Kurt Rosenberg. C# für.NET oder.NET für C# is(C# == C++ && Java)? true : false ; reines C# Ausblick Überblick.
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Entwicklung und Einsatz von Smart Client-Anwendungen Jens Häupel Developer Evangelist Microsoft Deutschland GmbH Dirk Primbs.
COM-Schnittstellen optimal einsetzen
DI Christian Donner cd (at) donners.com
1. 2 Microsoft.NET Überblick Dirk Primbs Technologieberater Developer Platform & Strategy Group Microsoft Deutschland GmbH.
Public interface native private abstract final strictfp synchronized transient static volatile protected in KürzeKürze java.lang.reflect.Modifier1.
Fakultät für informatik informatik 12 technische universität dortmund Universität Dortmund Middleware Peter Marwedel TU Dortmund, Informatik 12 Germany.
Design by Contract with JML - Teil 2
Objektrelationales Mapping mit JPA Entity Mapping Jonas Bandi Simon Martinelli.
Binäre Bäume Richard Göbel.
Java: Dynamische Datentypen
Dynamische Webseiten Java servlets.
Objektorientierte Programmierung JDK-Klassenbibliothek
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
COM (Component Object Model) / DCOM (Distributed COM)
Proxy Pattern Vorlesung Design Patterns Sieglinde Heinrich
F açade P attern By Nicolas Lanquetin. Façade Pattern Structural Pattern Bietet ein gemeinsames Interface, anstatt vieler Interfaces eines Subsystems.
04 - Actions Actions Actions 2 Motivation In verschiedenen Swing-Komponenten werden ausgelöste Aktionen durch ActionListener behandelt. Häufig werden.
DVG Verkettete Listen Verkettete Listen. DVG Verkettete Listen 2 Primitive Datentypen Vorteile: –werden direkt vom Prozessor unterstützt.
FH-Hof Singleton Pattern Richard Göbel. FH-Hof Motivation Bestimmte Klassen sollen nur ein Objekt haben Nur ein Fabrikobjekt für eine Fabrikklasse Zentraler.
M A X - P L A N C K - G E S E L L S C H A F T Bericht des Partnerinstituts Sabine Krott 1.0 Pilotentreffen im Harnack-Haus, 8. Juni 2006 Distribution:
Status eSciDoc Malte Dreyer eSciDoc Hauptaktivitäten in 2006 Abstimmung mit den Zielgruppen Funktionale Anforderungserhebung mit.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Was umfaßt die CORBA Core Spezifikation? Welche zusätzlichen Komponenten muß ein ORB Produkt beinhalten? Core: CORBA Objekt Modell CORBA Architektur OMG.
Fesselspiele Data Binding in WPF und Silverlight
Medien zwischen Technologie und Gesellschaft Dozent: Herr Prof. Dr. Manfred Thaller SS 13 Referent: Christian Braun.
Institut AIFB, Universität Karlsruhe (TH) Forschungsuniversität gegründet 1825 Towards Automatic Composition of Processes based on Semantic.
OO implementieren Teil IV Objekte erzeugen. © René ProbstModul 226IV - 2 Von der Klasse zum Objekt Plan Bau Objekt Klasse Instanzierung Objekt Das Objekt.
Java Performance Tuning Performance Tuning is similar to playing a strategy game but happily you usually get paid for it.
Test Driven Development - Romano Adler-
Die .NET Common Language Runtime
BAS5SE | Fachhochschule Hagenberg | Daniel Khan | S SPR5 MVC Plugin Development SPR6P.
3rd Review, Vienna, 16th of April 1999 SIT-MOON ESPRIT Project Nr Siemens AG Österreich Robotiker Technische Universität Wien Politecnico di Milano.
Projekt Alcatraz Java RMI / Spread - Gruppe A4.
Gameplay Systems I Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung SS 2012 Prof. Dr. phil. Manfred Thaller Referent: Christian Weitz.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Entity Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
MVVM in Windows 8 und Windows Phone 8
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Parallel Programming Thread Synchronization. Heute 1. Lösung zu Assignment 2 2. Erstellen und Starten von Threads in Java 3. Das synchronized Schlüsselwort.
Kap 4-1OHO Kap. 4.2 Das Orbix CORBA-System Kurzer überblick zu der CORBA-Implementierung Orbix •Unser Fahrplan: •IDL Verwendungsbeispiel •Zoom-In: CORBA.
Kap OHO-Workshop: MTS - COMs OTM T. Grabs Kap. 3.4 Microsoft Transaction Server als Beispiel eines OTM Was ist COM/DCOM? Microsoft Transaction Server:
XML IV: Cocoon 2.
Linker & Loader in .NET August Steinbacher.
Equals, Hashcode und CompareTo Micha Kessler
Was dir Trivialbeispiele in Async and Await nicht sagen! Marcus Kimpenhaus und Martin Möllenbeck.
Design Patterns Ein Muster (pattern) ist eine Idee, die sich in einem praktischen Kontext als nützlich erwiesen hat und dies auch in anderen sein wird.
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
Ambient Intelligence WS 10/11
Common Language Runtime Seminar Softwareentwicklung Wintersemester 2003 Gertraud Orthofer
CuP - Java Zwölfte Vorlesung Klassen – Komposition und Vererbung Freitag, 15. November 2002.
KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH) Vorlesung Knowledge Discovery - Institut AIFB Tempus fugit Towards.
Service components and distribution with OSGi Seminar: Multimedia- und Internetsysteme Paul Hübner |
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Launch ON Global.vi System ID object name classname Services to suscribe Observer Control Ref vi-path Service name Step 1 : Objects register to the Global.vi´s,
SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH
How to use and facilitate an OptionFinder Audience Response System.
Technische Universität München 1 CADUI' June FUNDP Namur G B I The FUSE-System: an Integrated User Interface Design Environment Frank Lonczewski.
9.3 COM und DCOM (Microsoft ) COM – Component Object Model
Raphael Fischer Informatik II - Übung 05 Raphael Fischer
 Präsentation transkript:

Overwiew COM

HA: 10 Fragen – Was ist eine COM-Komponente? DLL Factory Factory Pattern Interface CLSID Query Interface Aggregation Inner class 1.) Static View – Classical (h-File in C++) 2.) Dynamic View – Communication  OO-Server mit Events  EVENT 3.) Event-Data-System  DATA (werden im Blackboard Pattern angelegt) HA: 10 Fragen – Was ist eine COM-Komponente?

(D)COM = Distributed Component Object Model Inhalte: Basisinterface, Extension Interface Pattern, Reference Counting, Broker Pattern, Factory Pattern COMponent: - box mit Inteface (Design by contract)  Interfaces können hinzugefügt werden  box-spoon-plot - abgeschlossene Funkionalität - Modul - entspricht einer Klasse, Reuseability (= Wiederverwendbarkeit) - Implementierung austauschbar, loading on demand - wie Klassenbibliothek nutzbar - remote nutzbar - load balancing - Design for Integration - unabhängig von Programmiersprache - Interface Description Language (idl)  CORBA, DCOM Softwarebus: CORBA = Common Request Broker Architecture COM = Objectoriented Middleware + Synchrone Communication (+ Asynchrone Communication) Softwarebus

BasisInterface IUnknown: interface IUnknown { BasisInterface IUnknown: interface IUnknown { virtual HRESULT __stdcall QueryInterface (const IID iid, void **ppr) = 0; virtual ULONG__stdcall AddRef () = 0; virtual ULONG__stdcall Release () = 0; } Bemerkung: a.) #define interface struct (class mit public members) b.) __stdcall (Pascal Aufrufkonvention, Methode räumt Stack vor Return auf; normalerweise räumt der Caller den Stack auf) c.) #define STD Method CALL TYPE __stdcall d.) HRESULT 32-Bit-Wert (Bit 1= Severity, Bit 2-16=Facility, Bit 17-32= Return Code Interface-Implementierung in C++: interface IX { public: virtual void Fx1()=0; virtual void Fx2()=0; } interface IY { public: virtual void Fy1()=0; virtual void Fy2()=0; } --------- class CA : public IX, IY { virtual void Fx1() {...} Implementierung (h, cpp) .... }  Trennung Interface und Implementierung  Schnittstellenvererbung, keine Implementierungsvererbung  Vererbung  vtable wird vom Compiler generiert Inheritance – Implementierungsdetail  ATL nested class (Aggregation, MFC)

Broker-Pattern (Sequenzdiagramm): IX Virtual  virtual function table: pIX vtbl pointer Zweistufiger Mechanismus: 1.) look up in vtable (Funktionszeiger) 2.) function call mit Funktionszeiger IDispatch  vtable ausimplementieren für z.B. VBasic Fx1 &Fx1 &Fx2 Fx2 Enthält Zeiger auf Memberfunktionen Broker-Pattern (Sequenzdiagramm): Client ClientProxy Broker Stub(ServerProxy) Server Call Server Send Request Pack Data Find Server Find Server Channel Call Service UnPack Data Run_Service Pack Data Return UnPack Data Result

IX IY IX IY CX CY CX CY Query Interface: Marshaling (PackData): Datenstruktur  „Bytewurst“ Unmarshaling (UnpackData): Daten werden wieder entpackt Parameter-Classification: in  out  inout  sind Bestandteil von idl Query Interface: CA fachliche Klasse vtable Server Query Interface AddRef Release Fx Query Interface AddRef Release Fx Client Vtbl-Pointer pIx HRESULT QueryInterface (const IID &iid, void ** ppv) IUnknown IX IX IY IX IY IY CX CY CX CY IUnknown IUnknown Componente Componente

Unterstützt Interface ein Interface IX? HRESULT QueryInterface (IID, IDPtr) - 32 Bit - S_OK - E_NOINTERFACE - Makro: SUCEEDED, FAILED Bsp.: void foo(IUnknown *pI) { Ix * pIx=NULL; HRESULT hr=pI QueryInterface(IID_IX, (void**)&pIX); if(SUCEEDED(hr)) { pIx  Fx(); } } IUnknown Implementierung für QueryInterface, Add Ref, Release Class Factory Implementierung für QueryInterface, Add Ref, Release Class Factory Implementierung für fachliche Klasse IX Unterstützt Interface ein Interface IX? ja nein hr S_OK *ppv != 0 hr E_NOINTERFACE *ppv = 0

Implementierung von Query Interface: IUnknown IUnknown IUnknown Query Interface AddRef Release Query Interface AddRef Release ULONG Ix Iy Bemerkung: Cast „über nächste Nachbarn“ *ppv = static_cast <IUnknown*>(static_cast <Ix*>(this)) (nicht eindeutig als Mehrfachvererbung) CA :public: private  private protected  public public  public a.) Query Interface b.) vTable-Mechanismus IUnknown Interface IX : IUnknown { /*...*/ } Interface IY : IUnknown { /*...*/ } class CA: public IX, public IY { /*...*/ } IX IY

HRESULT __stdcall CA::QueryInterface (const IID &iid, (void. ) ppv); { HRESULT __stdcall CA::QueryInterface (const IID &iid, (void **) ppv); { if(iid == IID_IUnknown) { *ppv = static_cast<Ix*>(this); } else if(iid == IID_IX) { *ppv = static_cast<Ix*>(this); } else if(iid == IID_IY) { *ppv = static_cast<Iy*>(this); } else { *ppv = NULL; return E_NOINTERFACE; } static_cast<IUnknown*>(*ppv)AddRef(); return S_OK; } a.) if-cascades substitution by hash tables b.) Code: - Client wünscht Interface Ix, Iy, IUnknown - Client wünscht anderes Interface - Reference Counting - Casting ändert Wert des ppv-Zeigers Virtual Function Table QueryInterface AddRef Release Fx CA:this IX vtblpointer IY vtblpointer Instance Data (IX*)CA:this QueryInterface AddRef Release Fx (IY*)CA:this

Eigenschaften von Query Interface: 1.) QueryInterface ist symmetrisch pIx  QI(IID_Y, ...)  pIy : QI(IX)IY pIy  QI(IID_X, ...)  pIx : QI(QI(IX)IX)IX 2.) QueryInterface ist transitiv pIx  QI(IID_Y, ...)  pIy pIy  QI(IID_Z, ...)  pIz 3.) QueryInterface ist reflexiv pIx  QI(IID_X, ...)  pIx ÜA: Identität des Interface-Zeigers Frage: Wann gehören pIx und pIy zur gleichen Komponente? Wie kann man rausfinden, ob zwei Interface-Zeiger zur gleichen Komponente gehören? IUnknown IX IY IZ

Reference Counting:  Lifetime Control Regeln: 1.) Call AddRef before Return  Bsp.: QI, CreateInstance 2.) Call Release when you are done 3.) Call AddRef after assignment Garbage Collection  delete this mit Bedingung m_mRef=0

Klassifikation von Klassen: 1.) Nicht-modale Klassen Klassen besitzen keine Beschränkung hinsichtlich der Aufrufreihenfolge ihrer Methoden. Bsp.: class DateTime set(), get(), compareEqual(), ... 2.) Unimodale Klassen Beschränkung der Aufrufreihenfolge (Design by Contract) ihrer Methoden, aber unabhängig vom Zustand (Attributinhalt). Bsp.: class Ampel rotesLichtEin(), gelbesLichtEin(),... 3.) Quasimodale Klassen Beschränkung der Aufrufreihenfolge ihrer Methoden ausschließlich basierend auf den aktuellen (State Change in der State Chart) Zustand. Bsp.: class Stapel push()  wenn der Stapel gefüllt kann nichts mehr draufgelegt werden 4.) Modale Klassen Beschränkung der Aufrufreihenfolge (State Change in der State Chart) hinsichtlich ihrer Methode und ihrer Zustände (Attributbelegung). Attribute Methode Stateless Objects und State Objects Unimodal call sequence of methods from design by contract Quasimodal State Chart Bind Recovery Find Recovery