PCTRIO - il portale del software gratuito
Visualizza il feed RSS

Guide Hardware Software by PCTrio

COM (Component Object Model)

Valuta questo inserimento
di su 28th December 2009 di 16:16 (2229 Visite)
Perché COM ? Cosa significa COM ? E , soprattutto, a cosa serve COM ?

Una cosa alla volta … affronteremo , insieme , tutti questi perché e andremo a fondo in taluni dettagli.

COM è il “mattone” fondamentale su cui si sono basate le tecnologie passate ( e recenti) di Microsoft, quindi, comprenderne il funzionamento è basilare.

Cosa significa COM… Componet Object Model , ovvero modello di componenti ad oggetti, cioè una “filosofia” di programmazione. Anche se Microsoft , ha inserito tale modo di “vedere le cose” in tutti i suoi linguaggi di programmazione, a cominciare dal Visual Basic per finire al C++ … e anche i suoi Sistemi Operativi sono basati su questa filosofia.

In COM esistono due tipologie di componenti : quelli definiti Client e quelli definiti Server . Il componente Client deve poter “invocare” il componente Server senza conoscere esattamente come il componente Server è stato implementato…in parole povere il client NON deve conoscere il codice che c’è dietro al componente Server che vuole richiamare e a cui deve chiedere un Servizio.

Com mette a disposizione questo meccanismo che, come capirete anche da soli, è estremamente potente. Ma per arrivare a Com si è dovuti passare prima per OLE (Object Linking and Embedding) e OLE2 (l’evoluzione di OLE).

OLE è una tecnologia che consente agli Utenti di collegare uno o più Documenti prodotti in applicazioni diverse (inizialmente Office) utilizzando un meccanismo di comunicazione “inteprocess” detto DDE (Dynamic Data Exchange). Ebbene , Com nasce inizialmente come prodotto di supporto per la tecnologia OLE2….poi….fortunatamente si è evoluto ed è diventato molto più importante di tutte le altre tecnologie.

Detto questo… cominciamo a vedere come funziona COM in dettaglio.

Il “mattone” fondamentale di COM è il componente , ovvero l’ unità minima di riutizzo. Immaginiamo di costruire una casa (il nostro programma) : essa sarà formata da tanti mattoncini (i componenti COM) che potranno essere inseriti nella struttura a piacimento. Questo è un bel passo in avanti rispetto allo sviluppare un’applicazione di tipo “monolitico”, ovvero in un unico “pezzo”…

Ma cosa è un componente COM ? Beh…generalmente un componente COM è una DLL o un .EXE che segue delle regole ben precise. I componenti COM sono indipendenti dal linguaggio di programmazione, sono forniti in codice binario, sono facilmente aggiornabili a versioni successive e sono anche facilmente richiamabili all’ interno di una rete geografica tramite DCOM (Distributed COM)

Com si basa sul concetto di Interfaccia , ovvero su di un meccanismo di “contatto” fra il codice del Client e quello del Server. Proprio per questo per il Client non è fondamentale conoscere il codice del Server, ma soltanto la sua Interfaccia (o le sue Interfacce, perché possono essere più di una… polimorfismo docet …)

Ebbene, l’ Interfaccia fondamentale che ogni componente COM deve esporre è IUnknown e tale interfaccia ha sempre in testa le tre chiamate a funzioni fondamentali che sono : QueryInterface, AddRef, Release . Vediamole una ad una.

QueryInterface : questa funzione serve per interrogare il componente che la espone per sapere se una data Interfaccia viene supportata. Se la risposta è affermativa viene restituito il puntatore a tale Interfaccia. I parametri di QueryInterface sono due ; il primo è l’ interfaccia richiesta (detta IID ) , il secondo parametro è il puntatore a tale interfaccia. Se valorizzato l’ interfaccia è supportata, altrimenti no.

Prima di vedere le restanti due Funzioni (AddRef e Release) , dobbiamo però fare due parole sul Reference Counting, ovvero sulla “vita” del componente, cioè sul momento in cui il componente comincia la sua “vita” e sul momento in cui il componente cessa di “vivere”…

Eh già…anche i componenti hanno una loro vita e deve essere così, altrimenti la RAM di un sistema finirebbe nel giro di pochissimi minuti di utilizzo…Infatti il concetto è questo : prendo il componente , lo utilizzo per il tempo necessario, notifico al Sistema Operativo che non ho più bisogno di quel componente… Il Sistema Operativo distrugge il componente. Come fare per ottenere tutto questo ? La risposta è , ovviamente, AddRef & Release .

AddRef : Serve per incrementare il contatore associato ad ogni Istanza di componente. Va richiamata ogni volta che si restituisce il puntatore a quell’ interfaccia nella funzione di QueryInterface

Release : Serve per decrementare il contatore associato ad ogni Istanza di componente. Va richiamata ogni qualvolta si finisce di utilizzare quell’ Interfaccia.

Infatti, il contatore in oggetto, quando vale Zero, fa si che il sistema elimini completamente dalla memoria ogni riferimento a quell’ Interfaccia utilizzata.

Quindi rimane facile,ora, comprendere come il Sistema Operativo riesca a liberare memoria… controllando proprio il contatore associato ad ogni interfaccia… si incrementa ogni qualvolta si utilizza … si decrementa ogni qualvolta quell’ Interfaccia non serve più … Dovrebbe essere anche facile comprendere che NON sempre è il Sistema Operativo che sbaglia, ma molte volte è il programmatore, che si dimentica queste semplici regole o le applica male.

Praticamente tutti gli attuali Sistemi Operativi di Microsoft seguono queste regole… Anche i componenti sviluppati in Visual Basic 6, solo che noi non ci accorgiamo di niente, fa tutto il “motore” di VB6… (Per approfondire VB6, si veda la sezione VB6…Oltre ogni limite presente sempre negli Approfondimenti)

Chiaramente questo non vuol essere un trattato su COM, ma vuole semplicemente mettere in luce dei concetti che sono alla base di COM e dei sistemi Windows.

Molto altro ci sarebbe da dire, questo è uno spunto e non è escluso un nuovo approfondimento su questo interessantissimo argomento.

Per qualsiasi approfondimento, non esitate a contattarci tramite il nostro Forum.

Inviato "COM (Component Object Model)" da Digg Inviato "COM (Component Object Model)" da del.icio.us Inviato "COM (Component Object Model)" da OkNotizie Inviato "COM (Component Object Model)" da Google Inviato "COM (Component Object Model)" da Twitter Inviato "COM (Component Object Model)" da Friendfeed Inviato "COM (Component Object Model)" da Bitly Inviato "COM (Component Object Model)" da Livejournal Inviato "COM (Component Object Model)" da Facebook

Categorie
Sistemi Operativi
Home  |   Software  |   Drivers  |   Guide  |   Sicurezza  |   Area gestione
Created by - best view 1024x768 and over. - C.F. 92048990524
PCTrio McAfee PCTrio AVG PCTrio Norton PCTrio Google