Presentazione di PowerPoint - PowerPoint PPT Presentation

About This Presentation
Title:

Presentazione di PowerPoint

Description:

Title: Presentazione di PowerPoint Author: Prof.S.Cavalieri Last modified by: Prof.Salvatore Cavalieri Created Date: 3/12/2002 7:10:18 PM Document presentation format – PowerPoint PPT presentation

Number of Views:86
Avg rating:3.0/5.0
Slides: 42
Provided by: Prof162
Category:

less

Transcript and Presenter's Notes

Title: Presentazione di PowerPoint


1
Component Object Model (COM) Distributed COM
(DCOM)
2
Ragioni dello sviluppo COM
  • Applicazioni software di dimensioni sempre più
    grandi
  • Lunghi tempi per lo sviluppo e la manutenzione
  • Difficoltà nel rimuovere o aggiornare singole
    applicazioni che interagiscono con altre
    applicazioni
  • Necessità di
  • Semplificare la progettazione e lo sviluppo di
    applicativi
  • Facilitare e standardizzare l'interazione tra
    applicazioni di diversi produttori

3
Caratteristiche del modello COM
  • COM è una specifica
  • http//www.microsoft.com/com/resources/comdocs.asp
  • COM è una filosofia di programmazione
  • Programmazione basata su componenti riciclabili
  • COM è uno standard di interoperabilità binaria
  • COM è un collante tra componenti, permettendo
    la loro interazione

4
Caratteristiche del modello COM
  • Componente
  • una parte di software riutilizzabile in forma
    binaria (non è un codice sorgente !!!)
  • Suddivisione di un progetto in componenti
  • I componenti possono essere facilmente integrati
    con componenti prodotti da altri fornitori
  • Un componente permette di accedere alle proprie
    funzionalità tramite le interfacce
  • Esempi di componenti pulsanti, correttori
    ortografici

5
Caratteristiche del modello COM
  • Lutilizzo di un componente da parte di una
    applicazione non comporta la ricompilazione,
    visto che il componente che deve essere
    riutilizzato è già in versione binaria
  • Ad esempio un word processor che usa un
    correttore ortografico
  • Un componente è riutilizzabile
  • Chi produce un componente può riutilizzarne uno
    già esistente, utilizzando due tecniche
    containment e aggregation

6
Caratteristiche del modello COM
  • Gestione delle versioni
  • Si è superato il problema delle dll
  • un programma che utilizza una dll può
    interrompersi se trova una versione diversa di
    dll
  • In COM non è possibile cambiare le
    caratteristiche ("interfaccia") dei componenti
    già esistenti.
  • La nuova versione di un componente COM deve
    presentare le stesse interfacce, aggiungendone
    altre
  • Ad esempio se voglio realizzare un correttore
    ortografico diverso da quello offerto da word,
    devo garantire le stesse interfacce originarie,
    aggiungendone altre se voglio

7
Tecnologie ActiveX e OLE 2
  • Sono tecnologie create sulla base di COM e della
    sua architettura
  • ActiveX utilizza anche la tecnologia OLE v.2.0
  • La principale e visibile caratteristica dei
    documenti ActiveX è la possibilità di aprire una
    finestra allinterno di unaltra applicazione
  • Ad esempio Explorer nei confronti dei documenti
    Word o Acrobat

8
Oggetti COM
  • Ogni oggetto COM è unistanza di una particolare
    classe
  • Ogni oggetto COM presenta una o più interfacce
  • Ogni interfaccia include uno o più metodi che
    possono essere invocati dal programma client
  • Per invocare uno di questi metodi il client deve
    possedere un puntatore allinterfaccia che
    contiene i metodi

9
Interfacce degli Oggetti COM
  • Ogni interfaccia ha due nomi
  • Stringa di caratteri. Deve iniziare con la
    lettera I
  • Globally Unique Identifier (GUID), chiamata
    Interface Identifier (IID) o Universal Unique
    Identifiers (UUID)
  • GUID è di 16 byte ed è ottenuta eseguendo un
    apposito tool
  • GUID contiene un time stamp (tutti i GUID
    generati nella stessa macchina saranno diversi)
  • GUID contiene il MAC address (o un numero casuale
    se non vi è una scheda) per differenziare GUID
    generati da macchine diverse
  • La specifica delle interfacce (non
    limplementazione) avviene in un linguaggio
    comune Interface Definition Language (IDL)
  • Deriva dall'IDL usato in Microsoft RPC

10
Esempio di Interface Definition Language
  • object,
  • uuid(E7CD0D00-1827-11CF-9946-444553540000)
  • interface IMyInterface IUnknown
  • import unknwn.idl
  • HRESULT LookUpInt(in int c, out boolean
    found)
  • HRESULT SumOfIntegers(in myinteger5, out
    int sum)
  • L'interfaccia IMyInterface eredita tutti i metodi
    definiti in IUnknown
  • Un client in possesso del puntatore a
    IMyInterface può invocare anche i metodi di
    IUnknown
  • I metodi dell'interfaccia IUnknown devono essere
    sempre presenti !
  • Il comando import specifica il file idl che
    descrive IUnknown
  • LookUpInt e SumOfIntegers sono i metodi forniti
    dall'interfaccia IMyInterface
  • HRESULT è un valore di ritorno standard relativo
    al successo/insuccesso
  • in, out parametri formali ingresso e uscita
    (esistono anche quelli ingresso/uscita in, out)

11
Alcune Regole sulla Definizione delle Interfacce
  • Una volta che una interfaccia è stata definita e
    rilasciata nel "mondo", essa non può più essere
    cambiata.
  • Non è possibile cambiare/aggiungere/modificare
    metodi o parametri.
  • L'unica soluzione è definire una nuova
    interfaccia (nuovo nome e IID) che possiede gli
    stessi metodi della vecchia interfaccia,
    aggiungendone altri nuovi.

12
Definizione delle Interfacce Standard binary
format
  • La descrizione dell'interfaccia non è sufficiente
    per il suo uso da parte di un generico client
  • Il client possiede solo il puntatore
    all'iterfaccia
  • In genere per invocare un metodo, un client deve
    sapere come fare (ciò in genere dipende dal
    linguaggio in cui è stato scritto il metodo)
  • Esiste una struttura binaria (SEMPRE LA STESSA)
    per l'accesso ai metodi di una interfaccia di un
    oggetto COM.
  • Standard binary interface format
  • La presenza di uno standard binary interface
    format implica che il client possa invocare un
    metodo di un oggetto senza dover tener conto del
    linguaggio in cui è stato scritto il metodo
    stesso

13
Esempio di Interface Definition Language
(1)
(2)
1) Metodi interfaccia IUnknown (sempre
presenti) 2) Metodi interfaccia IMyInterface
14
Definizione delle Interfacce Standard binary
format
  • La struttura binaria appena vista suggerisce che
    la realizzazione più "immediata" e "naturale" di
    un client COM si ottiene utilizzando il C
  • è necessario implementare la gestione dei
    puntatori a vtable per l'invocazione dei metodi
  • Scrivere un client in C è possibile, ma più
    difficile
  • L'assenza di meccanismi per la gestione dei
    puntatori in VB ha determinato la necessità di
    creare una speciale interfaccia vtable chiamata
    IDispatch

15
Interfaccia Fondamentale IUnknown
  • Tutti gli oggetti COM la devono implementare
  • Contiene tre metodi
  • QueryInterface
  • AddRef
  • Release

16
Interfaccia Fondamentale IUnknown Metodo
QueryInterface
  • Quando il client crea un oggetto COM (come ? si
    vedrà dopo), riceve il puntatore ad una delle sue
    interfacce (quella richiesta dal client)
  • Con tale puntatore il client può invocare tutti i
    metodi dell'interfaccia
  • E se vuole invocare metodi appartenenti ad altre
    interfacce ?
  • Ci sono casi in cui un client non crea un oggetto
    COM, ma un altro client gli passa (cede) il
    puntatore ad un'interfaccia di un oggetto COM già
    creato
  • Con tale puntatore il client può invocare tutti i
    metodi dell'interfaccia
  • E se vuole invocare metodi appartenenti ad altre
    interfacce ?

17
Interfaccia Fondamentale IUnknown Metodo
QueryInterface
  • Attraverso il puntatore allinterfaccia, il
    client accede al metodo IUnknownQueryInterface
  • Specifica lIID dellinterfaccia che gli
    necessita
  • Se loggetto COM supporta linterfaccia
    richiesta, il client riceverà il puntatore
    allinterfaccia richiesta e potrà utilizzarne i
    metodi.
  • Altrimenti passerà NULL

18
Interfaccia Fondamentale IUnknown Esempio di
Utilizzo Metodo QueryInterface
  • Supponiamo che esista un tool di analisi di testo
    implementato come oggetto COM e che esso abbia
    un'interfaccia ISpellCheck
  • Una volta installato l'oggetto nel mio sistema,
    il mio word processor (e qualunque altro client)
    lo può utilizzare interroga la QueryInterface e
    chiede del puntatore a ISpellCheck
  • Supponiamo che venga rilasciata una nuova
    versione dell'oggetto che ora comprende anche
    l'interfaccia IThesaurus (semantica sinonimi)
  • Se uso il nuovo oggetto con l'esistente versione
    di word allora la nuova interfaccia sarà del
    tutto ignorata
  • Installando la nuova release del word processor,
    esso potrà chiedere sia il puntatore a
    ISpellCheck sia a IThesaurus (tramite la
    QueryInterface)
  • Se installo la nuova versione di word e mantengo
    il vecchio oggetto, tutto funziona ancora bene,
    perché se il mio word chiederà alla
    QueryInterface il puntatore a IThesaurus, otterrà
    NULL e l'opzione Thesaurus nel menù sarà
    disabilitata

19
Tipi di Componenti
  • Ogni oggetto COM è implementato dentro un Server
  • Il Server supporta più oggetti di una determinata
    classe
  • Il Server contiene il codice dei metodi delle
    interfacce dell'oggetto
  • Il Server ha il compito di creare l'oggetto
  • Gestisce i dati di ciascun oggetto
  • E' possibile avere tre diversi tipi di oggetti
    COM in base al tipo di Server che li supporta
  • In-Process
  • Local
  • Remote
  • Dal punto di vista del Client non vi è alcuna
    differenza

20
Tipi di Componenti
  • Componenti In-process
  • Il Server In-Process condivide lo stesso spazio
    degli indirizzamenti del Client
  • Il Server In-Process viene implementato come dll
  • Vantaggio velocità di elaborazione (nessun
    passaggio di contesto)
  • Svantaggio essendo una dll e non exe, può essere
    impiegato solo nel contesto di un programma
    chiamante e non può essere eseguito come
    applicazione autonoma

21
Tipi di Componenti
  • Componenti Locali
  • Il Server risiede sullo stesso computer del
    Client, ma viene eseguito come processo autonomo
    (spazio di indirizzi differente)
  • Il Server locale viene implementato come exe
  • Svantaggio cambio di contesto dal processo
    chiamante al componente
  • Componenti Remoti
  • Il Server risiede su un computer diverso da
    quello in cui viene fatto eseguire il client
    (processo che utilizza il componente)
  • Lo scambio informativo remoto viene supportato da
    DCOM

22
Creazione di un Oggetto COM
  • Finora si è assunto che un client possegga un
    puntatore ad una interfaccia iniziale di un
    oggetto COM
  • Dobbiamo capire come sia possibile creare un
    oggetto COM e come un client possa acquisire il
    puntatore ad una delle interfacce di tale oggetto
  • La creazione di un oggetto COM è basata su
  • Esistenza di Class Identifier (CLSID).
  • Ogni oggetto COM è una istanza di una classe
  • Ogni classe è identificata da un Class Identifier
    (CLSID)
  • Esistenza di una COM Library di supporto

23
Creazione di un Oggetto COM COM Library
  • Ogni sistema che supporta COM deve fornire
    un'implementazione della COM Library
  • La COM Library fornisce funzioni di supporto ad
    oggetti COM e ai client
  • ad esempio quelle per creare un oggetto COM
  • Le funzioni della COM Library sono accessibili
    tramite semplici chiamate di funzioni
  • non si usano metodi delle interfacce COM
  • Il nome di una funzione della COM Library
    generalmente inizia con il prefisso Co-
  • ad esempio CoCreateInstance

24
Creazione di un Oggetto COM COM Library
  • La creazione di un oggetto COM implica la
    produzione di una istanza della classe
    dell'oggetto
  • Ciò viene realizzato tramite l'avvio del Server
    relativo alla classe stessa
  • Tale Server è l'unico in grado di istanziare
    l'oggetto COM
  • E' necessario avviarlo solo per la prima istanza
    dell'oggetto
  • E' compito della COM Library avviare il Server e
    passargli l'ordine di creare l'istanza
    dell'oggetto
  • La creazione di un oggetto COM e
    l'inizializzazione dell'istanza sono due fasi
    separate

25
Creazione di un Oggetto COM COM Library
  • La COM Library necessita di un "Registro di
    Sistema" in cui venga associato ad ogni CLSID il
    percorso del codice del Server
  • L'implementazione del "Registro di Sistema"
    dipende dal SO
  • Windows NT utilizza il Registry
  • In ogni caso il "Registro di Sistema" deve
    contenere
  • CLSID (key-entry)
  • Tipo di server (in-process, local, remote)
  • Percorso relativo alla DLL o EXE (percorso locale
    o remoto)
  • Il "Registro di Sistema" viene aggiornato ad ogni
    installazione di una applicazione

26
Creazione di un Singolo Oggetto COM In-Process e
Locale
  • Il Client invoca la funzione CoCreateInstance
    della COM Library, passando
  • il CLSID (classe desiderata)
  • lIID (identificatore dellinterfaccia
    desiderata)
  • Sulla base del CLSID ed utilizzando il "Registro
    di Sistema", la COM Library
  • Localizza il Server in grado di istanziare la
    classe dell'oggetto
  • Il Server viene attivato (se non lo è già)
  • Il Server crea l'istanza dellobject class
    desiderata, passando alla COM Library il
    puntatore allinterfaccia richiesta
  • La COM Library passa questo puntatore al client

27
Creazione di un Singolo Oggetto COM Remoto
  • Il Client invoca la funzione CoCreateInstance
    della COM Library, passando il CLSID e IID
  • Sulla base del CLSID ed utilizzando il "Registro
    di Sistema", la COM Library
  • localizza il Server (Remoto) in grado di
    istanziare la classe dell'oggetto
  • Viene contattato il Sistema Remoto per realizzare
    l'istanziazione (via RPC)
  • Il Sistema remoto controlla il suo Registro ed
    individua il server
  • Il Server viene attivato (se già non lo è)
  • Il Server crea l'istanza dellobject class
    desiderata, restituendo al Sistema Remoto il
    puntatore allinterfaccia richiesta
  • Il puntatore viene consegnato al client via RPC

28
Creazione di Oggetti Multipli Class Factories
  • Se lutente deve creare una sola istanza di un
    oggetto, allora la CoCreateInstance è sufficiente
  • Molto spesso capita che lutente necessita di
    istanze multiple di oggetti della stessa classe
  • In tal caso viene utilizzato loggetto COM Class
    Factory
  • Il Class Factory è un oggetto COM in grado di
    creare più oggetti COM appartenenti ad una
    specifica classe
  • Il nome non è molto appropriato, perché vengono
    creati oggetti non classi

29
Creazione di Oggetti Multipli Class Factories
  • L'oggetto "Class Factory" viene gestito come un
    qualunque altro oggetto COM (accesso tramite
    interfacce) e deve possedere almeno linterfaccia
    IClassFactory
  • In realtà la CoCreateInstance si basa
    sull'oggetto Class Factory e sull'interfaccia
    IClassFactory, ma ciò viene del tutto mascherato
    all'utente

Class Factory
Client
IClassFactory
CreateInstance() LockServer()
Server
30
Creazione di Oggetti Multipli Class Factories
  • Linterfaccia IClassFactory contiene due metodi
  • CreateInstance. Crea una nuova istanza della
    classe di oggetto che la Class Factory può
    istanziare.
  • LockServer.
  • Per attivare un oggetto Class Factory, il client
    invoca la funzione della COM Library
    CoGetClassObject
  • Specifica il CLSID della classe di oggetti che
    loggetto Class Factory dovrà istanziare
  • Specifica lIID dellinterfaccia per laccesso a
    Class Factory (IClassFactory)
  • La COM Library crea l'oggetto Class Factory della
    classe desiderata e fornisce al Client il
    puntatore richiesto (IClassFactory)

31
Creazione di Oggetti Multipli Class Factories
  • Il Client ha già invocato la funzione
    CoGetClassObject e la COM Library ha fatto
    partire la Class Factory e ha fornito al Client
    il puntatore ad una sua interfaccia (ad esempio
    IClassFactory)

Client
Server
32
Inizializzazione di un Oggetto COM
  • Quando un oggetto COM viene creato, esso ha dati
    non inizializzati
  • Il Client potrebbe aver di bisogno
    linizializzazione di dati (ad esempio salvati
    sul disco)
  • E' ovviamente necessario che i dati siano salvati
    in modo persistente
  • In tal caso, la prima interfaccia che il Client
    chiederà è quella contenente le funzioni di
    inizializzazione delloggetto.
  • Esistono interfacce standard a tale scopo
    (utilizzo di dati salvati in files)
  • IPersistFile, IPersistStorage, IPersistStream

33
Distruzione di un Oggetto COM
  • La soluzione più ovvia il client che ha creato
    un oggetto lo distrugge. Ciò non è possibile !
  • Spesso un client passa il puntatore
    allinterfaccia di un oggetto ad un altro client
    (che può fare lo stesso con altri client)
  • Ogni client non sa quanti altri client stanno
    utilizzando lo stesso oggetto
  • Solo loggetto può sapere quando nessun client lo
    utilizza più
  • Vengono utilizzati i metodi dell'interfaccia
    IUnknown
  • IUnknownAddRef()
  • IUnknownRelease() basati sul Reference Counting

34
Distruzione di un Oggetto COM Reference Counting
  • Ogni oggetto COM che viene creato, mantiene un
    Reference Count
  • Quando loggetto COM passa il puntatore ad una
    sua interfaccia ad un client, incrementa di 1 il
    Reference Count
  • Quando un client termina l'utilizzo l'oggetto,
    deve invocare il metodo IUnknownRelease(), che
    decrementa di 1 il Reference Count
  • Quando un client riceve il puntatore da un altro
    client, invoca il metodo IUnknownAddRef(), che
    incrementa di 1 il Reference Count
  • Se il Reference Count è 0, loggetto distrugge se
    stesso
  • Problemi con i client che non rispettano la
    regola del Reference Counting

35
Riuso di Componenti COM
  • Containment
  • Aggregation

36
Marshalling
  • Per invocare un metodo di un oggetto COM, il
    client deve possedere il puntatore
    allinterfaccia relativa al metodo (vtable)
  • Il puntatore è un indirizzo di memoria
  • Per poter essere utilizzato, lo spazio degli
    indirizzi deve essere lo stesso di quello del
    client
  • Come viene utilizzato il puntatore
    nellarchitettura COM ?
  • La risposta dipende dalla tipologia del server
    in-process, local e remote

37
Marshaling In-process server
  • E' il caso più semplice.
  • Lo spazio di indirizzamento del client e del
    server è lo stesso
  • Il puntatore allinterfaccia può subito essere
    utilizzato per accedere al binario del metodo
    richiesto
  • Il Passaggio dei parametri e i valori di ritorno
    è realizzato nel modo tradizionale

38
MarshalingLocal Server
  • Se il client e l'oggetto COM risiedono nella
    stessa macchina, ma sono processi separati
    (spazio di indirizzi diversi), il client non può
    puntare all'interfaccia dell'oggetto
  • Si utilizzano due oggetti COM
  • Proxy e Stub
  • Un proxy è un oggetto COM, che presenta la stessa
    interfaccia delloggetto desiderato
  • Il client invoca il codice del proxy, che crea un
    package dei parametri del client e li invia
    tramite una interprocess communication (dipende
    dal SO)

39
MarshalingLocal Server
  • La richiesta arriva ad un altro oggetto COM Stub
  • Lo stub unpackage la richiesta e passa i
    parametri del client alloggetto reale
  • Ogni risposta da parte delloggetto viene inviata
    nello stesso modo al client

40
Marshaling Remote Server
  • Stesso schema del Local Server
  • La comunicazione è basata su DCOM, utilizzando RPC

41
Marshaling
  • Cosa è il Marshaling ?
  • Necessità di un formato standard per lo scambio
    di parametri e risultati tra Proxy e Stub
    (soprattutto per i remote server) e di opportuno
    codice per eseguire le appropriate conversioni
  • Macchine diverse possono usare codifiche e
    rappresentazioni di dati diverse
Write a Comment
User Comments (0)
About PowerShow.com