¿Por Qué Objetos? Hernán A. Wikinson
¿Por Qué Objetos? Hernán A. Wikinson
¿Por Qué Objetos? Hernán A. Wikinson
Grady Booch en su libro Object-Oriented Analysis and Design with Applications dice
estamos por 1994 y todava no conocemos bien que significa desarrollar con objetos
(desastres que tuve la triste experiencia de vivir pero que me dejaron importantes
enseanzas)
La primera regla del paradigma trata sobre qu se intenta obtener como resultado
del desarrollo de sistemas utilizando objetos. Esta es: Un sistema hecho con objetos es un
modelo computacional de una porcin de la realidad (la porcin que queremos
sistematizar, donominada dominio).
Las dos palabras estrella de esta definicin son modelo y realidad. Hay una
situacin de la realidad (por ejemplo facturar una venta) que debe ser modelada de tal
manera que pueda ser ejecutada por una computadora, obteniendo como mnimo el mismo
resultado que el proceso reemplazado por este nuevo sistema produca.
Durante el proceso de crear un modelo surgen las ventajas y desventajas de tener
buenas herramientas de modelizacin. En el paradigma de objetos la herramienta principal
de este proceso de modelizacin es justamente el objeto. Un objeto no es ms que una
representacin conceptual de algn elemento de la realidad.
En nuestro ejemplo del proceso de facturacin, un elemento de la realidad es la
factura, otro es la persona que realiza la factura y no menos importante el motivo por el
cual se est facturando: la venta.
En nuestro modelo por lo tanto, debemos representar estos elementos de la
realidad con objetos. Hay elementos fciles de reconocer puesto que son elementos fsicos
como la factura o la persona que factura (una persona que durante este proceso asume el
rol de facturador) y hay elementos ms difciles de ver puesto que son elementos
abstractos, ideas o acciones, como la venta en s misma, que tambin debe ser modelada
puesto que una factura es el resultado de haber realizado una venta.
Durante este proceso de modelizacin de la realidad que hacemos, no debemos
preocuparnos por cuestiones que no pertenecen a ella como la performance, la persistencia 2
u otros problemas o cuestiones de otra realidad, como la computacional.
Debe quedar claro que la performance, la persistencia y otros problemas
computacionales son ortogonales (no se colisionan) con la realidad que se est modelando y
que si se los incluye dentro del modelo original lo ensuciarn con problemas ajenos, que
harn de este modelo cualquier cosa, menos un modelo de la realidad.
Tenemos que ocuparnos de modelar bien la realidad de nuestro problema.
Tenemos que hacer un modelo en situaciones normales de presin y temperatura, despus
tendremos tiempo para preocuparnos por hacer que este modelo adems ejecute bajo los
requerimientos no funcionales especificados.
Entonces, si no debemos ocuparnos de la performance ni la persistencia, de qu
debemos ocuparnos cuando modelamos con objetos?. Debemos ocuparnos de las
responsabilidades de estos objetos, de qu hacen.
Pensemos en la responsabilidad de un facturador. Qu hace un facturador? Su
responsabilidad es facturar. La responsabilidad de una factura no ser ms que permitir
saber cul es su nmero, qu dicen las lneas que la componen o el total de la misma
(recuerden que una factura es simplemente un papel con datos impresos). La
responsabilidad de la venta ser indicar qu se vendi, a qu precio y a quin.
Cada vez que se agrega una responsabilidad a un objeto debemos estar seguros que
realmente corresponda a ese objeto. Por ejemplo, debe la factura tener cmo
responsabilidad imprimirse?. Pensemos en la realidad. Una factura no se imprime a s
misma, alguien se encarga de imprimirla, por lo tanto la factura no tiene la
2
Polimorfismo viene del griego Poli que significa muchas, morph que significa forma,
muchas formas
Ac se termin, thats all folks. Esas son las reglas y los elementos de juego de
este paradigma. No hay clases, no hay herencia, slo un modelo con objetos polimrficos
que colaboran a travs de mensajes.
heredar de una clase, piensen primero si no se estn olvidando de algn otro objeto que
debera asumir la responsabilidad que le quieren dar a esta nueva subclase.
Si a usted le vendieron que hay que utilizar lenguajes de objetos para desarrollar
porque tienen Clases y Herencia, reclmele a su vendedor porque lamentamos decirle que
le vendieron gato por liebre.
3- Rompiendo mitos
Veremos ahora a partir de entender qu significa desarrollar con objetos, como ciertos mitos
de nuestra profesin se caen inexorablemente.
este mito es la parte de la frase que dice programar en C++ es difcil. Realmente es
difcil. El lenguaje C++ es una muy mala implementacin del paradigma. Miles de
proyectos han fracasado por el simple hecho de utilizar C++ (y otros miles habrn
fracasado por una mala administracin, no siempre la tecnologa es la responsable).
C++ rompe principios bsicos del paradigma como el encapsulamiento, dificulta el
polimorfismo permitiendo definir mtodos que no son virtuales, no posee recoleccin de
basura automtica, hay tres maneras distintas de conocer a los objetos (por valor, por
referencia y por medio de punteros) y para colmo de males permite utilizar herencia
mltiple. La dificultad que provoca trabajar con variables tipadas hizo que los creadores de
este lenguaje implementen los famosos templates, que no son ms que macro
expansiones de cdigo (aquellos viejos y experimentados programadores de assembler
entienden a que me refiero). He visto un proyecto crecer en la dimensin de sus archivos
ejecutables de manera exponencial por el simple hecho de utilizar templates. Todo era un
template. Una ventana era un template, un campo de una ventana era un template,
absolutamente todo era un template. Como era de esperarse el proyecto fracas y la culpa
quin la tuvo, la inmadurez de los objetos y no la falta de conocimiento sobre cmo
desarrollar con ellos.
Me imagino a aquellas personas que vienen del COBOL o el VisualBasic y se
encuentran con todas estas dificultades. Por qu no van a tener derecho de pensar que los
objetos no sirven?
Hay que saber separar la paja del trigo. C++ es una implementacin (muy mala
por cierto) del paradigma y lo difcil de usar no es el paradigma, es C++, que poco tiene que
ver con los objetos ms all de cmo se lo vendi.
est dada por la analoga que se hace entre los diagramas de clases y los diagrama de
entidad-relacin del paradigma relacional, que nada tienen en comn (por empezar son de
paradigmas distintos).
En objetos la modelizacin del problema se debe hacer de manera incremental y la
mejor tcnica que conozco para este tipo de modelizacin es la denominada Test
Development Driven (TDD) [Beck 02] que como es de esperar, rechaza la idea de sentarse
a realizar grandes e improductivas sesiones de diseo que terminan en diagramas UML
alejados de la realidad.
Segn mi opinin, UML es una buena herramienta para comunicar un modelo
terminado, no para crearlo.
Por qu es el mejor paradigma?, porque las herramientas que nos provee para
disear (objetos y mensajes) nos permiten obtener un modelo cuyo gap semntico con la
realidad es mnimo.
Por qu es bueno tener un modelo fiel de la realidad?, porque aplicar los cambios
que se produzcan en la realidad en un modelo fiel a esta ser ms sencillo y menos
traumtico que un modelo peleado con la realidad.
Cuando el paradigma de objetos es utilizado correctamente, se pueden atacar
problemas esenciales del software6 con buenos resultados. Si se modela bien la realidad, el
modelo ser sencillo y se habr atacado la complejidad del software. Si se modela bien la
realidad, los cambios que se produzcan en esta impactarn de manera proporcional en
nuestro modelo. A cambios sencillos de la realidad podremos ofrecer soluciones sencillas
en nuestro sistema, y por ende de bajo costo.
Pero generalmente este tipo de explicaciones no alcanzan o no se terminan de
apreciar hasta que no se viven, por eso ciertas veces cuando me preguntan por qu
objetos?, no encuentro mejor respuesta que otra pregunta, por qu no objetos? Todas las
veces que discut sobre este tema llegu a la conclusin que no hay razones tcnicas vlidas
para no trabajar con objetos. Puede haber razones que corresponden ms al sector humano
o administrativo de todo proyecto de software por el cual no sea conveniente trabajar con
objetos, como la falta de experiencia en la tecnologa o recursos escasos.
Trabajemos con objetos o no, estamos usando la misma herramienta para ejecutar
nuestros sistemas: computadoras que se comportan como mquinas de Turing. El nivel de
expresividad de los lenguajes que existen para desarrollar cdigo que luego es ejecutado
por estas mquinas es exactamente el mismo, sea Assembler, C++ o Smalltalk. La
diferencia est en cuanto cuesta resolver el mismo problema con cada uno de estos
lenguajes.
Si concordamos que un programa no es ms que un modelo computacional de la
realidad entonces debemos concluir que ser ms sencillo hacer programas con aquellos
lenguajes que permitan modelar la realidad fcilmente, con aquellos lenguajes con los que
pueda crear mejores abstracciones. Estos lenguajes son los que implementan el paradigma
de objetos y entre ellos el ms productivo segn mi experiencia, es Smalltalk (que es ms
que un lenguaje, es un ambiente de objetos).
Entonces, por qu no objetos? Creo que el nico motivo vlido sera el no querer
pagar la inversin del cambio que se necesita hacer por tratarse de un nuevo paradigma.
Sin embargo no debemos olvidar que en esta profesin el cambio y la innovacin son los
puentes hacia la supervivencia y el crecimiento.
Si usted est pensando en cambiar, no se tire a la pileta sin un baero cerca,
planifique el cambio, instryase, capactese, hgalo gradualmente. Y luego cuando tenga
que hacer su primer sistema, concntrese en la realidad que tiene que resolver, es as
solamente como podr tener xito utilizando objetos.
Agradecimientos
Quera agradecer fundamentalmente a mi gran maestro del desarrollo con objetos,
Lic. Mximo Prieto, que sin su ayuda y conocimiento hubiese sido imposible tener estos
conceptos sobre el paradigma.
6
Un buen artculo sobre este tema es el famoso No Silver Bullet de Frederick Brooks,
muy recomendable a todos aquellos profesionales de sistemas que quieran entender un poco
ms sobre los problemas del desarrollo de software.
Referencias
[Beck 02]
[Kay 93]
[Smith 95]
[UML xx]
Sobre el autor
El Lic. Hernn A. Wilkinson es Gerente de Desarrollo de Mercap S.R.L. y se
desempea como Profesor de las materias Programacin Orientada a Objetos y Diseo
Avanzado con Objetos de la Facultad de Ciencias Exactas de la U.B.A.