Il posto migliore per imparare il modello a oggetti del componente [chiuso]

12

Ho bisogno di imparare la COM per il mio progetto attuale. Sono un noob e non sono stato in grado di trovare buoni punti di partenza per COM. Ho cercato su MSDN e googling ... Ho trovato alcuni articoli interessanti su codeproject.com, ma non sono soddisfatto. Perché usiamo COM? Perché esiste? In quali posti esiste? ..... e così via ... Quindi, per favore, dimmi dove posso trovare le risposte a queste domande?

    
posta Chani 09.05.2011 - 07:27
fonte

5 risposte

16
  • In primo luogo, COM è come la programmazione orientata agli oggetti. L'interfaccia COM è un'interfaccia astratta.
  • COM ha un vantaggio rispetto all'OOP integrato di ogni lingua in quanto è possibile avere classi COM implementate in lingue diverse e / o compilate da diverse versioni di compilatori e che saranno ancora in grado di interagire. Questa è chiamata "interfaccia binario dell'applicazione" (ABI)
  • COM utilizza il conteggio dei riferimenti. All'inizio potrebbe essere fastidioso, ma non appena apprendi i puntatori intelligenti, la tua vita sarà molto più semplice e scoprirai che il concetto di conteggio dei riferimenti è molto facile da capire.
  • COM utilizza un modo strano di trasmissione delle classi, ovvero "Interfaccia di query".

L'apprendimento del IUnknown è il primo passo.

Una buona interfaccia COM adatta per lo studio dei principianti è l'interfaccia IStream. Puoi esercitarti in COM implementando l'interfaccia IStream usando molti metodi di memorizzazione dei dati.

Aggiunto il 2012/09/28:

Dopo che il meccanismo COM è stato inventato, le persone di Microsoft hanno scoperto che questi meccanismi aprono la porta a trucchi di programmazione insoliti che non sono OOP ortodossi. Al livello più basso, IUnknown.QueryInterface è solo un metodo; può fare qualsiasi cosa Questi trucchi rendono COM intimidatorio per gli studenti, perché possono invalidare il ragionamento di base che può essere preso in prestito da OOP.

La documentazione Microsoft su MSDN impiega molto tempo a dire "COM non è ..." o "Non fare ipotesi" per spiegare come questi trucchi insoliti possono violare il codice.

I progettisti di COM utilizzano il Principio di sostituzione di Liskov (la "L" in SOLID ) per essere sicuri le loro molteplici interfacce e l'uso di trucchi non invalida il ragionamento OOP di base o l'operazione del programma.

Se il tuo progetto non usa questi trucchi, va bene vedere la COM solo dal punto di vista OOP. Se il tuo progetto utilizza questi trucchi, dovrai vedere COM come codice auto-modificante.

(Joke: We had to spend so much time with L that we typically ignore the four other principles.)

    
risposta data 09.05.2011 - 07:47
fonte
9

Il motivo principale per COM è di fornire un'interfaccia di comunicazione orientata agli oggetti tra un'applicazione e altre applicazioni e DLL che possono vivere in spazi di memoria diversi e tra oggetti che possono avere rappresentazioni di oggetti interni differenti.

Qualcosa da ricordare quando si apprende la COM è che al momento il C ++ era il re e le applicazioni chiamate dll utilizzavano C. Non c'era un ABI comune (come dice @rwong) e COM era la soluzione microsoft.

Probabilmente vale la pena dare un'occhiata ad Active Template Library (ATL) per Visual Studio che rende un po 'più facile usare anche la COM.

Un paio di libri che ho trovato utili nel corso della giornata

link

link

hth

    
risposta data 09.05.2011 - 15:37
fonte
7

In origine avevo imparato a conoscere la COM dal libro Learning DCOM (DCOM è solo un'estensione di COM, il libro è principalmente su COM). Ha più di dieci anni e dovrebbe essere economico se lo si usa (dato che COM non è più esattamente caldo, nemmeno nel mondo Microsoft, anche se è ancora usato per l'interoperabilità).

Il motivo principale per cui esiste la COM è facilitare lo sviluppo basato sui componenti, il che significa che, invece di collegare le librerie quando si compila il codice, si fa riferimento a un'interfaccia (la descrizione di come comunicare con un componente esterno) e si usa qualche implementazione di ciò quando si distribuisce. È alla base della maggior parte della tecnologia di Microsoft.

Il sistema ha il supporto per alcune funzionalità che erano interessanti prima che tutto fosse gestito (come il conteggio dei riferimenti e l'auto-descrizione (tramite IDispatch)).

    
risposta data 09.05.2011 - 07:59
fonte
5

COM è uno standard creato negli anni '90 per consentire a diversi software di comunicare tra loro. Il più importante è lo standard binario che consente a un pezzo di software di creare o associarsi a un oggetto e quindi di chiamarlo nell'interfaccia. Questo ti permette di fare cose come creare una DLL in C ++ che può essere chiamata da una pagina ASP (oggetti COM), o creare un controllo in Delphi che puoi mettere in una finestra di dialogo VB (controlli ActiveX) o foglio di lavoro Excel. Quando si incolla un'immagine in Word, viene utilizzata anche la COM, incorporando un'applicazione separata in una parola. Meno popolare è DCOM che chiama oggetti remoti, di solito ci sono modi più semplici per farlo.

Quindi Com / ActiveX / DCOM era molto popolare 10 anni fa con VB, VBA, C ++ / ATL, Delphi. Dotnet è molto più semplice e C # ha sostituito la maggior parte dell'uso di COM e VB ecc.

Ci sono ancora molte interfacce COM che esistono che potreste voler chiamare da un'applicazione dotnet o Java o C ++. (Non dire)

Se è necessario chiamare le interfacce COM, VB è il modo più semplice per farlo. In Dotnet 4.0 C # ha la parola chiave dynamic che rende molto più facile chiamare le interfacce IDispatch, che è probabilmente un'ottima soluzione da consultare.

Se hai bisogno di conoscere molti dettagli, hai davvero bisogno di usare C ++ e ATL, chiama le API C come CoCreateInstance. Evita questo se puoi, come la sua vecchia tecnologia e non è molto utile, attenersi alle raccomandazioni precedenti.

Non sono sicuro di quale software di monitoraggio stai guardando ma è probabile che sia disponibile tramite le classi System.Management in dotnet.

    
risposta data 09.05.2011 - 22:14
fonte
2

I seguenti potrebbero essere utili Panoramica COMM:

Il primo video parla dell'idea generale di creare componenti binari per riutilizzare codici scritti in lingue diverse (indipendenti dalla lingua) e si trovano in macchine diverse (processi) (indipendente dalla posizione / trasparente). Questa tecnologia viene utilizzata in alcune società di software per integrarsi con altri software (aziende) invece di acquistare il loro software e incorporarli nel proprio o scrivere i codici da zero nei loro sistemi.

Questa tecnologia ha tre diverse versioni (implementtaions):

OLE / COM / DCOM / ActiveX per gli sviluppatori C ++ (ATL è usato per semplificare il lavoro del programmatore)

JavaBeans / RMI / EJB per sviluppatori Java

CORBA / IIOP

Pensa ad esso come a una tecnologia utile quando hai il tuo software scritto in Java e vuoi aggiungere una funzionalità che è già presente in un pacchetto ma è scritto in C ++ e forse si trova in differenti macchina non nella macchina locale. Come si chiama "nuovo", come si creano oggetti e si chiamano metodi da essi?

I seguenti libri che ho visto persone che fanno codifica COM hanno uno di loro nei loro scaffali:

  • Workshop dello sviluppatore su COM e ATL 3.0

  • Inside Com

  • COM essenziale

risposta data 07.11.2013 - 23:17
fonte

Leggi altre domande sui tag