Академический Документы
Профессиональный Документы
Культура Документы
Son aplicaciones que exhiben un conjunto muy rico de comportamiento, por ejemplo,
sistemas reactivos que dirigen o son dirigidos por eventos de mundo físico, y para los
cuales el tiempo y el espacio son recursos escasos; aplicaciones que mantiene la
integridad de cientos de miles de registros de información mientras permiten consultas
y actualizaciones concurrentes; y sistemas para la gestión de mundo real, tales como
los controladores de tráfico aéreo o ferroviario. Los sistemas de esta clase tienen un
ciclo de vida largo, y a los largo del tiempo muchos usuarios llegan a depender de su
correcto funcionamiento. La característica distintiva del software de dimensión
industrial es que resulta sumamente difícil, si no imposible, para el desarrollador
individual comprender todas las sutilidades de su diseño. Para hablar claro, la
complejidad de tales sistemas excede la capacidad intelectual humana.
Lamentablemente, la complejidad de la que se habla parece ser una propiedad
esencial de todos los sistemas de software de gran tamaño. Con esencial quiere
decirse que puede dominarse esa complejidad, pero nunca eliminarla.
“El mundo esta poblado de genios solamente de forma dispersa. No hay
razón para creer que la comunidad de ingeniería de software posee una
proporción extraordinariamente grande de ellos” (Peters).
En una aplicación de gran tamaño puede haber cientos o hasta miles de variables, así
como más de un flujo de control. El conjunto de todas estas variables, sus valores
actuales, y la administración del sistema son procesos que constituyen el estado
actual de la aplicación. Al ejecutarse el software en computadoras digitales, se tiene
un sistema con estados discretos. En contraste, a los sistemas analógicos (vgr. El
movimiento de una pelota lanzada al aire) son sistemas continuos. Parnas sugiere
que “cuando se afirma que un sistema se describe con una función continua, quiere
decir que no puede contener sorpresas ocultas. Pequeños cambios en las entradas
siempre producirán cambios consecuentemente pequeños en las salidas”[3]. Por el
contrario, los sistemas discretos por su propia naturaleza tienen un número finito de
estados posibles, en sistemas grandes hay una explosión combinatoria que hace este
número enorme. Ciertamente esta es una razón por las cuales hay que probar los
sistemas a fondo, pero para cualquier sistema que no sea trivial, es imposible hacer
una prueba exhaustiva. Ya que no se dispone ni de herramientas matemáticas ni de
capacidad intelectual necesaria para modelar el comportamiento completo de grandes
sistemas discretos, hay que contenerse con un grado de confianza aceptable por lo
que se refiera a su corrección. Todos los eventos externos a un sistema de software
tienen la posibilidad de llevar a ese sistema a un nuevo estado, y más aún, la
transición de estado a estado no siempre es determinista. En las peores
circunstancias, un evento externo puede corromper el estado del sistema, porque sus
diseñadores olvidaron tener en cuenta ciertas interacciones entre eventos. Nuestro
fracaso en dominar la complejidad del software lleva a proyectos retrasados, que
exceden el presupuesto y que son deficientes respecto a los requerimientos fijados.
3. Los enlaces internos de los componentes suelen ser más fuertes que los enlaces
entre componentes. Este hecho tiene el efecto de separar la dinámica de alta
frecuencia de los componentes –que involucra a la estructura interna de los mismos-
de la dinámica de baja frecuencia –que involucra la interacción entre los
componentes-.
4. Los sistemas jerárquicos están compuestos usualmente de solo unas pocas clases
diferentes de subsistemas en varias combinaciones y disposiciones.
El rol de la descomposición
Como sugiere Dijkstra “La técnica de dominar la complejidad se conoce desde
tiempos remotos: divide et impera (divide y vencerás)”. Cuando se diseña un sistema
de software complejo, es esencial descomponerlo en partes más y más pequeñas,
cada una de las cuales se puede refinar entonces de forma independiente.
Realmente, como observa Parnas, la descomposición inteligente ataca directamente
la complejidad inherente al software forzando un división de espacio de estados del
sistema.
El rol de la abstracción
Según dice Wulf, “los humanos hemos desarrollado una técnica excepcionalmente
potente para enfrentarnos a la complejidad. Realizamos abstracciones. Incapaces de
dominar en su totalidad un sistema complejo, decidimos ignorar sus detalles no
esenciales, tratando en su lugar con el modelo generalizado e idealizado del
objeto”.Aun existe la restricción sobre el número de cosas que se pueden comprender
al mismo tiempo, pero a través de la abstracción se utilizan bloques de información de
contenido semántico cada vez mayor. Esto es especialmente cierto, si se adopta una
visión del mundo orientada a objetos, porque los objetos, como abstracciones de
entidades del mundo real, representan un agrupamiento de información
particularmente denso y cohesivo.
El rol de la jerarquía
Otra forma de incrementar el contenido semántico de bloques de información
individuales es mediante el reconocimiento explícito de las jerarquías de clases y
objetos dentro de un sistema de software complejo. La estructura de objetos ilustra
cómo diferentes objetos colaboran entre sí a través de patrones de interacción
llamados mecanismos. La estructura de clases resalta la estructura y el
comportamiento comunes en el interior de un sistema. Clasificando objetos en grupos
de abstracciones relacionadas, se llega a una distinción explícita de las propiedades
comunes y distintas entre diferentes objetos, lo que posteriormente ayudará a dominar
su complejidad inherente. La identificación de las jerarquías en un sistema de
software complejo no suele ser fácil, porque requiere que se descubran patrones entre
muchos objetos, cada uno de los cuales puede incluir algún comportamiento
tremendamente complicado. Exponiendo estas jerarquías el sistema complejo,
experimenta una gran simplificación.
Hasta ahora, se ha apoyado el uso del diseño orientado a objetos para dominar la
complejidad asociada al desarrollo de sistemas de software, se ha sugerido una serie
de beneficios que se derivan de la aplicación de este método; sin embargo, es
necesario estudiar los principios sobre los que se basa este diseño, es decir,
abstracción, encapsulación, modularidad, jerarquía, tipos, concurrencia y persistencia.
Resumen
• El software es complejo de forma innata; la complejidad de los sistemas de software
excede frecuentemente la capacidad intelectual humana.
• La tarea del equipo de desarrollo de software es la de crear una ilusión de sencillez.
• La complejidad toma a menudo una jerarquía; esto es útil para modelar tanto las
jerarquías “es-un” como “parte de” de un sistema complejo.
• Los sistemas complejos evolucionan generalmente de formas intermedias estables.
• Existen factores de limitación fundamentales en la cognición humana; puede
hacerse frente a estas restricciones mediante el uso de la descomposición,
abstracción y jerarquía.
• Los sistemas complejos pueden verse centrando la atención bien en las cosas o
bien en los procesos; hay razones de peso para aplicar la descomposición orientada a
objetos, en la cual se ve al mundo como una colección significativa de objetos que
colaboran para conseguir algún comportamiento de nivel superior.
• El diseño orientado a objetos es el método que conduce a una descomposición
orientada a objetos; el diseño orientado a objetos define una notación y un proceso
para construir sistemas de software complejos, y ofrece un rico conjunto de modelos
lógicos y físicos con los cuales se puede razonar sobre diferentes aspectos del
sistema que se esta considerando.
Bibliografía
1. Booch, Grady, Análisis y Diseño Orientado a Objetos. Addison Wesley Longman
2da. Ed. Massachusetts, E.U.A (1998), Capitulo 1 Págs. 3-29
2. Olivia Allende Hernández, “La tecnología orientada a objetos y la ingeniería de
software ante la complejidad inherente al software”.
3. Moring E 2003. Introducción al pensamiento complejo. Editorial Gedisa. España.
167 pp.
4. Simon H 1996. The Sciences of the Artificial.ThirdEdition. The MIT Press.
Cambridge, Massachusetts. London, England. 231 pp.