Reutilización de objetos

Un objetivo importante de cualquier modelo de objetos es permitir que los autores de objetos reutilicen y extiendan objetos proporcionados por otros como partes de sus propias implementaciones. Una manera de hacerlo en Microsoft Visual C++ y otros lenguajes es mediante la herencia de implementación, lo que permite que un objeto herede ("subclase") algunas de sus funciones de otro objeto al invalidar otras funciones.

El problema para la interacción de objetos en todo el sistema mediante la herencia de implementación tradicional es que el contrato (la interfaz) entre objetos de una jerarquía de implementación no está claramente definido. De hecho, es implícito y ambiguo. Cuando el objeto primario o secundario cambia su implementación, es posible que el comportamiento de los componentes relacionados se vuelva indefinido o que se implemente instablemente. En cualquier aplicación única, donde la implementación se puede administrar mediante un único equipo de ingeniería que actualiza todos los componentes al mismo tiempo, esto no siempre es un problema importante. En un entorno donde los componentes de un equipo se crean a través de la reutilización de caja negra de otros componentes creados por otros equipos, este tipo de inestabilidad pone en peligro la reutilización. Además, la herencia de implementación normalmente solo funciona dentro de los límites del proceso. Esto hace que la herencia de implementación tradicional no sea práctica para sistemas grandes y en evolución compuestos por componentes de software creados por muchos equipos de ingeniería.

La clave para crear componentes reutilizables es poder tratar el objeto como un cuadro opaco. Esto significa que el fragmento de código que intenta reutilizar otro objeto no sabe nada y necesita saber nada, sobre la estructura interna o la implementación del componente que se está usando. En otras palabras, el código que intenta reutilizar un componente depende del comportamiento del objeto y no de su implementación exacta.

Para lograr la reutilización de caja negra, COM adopta otros mecanismos de reutilización establecidos, como la contención o delegación y la agregación.

Nota

Para mayor comodidad, el objeto que se está reutilizando se denomina objeto interno y el objeto que usa ese objeto interno es el objeto externo.

 

Es importante recordar en ambos mecanismos cómo aparece el objeto externo a sus clientes. En lo que respecta a los clientes, ambos objetos implementan las interfaces a las que el cliente puede obtener un puntero. El cliente trata el objeto externo como un cuadro opaco y, por lo tanto, no le importa, ni tiene que preocuparse, sobre la estructura interna del objeto externo,"el cliente solo se preocupa por el comportamiento.

Para obtener más información, vea los temas siguientes: