Capitulo 1 Grady Booch

Anuncio
Capitulo 1 –Análisis y diseño Orientado a Objetos con aplicacionesComplejidad
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 propósito muy limitado y un ciclo de vida muy corto.
Las características del software de dimensión industrial es que resulta sumamente
difícil, sino imposible, para el desarrollador individual comprender todas las
sutilidades de su diseño. La complejidad de tales sistemas excede la capacidad
humana. La complejidad parece ser una propiedad esencial de todos los sistemas de
software de gran tamaño (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 través del software
Los problemas que plantea la caracterización 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).
Considérese los requisitos para el sistema electrónico de un avión multimotor,
un sistema de conmutación para teléfonos celulares o un robot autónomo. La
funcionalidad pura de tales sistemas es difícil incluso de comprender, pero
añádanse además de todos los requisitos no funcionales, tales como facilidad de
uso, rendimiento, coste, capacidad de supervivencia y fiabilidad, que a menudo
están implícitos. 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 solución.
Los requisitos de un sistema de software cambian frecuentemente durante su
desarrollo.
Es mantenimiento cuando se corrigen errores.
Es evolución cuando se responde a requerimientos que cambian.
La dificultad de gestionar el proceso de desarrollo: El equipo de software debe
ofrecer ilusión de simplicidad al usuario. Nadie puede comprender
completamente el sistema a titulo individual. La cantidad de trabajo exige la
utilización de un equipo de desarrolladores y de forma ideal se utiliza un equipo
tan pequeño como sea posible. Con un equipo de desarrolladores, el reto clave
de la dirección es siempre mantener una unidad e integridad en el diseño.
1
La flexibilidad que se puede alcanzar a través del software: el software ofrece la
flexibilidad máxima por lo que un desarrollador puede expresar casi cualquier
abstracción. Esta flexibilidad resulta ser una propiedad que seduce
increíblemente.
Los problemas que plantea la caracterización de sistemas discretos: Los
sistemas discretos por su propia naturaleza tienen un numero finito de estados
posibles; en sistemas grandes hay una explosión combinatoria que hace este
numero enorme. El principal problema reside en tratar de caracterizar sistemas
analógicos 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 función continua, quiere decirse que no puede tener sorpresas ocultas.
Las consecuencias de la complejidad ilimitada: “Cuanto más 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
situación 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 jerarquía.
Un sistema complejo se compone de subsistemas relacionados que tienen a
su vez sus propios subsistemas, y así sucesivamente, hasta que se alcanza
algún nivel ínfimo de componentes elementales.
2. La elección de que componentes de un sistema son primitivos es
relativamente arbitraria y queda en gran medida a decisión del observador.
Lo que es primitivo para un observador puede estar a un nivel de
abstracción mucho más alto para otro.
3. Los enlaces internos de los componentes suelen ser más fuertes que los
enlaces entre componentes.
Se relaciona con las métricas de Alta Cohesión y Bajo Acoplamiento
4. Los sistemas jerárquicos están compuestos usualmente de unas pocas clases
diferentes de subsistemas en varias combinaciones y disposiciones.
Los sistemas complejos tienen patrones comunes, estos pueden conllevar la
reutilización de componentes pequeños. Ej. Células 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
comprensión de los sistemas complejos.
La mayoría de los sistemas interesantes no contienen una sola jerarquía, en lugar de eso,
se encuentra que en un solo sistema complejo suelen estar presentes muchas jerarquías
diferentes.
Jerarquía estructural “parte de”, jerarquía de tipos “es un”.
2
Ej. El motor turbofan es un tipo de motor de propulsión a chorro, el cual forma parte
de un Jet.
Se llaman a esas jerarquías “Estructuras de clases” y “Estructuras de objetos”,
respectivamente.
Cada jerarquía esta dividida en capas, con las clases y objetos más abstractos
construidos a partir de otros más primitivos.
Existen colaboraciones estrechas entre objetos del mismo nivel de abstracción.
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 vencerás” – es esencial descomponer el problemas en
subproblemas que sean más manejables - .
Descomposición Algorítmica.
o Diseño estructurado descendente. Cada modulo del sistema
representa a un paso importante del proceso global.
Descomposición Orientada a Objetos.
o Cada objeto modela algún objeto del mundo real. Un objeto no es
mas que una unidad tangible que muestra un comportamiento bien
definido.
Categorías de métodos de diseño
Un método es un proceso disciplinado para generar un conjunto de modelos que
describen varios aspectos de un sistema de software en desarrollo. Una metodología es
una colección de métodos aplicados a lo largo del ciclo de vida del desarrollo del
software.
DOO Se deberían modelar sistemas de software como colecciones de objetos que
cooperan.
Ventajas de la descomposición orientada a objetos
• Produce sistemas más pequeños a través de la reutilización de mecanismos
comunes.
• Sistemas más resistentes al cambio, mejor preparados para evolucionar en el
tiempo.
El papel (rol) de la abstracción
A través de abstracciones los humanos somos capaces de comprender mecanismos y/o
cosas complejas – Newton lo admitió secretamente a algunos amigos: comprendía
cómo se comportaba la gravedad, pero no cómo funcionaba -. De hecho el lenguaje es
una abstracción necesaria para poder llevar a cabo una comunicación.
El papel (rol) de la jerarquía
La estructura de clases resalta la estructura y comportamientos comunes dentro de un
sistema.
La identificación de jerarquías en un sistema de software complejo suele ser fácil,
porque requiere que se descubran patrones entre muchos objetos.
1.4 Del diseño de los sistemas complejos.
El propósito del diseño es crear una estructura clara y relativamente simple
3
Los elementos de los métodos de diseño del software
Notación: Lenguaje para expresar cada modelo.
Proceso: Actividad que encamina a la construcción ordenada de los modelos
del sistema.
Herramientas: Artefactos que eliminan el tedio de construir el modelo.
El Diseño Orientado a Objetos es un método que lleva a una descomposición
Orientada a Objetos.
4
Descargar