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 herencia de implementación, lo que permite que un objeto herede ("subclasear") algunas de sus funciones de otro objeto mientras sobrescribe otras funciones.

El problema para la interacción de objetos de 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, el comportamiento de los componentes relacionados podría ser indefinido o instablemente implementado. 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 una preocupación importante. En un entorno en el que los componentes de un equipo se construyen mediante la reutilización como 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 la porción de código que intenta reutilizar otro objeto no sabe nada, y no necesita saber nada, sobre la estructura interna o la implementación del componente que se está utilizando. 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 y/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 hace uso de 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 necesita preocuparse, sobre la estructura interna del objeto externo, el cliente solo se preocupa por el comportamiento.

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