lunes, 20 de septiembre de 2010

Análisis y Diseño Orientado a Objetos con Aplicaciones

music: NINA HAGEN -"New York, New York"- / -"Wir Leben Immer... Noch"-


Otra de las cosas que he estado haciendo en estas últimas semanas ha sido repasar la teoría relacionada con el Modelo de Objetos, Análisis y Diseño Orientado a Objetos (desde ahora, AOO y DOO) y, en general, con Ingeniería del Software. Para ello me ha venido muy bien uno de los pesos pesados de dicha materia: el libro "Análisis y Diseño Orientado a Objetos con Aplicaciones", de G.Booch (ficha en Wikipedia); libro que he devorado con avidez e intensidad durante este tiempo.

Está dividido en tres partes:

  • Una primera, que describe las características inherentes del Modelo de Objetos (Clases, Objetos, características -Abstracción, Encapsulamiento, Modularidad, Herencia....-, tipos de relaciones entre clases /colaboraciones entre objetos, Parametrización de clases, Polimorfismo, etc.)
  • Una segunda parte en la que se explica una metodología de desarrollo Orientada a Objetos (desde ahora, OO) y la notación correspondiente para aplicarla. Destacar, en cualquier caso, la insistencia que se hace durante todo el libro de no ser el desarrollo de sistemas complejos algo que se pueda realizar mediante una perfecta guía o fórmula de recetario.
  • Una última parte en la que se estudian ejemplos de varios tipos de Sistemas OO, de diversos tipos, empleando la metodología adaptada para cada ejemplo. En esta parte ha resultado muy útil la creación de un pequeño guión /resumen para cada sistema, en el que se vayan enumerando en el orden en que aparecen cosas como tipos de diagramas que se emplean (según la fase de desarrollo), nuevas clases que van surgiendo, y nuevos métodos que se añaden a las clases.
Respecto a la implementación de dichos sistemas el lenguaje empleado es C++, pero no se olvida de otros lenguajes Basados en Objetos y OO como Smalltalk, Ada y CLOS, que son citados a menudo y se comparan sus características. De hecho, en el Apéndice se puede ver un resumen con una fichas de las características principales de los lenguajes citados y de alguno más.

Sin embargo, he encontrado en este libro un punto bastante negativo: la expresión, el lenguaje empleado al escribirlo. Demasiado rimbombante, demasiado sonoro. Como queriendo tapar algún tipo de hueco o carencia, o pretendiendo hacer más "grande" algo que es en realidad mucho más pequeño y sencillo. En mi caso, la alarma ha sonado varias veces cuando, tras haber visto un par de veces un determinado concepto X (me ha sucedido con varios) y quedarte literalmente igual, se llega a un tercer punto del libro en el que el autor comenta algo del tipo "...X, cuya explicación ya la habíamos realizado en el capítulo tal...". Ahí te paras y dices: "¡Eh, para el carro!. ¡¿Que dices que esto ya lo has explicado, en este otro capítulo?!. Pues yo me quedé igual...". He sentido en esos casos que no se empleara un lenguaje más llano, más directo, para expresar ciertas cosas.

Es en momentos como ese cuando he echado mano de "Software Engineering for Game Developers", de J. P. Flynt, un libro que sí emplea un lenguaje así, para comprender qué había querido decir Booch entre tanta frase etérea y floritura narrativa.

En resumen: un libro que, aunque engorroso de manejar en ciertos momentos, contiene una descripción muy completa sobre el Modelo OO, alguna que otra explicación muy interesante acerca del funcionamiento interno de C++, y varios ejemplos de los que se pueden sacar ideas y/o aplicar diseños adaptados a nuestras necesidades. Si además tienes a mano un libro de ayuda del que puedas tirar cuando notes que "suena la alarma"... recomendado. : )

Hasta otra. :P