• No se han encontrado resultados

Identificando clases y objetos

In document Orientación a Objetos. Teoría y Práctica (página 179-191)

Enfoques clásicos y modernos

El problema de la clasificación ha sido del interés de innumerables filósofos, lingüistas, cien- tíficos del conocimiento y matemáticos, incluso desde antes de Platón. Es razonable estudiar sus experiencias y aplicar lo aprendido al diseño orientado a objetos. Históricamente, solo han existido tres aproximaciones generales a la clasificación:

❚ ❚ Categorización clásica. ❚ ❚ Agrupamiento conceptual. ❚ ❚ Teoría de prototipos [17].

Categorización clásica. En la aproximación clásica a la categorización, “Todas las entidades que tienen una determinada propiedad o colección de propiedades en común forman una categoría. Tales propiedades son necesarias y suficientes para definir la categoría” [18]. Por ejemplo, las personas casadas constituyen una categoría: o se está casado o no se está, y el valor de esta pro- piedad es suficiente para decidir a qué grupo pertenece determinada persona. Por otra parte, las personas altas no forman una categoría, a menos que pueda haber un acuerdo respecto a algún criterio absoluto por el que se distinga la propiedad alta de la propiedad bajo.

Un problema de clasificación

La figura 4.1 contiene diez elementos, etiquetados de A a J, cada uno de los cuales representa un tren. Cada tren contiene una máquina (a la derecha) y de dos a cuatro vagones, de dife- rentes formas y con distintas cargas. Antes de seguir leyendo, invierta el lector los próximos minutos en disponer esos trenes en cualquier número de grupos que considere significativos.

Orient a ción a O bje tO s. t eO ría y pr á c tic a

Por ejemplo, podría crear tres grupos: uno para trenes cuyas máquinas tienen ruedas negras, uno para trenes cuyas máquinas tienen ruedas blancas, y otro para trenes cuyas máquinas tienen ruedas blancas y ruedas negras.

Este problema proviene del trabajo de Stepp y Michalski sobre agrupamiento conceptual [19]. Como en la vida real, no hay respuesta “correcta”. En sus experimentos, los sujetos apor- taron alrededor de noventa y tres clasificaciones diferentes. La más popular fue la basada en la longitud del tren, formando tres grupos (trenes con dos, tres y cuatro vagones). La segunda más popular fue por el color de las ruedas de la máquina, como la que se ha sugerido. De las noventa y tres, alrededor de cuarenta eran totalmente únicas.

Nuestro uso de este ejemplo confirma el trabajo de Stepp y Michalski. La mayoría de nues- tros sujetos han utilizado las dos clasificaciones más populares, aunque hemos encontrado algunas agrupaciones más creativas. Por ejemplo, un sujeto dispuso esos trenes en dos grupos: uno representaba trenes etiquetados con letras que contenían líneas rectas (A, E, F, H e I) y el otro grupo representaba trenes etiquetados con letras que contenían líneas curvas. Este es verdaderamente un ejemplo de pensamiento no lineal: creativo, aunque sea extraño.

Una vez que usted haya completado esta tarea, cambiemos los requerimientos (de nuevo, como en la vida real). Supóngase que los círculos representan sustancias tóxicas, los rectángu- los representan madera, y todas las demás formas representan pasajeros. Intente clasificar los trenes de nuevo, y vea cómo este nuevo conocimiento cambia su clasificación.

Entre nuestros sujetos, el agrupamiento de los trenes cambió de forma significativa. La mayoría de ellos clasificó los trenes según transportasen o no cargas tóxicas. De este simple experimento se concluye que un mayor conocimiento significativo sobre un dominio facilita, hasta cierto punto, el conseguir una clasificación inteligente.

La categorización clásica proviene en primer lugar de Platón, y después de Aristóteles por medio de su clasificación de plantas y animales, en la que utiliza una técnica bastante parecida a la del juego infantil de las Veinte Preguntas (¿Es animal, mineral o vegetal? ¿Tiene pelo o tiene plumas? ¿Puede volar? ¿Tiene olfato?) [20]. Filósofos posteriores, entre los que destacan Aquino, Descartes y Locke, adoptaron este enfoque. Como afirmó Aquino, “podemos nombrar una cosa según el conocimiento que tenemos sobre su naturaleza a partir de sus propiedades y efectos” [21].

La aproximación clásica a la categorización se refleja también en las teorías modernas sobre el desarrollo de los niños. Piaget observó que, alrededor de la edad de un año, el niño suele desarrollar el concepto de permanencia de los objetos; poco después, adquiere la capacidad de clasificar esos objetos, utilizando al principio categorías básicas como perros, gatos y juguetes [22]. Más tarde, el niño descubre categorías más generales (como animales) y más específicas (como sabuesos) [23].

Para resumir, la aproximación clásica emplea propiedades relacionadas como criterio de si- militud entre objetos. Concretamente, se puede dividir los objetos en conjuntos disjuntos de- pendiendo de la presencia o ausencia de una propiedad particular. Minsky sugiere que “los conjuntos más útiles de propiedades son aquellas cuyos miembros no interactúan demasiado.

A.

B.

C.

D.

E.

F.

G.

H.

I.

J.

Orient a ción a O bje tO s. t eO ría y pr á c tic

a Esto explica la popularidad universal de esta combinación particular de propiedades: tamaño,

color, forma y sustancia. Ya que esos atributos interactúan entre sí muy escasamente, pueden juntarse en cualquier combinación imaginable para hacer un objeto que puede ser grande o pequeño, rojo o verde, de madera o de cristal, y tener forma de esfera o cubo” [24]. En sentido general, las propiedades pueden denotar algo más que meras características medibles; pueden también abarcar comportamientos observables. Por ejemplo, el hecho de que un pájaro pueda volar pero un pez no pueda es una propiedad que distingue un águila de un salmón.

Las propiedades particulares que habría que considerar en una situación dada dependen mucho del dominio. Por ejemplo, el color de un coche puede ser importante para el propósito de un control de inventario en una planta de fabricación de automóviles, pero no es relevante en absoluto para el software que controla los semáforos en un área metropolitana. Esta es de hecho la razón por la que se dice que no hay medidas absolutas para la clasificación, aunque una estructura de clases determinada puede ser más adecuada para una aplicación que para otra. Como sugiere James, “ningún esquema de clasificación representa el orden o estructura real de la naturaleza mejor que los demás. La naturaleza se somete con indiferencia a cualquier división que se desee hacer sobre las cosas existentes. Algunas clasificaciones pueden ser más significativas que otras, pero solo respecto a nuestros intereses, no porque representen la realidad de forma más exacta o adecuada” [25].

La categorización clásica impregna gran parte del pensamiento contemporáneo occidental, pero tal como sugiere el ejemplo mencionado de clasificación de personas altas y bajas, este enfoque no siempre es satisfactorio. Kosok observa que “las categorías naturales tienden a ser confusas: la mayoría de los pájaros vuela, pero algunos no lo hacen. Las sillas pueden estar hechas de madera, plástico o metal, y pueden tener casi cualquier número de patas, según el capricho del diseñador. Parece prácticamente imposible proponer una lista de propiedades para cualquier categoría natural que excluya a todos los ejemplos que no están en la categoría e incluya a todos los que sí están” [26]. Estos son realmente problemas fundamentales de la categorización clásica, que el agrupamiento conceptual y la teoría de prototipos intentan resolver.

Agrupamiento conceptual. El agrupamiento conceptual1 es una variación más moderna del

enfoque clásico, y deriva en gran medida de los intentos de explicar cómo se representa el co- nocimiento. Como afirman Stepp y Michalski, “en este enfoque, las clases (agrupaciones de en- tidades) se generan formulando primero descripciones conceptuales de estas clases y clasificando entonces las entidades de acuerdo con las descripciones” [27]. Por ejemplo, se puede establecer un concepto como “una canción de amor”. Este es más bien un concepto que una propiedad, porque la “cantidad de amor” de cualquier canción no es algo que se pueda medir empíricamen- te. Sin embargo, si se decide que cierta canción tiene más de canción de amor que de otra cosa, se la coloca en esta categoría. Así, el agrupamiento conceptual representa más bien un agrupa- miento probabilístico de los objetos.

El agrupamiento conceptual está en estrecha relación con la teoría de conjuntos difusos (mul- tivalor), en la que los objetos pueden pertenecer a uno o más grupos, en diversos grados de adecuación. El agrupamiento conceptual realiza juicios absolutos de la clasificación centrándose en la “mayor adecuación”.

Teoría de prototipos. La categorización clásica y el agrupamiento conceptual son suficiente- mente expresivos para utilizarse en la mayoría de las clasificaciones que se necesite realizar en el diseño de sistemas de software complejos. Sin embargo, existen aún algunas situaciones en las que estas aproximaciones no son adecuadas. Esto conduce al enfoque más reciente de la clasifi- cación, llamado teoría de prototipos, que deriva principalmente del trabajo de Rosch y sus colegas en el campo de la psicología cognitiva [28].

Existen algunas abstracciones que no tienen ni propiedades ni conceptos delimitados con claridad. Tomando la explicación de Lakoff sobre este problema, “Wittgenstein apuntó que una categoría como juego no encaja en el molde clásico, porque no hay propiedades comunes com- partidas por todos los juegos... Aunque no hay una sola colección de propiedades que compartan todos los juegos, la categoría de los juegos está unida por lo que Wittgenstein llama parecidos familiares... Wittgenstein observó también que no había una frontera fijada para la categoría juego. La categoría podía extenderse, podían introducirse nuevos tipos de juegos, siempre que se pareciesen a juegos anteriores de forma apropiada” [29]. Esta es la razón por la que el enfoque se denomina teoría de prototipos: una clase de objetos se representa por un objeto prototípico, y se considera un objeto como un miembro de esta clase si y solo si se parece a este prototipo de forma significativa.

Lakeoff y Johnson aplican la teoría de prototipos al problema anterior de la clasificación de sillas. Observan que “entendemos que las sillas para jugar al bingo (‘con cojín’), las sillas de barbero y las sillas de diseño son sillas, no porque compartan algún conjunto de propiedades definitorias con el prototipo, sino más bien porque mantienen suficiente parecido familiar con el prototipo... No hace falta que exista un núcleo fijo de propiedades de las sillas prototípicas que compartan la silla de jugar al bingo (‘con cojín’) y la silla de barbero, sino que son ambas sillas porque, cada una a su manera, está lo bastante cerca del prototipo. Las propiedades de inte- racción son sobresalientes entre los tipos de propiedades que cuentan a la hora de determinar si hay suficiente parecido familiar” [30].

Esta noción de propiedades de interacción está en el centro de los conceptos de la teoría de prototipos. En agrupamiento conceptual, se agrupan las cosas según el grado de su relación con prototipos concretos.

Aplicación de teorías clásicas y modernas. Para el desarrollador que se encuentra en las trin- cheras, luchando contra requerimientos cambiantes y rodeado por recursos limitados y plazos muy breves, esta discusión puede parecer algo muy alejado de los campos de batalla reales. Ver- daderamente, estas tres aproximaciones a la clasificación tienen aplicación directa en el diseño orientado a objetos.

Orient a ción a O bje tO s. t eO ría y pr á c tic

a Según nuestra experiencia, identificamos las clases y objetos en primer lugar de acuerdo con

las propiedades relevantes para nuestro dominio particular. Aquí se hace hincapié en la iden- tificación de las estructuras y comportamiento que son parte del vocabulario del espacio del problema. Muchas de tales abstracciones suelen estar a nuestra disposición [31]. Si este enfoque fracasa en la producción de una estructura de clases satisfactoria, hay que pasar a considerar la agrupación de objetos por conceptos. Aquí se concentra la atención en el comportamiento de objetos que colaboran. Si ambos intentos fallan al capturar nuestra comprensión del dominio del problema, entonces se considera la clasificación por asociación, a través de la cual las agrupacio- nes de objetos se definen según el grado en el que cada uno se parece a algún objeto prototípico. Más directamente, estos tres enfoques de la clasificación proporcionan el fundamento teóri- co del análisis orientado a objetos, que ofrece una serie de prácticas y reglas pragmáticas que se pueden aplicar para identificar clases y objetos en el diseño de un sistema de software complejo.

Análisis orientado a objetos

Las fronteras entre análisis y diseño son difusas, aunque el objetivo principal de ambos es bas- tante diferente. En el análisis se persigue modelar el mundo descubriendo las clases y objetos que forman el vocabulario del dominio del problema, y en el diseño se inventan las abstracciones y mecanismos que proporcionan el comportamiento que este modelo requiere.2

En las siguientes secciones, se examinan varios enfoques contrastados para el análisis que son de relevancia para los sistemas orientados a objetos.

Enfoques clásicos. Hay una serie de diseñadores de metodologías que han propuesto varias fuentes de clases y objetos, derivadas de los requerimientos del dominio del problema. Se llama a estos enfoques clásicos porque derivan sobre todo de los principios de la categorización clásica.

Por ejemplo, Shlaer y Mellor sugieren que las clases y objetos candidatos provienen habitual- mente de una de las fuentes siguientes [32]:

Cosas tangibles Coches, datos de telemetría, sensores de presión.

Papeles (roles) Madre, profesor, político.

Eventos Aterrizaje, interrupción, petición.

Interacciones Préstamo, reunión, intersección.

Desde la perspectiva del modelado de bases de datos, Ross ofrece una lista similar [33]: ❚

Personas Humanos que llevan a cabo alguna función.

Lugares Áreas reservadas para personas o cosas.

Cosas Objetos físicos, o grupos de objetos, que son tangibles.

2 La notación y proceso descritos en este libro son perfectamente aplicables a las fases tradicionales del desarrollo de

Organizaciones Colecciones formalmente organizadas de personas, recur- sos, instalaciones y posibilidades que tienen una misión de- finida, cuya existencia es, en gran medida, independiente de los individuos.

Conceptos Principios o ideas no tangibles per se, utilizados para or-

ganizar o llevar cuenta de actividades de negocios y/o comunicaciones.

Eventos Cosas que suceden, habitualmente a alguna otra cosa, en

una fecha y hora concretas, o como pasos dentro de una secuencia ordenada.

Coad y Yourdon sugieren otro conjunto más de fuentes de objetos potenciales [34]: ❚

Estructuras Relaciones “de clases” y “de partes”.

Otros sistemas Sistemas externos con los que la aplicación interactúa.

Dispositivos Dispositivos con los que la aplicación interactúa.

Eventos recordados Sucesos históricos que hay que registrar.

Papeles desempeñados Los diferentes papeles que juegan los usuarios en su inte- racción con la aplicación.

Posiciones Ubicaciones físicas, oficinas y lugares importantes para la aplicación.

Unidades de organización Grupos a los que pertenecen los usuarios.

A un nivel alto de abstracción, Coad introduce la idea de áreas temáticas, que son básicamente grupos lógicos de clases que se relacionan con alguna función de nivel superior.

Análisis del comportamiento. Mientras estos enfoques clásicos se centran en cosas tangibles del dominio del problema, hay otra escuela de pensamiento en el análisis orientado a objetos que se centra en el comportamiento dinámico como fuente primaria de clases y objetos.3 Estos enfo-

ques tienen más que ver con el agrupamiento conceptual: se forman clases basadas en grupos de objetos que exhiben comportamiento similar.

Wirfs-Brock, por ejemplo, hace hincapié en las responsabilidades, que denotan “el conoci- miento que un objeto tiene y las acciones que un objeto puede realizar. Las responsabilidades es- tán encaminadas a comunicar una expresión del propósito de un objeto y su lugar en el sistema. Las responsabilidades de un objeto son todos los servicios que suministra para todos los contra- tos que soporta” [35]. De este modo, se agrupan cosas que tienen responsabilidades comunes, y se forman jerarquías de clases que involucran a superclases que incorporan responsabilidades generales y subclases que especializan su comportamiento.

3 Shlaer y Mellor han extendido sus trabajos previos para centrarse también en el comportamiento. En particular,

Orient a ción a O bje tO s. t eO ría y pr á c tic

a Rubin y Goldberg ofrecen una aproximación a la identificación de clases y objetos derivados

de funciones del sistema. Tal como proponen, “el enfoque que utilizamos pone en primer lugar el énfasis en la comprensión de lo que sucede en el sistema. Estos son los comportamientos del sistema. Seguidamente asignamos estos comportamientos a partes del sistema, y tratamos de entender quién inicia esos comportamientos y quién participa en ellos... Los iniciadores y los participantes que desempeñan papeles significativos se reconocen como objetos, y se les asignan las responsabilidades de actuación para esos papeles” [37].

El concepto de Rubin acerca del comportamiento de un sistema está en relación estrecha con la idea de punto funcional, introducida en 1979 por Albrech. Un punto funcional “se de- fine como una función de las actividades* del usuario final” [38]. Una función de actividades representa algún tipo de salida, pregunta, entrada, archivo o interfaz. Aunque en esta definición se adivinan sus raíces en el ámbito de los sistemas de información, la idea de punto funcional se generaliza a todo tipo de sistema automatizado: un punto funcional es cualquier comportamien- to apreciable exteriormente y comprobable del sistema.

Análisis de dominios. Los principios que se han discutido hasta aquí se aplican típicamente al desarrollo de aplicaciones concretas e independientes. El análisis de dominios, por contra, busca identificar las clases y objetos comunes a todas las aplicaciones dentro de un dominio dado, tales como mantenimiento de registros de pacientes, operaciones bursátiles, compiladores o sistemas de aviónica para misiles. Si uno está a mitad de un diseño y le faltan ideas sobre las abstraccio- nes clave que existen, un pequeño análisis del dominio puede ayudarnos indicándonos las abs- tracciones clave que han demostrado ser útiles en otros sistemas relacionados con el nuestro. El análisis de dominios funciona bien porque, excepto en situaciones especiales, existen muy pocos tipos de sistemas de software que sean verdaderamente únicos.

La idea del análisis de dominios fue introducida por Neighbors. Se define el análisis de do- minios como “un intento de identificar los objetos, operaciones y relaciones que los expertos del dominio consideran importantes acerca del mismo” [39]. Moore y Bailin sugieren los siguientes pasos en el análisis de dominios:

“Construir un modelo genérico ‘fantasma’ del dominio consultando con expertos de ese dominio.

Examinar sistemas existentes en el dominio y representar esta comprensión en un formato común.

Identificar analogías y diferencias entre los sistemas consultando con expertos del dominio.

Refinar el modelo genérico para acomodar sistemas ya existentes” [40].

El análisis de dominios puede aplicarse entre aplicaciones similares (análisis vertical de domi- nios), así como entre partes relacionadas de la misma aplicación (análisis horizontal de do- minios). Por ejemplo, cuando se comienza a diseñar un nuevo sistema de monitorización de

pacientes, es razonable examinar la arquitectura de sistemas existentes para comprender qué abstracciones y mecanismos clave se emplearon anteriormente y evaluar cuáles fueron útiles y cuáles no. Del mismo modo, un sistema de contabilidad debe proporcionar muchos tipos dife- rentes de informes. Considerando estos informes dentro de la misma aplicación como un solo dominio, un análisis de dominios puede conducir al desarrollador a una comprensión de las abstracciones y mecanismos principales que sirven a todos los tipos diferentes de informe. Las clases y objetos resultantes reflejan un conjunto de abstracciones y mecanismos clave generaliza-

In document Orientación a Objetos. Teoría y Práctica (página 179-191)