Este documento habla sobre la complejidad inherente al software y cómo abordarla. Explica que la complejidad proviene de cuatro elementos: la complejidad del dominio del problema, la dificultad de gestionar el proceso de desarrollo, la flexibilidad del software y los problemas de caracterizar sistemas discretos. También describe que los sistemas complejos tienen una estructura jerárquica y que es importante descomponer los problemas en subproblemas más manejables a través de técnicas como la descomposición algorítmica u orientada a objet
Este documento habla sobre la complejidad inherente al software y cómo abordarla. Explica que la complejidad proviene de cuatro elementos: la complejidad del dominio del problema, la dificultad de gestionar el proceso de desarrollo, la flexibilidad del software y los problemas de caracterizar sistemas discretos. También describe que los sistemas complejos tienen una estructura jerárquica y que es importante descomponer los problemas en subproblemas más manejables a través de técnicas como la descomposición algorítmica u orientada a objet
Este documento habla sobre la complejidad inherente al software y cómo abordarla. Explica que la complejidad proviene de cuatro elementos: la complejidad del dominio del problema, la dificultad de gestionar el proceso de desarrollo, la flexibilidad del software y los problemas de caracterizar sistemas discretos. También describe que los sistemas complejos tienen una estructura jerárquica y que es importante descomponer los problemas en subproblemas más manejables a través de técnicas como la descomposición algorítmica u orientada a objet
Capitulo 1 Anlisis y diseo Orientado a Objetos con aplicaciones-
Complejidad
1.1 La complejidad inherente al software: las propiedades de los sistemas de software simples y complejos. Mucha de la complejidad que debe manejar un ingeniero de software es complejidad arbitraria. Un sistema de software creado por un programador aficionado o desarrollador profesional que son especificados, construidos y mantenidos por el mismo, no son complejos Son aplicaciones altamente intranscendentes -. Tales sistemas tienden a tener un propsito muy limitado y un ciclo de vida muy corto. Las caractersticas del software de dimensin industrial es que resulta sumamente difcil, sino imposible, para el desarrollador individual comprender todas las sutilidades de su diseo. La complejidad de tales sistemas excede la capacidad humana. La complejidad parece ser una propiedad esencial de todos los sistemas de software de gran tamao (puede dominarse pero no ser eliminada).
Porque el software es complejo de forma innata? Esta complejidad inherente se deriva de cuatro elementos: La complejidad del dominio del problema La dificultad de gestionar el proceso de desarrollo La flexibilidad que se puede alcanzar a travs del software Los problemas que plantea la caracterizacin de sistemas discretos
La complejidad del dominio del problema: se refiere a la complejidad que conlleva el entendimiento del problema en base a los requisitos proporcionados por el cliente (algunas veces estos compiten entre si o se contradicen). Considrese los requisitos para el sistema electrnico de un avin multimotor, un sistema de conmutacin para telfonos celulares o un robot autnomo. La funcionalidad pura de tales sistemas es difcil incluso de comprender, pero adanse adems de todos los requisitos no funcionales, tales como facilidad de uso, rendimiento, coste, capacidad de supervivencia y fiabilidad, que a menudo estn implcitos. Esta ilimitada complejidad externa es la que causa la complejidad arbitraria. Los usuarios y los desarrolladores suelen tener perspectivas diferentes sobre la naturaleza del problema y realizan distintas suposiciones sobre la naturaleza de la solucin. Los requisitos de un sistema de software cambian frecuentemente durante su desarrollo. Es mantenimiento cuando se corrigen errores. Es evolucin cuando se responde a requerimientos que cambian.
La dificultad de gestionar el proceso de desarrollo: El equipo de software debe ofrecer ilusin de simplicidad al usuario. Nadie puede comprender completamente el sistema a titulo individual. La cantidad de trabajo exige la utilizacin de un equipo de desarrolladores y de forma ideal se utiliza un equipo tan pequeo como sea posible. Con un equipo de desarrolladores, el reto clave de la direccin es siempre mantener una unidad e integridad en el diseo.
2 La flexibilidad que se puede alcanzar a travs del software: el software ofrece la flexibilidad mxima por lo que un desarrollador puede expresar casi cualquier abstraccin. Esta flexibilidad resulta ser una propiedad que seduce increblemente.
Los problemas que plantea la caracterizacin de sistemas discretos: Los sistemas discretos por su propia naturaleza tienen un numero finito de estados posibles; en sistemas grandes hay una explosin combinatoria que hace este numero enorme. El principal problema reside en tratar de caracterizar sistemas analgicos como el movimiento de la pelota lanzada (ya que es un sistema continuo) . Cuando se afirma que un sistema que un sistema se describe con una funcin continua, quiere decirse que no puede tener sorpresas ocultas.
Las consecuencias de la complejidad ilimitada: Cuanto ms complejo sea el sistema mas abierto esta al derrumbamiento total. 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. A esta situacin se la llama la Crisis del software.
1.2 La estructura de los sistemas complejos. Comportamiento emergente: el comportamiento del todo es mayor que la suma de sus partes. Los cinco atributos de un sistema complejo: 1. La complejidad toma la forma de una jerarqua. Un sistema complejo se compone de subsistemas relacionados que tienen a su vez sus propios subsistemas, y as sucesivamente, hasta que se alcanza algn nivel nfimo de componentes elementales. 2. La eleccin de que componentes de un sistema son primitivos es relativamente arbitraria y queda en gran medida a decisin del observador. Lo que es primitivo para un observador puede estar a un nivel de abstraccin mucho ms alto para otro. 3. Los enlaces internos de los componentes suelen ser ms fuertes que los enlaces entre componentes. Se relaciona con las mtricas de Alta Cohesin y Bajo Acoplamiento 4. Los sistemas jerrquicos estn compuestos usualmente de unas pocas clases diferentes de subsistemas en varias combinaciones y disposiciones. Los sistemas complejos tienen patrones comunes, estos pueden conllevar la reutilizacin de componentes pequeos. Ej. Clulas que se encuentran en plantas y animales. 5. Un sistema complejo que funciona ha evolucionado de un sistema simple que funcionaba. Complejidad organizada y desorganizada El descubrimiento de abstracciones y mecanismos comunes facilita en gran medida la comprensin de los sistemas complejos. La mayora de los sistemas interesantes no contienen una sola jerarqua, en lugar de eso, se encuentra que en un solo sistema complejo suelen estar presentes muchas jerarquas diferentes. Jerarqua estructural parte de, jerarqua de tipos es un. 3 Ej. El motor turbofan es un tipo de motor de propulsin a chorro, el cual forma parte de un Jet. Se llaman a esas jerarquas Estructuras de clases y Estructuras de objetos, respectivamente. Cada jerarqua esta dividida en capas, con las clases y objetos ms abstractos construidos a partir de otros ms primitivos. Existen colaboraciones estrechas entre objetos del mismo nivel de abstraccin. De forma conjunta nos referimos a la estructura de clases y de objetos de un sistema como su arquitectura.
1.3 Imponiendo orden al caos
Dijkstra sugiere Divide y vencers es esencial descomponer el problemas en subproblemas que sean ms manejables - . Descomposicin Algortmica. o Diseo estructurado descendente. Cada modulo del sistema representa a un paso importante del proceso global. Descomposicin Orientada a Objetos. o Cada objeto modela algn objeto del mundo real. Un objeto no es mas que una unidad tangible que muestra un comportamiento bien definido.
Categoras de mtodos de diseo Un mtodo es un proceso disciplinado para generar un conjunto de modelos que describen varios aspectos de un sistema de software en desarrollo. Una metodologa es una coleccin de mtodos aplicados a lo largo del ciclo de vida del desarrollo del software. DOO Se deberan modelar sistemas de software como colecciones de objetos que cooperan. Ventajas de la descomposicin orientada a objetos Produce sistemas ms pequeos a travs de la reutilizacin de mecanismos comunes. Sistemas ms resistentes al cambio, mejor preparados para evolucionar en el tiempo. El papel (rol) de la abstraccin A travs de abstracciones los humanos somos capaces de comprender mecanismos y/o cosas complejas Newton lo admiti secretamente a algunos amigos: comprenda cmo se comportaba la gravedad, pero no cmo funcionaba -. De hecho el lenguaje es una abstraccin necesaria para poder llevar a cabo una comunicacin. El papel (rol) de la jerarqua La estructura de clases resalta la estructura y comportamientos comunes dentro de un sistema. La identificacin de jerarquas en un sistema de software complejo suele ser fcil, porque requiere que se descubran patrones entre muchos objetos.
1.4 Del diseo de los sistemas complejos.
El propsito del diseo es crear una estructura clara y relativamente simple
4 Los elementos de los mtodos de diseo del software Notacin: Lenguaje para expresar cada modelo. Proceso: Actividad que encamina a la construccin ordenada de los modelos del sistema. Herramientas: Artefactos que eliminan el tedio de construir el modelo.
El Diseo Orientado a Objetos es un mtodo que lleva a una descomposicin Orientada a Objetos.