Copyright © 1997 Università di Firenze. All rights reserved.
license available.

|
![]() |
|||||||||||
| slide 1/10 |
OLE 2, come abbiamo già visto nella prima parte, è un termine generico con cui si indicano diverse tecnologie tutte costruite sopra il modello COM. Di fatto, ognuna di queste tecnologie è semplicemente costituita da un insieme di interfacce che un oggetto deve implementare.
Per esempio, un oggetto COM
è un OLE Control se supporta
determinate interfacce predefinite, denominate IOleControl,
IOleObject, IPersistStorage etc.
Un programma che vuole utilizzare un determinato Controllo
OLE, quindi, si aspetterà che questo implementi esattamente tutte
le funzioni definite nelle interfacce che ogni oggetto di tale tipo deve
necessariamente implementare.
E' per questo motivo che tutto funziona correttamente:
poichè la struttura di queste interfacce è nota a priori,
ogni programma che vuole sfruttare una tecnologia OLE è in grado
di conoscere in anticipo ciò che i vari oggetti COM sono in grado
di fare per esso.
Esaminiamo ora brevemente le principali tecnologie legate
a OLE 2:
Implementare un'applicazione che sfrutti una qualsiasi
delle tecnologie OLE è quindi molto difficile, poichè occorre
spesso scrivere centinaia di righe di codice per definire ogni funzione
di ciascuna delle numerose interfacce necessarie.
Il vantaggio però è che l'implementazione
di molte di queste interfacce risulta del tutto identica all'interno di
ciascuna applicazione.
Per questo motivo, i vari strumenti di sviluppo disponibili,
come Visual C++, Visual Basic o Delphi, mettono a disposizione librerie
di classi che implementano già
tutte queste interfacce, semplificando notevolmente al programmatore la
costruzione di applicazioni OLE.
|
|
![]() |
|||||||||||||||
| slide 2/10 |
ActiveX, ultima nata tra le tecnologie
basate sul modello COM, è invece esplicitamente orientata verso
il mondo Internet, introducendo un insieme di nuove caratteristiche che
in alcuni casi sostituiscono o integrano tecnologie precedenti, allo scopo
di renderle più adatte ad un utilizzo sulla 'Rete delle reti'.
Lo scopo principale di
ActiveX è quello, come suggerisce il termine stesso, di rendere
"attive" le pagine Web, obbiettivo che in un certo senso la accomuna e
la contrappone allo stesso tempo agli applet Java (come
vedremo più avanti).
Le normali pagine Html infatti presentano agli utenti delle informazioni statiche, mentre uno dei pregi principali delle tecnologie ActiveX è proprio quello di introdurre una componente dinamica all'interno delle pagine Web, in modo che l'utente possa interagire con esse ed eseguire delle elaborazioni locali.
I primi a beneficiare delle funzionalità di ActiveX
sono quindi - non a caso - i programmatori e gli sviluppatori Web intenzionati
a migliorare i loro siti WWW con animazioni multimediali, immagini generate
dinamicamente, o con qualsiasi altra componente applicativa già
familiare agli utenti del desktop di Windows®.
In questo contesto, ActiveX fornisce due strumenti principali
per estendere le potenzialità di Internet:
Documenti ActiveX
Un Documento ActiveX è
un documento OLE che può essere contenuto all'interno di un browser
(ad esempio, un documento Word visualizzato all'interno di
Ms-Internet Explorer versione
3.00 o successiva).
La differenza tra i due tipi di documenti, dal punto
di vista del programmatore, è minima: si tratta semplicemente di
alcune interfacce aggiuntive che devono essere implementate da parte dell'applicazione
Doc-Server (in questo caso Word).
Dal punto di vista dell'utente, però, la differenza
è notevole.
Grazie ai documenti ActiveX, infatti, diventa possibile
utilizzare un browser Internet per visualizzare e gestire file di qualsiasi
tipo. Il browser, una volta ottenuto un documento di un certo tipo, si
comporta come un normale Contenitore OLE e
si mette alla ricerca di un server in grado di gestire quel documento.
Dopo averlo trovato, gli cede l'intera area client, offrendo all'utente
la possibilità di gestire il documento sfruttando tutte le potenzialità
del server.
In definitiva comunque, dal punto di vista tecnologico ActiveX non aggiunge molto a OLE: qualche interfaccia in più, e una maggiore attenzione rivolta alle problematiche relative al trasporto di componenti software su una rete globale di computer.
Quest'ultimo motivo, insieme all'eccessiva complessità e rigidità della specifica originale dei Controlli OLE, secondo la quale ogni oggetto COM presentava, come già accennato, anche troppa ricchezza di interfacce verso il suo Contenitore, ha portato alla definizione di una nuova specifica più "elastica" ed efficiente, rappresentata appunto dai Controlli ActiveX (OCX).
La principale differenza tra i "vecchi" OLE Control e
i "nuovi" Controlli ActiveX è data infatti dal minor numero di interfacce
che devono essere obbligatoriamente implementate dal Controllo.
In pratica, al Controllo vengono date meno responsabilità,
permettendogli di essere più "leggero", mentre al Contenitore
viene richiesto di essere più "intelligente", in quanto deve essere
responsabile della gestione di Controlli che sono in grado di svolgere
meno compiti dei loro predecessori.
Attualmente un oggetto COM, per essere considerato un Controllo ActiveX, deve supportare la sola interfaccia-base IUnknown ed essere "autoregistrante", cioè capace di inserire le proprie entries nel registro di sistema (piccola differenza con un oggetto COM standard, ma utile proprietà nei collegamenti in rete).
I Controlli ActiveX sono dunque dei componenti software
di ridotte dimensioni, adatti ad essere prelevati attraverso Internet e
ad essere utilizzati all'interno di pagine Web, sfruttando un qualsiasi
browser ActiveX-compatibile.
Come vedremo nel caso specifico dell'ActiveMovie, tutto ciò che si basa sulla tecnologia COM è "modulare", nel senso che le applicazioni software possono essere "costruite" tramite l'opportuno assemblaggio di oggetti precostituiti e l'implementazione delle relative interfacce.
|
|
![]() |
Le Interfacce Standard
|
|
![]() |
Il Control Container
|
|
![]() |
Esempio di Contenitore di Controlli
|
|
![]() |
Un vantaggio che i Controlli ActiveX possono però vantare rispetto agli applet Java è dato dall'enorme numero di OCX attualmente esistenti e disponibili; questi Controlli possono facilmente essere riutilizzati sul Web, e la loro quantità e qualità sono tali da poter soddisfare le esigenze di chiunque voglia progettare una pagina Web interattiva.
Il grande svantaggio invece dei Controlli ActiveX è dato dalla loro mancanza di portabilità: essi, a differenza degli applet Java che possono girare - grazie alla JVM (Java Virtual Machine) - potenzialmente su qualsiasi piattaforma, sono programmi compilati che possono funzionare solo sui sistemi operativi che li supportano.
Tecnologicamente, inoltre, si tratta di due cose del tutto
diverse: Java
è un linguaggio di programmazione ad oggetti adatto allo sviluppo
di applicativi per il Web, mentre ActiveX è una tecnologia che permette
a più applicazioni di collaborare tra loro, anche attraverso Internet.
Concludendo, possiamo affermare che, "dal punto di vista
strategico, ActiveX rappresenta un gran risultato; grazie a questa tecnologia
infatti, Microsoft riesce ad "assorbire" Internet all'interno delle proprie
strategie di sviluppo e di vendita senza rivoluzionare nulla anzi, fornendo
un valore aggiunto alle sue soluzioni preesistenti." (L. Vandoni)
Questo "assorbimento" però, se venisse completato
con successo, farebbe perdere ad Internet una delle sue caratteristiche
peculiari: l'indipendenza dal sistema operativo.
I componenti di ActiveX non possiedono infatti al loro interno tutto ciò di cui necessitano per poter funzionare correttamente in ogni ambiente. Un documento ActiveX per poter essere gestito richiede, come abbiamo già detto, la presenza di un server. Un Controllo ActiveX per poter funzionare richiede, come minimo, la presenza di un sistema ActiveX-compatibile (come Ms-Windows®), se non quella di una o più librerie dinamiche (DLL).
Una rete Internet che permetta di sfruttare questa tecnologia è quindi un sistema i cui nodi siano dei Personal Computer, una rete dunque molto simile a quella attuale e piuttosto diversa da quella, prevista da alcuni, i cui nodi saranno costituiti invece da Network Computer, telefoni cellulari o addirittura televisori.
ActiveX attualmente è supportato pienamente solo da Ms-Internet Explorer; Netscape lo supporta solamente attraverso dei plug-in (una sorta di "estensioni installate" nel browser per estendere le sue funzionalità). Inoltre, i tipi di documenti standard che possono essere gestiti sono in pratica i documenti delle applicazioni di Ms-Office (Word, Excel, PowerPoint etc.).
|
|
![]() |
Anche se, in base alla nuova specifica, un Controllo ActiveX deve rispettare specifiche meno "esigenti", vi è comunque la necessità di informare un Contenitore sulle capacità e sui requisiti della "componente" da esso richiesta, magari evitando di utilizzare come identificatori semplici stringhe di testo inserite nel registro.
Attualmente, un Contenitore può conoscere tutte le funzionalità di un Controllo ActiveX (o di un qualsiasi altro Oggetto COM) tramite le cosiddette Categorie Componenti, universalmente identificate da particolari stringhe GUID del registro di sistema chiamate appunto CATID (Identificatori di Categoria), senza che sia necessaria l'istanziazione dell'oggetto stesso.
Una categoria componente definisce una specifica area di funzionalità, un sottoinsieme di metodi o anche la modalità d'uso di una o più interfacce supportate dall'oggetto; di conseguenza, potendo un singolo Controllo supportare diverse interfacce con modalità differenti, ad esso potranno corrispondere diversi CATID.
Tali categorie componenti non sono però di solito
relazionate (ereditarietà) o ordinate (gerarchia) in alcun modo
tra loro.
Anche per il caso, viceversa, che sia il Controllo a richiedere certe caratteristiche al suo Contenitore - in modo così da evitare un'inutile istanziazione o un utilizzo non corretto dell'oggetto stesso - esistono appositi CATID nel System Registry.
Va infine evidenziata la differenza tra i CLSID (Class Identifier) e i CATID che, pur essendo entrambi GUID (Global Unique Identifier), indicano rispettivamente una particolare implementazione di un oggetto COM (come istanza di una specifica classe) e alcune sue funzionalità (metodi nelle interfacce) le quali possono essere implementate differentemente per due oggetti con diversi CLSID, dando anche luogo allo stesso CATID.
Per concludere la trattazione sulle tecnologie COM-ActiveX, accenniamo brevemente ad ActiveMovie.
ActiveMovie è una architettura modulare
della famiglia COM-ActiveX, sviluppata con lo specifico scopo di controllare
e processare flussi (stream) di dati multimediali tempo-correlati.
In particolare permette, tramite funzioni "runtime" (cioè
richiamabili in tempo reale durante l'esecuzione di un'applicazione), la
riproduzione di suoni e immagini digitali codificati nei formati più
diffusi (MPEG, AVI, DAT, MOV, MID, WAV, etc.) tramite la RUNDLL32.EXE (in
Windows 95®).
Il Filter Graph Manager ed il Filter Graph:
i filtri
|
|
![]() |
|||||||||||||||
| slide 8/10 |
L'architettura ActiveMovie si basa sull'uso dei filtri, componenti modulari connessi - tramite altri oggetti componenti detti Pin - nel Filter Graph (schema o configurazione di filtri), il quale a sua volta è gestito dal Filter Graph Manager (letteralmente: gestore del "grafo dei filtri").
Tutti questi sono oggetti COM, ai cui metodi le applicazioni possono quindi accedere direttamente solo tramite opportune interfacce, sempre però attraverso la mediazione del Filter Graph Manager (es. metodo RUN e interfaccia IMediaControl) oppure tramite un Controllo ActiveMovie ActiveXTM(.OCX), o anche utilizzando l'MCI (Multimedia Control Interface).
Graph Editor Tool e tipi di filtri
|
|
![]() |
Nell'utilizzo del Filter Graph Manager, anche se non strettamente necessario, è comunque utile conoscere almeno i principi base dello schema dei filtri, per poterne eventualmente implementare uno proprio (visivamente con il Graph Editor Tool).
ActiveMovie è infatti, in questo senso, un'architettura "aperta e personalizzabile" in quanto si può inserire in un prefigurato schema di filtri, oppure "runtime" in un filter graph già esistente, un filtro custom appositamente implementato per un'eventuale applicazione che debba trattare i dati multimediali in un particolare modo.
Tale implementazione può essere fatta, ad esempio,
in linguaggio C++, sfruttando delle librerie di classi base che facilitano
lo sviluppo delle interfacce degli oggetti in tal modo creati.
I diversi tipi di filtri sono in
definitiva classificabili in tre categorie fondamentali:
Ovviamente alcuni filtri saranno dati da un'opportuna
combinazione di questi tipi base.
Esempio di Filter Graph per un filmato MPEG
|
|
![]() |
Ad esempio, un filter graph, il
cui scopo sia quello di riprodurre un file video compresso secondo lo già
citato standard MPEG (Motion Picture Expert Group),
farà uso dei seguenti filtri:
E' chiaro che, affinché il filter graph lavori correttamente, i filtri devono essere collegati rispettando un ordine preciso, ordine che deve regolare anche il flusso dei dati.
E' comunque sempre il filter graph manager ad occuparsi delle connessioni tra i filtri di elaborazione e del controllo del flusso multimediale oltre ad essere in grado di ricercare, ed eventualmente implementare, lo schema di filtri più adatto ad un certo tipo di dati (a meno che il filter graph non sia già preconfigurato).
In tale ricerca il filter graph manager usa l'oggetto Filter Mapper (mappatore di filtri) per leggere il registro di sistema e determinare i filtri più adatti a processare i dati in questione, filtri che saranno scelti in base al loro "valore di merito" e, se possibile, collegati tra loro fino a raggiungere un eventuale filtro di resa per completare così lo schema.
Nel controllo del flusso sono anche inclusi i comandi start (play), pause e stop e altre funzionalità tipiche di un lettore multimediale, come la riproduzione temporizzata o la ricerca di un particolare punto nello stream di dati; tali controlli sono mediati, tramite opportuni metodi, dallo stesso filter graph manager che permette una comunicazione bidirezionale tra gli stati e gli eventi dei filtri installati e le applicazioni client.
Il gestore dei filtri, infine, dispone di interfacce (IDeferredCommand
e IQueueCommand) che permettono alle applicazioni di accodare
dei comandi a certi eventi o condizioni.