Capitulo 2 Grady Booch

Capitulo 2 –Análisis y diseño Orientado a Objetos con aplicacionesEl modelo de objetos
La tecnología orientada a objetos se apoya en los sólidos fundamentos de la ingeniería,
cuyos elementos reciben el nombre de modelo de objetos. El modelo de objetos abarca
los principios de abstracción, encapsulamiento, modularidad, jerarquía, tipos,
concurrencia y persistencia. El modelo de objetos conjuga todos estos elementos de
forma sinérgica.
2.1 La evolución del modelo de objetos:
2.1.1 la topología de los lenguajes de primera y principios de la segunda generación
Por topología se entiende los bloques físicos de construcción de ese lenguaje y como
esas partes pueden ser conectadas.
El bloque básico de construcción es el subprograma
Estructura física relativamente plana.
Un error en una parte de un programa puede tener un devastador efecto de
propagación a través del resto del sistema.
Cantidad enorme de acoplamiento entre subprogramas.
Aparición de la entropía después de un periodo de mantenimiento.
2.1.2 la topología de los lenguajes de fines de la segunda y principios de la tercera
Hallazgo de que los subprogramas podían servir como mecanismos de abstracción.
Se asentaron los fundamentos de la programación estructurada.
Surgieron los métodos de diseño estructurado (Jackson).
2.1.3 la topología de los lenguajes de finales de la tercera generación.
Aparece la compilación de módulos separados.
Pocas reglas de consistencia semántica entre las interfaces de los módulos.
No brindaban soporte para la abstracción de datos y la comprobación estricta.
Muchos errores se descubrían en tiempo de ejecución.
2.1.4
la topología de los lenguajes de programación basados en objetos y orientados
a objetos
Cuando hablamos de complejidad dijimos que muchas realidades complejas se
basan en elementos básicos repetidos. Dichos objetos abstractos son imposibles de
modelar mediante las topologías anteriores (Ej Pedido Comprobante  Factura).
El bloque de construcción básico es la clase u objeto.
Un programa orientado a objetos se organiza alrededor de los nombres del dominio
del problema.
En sistemas grandes existen agrupaciones de abstracciones que se construyen en
capas, una sobre la otra.
Fundamentos del modelo de objetos
El modelo de objetos surgió para ayudar a los desarrolladores a explotar la potencia
expresiva de los lenguajes orientados y basados en objetos.
Existen límites para la cantidad de complejidad que se puede manejar utilizando
solo la descomposición algorítmica; por tanto hay que volverse a la descomposición
orientada a objetos.
1
POO, DOO y AOO
Los objetos representan componentes de un sistema descompuesto modularmente o
bien unidades modulares de representación del conocimiento.
POO Es un método de implementación en el que los programas se organizan
como colecciones cooperativas de objetos, cada uno de los cuales representa una
instancia de alguna clase, y cuyas clases son, todas ellas, miembros de una jerarquía
de clases unidas mediante relaciones de herencia.
DOO Es un método de diseño que abarca el proceso de descomposición orientada
a objetos y una notación para describir los modelos, lógico y físico, así como los
modelos estáticos y dinámicos de un sistema que se diseña.
AOO Es un método de análisis que examina los requisitos desde la perspectiva de
las clases y objetos que se encuentran en el vocabulario del dominio del problema
2.2 Elementos del modelo de objetos: Tipos de paradigmas de programación
Orientado a procedimientos
Orientado a objetos
Orientado a lógica
Orientados a reglas
Orientados a restricciones
Algoritmos
Clases y Objetos
Objetivos a menudo expresados como
calculo de predicados.
Reglas Si-Entonces(If then)
Relaciones invariantes
Los cuatro elementos fundamentales del modelo de objetos
Abstracción
Encapsulamiento
Modularidad
Jerarquía
Elementos secundarios del modelo de objetos
Tipos (tipificación)
Concurrencia
Persistencia
Abstracción: Descripción simplificada que enfatiza algunos de los detalles o
propiedades de algo. Una abstracción se centra en la visión externa de un objeto,
y por tanto sirve para separar el comportamiento esencial de un objeto de su
implantación.
Encapsulamiento: el encapsulamiento se obtiene mediante la ocultación de
información. La estructura de un objeto esta oculta, así como su implantación.
Para que la abstracción funcione la implementación debe estar encapsulada.
El interfaz de una clase captura su vista externa, mientras que la implementación
(implantación) comprende la representación de la abstracción así como los
mecanismos que consiguen el comportamiento deseado.
Modularidad: crear fronteras bien definidas y documentadas dentro del
programa (Ejemplo: las distintas capas de la arquitectura de un sistema).
2
El uso de módulos en los sistemas complejos es imprescindible para reducir la
complejidad.
Jerarquía: la identificación de jerarquías simplifica en gran medida la
comprensión de un problema.
Las dos jerarquías mas importantes en un sistema complejo son su estructura de
clases (la jerarquía de Clases <<es un>>) y su estructura de objetos (<<es un>>)
Ejemplo de jerarquías:
Herencia simple:
La herencia denota una relación <<es un>>. Implica una jerarquía de
generalización especialización, donde un clase hija especializa el
funcionamiento de la clase padre, y la ultima generaliza las propiedades
y/o funcionamiento de su clase hija.
MotorTurboJet (es un) MotorDePropulsion
MotorDePropulsion
MotorTurboJet
Herencia Multiple:
Algunas veces una clase se deriva de más de una clase base, este
fenómeno se conoce como herencia múltiple.
Ej:
MarisaRobilotte
JuanCarlosMancuso
MarianoMancuso
Jerarquía de agregación: la agregación permite el agrupamiento físico de
estructuras relacionadas lógicamente.
3
Tipos: los objetos de tipos distintos no pueden intercambiarse, como mucho,
pueden intercambiarse de formas muy restringidas (casting).
C++ posee comprobación estricta de tipos (todas las operaciones son
congruentes respecto al tipo) lo que produce que los sistemas desarrollados en
este lenguaje posean menor cantidad de errores latentes.
Ligadura: este concepto se refiere al hecho de ligar una nombre a su tipo (una
variable a su tipo). Hay dos momentos en los que se puede realizar esta en
tiempo de compilación o en tiempo de ejecución. Dependiendo de cuando se
realice va a ser ligadura estática o ligadura dinámica respectivamente.
Concurrencia: un sistema que implique concurrencia puede tener muchos hilos
de control (hilos de ejecución) que se encarguen de realizar distintas tareas de
forma casi simultanea para el usuario.
4