Reutilização de Objetos

Um objetivo importante de qualquer modelo de objetos é permitir que os autores de objetos reutilizem e estendam objetos fornecidos por outros como partes das suas próprias implementações. Uma forma de fazer isto em Microsoft Visual C++ e outras linguagens é usando herança de implementação, que permite a um objeto herdar (criar uma subclasse) algumas das suas funções de outro objeto enquanto sobrescreve outras funções.

O problema para a interação de objetos a nível do sistema usando a herança tradicional de implementação é que o contrato (a interface) entre objetos numa hierarquia de implementação não está claramente definido. Na verdade, é implícito e ambíguo. Quando o objeto pai ou filho altera a sua implementação, o comportamento dos componentes relacionados pode tornar-se indefinido ou implementado de forma instável. Em qualquer aplicação individual, onde a implementação pode ser gerida por uma única equipa de engenharia que atualiza todos os componentes ao mesmo tempo, isto nem sempre é uma preocupação principal. Num ambiente onde os componentes de uma equipa são construídos através da reutilização em caixa negra de outros componentes construídos por outras equipas, este tipo de instabilidade põe em risco a reutilização. Além disso, a herança de implementação normalmente funciona apenas dentro dos limites do processo. Isto torna a herança tradicional da implementação impraticável para sistemas grandes e em evolução compostos por componentes de software construídos por muitas equipas de engenharia.

A chave para construir componentes reutilizáveis é conseguir tratar o objeto como uma caixa opaca. Isto significa que o pedaço de código que tenta reutilizar outro objeto não sabe nada, e não precisa de saber nada, sobre a estrutura interna ou implementação do componente em uso. Por outras palavras, o código que tenta reutilizar um componente depende do comportamento do objeto e não da sua implementação exata.

Para alcançar a reutilizabilidade em caixa-preta, o COM adota outros mecanismos estabelecidos de reutilização, como contenção/delegação e agregação.

Observação

Para conveniência, o objeto reutilizado é chamado de objeto interior e o objeto que utiliza esse objeto interior é o objeto exterior.

 

É importante lembrar em ambos estes mecanismos como o objeto exterior aparece aos seus clientes. No que diz respeito aos clientes, ambos os objetos implementam quaisquer interfaces para as quais o cliente possa obter um apontador. O cliente trata o objeto exterior como uma caixa opaca e, por isso, não se importa, nem precisa de se importar, com a estrutura interna do objeto exterior — o cliente preocupa-se apenas com o comportamento.

Para obter mais informações, consulte os seguintes tópicos: