Obiekty COM Przemysław Buczkowski
Plan prezentacji 1.Wprowadzenie do COM 2.Historia standardu 3.Jak działa COM 4.Interface IUknown 5.Paradygmaty COM 6.Implementacja serwera COM 7.Pytania na kolokwium
COM – co to takiego? COM (ang. Component Object Model) to technologia firmy Microsoft z 1993 pozwalająca na współdzielenie i interakcje z binarnymi modułami za pomocą specjalnych interfece’ów. Wywodzi się z technologii OLE i OLE2. Współcześnie jest ciągle używana, jednak coraz częściej zastępowana jest przez technologie.NET’u o podobnej funkcjonajlości.
Zalety COM definiuje pewien standard na poziomie binarnym, w oderwaniu od konkretnego narzędzia projektowego czy języka programowania użytkownikowi jest obojętne, gdzie znajduje się wykorzystywany komponent; jeżeli nawet znajduje się on na odległym komputerze, aplikacja klienta korzysta z niego w taki sam sposób, jak z komponentu lokalnego
Wady COM zamknięty charakter technologii w związku z przywiązaniem do jednej platformy systemowej a nawet sprzętowej brak otwartych standardów
Historia DDE (Dynamic Data Exchange)(1987) OLE (Object Linking and Embeding)(1991) OLE2 (Object Linking and Embeding 2)(1992) COM (Component Object Model)(1993) OCXs (OLE custom controls),VBX->OCXs,OLE2->OLE(1994) ActiveX, (OCXs, OLE) -> ActiveX(1996) DCOM (Distributed COM)(1996) COM+,(COM,DCOM) -> COM+(2000)
COM – jak działa? Pisząc component COM tworzymy w dowolnym wspieranym języku (!) binarkę obsługującą daną funkcjonalność w postaci klasy. Jednocześnie tworzymy publiczną umowę w postaci interface’u który pod unikalnym kluczem GUID rejestrujemy w rejestrze systemu. Klasa z naszej binarki musi oczywiście implementować publikowany interface.
COM – jak działa 2? Ponadto klasa również posiada swój GUID. Do utworzenia definicji interface’u może służyć specjalny język Interface Definition Language, który po skompilowaniu narzędziem o nazwie MIDL (wchodzi w skład WinSDK) generuje pliki nagłówkowe, które dołączamy do projektu, w którym chcemy używać obiektu COM.
COM – jak działa 3? W docelowym programie za pomocą WinApi lub ‘wyżejpoziomowych’ blibliotek jak np. ATL dla c++ wywołujemy funkcje, które zwracają wskaźniki na utworzone ‘poza’ programem klasy implementujące pożądany interface.
Interface IUnknown Wszystkie definiowane interface’y muszą dziedziczyć z IUnknown, który zawiera trzy metody: AddRef(), Release() – są wywoływane przy tworzeniu i usuwaniu odnośnika do interface’u śledząc ilość odwołań QueryInterface() – pozwala uzyskać dostęp do obiektu poprzez inny, zadany obsługiwany przez niego interface
Paradygmaty COM Dzięki temu komponenty COM są zwrotne, przechodnie i symetryczne. Zwrotne - można na obiekcie danego typu żądać QueryInterface() na własny typ Przechodnie - jeśli A można zamienić na B i B na C to wtedy można uzyskać C z A Symetryczne - jeśli z A można uzyskać B to z B można uzyskać A
Implementacja
Pytania Opisz własnymi słowami jak działa COM, wymień wady i zalety Wymień i opisz trzy metody które musi implementować każdy komponent