Está en la página 1de 4

Capitulo 1. Análisis y diseño orientado a objetos.

Booch
Complejidad.
1. La complejidad inherente al software.
Las propiedades de los sistemas de software simples y complejos. Podemos
encontrar objetos del mundo físico complejos, como glóbulos blancos, una estrella
etc., también puede existir en el software una gran complejidad. Sabemos que
existen software que no son muy complejos, como lo son las aplicaciones que son
especificadas, construidas y mantenidas por la misma persona, son sistemas con un
propósito limitado y un ciclo de vida muy corto, y se los puede dejar sin efecto
rápidamente. Desarrollar estas aplicaciones es más tedioso que difícil . se prestará
especial atención a el desarrollo del software de dimensión industrial. Son
aplicaciones con un conjunto muy rico de comportamientos, ej.: aplicaciones que
mantienen integridad de miles de registros, sistemas para la gestión y control de
trafico aéreo o ferroviario. Son sistemas con un ciclo de vida largo. Este tipo de
software tiene la característica que resulta difícil para el desarrollador individual
comprender todo el diseño. La complejidad es una propiedad esencial no accidental
esta complejidad se deriva de cuatro elementos: La complejidad del dominio del
problema los problemas que se intentan resolver con el software conllevan a
elementos complejos, existe una complejidad externa que esta dada entre los
usuarios y los desarrolladores. Los usuarios y los desarrolladores tienen
perspectivas diferentes sobre la naturaleza del problema y por lo tanto realizan
distintas suposiciones sobre la naturaleza de la solución. Para expresar los
requisitos se utilizan textos, acompañados de gráficos. Son difíciles de comprender,
son abiertos a diferentes interpretaciones. Los requisitos de un sistema de software
pueden cambiar durante el desarrollo. La observación del producto, desde sus
comienzos ( diseño y prototipo) y posterior utilización cuando ya está instalado
permite al usuario comprender mejor sus necesidades. Los grandes sistemas
evolucionan en el tiempo, para esto no se utiliza correctamente el termino
mantenimiento des software. El mantenimiento consiste en corregir errores;
evolución es cuando los requerimientos cambian con el tiempo, y es conservación
cuando se utilizan medios extraordinarios para mantener un software anticuado y
decadente. La dificultad de gestionar el proceso de desarrollo. la tarea
principal del equipo de desarrollo es dar vida a una idealización; se hace lo posible
por escribir menos código mediante la utilización de mecanismos que simplifiquen,
la reutilización de estructuras y códigos existentes. Podemos encontrar sistemas
terminados con miles o millones de líneas de código, esta cantidad de trabajo exige
un equipo de desarrolladores, lo ideal es trabajar con un equipo tan pequeño como
sea posible, una mayor cantidad de miembros implica una coordinación compleja y
una coordinación más difícil. La flexibilidad se puede alcanzar a través del
software el software ofrece una flexibilidad máxima por lo que el desarrollador
puede expresar cualquier clase de abstracción, esta es una propiedad que sucede
ya que es el programador el que construye todas las bases sobre las que se
apoyará el diseño. Esto trae como consecuencia que la industria del software es un
negocio enormemente laborioso. Los problemas de caracterizar el
comportamiento de sistemas discretos. En una aplicación de gran tamaño
puede haber cientos o miles de variables. Un sistema con estados discretos es
cuando se ejecuta el software con computadoras digitales, los sistemas discretos
tienen un numero finito de estados posibles, en sistemas grandes, la combinación
de estos hace enorme este número. Se intenta diseñar sistemas con una separación
de intereses, de modo tal que el comportamiento de una parte del sistema tenga el
mismo impacto en el comportamiento del mismo. Los eventos externos llevan a un
sistema a diferentes estados, la transición debe ser controlada por los diseñadores.
Las consecuencias de la complejidad ilimitada. Cuanto mas complejo sea el
sistema, mas abierto esta el derrumbamiento total. El dominar la complejidad del
software lleva a proyectos retrasados, presupuestos que se exceden, que son
deficientes respecto a los requerimientos fijados, esto es lo que se denomina la
crisis del software, esta crisis se traduce en el desperdicio de recursos humanos y
en perdidas de oportunidad, debe tratar de que esta situación se mantenga ya que
el software puede amplificar la potencia del individuo.
La estructura de los sistemas complejos
Ejemplos de sistemas complejos. La estructura de un computador
personal. Una computadora personal es un dispositivo de complejidad moderada.
Se componen de elementos como unidad central del proceso, un monitor, un
teclado, dispositivos de almacenamientos secundarios, discos flexibles, disco duro.
Si descomponemos una CPU encontraremos una unidad principal, una ALU y un BUS
al cual se conectan los dispositivos periféricos. De esta manera se ve la naturaleza
jerárquica de un sistema. Una computadora funciona correctamente solo junto a
cada una de sus partes. Los niveles de esta jerarquía presentan diferentes niveles
de abstracción, cada uno se construye sobre el otro, cada uno es comprensible por
si mismo. La estructura de plantas y animales. En la estructura de un
computador cada parte forma una jerarquía, y cada nivel de esta jerarquía
conlleva su propia complejidad. Todas las partes al mismo nivel de abstracción
interactúan en forma definida. Siempre hay fronteras claras en el exterior y en el
interior de cada nivel. En una computadora encontramos que las puertas NAND se
usan tanto en el diseño como en la unidad de disco duro. No se encuentran partes
individuales que sean responsables cada una de un único y pequeño paso en un
solo proceso más grande. No hay partes centralizadas que coordinen directamente
las actividades de las partes de niveles inferiores. Encontramos partes separadas
que actúan como agentes independientes, cada una de las cuales exhibe un
comportamiento bastante complejo y cada uno contribuye a muchas funciones del
nivel superior, a través de la cooperación mutua de colecciones significativas, de
estos agentes se ve la funcionalidad a nivel superior. La estructura de la materia
estudiando campos como la astronomía y la física nuclear nos dan ejemplos de
sistemas muy complejos. También cuenta con una jerarquía. La estructura de las
instituciones sociales son un ejemplo de sistemas complejos. Grupos de
personas se juntan para realizar tareas que no pueden ser hechas por individuos.
Pueden ser transitorias o pueden durar generaciones. El crecimiento de la
organización produce una jerarquía distinta. Las multinacionales contienen
compañías, estas contienen divisiones, contienen delegaciones, oficinas locales; las
fronteras pueden cambiar a lo largo del tiempo, el grado de interacción varia entre
los empleados de diferentes áreas.
Los cinco atributos de un sistema complejo hay cinco atributos comunes a los
sistemas complejos 1. La complejidad toma la forma de la jerarquía, por lo cual un
sistema complejo se compone de subsistemas relacionados que tienen a su vez sus
propios subsistemas, hasta que se alcanza algún nivel ínfimo de componentes. 2.
La elección de que componentes de un sistema son primitivos es arbitrario queda a
decisión del observador. 3. Los enlaces internos de los componentes suelen ser más
fuertes entre componentes. 4. Los sistemas jerárquicos están compuestos
usualmente de solo unas pocas clases diferentes de subsistemas en varias
combinaciones y disposiciones. 5. Un sistema complejo que funciona ha
evolucionado de un sistema simple que funcionaba, un sistema complejo diseñado
desde cero nunca funciona y no puede parchearse para conseguir que lo haga,
debe lograrse partiendo de un sistema simple que funcione.

Complejidad organizada y desorganizada. La forma canónica de un


sistema complejo. La mayoría de los sistemas no contienen una sola jerarquía,
en un solo sistema complejo suelen estar presentes muchas jerarquías diferentes.
Puede haber descomposiciones que representen una jerarquía estructural o de
parte de ,llamada estructura de objetos; existe una segunda jerarquía de tipos “es
un ” , llamada estructura de clases. Las dos jerarquías del sistema: su estructura
de clases y su estructura de objetos, cada una esta dividida en capas con las clases
y objetos mas abstractos construidos a partir de otros mas primitivos. La elección
de las clases y objetos primitivos depende del problema que se maneja. Las
estructuras jerárquicas y de objetos no son del todo independientes, cada objeto
presenta una instancia específica de alguna clase. Existen mas objetos que clases
en un sistema complejo. Los sistemas complejos de software con mas éxito son
aquellos que en su diseño incluyen una estructura de clases y objetos bien
construida y que posee los cinco atributos de los sistemas complejos. Las
limitaciones de la capacidad humana para enfrentarse a la complejidad
además de la complejidad que existe al diseñar sistemas complejos, se suman a
esta las limitaciones de la capacidad humana para tratar la complejidad. Cuando se
analiza por primera vez un sistema complejo de software, aparecen muchas partes
que deben interactuar con muchas otras, no existiendo un factor común entre
estas partes ( complejidad desorganizada). Para lograr tener una organización en el
proceso de diseño hay que pensar en muchas cosas a la vez. Esto es imposible de
realizar por una sola persona, según estudios psicológicos demuestran que un
persona tiene limitada su capacidad de comprender en forma simultanea diferentes
acciones, por tal motivo se plantea un dilema fundamental, que es el de la
capacidad de la habilidad humana para enfrentarse a esta complejidad.

Imponiendo orden al caos.


El ROL de la descomposición. Cuando se diseña un sistema un sistema
complejo, es esencial descomponerlo en partes mas pequeñas. Cada una de las
cuales se puede tratar de forma independiente. De esta manera se puentea la
restricción humana que existe sobre la capacidad de canal de la comprensión
humana, para entender un nivel dado de un sistema, basta por comprender unas
pocas partes. Descomposición algorítmica casi todos los informáticos fueron
adiestrados con el dogma del diseño estructurado, en la que cada módulo presenta
un paso de algún proceso global. Descomposición orientada a objetos. Puede
existir una descomposición alternativa para el mismo problema. El tema pasa por
descomponer el sistema con abstracciones claves del dominio del problema, en vez
de descomponer el problema en pasos ( abrir, obtener), se identifican objetos
( archivo maestro, suma de comprobación ). Son un conjunto de agentes
autónomos que colaboran para llevar a cabo algún comportamiento de nivel
superior. Un objeto es una entidad tangible que muestra un comportamiento bien
definido, los objetos hacen cosas, y se les pide que hagan lo que hacen
enviándoles mensajes. Descomposición algorítmica versus orientada a
objetos. La visión algorítmica enfatiza el orden de los eventos, la visión orientada
a objetos resalta los agentes que causan acciones o son sujetos a estas. La
descomposición orientada objetos produce sistemas pequeños a través de la re -
utilización de mecanismos comunes, también son mas resistentes al cambio y
están mejor preparados para evolucionar en el tiempo, su diseño está basado en
formas intermedias estables, reducen el riesgo que representan construir sistemas
de software complejos, porque están diseñados para evolucionar en forma
incremental
El ROL de la abstracción el alcance de la memoria limita la cantidad de
información que somos capaces de recibir procesar y recordar. Organizando el
estímulo percibido simultáneamente en varias dimensiones y sucesivamente en una
secuencia de bloques se consigue superar el cuello de botella de la información.
Este proceso se llama abstracción. Se deciden ignorar los detalles no esenciales,
tratando con el modelo generalizado e idealizado del objeto.
El ROL de la jerarquía la estructura de objetos es importante porque muestra
como diferentes objetos colaboran entre si a través de patrones de interacción
llamados mecanismos. La estructura de clases no es menos importante, porque
resalta el comportamiento común en el interior de un sistema, se puede tratar
como distinta cada instancia de un determinado tipo de objeto, y puede asumirse
que comparte las mismas conductas que todas las demás instancias de ese mismo
tipo de objeto. La identificación de las jerarquías en un sistema complejo no es fácil,
porque se requiere que se descubran patrones entre muchos objetos.

El diseño de sistemas complejos.


La ingeniería como ciencia y como arte. Según Petroski el Ingeniero tiene que
lograr un diseño como artista, y luego analizarlo como científico aplicando el
método científico con tanto rigor como cualquier científico lo hará.
El significado del diseño en todas las ingenierías se utilizan diseños para
solucionar un problema, suministrando un camino desde los requerimientos hasta la
implantación. Mostow sugiere que el propósito del diseño es construir un diseño
que: satisfaga las especificaciones, se ajuste a limitaciones impuestas por el medio,
satisfaga criterios de diseño, satisfaga restricciones sobre el propio proceso. Un
diseño es el producto final del proceso de diseño. La importancia de construir
un modelo. Construir un modelo es algo atractivo, cada modelo dentro de un
diseño describe un aspecto especifico de un sistema que se está considerando. De
ser posible se busca construir nuevos modelos en los que se tiene confianza. Los
modelos pueden fallar en condiciones controladas, por lo que se evalúa cada
modelo en condiciones previstas como improbables, para luego modificarse. Los
elementos de los métodos de diseño del software. Según el quinto atributo
de los sistemas complejos el diseño de estos conlleva a un proceso incremental e
interactivo. Los buenos métodos de diseño introducen en el proceso de desarrollo
alguna disciplina. La ingeniería de software desarrollo diferentes métodos que
pueden clasificarse en tres categorías. Cada uno incluye: notación, proceso,
herramientas. Un buen método de diseño se basa en fundamentos teóricos. Los
modelos de desarrollo orientado a objetos. El diseño orientado a objetos es
un método que lleva a una descomposición orientada a objetos ( son modelos que
se centran en las cosas que se encuentran en el espacio del problema ). Aplicando
diseño orientado a objetos se crea software resistente al cambio y escrito con
economía de expresión, estos modelos reflejan una importancia de plasmar
explícitamente las jerarquías de clases y objetos del sistema que se diseña. Estos
modelos animan a construir aplicaciones que posen los cinco atributos de los
sistemas complejos.