| El Conocimiento en Diseño Orientado a Objetos |
|
This e-mail address is being protected from spambots. You need JavaScript enabled to view it
y
This e-mail address is being protected from spambots. You need JavaScript enabled to view it
1. IntroducciónEn los últimos años se han incorporado importantes contribuciones al campo del diseño orientado a objetos (OO), proponiéndose técnicas de modelado, metodologías, patrones, métricas, etc., con el fin de facilitar la evolución y mejora del diseño software. De esta forma, hoy disponemos de elementos de conocimiento en diseño OO muy populares, como son los patrones y las refactorizaciones, junto con otros muchos menos conocidos pero igualmente importantes, como son principios, heurísticas, “malos olores” (bad smells), etc. Sin embargo, y a pesar de los más de 30 años de experiencia en tecnología de objetos, los beneficios prácticos de esta tecnología aún se cuestionan (Mansfield, 2005). En nuestra opinión, esto de debe en parte a que el conocimiento acumulado en diseño orientado a objetos (DOO) carece de suficiente estructura y clasificación. El conocimiento en DOO, no es fácilmente transmisible, accesible o disponible. Y el conocimiento sin organización es, en la mayoría de las ocasiones, conocimiento desaprovechado, por lo que seguir acumulando este tipo de conocimiento es un esfuerzo inútil, condenando a los profesionales del software a seguir resolviendo los mismos problemas, sin poder contar con las soluciones que ya han sido aportadas varios años antes. Y así en la actualidad observamos con frecuencia la pobre aplicación de patrones, principios, mejores prácticas, etc., desaprovechando esa importante cantidad de experiencia en las organizaciones de desarrollo software. Para resolver estos problemas hemos propuesto una ontología que organiza y estructura el conocimiento en diseño OO. 2. Tipos de conocimiento en diseño OOHoy en día, si deseamos conocer o usar la experiencia práctica de otros expertos en diseño debemos estar listos para afrontar un trabajo difícil. Una breve revisión de la bibliografía existente relacionada con conocimiento en diseño nos mostrará cientos de referencias y decenas de términos, como patrones, principios, refactorizaciones, heurísticas, lecciones aprendidas, prácticas, experiencias, malos olores, etc.
3. Ontología del DOOLa construcción de la ontología propuesta se ha basado en el proceso Helix-Spindle (Kishore, Zhang, & Ramesh, 2004). La primera versión se centró en las relaciones entre patrones y reglas (Garzás & Piattini, 2005). Como resultado de esta versión se desarrolló la segunda versión enfocada en una descripción global del conocimiento general en diseños OO (Garzás & Piattini, 2005). La tercera versión (que presentamos en este artículo), está enfocada en una descripción integral y completa del conocimiento en diseño OO, incluyendo conocimiento de uso general, en dominios concretos y para tecnologías específicas. 3.1 . Entidades del conocimiento en diseño de micro arquitecturas OOLos elementos del conocimiento en DOO pueden estar organizados en grupos, basados en sus características similares. Y aunque existen muchos términos asociados al conocimiento en DOO (como por ejemplo patrones, heurísticas, etc.) hemos podido observar que todos ellos pueden ubicarse dentro de dos grupos principales: conocimiento declarativo u operativo. 3.1.1. Conocimiento declarativoLos elementos declarativos son conceptos que describen qué hacer con un problema, y elementos como las heurísticas, patrones, malos olores, mejores prácticas, etc., se sitúan dentro de este grupo. No obstante, estos elementos declarativos pueden tener carácter u objetivos diferentes. Aun cuando grupos de patrones como los de (Gamma, Helm, Johnson, & Vlissides, 1995) son bien conocidos y de aplicación general en todos los diseños, en proyectos reales necesitaremos usar otro conocimiento más particular e igualmente importante (por ejemplo patrones para tecnología J2EE o principios de la tecnología .Net) o conocimiento asociado a un dominio concreto (por ejemplo patrones de tiempo real o principios de integración). De esta forma, el conocimiento declarativo puede ser descompuesto en tres subcategorías: general, tecnológico y dominio. Por otro lado, aunque hay numerosa terminología diferente, términos como heurística, malo olor, mejor práctica, principio, etc., tienen una estructura general que coincide con la de una regla, donde frente a una condición ofrecen una recomendación, con lo que podemos agruparlos de forma unificada dentro del término regla. Conviene insistir en que las reglas son diferentes a los patrones, ya que las reglas están más basadas en el uso del lenguaje natural (el cual puede ser ambiguo), los patrones están más formalizados que las reglas y la descripción de los patrones es siempre más amplia. 3.1.2 Conocimiento operativoLos elementos operativos acumulan conocimiento referente a operaciones o procesos que permiten realizar cambios en diseños. Las refactorizaciones (transformación parametrizada de un programa preservando su funcionalidad (Opdyke, 1992)) de diseño se ubican dentro de este grupo. 3.2. Atributos del conocimiento en diseño de micro arquitecturasPara completar la descripción de las entidades nos centramos en sus atributos. Para ello nos hemos basado en las secciones que el catálogo de (Gamma et al., 1995) utiliza para describir un patrón. Según esto observamos como todos los elementos del conocimiento tienen un nombre, propósito, también conocido como, motivación, aplicabilidad, consecuencias y usos conocidos (ver Figura 1). Y de forma más particular situamos en el conocimiento declarativo el atributo participantes (clases y/u objetos participantes en el patrón o regla y sus responsabilidades) y colaboraciones. Otros atributos interesantes son estructura representando la solución en un patrón, y recomendación para reglas. El conocimiento operativo contiene el atributo ejemplo de diseño y las refactorizaciones el de mecánica, nombre tomado del catálogo de refactorizaciones de (Fowler, Beck, Brant, Opdyke, & Roberts, 1999). 3.3. Relaciones entre el conocimiento de diseñoPor otro lado, entre los elementos del conocimiento existen diversas relaciones, difíciles de apreciar sin una clara división de los mismos. Tomando en consideración que los elementos del conocimiento en diseño pueden estar organizados en dos entidades principales, conocimiento declarativo y operativo, y que el conocimiento declarativo puede estar organizado en conocimiento general, tecnológico y de dominio, donde cada uno de estos, a su vez, se descompone en reglas y patrones, podemos encontrar las siguientes relaciones. 3.3.1. Relaciones entre conocimiento declarativo y operativoLas refactorizaciones almacenan conocimiento sobre cómo introducir elementos en diseños de una forma controlada y el conocimiento declarativo (Reglas y Patrones) es introducido en el diseño por conocimiento operativo (refactorización). En este caso, podemos decir que: el conocimiento declarativo es introducido por conocimiento operativo. Cardinalidades Ejemplos 3.3.2. Relaciones entre reglas y patrones Como hemos dicho, el conocimiento declarativo está descompuesto en conocimiento general, de dominio y tecnológico, y, a su vez, cada uno de estos en reglas y patrones. En cualquier caso, entre cada par regla – patrón hay dos clases de relaciones: las reglas implican patrones y los patrones cumplen las reglas. Reglas implican patrones A menudo, cuando introducimos una regla obtenemos un nuevo diseño, el cual necesita un patrón. Podemos observar esta relación entre reglas y patrones para las tres clases de conocimiento declarativo (general, dominio y tecnológico) Podemos decir que: aplicar una regla implica el uso de un patrón (ver figura 2). Cardinalidades Ejemplos Patrones que cumplen Reglas El objetivo de aplicar reglas de diseño es aumentar la calidad del diseño. Las reglas de diseño son elementos que podemos encontrar dentro de micro arquitecturas de calidad. Los patrones son micro arquitecturas de calidad, probadas por la experiencia, con lo que tiene sentido decir que los patrones de diseño cumplen reglas de diseño. En este caso: los patrones cumplen reglas. Cardinalidades Ejemplos Relaciones entre patrones Cardinalidades Ejemplos 3.3.3. Relaciones entre conocimiento operativoLas entidades del conocimiento operativo tienen una relación reflexiva de composición, esto es: un elemento del conocimiento operativo está compuesto de otros. Cardinalidades Ejemplos 3.3.4. Relaciones entre patrones comunes, dominio y tecnológicosLos patrones comunes son de uso general en todos los diseños, y tanto los patrones de dominio como los tecnológicos pueden implicar el uso de patrones comunes (ver figuras 1 y 2). Los patrones de dominio implican el uso de patrones generales Muchos patrones de dominio implican el uso de patrones generales. Cardinalidades Ejemplos Patrones tecnológicos implican el uso de patrones generales Adicionalmente, muchos patrones tecnológicos implican el uso de patrones generales. Cardinalidades Ejemplos 4. Mejora del diseño OO usando la ontología propuestaLas ontologías pueden ser aplicadas en una amplia variedad de contextos con varios propósitos, de forma general pueden ser usadas para mejorar la comunicación entre humanos y máquinas, para lograr interoperabilidad, mejorar procesos y la calidad de un sistema de software (Jasper & Uschold, 1999). De manera más específica, pensamos que la ontología propuesta puede ser útil en diferentes áreas: 4.1. Formación y comunicaciónFrecuentemente los conceptos asociados al conocimiento en diseño OO se expresan usando un vocabulario poco familiar o en un formato poco accesible. La ontología proporciona una terminología general, proporcionando comprensión, eliminando la barrera creada por distintos vocabularios y aproximaciones, y eliminando ambigüedades. También se puede facilitar la formación en DOO usando una ontología y catalogando el conocimiento de forma unificada en base a la ontología (como resultado de la ontología hemos desarrollado un catálogo unificado o reglas de conocimiento (Garzás & Piattini, 2005)) 4.2. Nexo de unión del conocimiento en DOOLa ontología puede ser usada como punto común entre distintos métodos OO, lenguajes OO, herramientas software OO, etc. Los beneficios de esta aproximación incluyen interoperabilidad y mejor uso de los recursos del conocimiento. 4.3. Reutilización del conocimientoLa ontología propone una codificación sistemática para las entidades del conocimiento en DOO, sus atributos y sus relaciones. Esta representación forma un bloque de construcción común a para una gran variedad de diseños. 4.4. Adquisición y búsqueda del conocimientoLa ontología puede ser usada como meta-datos en un repositorio de conocimiento de diseño. Los beneficios de esta aproximación son un acceso más rápido y eficiente al conocimiento en diseño. 4.5. Mejora del diseño y mantenimientoLos elementos que forman la ontología son elementos de calidad contrastada, por lo que pueden ayudar a identificar requisitos y definir especificaciones de diseño. Los sistemas basados en la ontología pueden mejorar la documentación y reducir los costes de mantenimiento, particularmente combinando la ontología de diseño OO con otras propuestas para el mantenimiento (Ruiz, A, Piattini, & Garcia, 2004). 4.6. Dar soporte a la toma de decisionesLos razonamientos que llevan a crear un determinado diseño (design rationale (DR) en terminología inglesa) son las decisiones realizadas durante el proceso de diseño, las razones subyacentes, su justificación, alternativas consideradas, etc. (Lee, 1997). Desafortunadamente estas decisiones no se suelen recoger, haciendo muy difícil entender con posterioridad las razones de una determinada solución (IEEE/EIA, 1998). El conocimiento OO puede ser asociado al registro razonamientos, apoyando así las decisiones tomadas. 5. ConclusionesHoy en día la comunidad dedicada al diseño OO dispone de una gran cantidad y variedad de conocimiento práctico acumulado, pero desafortunadamente los mismos problemas de diseño siguen repitiéndose una y otra vez en proyectos reales. Y es que, en nuestra opinión, no se ha investigado suficientemente en cómo usar el conocimiento disponible en DOO. En este artículo proponemos una ontología que permite organizar el conocimiento tanto declarativo como operativo de DOO, ya sea general, tecnológico o de dominio. Esta ontología pretende mejorar el DOO aportando ventajas en la formación de los ingenieros de software, en la explotación del conocimiento y en el registro de las decisiones tomadas durante el DOO. ReferenciasAlur, D., Malks, D., & Crupi, J. (2003). Core J2EE™ Patterns: Best Practices and Design Strategies (Second Edition ed.): Prentice Hall Fowler, M., Beck, K., Brant, J., Opdyke, W., & Roberts, D. (1999). Refactoring: Improving the Design of Existing Code (1st edition ed.): Addison-Wesley Professional. Gamma, E., Helm, R., Johnson, R., & Vlissides, J. (1995). Design Patterns: Addison-Wesley Professional. Garzás, J., & Piattini, M. (2005). An ontology for micro-architectural design knowledge. IEEE Software Magazine, 22(2), 28-33. Glass, R. L., & Vessey, I. (1995). Contemporary Application - Domain Taxonomies. IEEE Software, 12(4), 63-76. IEEE/EIA. (1998). IEEE/EIA 12207.1-1997. IEEE/EIA Guide Industry Implementation of International Standard ISO/IEC 12207 Standard for Information Technology—Software life cycle processes. Life cycle data: Institute of Electrical and Electronics Engineers, Inc. Jasper, R., & Uschold, M. (1999). A Framework for Understanding and Classifying Ontology Applications. Paper presented at the Twelfth Workshop on Knowledge Acquisition Modeling and Management KAW'99, Canada. Kishore, R., Zhang, H., & Ramesh, R. (2004). A Helix-Spindle Model for Ontological Engineering. Communications of the ACM, 47(2). Lee, J. (1997). Design Rationale Systems: Understanding the Issues. IEEE Expert: Intelligent Systems and Their Applications, 12(3), 78-85. Mansfield, R. (2005). OOP Is Much Better in Theory Than in Practice, devx.com. Marinescu, F. (2002). EJB Design Patterns. Advanced Patterns, Processes and Idioms: John Wiley and Sons. Martin, R. C. (1996). The dependency inversion principle. C++ Report, 8(6), 61-66. Opdyke, W. (1992). Refactoring Object Oriented Frameworks. Illinois, Urbana-Champain. Powel Douglass, B. (2002). Real-Time Design Patterns: Robust Scalable Architecture for Real-Time Systems: Addison-Wesley Professional. Ruiz, F., A, V., Piattini, M., & Garcia, F. (2004). An ontology for the management of software maintenance projects. International Journal of Software Engineering and Knowledge, 14(3), 323-349. HistóricoAbril 07: Primera publicación |



