Programowanie składnikowe w modelu COM wprowadzenie Jarosław Francik COM - Component Object Model Programowanie składnikowe Programowanie składnikowe 1 Program - monolit 1 Program składnikowy Składnik A Składnik B Składnik C Składnik D Składnik E 1
Architektura składnikowa a architektura klient serwer Architektura klient-serwer Program składnikowy Serwer Składnik A A B Składnik B Składnik C Programowanie obiektowe a programowanie składnikowe 1 Interfejs: Grupa właściwości i metod implementowanych przez klasę. Kontrakt pomiędzy klientem a składnikiem 1 C++: Dziedziczenie 1 COM: Interfejsy i ich implementacja 1 Java: : Jedno i drugie Programowanie składnikowe podejście firmy Microsoft 1 COM - Common Object Model OLE - Object Linking and Embedding Automatyzacja - Automation (dawniej: Automatyzacja OLE) ActiveX DirectX DAO - Data Access Objects DCOM - Distributed COM 1 COM+ - technologia dla XXI wieku 2
Programowanie składnikowe podejście firmy Microsoft Obiekt COM Programowanie składnikowe podejście firmy Microsoft 1 Obiekt: kombinacja danych i metod 1 Klasy i interfejsy COM pozwala stosować wiele interfejsów dla jednej klasy 1 Hermetyzacja 1 Polimorfizm 1 Dziedziczenie COM zapewnia tylko dziedziczenie interfejsów Programowanie składnikowe podejście firmy Microsoft 1 Obiektowość 1 Spójność 1 Niezależność od języka 1 Kontrola wersji 3
Interfejsy Składnik COM QueryInterface() {...} ptr #1 ptr #2 AddRef() {...} ptr #3 Release() {...} ptr #4 ptr #5 LookUpWord() {...} ptr #6 AddToDictionary() {...} vtable RemoveFromD...() {...} Interfejsy są niezmienne Dodanie nowej funkcjonalności wymaga zdefiniowania nowego interfejsu Typy składników COM 1 Składniki wewnątrzprocesowe - DLL 1 Składniki zewnątrzprocesowe,, lokalne - EXE 1 Składniki zewnątrzprocesowe,, zdalne 1 Formanty OLE (wewnątrzprocesowe( wewnątrzprocesowe) - OCX 4
Składniki wewnątrzprocesowe 1 Działają w obrębie procesu klienta 1 Korzystają z przestrzeni adresowej klienta 1 Mniejsza stabilność 1 Wysoka wydajność Składniki zewnątrzprocesowe Przetwarzanie żądań klienta w osobnym procesie i wątku Osobna przestrzeń adresowa Wysoka stabilność Niższa wydajność (przekazywanie danych poprzez granice procesów) Możliwość uruchomienia jako niezależnej aplikacji Przydatne przy automatyzacji i w DCOM Przetwarzanie rozproszone w relacji klient - serwer 1 Korzystanie z lokalnego składnika KLIENT PROXY COM STUB SERWER 1 Korzystanie ze zdalnego składnika KLIENT PROXY STUB PROXY STUB SERWER DCOM (RPC) 5
Automatyzacja 1 Programowalność 1 Udostepnianie interfejsów 1 Użytkowanie za pomocą Visual Basic 1 Uproszczone interfejsy : dispatch interfaces (dispinterfaces) Interfejsy (przypomnienie) Składnik COM QueryInterface() {...} ptr #1 ptr #2 AddRef() {...} ptr #3 Release() {...} ptr #4 ptr #5 LookUpWord() {...} ptr #6 AddToDictionary() {...} vtable RemoveFromD...() {...} dispinterface :: ::Invoke Składnik COM vtable Invoke() { switch(dispid) } 1: Metoda1( ) 2: Metoda2( ) 3: Metoda3( ) dispinterface 6
vtable vs. 1 Visual Basic 1 C++ vtable 1 Automatyzacja na ogół 1 dual interfaces ActiveX Interfejsy (przypomnienie) Składnik COM QueryInterface() {...} ptr #1 ptr #2 AddRef() {...} ptr #3 Release() {...} ptr #4 ptr #5 LookUpWord() {...} ptr #6 AddToDictionary() {...} vtable RemoveFromD...() {...} 7
dispinterface :: ::Invoke (przypomnienie) Składnik COM vtable Invoke() { switch(dispid) } 1: Metoda1( ) 2: Metoda2( ) 3: Metoda3( ) dispinterface Kontrolki ActiveX 1 Ewolucja: VBX Visual Basic Extension OLE Controls ActiveX Controls 1 Cechy: Składniki oparte na COM (IUnknown( IUnknown) Możliwość samorejestracji (np. przy pobieraniu z Internetu) Kontrolki ActiveX interfejs użytkownika Kontrolka ActiveX Kontener metody zdarzenia właściwości 8
Kontrolki ActiveX 1 Implementacja obejmuje wiele interfejsów COM (typu vtable) 1 Z punktu widzenia użytkownika widoczne są przede wszystkim dispinterfaces Kontrolki ActiveX IOlePlaceActiveObject IOleInPlaceObject IOleObject IDataObject IViewObject2 IRunnableObject IOleCache2 IPersistStorage IPersistStreamInit ISpecifyPropertyPages IConnectionPointContainer IConnectionPoint IProvideClassInfo2 IOleControl Kontrolka ActiveX Kontrolki ActiveX Kontener IOleInPlaceFrame IOleInPlaceUIWindow IOleInPlaceSite IOleClientSite IAdviseSink IOleControlSite IPropertyNotifySink (events) 9
Kontrolki ActiveX Kontener IOleInPlaceFrame IOleInPlaceUIWindow IOleInPlaceSite IOleClientSite IAdviseSink IOleControlSite IPropertyNotifySink (events) IOlePlaceActiveObject IOleInPlaceObject IOleObject IDataObject IViewObject2 IRunnableObject IOleCache2 IPersistStorage IPersistStreamInit ISpecifyPropertyPages IConnectionPointContainer IConnectionPoint IProvideClassInfo2 IOleControl Kontrolka ActiveX VB implementacja COM. Podsumowanie 1 Automatyzacja użycie interfejsu 1 Metody zdefiniowane w dispinterface i dostępne poprzez :: ::Invoke 1 Właściwości metody specjalnego typu dostępne w dispinterface 1 Zdarzenia wywoływanie metod dispinterface kontenera (odwrócenie sytuacji: kontener jest serwerem) VB implementacja COM. Podsumowanie Przy implementacji wszystkich typów składników COM Visual Basic korzysta z elementów technologii ActiveX 10