Portal Zaraguay

Herencia ? NO, gracias !

COM no soporta herencia, pero hasta que punto es imprescindible la herencia en un modelo de objetos como COM ?


Que es eso llamado herencia ?

En POO, el polimorfismo significa que se puede trabajar sobre un objeto sin saber exactamente qué tipo de objeto es. Supongamos que tenemos un objeto Animal, y tenemos un método Alimentar capaz de llevar a cabo determinadas acciones sobre el objeto Animal.

Supongamos ahora que tenemos otros objetos Caballo, Perro, etc... Si estos objetos implementan polimorfismo respecto al objeto Animal, el método Alimentar trabajará perfectamente sobre ellos. Observesé que el método Alimentar no tiene conocimiento de estar trabajado sobre un objeto de tipo distinto a la clase Animal.

La herencia proporciona tambien la reutilizacion del código. En el ejemplo anterior, al clase Animal puede implementar una serie de métodos miembro (Comer, Dormir, etc...), al crear nuevas clases por herencia de Animal, estas nuevas clases nacen ya con los métodos miembro de su clase base, sin necesidad de escribir nuevos métodos miembro.

Problemas con la herencia.

Existen lenguajes, C++ es uno de ellos, que soportan herencia múltiple. Esto es, se puede derivar perfectamente el objeto Vaca de dos objetos base simultaneamente, los objetos Mamifero y Cuadrupedo.

Existe otro problema menor relacionado con la herencia. Si creamos una clase por herencia de otra, el código de la clase padre se incluye en el programa incluso en el caso de que nunca se vaya a usar. Es decir, la reutilizacion del código puede ser deseable, pero en ocasiones se sobrecargan los métodos de la clase derivada ya que se busca el polimorfismo pero nó la reutilizacion del código. Con la herencia ambas caracteristicas van unidas, el código de la clase base estará presente aunque no se use realmente.


El polimorfismo en el modelo COM.

Por ejemplo, los controles OCX usados en varios lenguajes (principalmente Visual Basic) implementan típicamente una decena de interfaces. Tenemos controles visibles e invisibles en tiempo de ejecucion, con acceso a datos enlazados o sin él, que usan una ventana de windows o usan la ventana del contenedor, con o sin generación de eventos, etc...

Combinar todas estas caracteristicas en un arbol de herencia resulta complicado, sin embargo aplicar el mecanismo de las interfaces resulta trivial. Por ejemplo, tenemos un control OCX que no puede enlazarse a datos y queremos añadirle esta capacidad, solo tenemos que añadir al control el interface correspondiente. O a la inversa, tenemos un objeto enlazado a datos que no es un control y queremos convertirlo en control, añadimos un interface y ya tenemos un control, que queremos que ese objeto sea visible, añadimos otro interface.


La reutilizacion del código bajo COM.

La implementacion de interfaces en un objeto COM no supone reutilización del código. Por ejemplo, si el objeto Vaca implementa las interfaces Animal, Cuadrupedo, Mamifero, ... es necesario escribir el código que sea necesario para realizar esta implementación. Cuando creamos otro objeto que implementa los mismos interfaces debemos reescribir de nuevo el código de los interfaces.

En cualquier caso, el modo en el que se reutiliza el código es el mismo en la herencia y en la agregación , la diferencia estriba en que en el caso de la herencia todo el trabajo lo hace el compilador mientras que la agregacion la realiza el programador.


© info3@maicas.net