Share via


Riutilizzo di oggetti

Un obiettivo importante di qualsiasi modello a oggetti è consentire agli autori di oggetti di riutilizzare ed estendere gli oggetti forniti da altri come parti delle proprie implementazioni. Un modo per eseguire questa operazione in Microsoft Visual C++ e in altri linguaggi consiste nell'usare l'ereditarietà dell'implementazione, che consente a un oggetto di ereditare ("sottoclasse") alcune delle relative funzioni da un altro oggetto eseguendo l'override di altre funzioni.

Il problema per l'interazione con oggetti a livello di sistema tramite l'ereditarietà dell'implementazione tradizionale è che il contratto (l'interfaccia) tra gli oggetti in una gerarchia di implementazione non è chiaramente definito. Infatti, è implicito e ambiguo. Quando l'oggetto padre o figlio ne modifica l'implementazione, il comportamento dei componenti correlati potrebbe diventare indefinito o instabili. In qualsiasi singola applicazione, in cui l'implementazione può essere gestita da un singolo team di progettazione che aggiorna tutti i componenti contemporaneamente, questo non è sempre un problema importante. In un ambiente in cui i componenti di un team vengono compilati tramite il riutilizzo in black box di altri componenti creati da altri team, questo tipo di instabilità mette a repentaglio il riutilizzo. Inoltre, l'ereditarietà dell'implementazione funziona in genere solo entro i limiti del processo. Ciò rende poco pratico l'ereditarietà dell'implementazione tradizionale per sistemi di grandi dimensioni e in evoluzione costituiti da componenti software creati da molti team di progettazione.

La chiave per la creazione di componenti riutilizzabili consiste nel trattare l'oggetto come una scatola opaca. Ciò significa che il frammento di codice che tenta di riutilizzare un altro oggetto non conosce nulla e non deve sapere nulla, sulla struttura interna o sull'implementazione del componente in uso. In altre parole, il codice che tenta di riutilizzare un componente dipende dal comportamento dell'oggetto e non dalla relativa implementazione esatta.

Per ottenere la riusabilità black-box, COM adotta altri meccanismi di riutilizzabilità stabiliti, ad esempio contenimento/delega e aggregazione.

Nota

Per praticità, l'oggetto riutilizzato viene chiamato oggetto interno e l'oggetto che utilizza tale oggetto interno è l'oggetto esterno.

 

È importante ricordare in entrambi questi meccanismi il modo in cui l'oggetto esterno appare ai client. Per quanto riguarda i client, entrambi gli oggetti implementano qualsiasi interfaccia a cui il client può ottenere un puntatore. Il client considera l'oggetto esterno come una scatola opaca e pertanto non importa, né deve preoccuparsi della struttura interna dell'oggetto esterno" il client si preoccupa solo del comportamento.

Per ulteriori informazioni, vedi gli argomenti seguenti: