Unidad 5 DESARROLLO DE SISTEMAS DE TIEMPO REAL (STR)
Unidad 5 DESARROLLO DE SISTEMAS DE TIEMPO REAL (STR)
Unidad 5 DESARROLLO DE SISTEMAS DE TIEMPO REAL (STR)
Ing. Sistemas
Cuarto Semestre Jean Gracia V 22530725
04S-2642-D1
Sistema embebido...........................................................................................................................3
Sistemas de tiempo real..................................................................................................................3
Tecnologías de software para sistemas de tiempo real..................................................................4
Sistemas de bases de datos con requerimientos de tiempo real................................................4
Sistemas Operativos en Tiempo real...........................................................................................5
Lenguajes de programación.........................................................................................................5
Sistemas CASE para (STR).............................................................................................................6
Introducción a la Calidad del Software............................................................................................8
Métricas de calidad de software.....................................................................................................8
ISO 9000 0.2...................................................................................................................................11
Calidad de proceso y producto......................................................................................................12
Ingeniería de software orientado a objeto....................................................................................13
Análisis y diseño orientado a objetos............................................................................................17
Pruebas orientadas a objetos........................................................................................................17
Patrones orientados a objetos......................................................................................................18
2
Sistema embebido
Como el término lo sugiere, es solo una parte de un “todo” más grande que consiste en
muchos componentes, no sólo módulos de computadora, sino también sensores y actuadores.
Surge de la exigencia a sistemas que cumplan con la ejecución en sus respuestas bajo
ciertas restricciones de tiempo. Si no las respeta, se dirá que el sistema ha fallado. Para
garantizar el comportamiento correcto en el tiempo requerido se necesita que el sistema sea
predecible.
Un ejemplo que ilustra los puntos anteriores es el de un robot que necesita tomar una
pieza de una banda sinfín. Si el robot llega tarde, la pieza ya no estará donde debía recogerla,
por tanto, el trabajo se llevó a cabo incorrectamente, aunque el robot haya llegado al lugar
adecuado. Si el robot llega antes de que la pieza llegue, la pieza aún no estará ahí y el robot
puede bloquear su paso.
Los sistemas en tiempo real están presentes en nuestra vida diaria, prácticamente en
todo lo que nos rodea: en los aviones, trenes y automóviles, en el televisor, la lavadora o
el horno de microondas, en los teléfonos celulares y en las centrales telefónicas digitales. Son
un elemento imprescindible para garantizar la generación, transmisión y distribución de
la energía eléctrica y para asegurar la calidad y la seguridad de incontables procesos
industriales.
Estrictos: Son aquellos en los que el tiempo de respuesta es vital, y se vuelve imperativo
que lo cumpla.
3
Tecnologías de software para sistemas de tiempo real
4
sistemas que manejan sus datos,
debido a que en el presente, gestionar
datos es
gestionar uno de los principales
activos de las compañías. A estos
sistemas se les
deriva cada vez más responsabilidades
de negocio y son un aspecto clave en
la
calidad de servicio ofrecida a clientes
como: datos seguros, correctos y
disponibles
siempre.
Los Sistemas de Base de Datos (SBD)
se han perfeccionado apuntando a
determinados aspectos como:
performance, capacidad de
procesamiento de
5
transacciones, propiedades ACID
( Atomicidad, Consistencia,
Aislamiento y
Durabilidad) de las transacciones y
disponibilidad de los datos. Este
desarrollo ha
tomado forma a medida que las
empresas fueron aumentando las
exigencias hacia los
sistemas que manejan sus datos,
debido a que en el presente, gestionar
datos es
gestionar uno de los principales
activos de las compañías. A estos
sistemas se les
deriva cada vez más responsabilidades
de negocio y son un aspecto clave en
la
6
calidad de servicio ofrecida a clientes
como: datos seguros, correctos y
disponibles
siempre.
Los Sistemas de Base de Datos (SBD)
se han perfeccionado apuntando a
determinados aspectos como:
performance, capacidad de
procesamiento de
transacciones, propiedades ACID
( Atomicidad, Consistencia,
Aislamiento y
Durabilidad) de las transacciones y
disponibilidad de los datos. Este
desarrollo ha
tomado forma a medida que las
empresas fueron aumentando las
exigencias hacia los
7
sistemas que manejan sus datos,
debido a que en el presente, gestionar
datos es
gestionar uno de los principales
activos de las compañías. A estos
sistemas se les
deriva cada vez más responsabilidades
de negocio y son un aspecto clave en
la
calidad de servicio ofrecida a clientes
como: datos seguros, correctos y
disponibles
siempre.
Los Sistemas de Base de Datos (SBD)
se han perfeccionado apuntando a
determinados aspectos como:
performance, capacidad de
procesamiento de
8
transacciones, propiedades ACID
( Atomicidad, Consistencia,
Aislamiento y
Durabilidad) de las transacciones y
disponibilidad de los datos. Este
desarrollo ha
tomado forma a medida que las
empresas fueron aumentando las
exigencias hacia los
sistemas que manejan sus datos,
debido a que en el presente, gestionar
datos es
gestionar uno de los principales
activos de las compañías. A estos
sistemas se les
deriva cada vez más responsabilidades
de negocio y son un aspecto clave en
la
9
calidad de servicio ofrecida a clientes
como: datos seguros, correctos y
disponibles
siempre.
Los Sistemas de Base de Datos (SBD)
se han perfeccionado apuntando a
determinados aspectos como:
performance, capacidad de
procesamiento de
transacciones, propiedades ACID
( Atomicidad, Consistencia,
Aislamiento y
Durabilidad) de las transacciones y
disponibilidad de los datos. Este
desarrollo ha
tomado forma a medida que las
empresas fueron aumentando las
exigencias hacia los
10
sistemas que manejan sus datos,
debido a que en el presente, gestionar
datos es
gestionar uno de los principales
activos de las compañías. A estos
sistemas se les
deriva cada vez más responsabilidades
de negocio y son un aspecto clave en
la
calidad de servicio ofrecida a clientes
como: datos seguros, correctos y
disponibles
siempre.
Los Sistemas de Base de Datos (SBD)
se han perfeccionado apuntando a
determinados aspectos como:
performance, capacidad de
procesamiento de
11
transacciones, propiedades ACID
( Atomicidad, Consistencia,
Aislamiento y
Durabilidad) de las transacciones y
disponibilidad de los datos. Este
desarrollo ha
tomado forma a medida que las
empresas fueron aumentando las
exigencias hacia los
sistemas que manejan sus datos,
debido a que en el presente, gestionar
datos es
gestionar uno de los principales
activos de las compañías. A estos
sistemas se les
deriva cada vez más responsabilidades
de negocio y son un aspecto clave en
la
12
calidad de servicio ofrecida a clientes
como: datos seguros, correctos y
disponibles
siempre.
Los Sistemas de Base de Datos (SBD)
se han perfeccionado apuntando a
determinados aspectos como:
performance, capacidad de
procesamiento de
transacciones, propiedades ACID
( Atomicidad, Consistencia,
Aislamiento y
Durabilidad) de las transacciones y
disponibilidad de los datos. Este
desarrollo ha
tomado forma a medida que las
empresas fueron aumentando las
exigencias hacia los
13
sistemas que manejan sus datos,
debido a que en el presente, gestionar
datos es
gestionar uno de los principales
activos de las compañías. A estos
sistemas se les
deriva cada vez más responsabilidades
de negocio y son un aspecto clave en
la
calidad de servicio ofrecida a clientes
como: datos seguros, correctos y
disponibles
siempre.
Los Sistemas de Base de Datos (SBD)
se han perfeccionado apuntando a
determinados aspectos como:
performance, capacidad de
procesamiento de
14
transacciones, propiedades ACID
( Atomicidad, Consistencia,
Aislamiento y
Durabilidad) de las transacciones y
disponibilidad de los datos. Este
desarrollo ha
tomado forma a medida que las
empresas fueron aumentando las
exigencias hacia los
sistemas que manejan sus datos,
debido a que en el presente, gestionar
datos es
gestionar uno de los principales
activos de las compañías. A estos
sistemas se les
deriva cada vez más responsabilidades
de negocio y son un aspecto clave en
la
15
calidad de servicio ofrecida a clientes
como: datos seguros, correctos y
disponibles
siempre.
Los Sistemas de Base de Datos (SBD)
se han perfeccionado apuntando a
determinados aspectos como:
performance, capacidad de
procesamiento de
transacciones, propiedades ACID
( Atomicidad, Consistencia,
Aislamiento y
Durabilidad) de las transacciones y
disponibilidad de los datos. Este
desarrollo ha
tomado forma a medida que las
empresas fueron aumentando las
exigencias hacia los
16
sistemas que manejan sus datos,
debido a que en el presente, gestionar
datos es
gestionar uno de los principales
activos de las compañías. A estos
sistemas se les
deriva cada vez más responsabilidades
de negocio y son un aspecto clave en
la
calidad de servicio ofrecida a clientes
como: datos seguros, correctos y
disponibles
siempre.
Los Sistemas de Base de Datos (SBD)
se han perfeccionado apuntando a
determinados aspectos como:
performance, capacidad de
procesamiento de
17
transacciones, propiedades ACID
( Atomicidad, Consistencia,
Aislamiento y
Durabilidad) de las transacciones y
disponibilidad de los datos. Este
desarrollo ha
tomado forma a medida que las
empresas fueron aumentando las
exigencias hacia los
sistemas que manejan sus datos,
debido a que en el presente, gestionar
datos es
gestionar uno de los principales
activos de las compañías. A estos
sistemas se les
deriva cada vez más responsabilidades
de negocio y son un aspecto clave en
la
18
calidad de servicio ofrecida a clientes
como: datos seguros, correctos y
disponibles
siempre.
Los Sistemas de Base de Datos (SBD)
se han perfeccionado apuntando a
determinados aspectos como:
performance, capacidad de
procesamiento de
transacciones, propiedades ACID
( Atomicidad, Consistencia,
Aislamiento y
Durabilidad) de las transacciones y
disponibilidad de los datos. Este
desarrollo ha
tomado forma a medida que las
empresas fueron aumentando las
exigencias hacia los
19
sistemas que manejan sus datos,
debido a que en el presente, gestionar
datos es
gestionar uno de los principales
activos de las compañías. A estos
sistemas se les
deriva cada vez más responsabilidades
de negocio y son un aspecto clave en
la
calidad de servicio ofrecida a clientes
como: datos seguros, correctos y
disponibles
siempre.
Un SBD maneja datos persistentes garantizando durabilidad y consistencia a través de
gestión de transacciones. Una transacción es un conjunto de operaciones que implementan una
función lógica indivisible dentro de un SBD.
20
Atomicidad: Una transacción se ejecuta por completo o no se ejecuta. Confirma todas
sus operaciones satisfactoriamente (commit) o deshace sus operaciones si no pudo
completarse (rollback).
Consistencia: Una transacción que altera datos garantiza que la BD pasa de un estado
consistente a otro, cumpliendo las reglas de integridad.
Aislamiento: Las actualizaciones parciales de los datos no son visibles por otras
transacciones hasta que la transacción se confirme.
Durabilidad: Una vez que una transacción se ha confirmado el resultado debe persistir
en la BD aunque se produzcan fallas posteriores.
Permite controlar las secuencias de operaciones que acceden a datos compartidos para
que sean ejecutadas en serie y no concurran en casos de conflictos.
A esto se le llama serialización. Además de la calidad de los datos, un SBD tiene objetivos
de rendimiento que apuntan a reducir el tiempo de respuesta promedio de las transacciones
del sistema.
Por ejemplo, para el ámbito de las aplicaciones web, un sitio de subasta electrónica,
donde varios, tal vez miles de participantes subastan simultáneamente un producto, la
actualización de la mejor oferta debe ser publicada a todos los interesados al mismo tiempo
para no dar ventajas. A su vez, las ofertas tienen un tiempo límite o vencimiento. El ranking de
ofertas se debe realizar en tiempo real, entre todas las ofertas, antes de que éstas envejezcan.
Además, se debe considerar que el sistema debe atender concurrentemente múltiples subastas
electrónicas con las mismas condiciones de exigencia.
En las situaciones planteadas se puede ver que hay STR con requerimientos de BD.
ADEOS.
21
RT-LINUX.
KURT.
QNX.
WINDOWS CE.
VX WORKS.
SYMBIA.
SPECTRA.
SOLARIS.
REDLINUX.
Lenguajes de programación
Concurrentes.
Fiables.
Y con un comportamiento temporal analizable.
Lenguajes ensambladores:
Lenguajes secuenciales:
22
Se puede hacer con C++:
Otro ejemplo es la herramienta “gliffy”, muy potente, que permite crear gran cantidad
de diagramas, pero también permite crear wireframes de aplicaciones Web, ya sean estáticos o
23
interactivos para simular la navegación entre páginas. Permite el trabajo colaborativo y
exportar los diseños en diferentes formatos para su presentación o almacenamiento.
Diseño
Mockingbird web design: Otra herramienta de diseño de wireframes muy fácil de usar,
no permite el diseño colaborativo, pero se puede compartir el resultado a quien se
desee.
Photo share ideas made interactive: Una poderosa herramienta con la que podemos
realizar prototipos interactivos de aplicaciones web y móviles. Permite el diseño
colaborativo.
Diseño de datos
WWW SQL DESIGNER: De manera muy intuitiva podemos diagramar y estructurar los
datos que utilizaremos en nuestra webapp y las relaciones entre ellos.
Modelado
¿Cuáles son los beneficios de aplicar métricas? Una organización que aplica métricas en
sus procesos busca incrementar el retorno de la inversión, identificar las áreas a mejorar,
optimizar el tiempo invertido en el proceso, y reducir los costos de operación.
Lamentablemente, ni siquiera las mejores métricas garantizarán una aplicación exitosa.
Sin embargo, la combinación de estas, un buen proceso de trabajo, la aplicación de buenas
prácticas al programar y pasión por nuestro proyecto, nos ayudará a entregar una aplicación de
calidad al usuario final.
Complejidad
“Cualquier tonto puede escribir código que un ordenador entiende. Los buenos
programadores escriben código que los humanos pueden entender”. Martin Fowler
25
Una de las métricas más importantes es la complejidad ciclomática, que puede ser usada
en las fases de desarrollo o mantenimiento.
Esta métrica, propuesta por Thomas McCabe en 1976, se basa en el diagrama de flujo
determinado por las estructuras de control de un código. Del análisis de esta estructura se
obtendrán las medidas cuantitativas que nos facilitarán la comprensión y mejora de las mismas.
Existen diferentes prácticas que ayudan a bajar esta complejidad cognitiva, la que más
agradecemos, como desarrolladores, son los comentarios en el código.
Algunos estudios han probado una correlación directa entre la complejidad ciclomática y
la cantidad de bugs de un trozo de código, o el número de líneas de este. Por esto podemos
concluir que, a mayor complejidad y dimensión, se presentan mayores problemas y fallos en
nuestro código.
Code Churn
Es la frecuencia con la que se añade, quita o altera el código a través del tiempo. En
palabras simples, es la cantidad de veces en la que el fichero ha sido modificado. Esta métrica
presenta una relación directa con código defectuoso.
Esto quiere decir, mientras más modificaciones sufra un código, mayor es la posibilidad
de introducir un bug. Esta métrica es fácil de calcular usando un sistema de control de versiones
(git, mercurial). Basta contabilizar el número de commits que modificaron un dato, fichero, o
toda una clase.
Code Coverage
Código Muerto
(Dead code). Es una parte del código fuente que se ejecuta, pero sus resultados nunca
se usan. La ejecución de este tipo de código consume tiempo de cómputo en algo que jamás se
utiliza.
26
Algunos IDE (como Visual Studio y Eclipse) poseen la habilidad de detectar código
muerto durante tiempo de compilación.
Algunos desarrolladores tienen la técnica «borrar, cerrar y cruzar» y que no es más que
borrar el código sospechoso, cerrar los ojos y cruzar los dedos para que nada se caiga…
Duplicación de Código
(Code duplication) es el término utilizado para una estructura de código que se declara
más de una vez dentro de una aplicación. Ocurre frecuentemente cuando el programador no
está familiarizado con el código, lo que lo lleva a replicar trozos de código.
Para conducir y operar una organización en forma exitosa se requiere que ésta se dirija y
controle en forma sistemática y transparente. Se puede lograr el éxito implementando y
manteniendo un sistema de gestión que esté diseñado para mejorar continuamente su
desempeño mediante la consideración de las necesidades de todas las partes interesadas. La
gestión de una organización comprende la gestión de la calidad entre otras disciplinas de
gestión.
27
Se han identificado ocho principios de gestión de la calidad que pueden ser utilizados
por la dirección con el fin de conducir a la organización hacia una mejora en el desempeño.
Enfoque al cliente: Las organizaciones dependen de sus clientes y por lo tanto deberían
comprender las necesidades actuales y futuras de los clientes, satisfacer los requisitos
de los clientes y esforzarse en exceder las expectativas de los clientes.
Enfoque basado en hechos para la toma de decisión: Las decisiones eficaces se basan
en el análisis de los datos y la información.
No es lo mismo calidad del producto software, que calidad del proceso software, que
calidad del equipo.
28
Por proceso se entienden las actividades, tareas, entrada, salida, procedimientos, etc.,
para desarrollar y mantener un software.
Modelos, normas y metodologías típicas son los CMMI, ISO 15504 / ISO 12207, el ciclo
de vida usado, e incluso las metodologías ágiles entran aquí.
Un buen proceso sin duda asegura un buen producto, pero, claro, también podemos
seguir un modelo de procesos famoso, y que no sea el más adecuado para nuestra organización
y que por ello el producto no acabe siendo el mejor. Por ello, una mala, algunas veces perversa,
interpretación es asumir que, cumpliendo cierto modelo, nivel de madurez, norma,
metodología, ciclo de vida, o cualquier otra cosa relacionada con el proceso… se ASEGURA por
ello directamente productos de calidad. ¿Realmente es garantía suficiente? ¿Una certificación
sobre la calidad del proceso garantiza un producto de calidad?…
Y es por ello que existen los modelos de calidad de producto, destacando entre ellos
la ISO 9126, o la nueva serie ISO 25000, que especifica diferentes dimensiones de la calidad de
producto. Aunque aquí la dura tarea de evaluación recae en el uso de métricas software.
Sí una empresa que desarrolla software debe preocuparse de la calidad del proceso y
del producto que desarrolla y entrega, una empresa que solo compra software (el típico cliente)
debería, principalmente, preocuparse de la calidad del producto que compra. Aunque vemos
que, en la realidad, las empresas que compran software lo hacen al revés, se preocupan por el
proceso que usa su proveedor (CMMI, ISO, etc.) y apenas del producto que les llega. Cosas de la
industria.
Lo más determinante, complejo, y sobre lo que menos “guías” hay. Aquí podemos
encontrar decenas de aproximaciones para mejorar, que van desde el tan de moda coaching, a
la filosofía ágil de lograr la auto-organización de los equipos, estrategias de motivación,
combinaciones de los anteriores, etc.
No hay que olvidar que las personas son las que hacen el software. Las herramientas
ayudan, las técnicas también, los procesos, etc. “Las personas son la clave del éxito”, que dijera
Davis en su libro 201 Principles of Software Development.
29
“El equipo humano es el
componente no lineal de
primer orden en el desarrollo
software. Las personas son
lo que tiene más potencial
para recortar el tiempo de
un proyecto, y quienes han
trabajo en software “han
observado las enormes
diferencias que hay en los
resultados que producen
desarrolladores medios,
mediocres y geniales”.
Ingeniería de software
orientado a objeto.
30
de 37 años y que en nuestro programa podría hablar, caminar o comer, que son los
comportamientos que están definidos en la clase.
De este modo, si tenemos que manejar personas podemos ir creándolas a medida que
las necesitemos, y actuar sobre ellas individualmente. Cada una tiene sus propios datos y sus
propias acciones.
Encapsulación
Es la característica de un lenguaje POO que permite que todo lo referente a un objeto
quede aislado dentro de éste. Sólo se puede acceder a ellos a través de los miembros que la
clase proporcione (propiedades y métodos).
Por ejemplo, en el caso de las personas que estábamos viendo, toda la información
sobre éstas (nombre, apellidos, edad... y cualquier otro dato interno que se utilice y que no
necesariamente se ve desde el exterior del objeto) está circunscrito al ámbito de dicha persona.
Abstracción
Como la propia palabra indica, nos disuelve de la complejidad que haya dentro
dándonos una serie de atributos y comportamientos (propiedades y funciones) que podemos
usar sin preocuparnos de qué pasa por dentro cuando lo hagamos.
Así, una clase (y por lo tanto todos los objetos que se crean a partir de ella) debe
exponer para su uso solo lo que sea necesario. Cómo se haga "por dentro" es irrelevante para
los programas que hagan uso de los objetos de esa clase.
En nuestro ejemplo de las personas en un juego, puede ser que tengamos un dato
interno que llamamos energía y que nunca es accesible directamente desde fuera. Sin
embargo, cada vez que la persona anda (o corre, si tuviésemos un método para ello) gasta
energía y el valor de este dato disminuye. Y cuando la persona come, el valor sube en función
de lo que haya comido.
Otro ejemplo incluso más claro podría ser la acción Hablar(). Ésta puede suponer
que se genere una voz sintética a partir de un texto que se le indica como parámetro de la
acción para lo cual quizá ocurran un montón de cosas: se llama a un componente para síntesis
de voz que está en la nube, se lanza la síntesis de voz en el dispositivo local de audio y se anota
en una base de datos la frase que se ha pronunciado para guardar un histórico entre otras
cosas. Pero todo esto es indiferente para el programa que hace uso de esta funcionalidad. El
programa simplemente tiene acceso a un objeto Cristina y llama a la función Hablar().
No tiene ni idea de toda la complejidad interna que puede suponer. Si mañana cambiamos el
31
modo de sintetizar la voz o cualquier otra acción interna, es indiferente para el programa que
usa nuestros objetos de tipo Persona.
Herencia
Desde el punto de vista de la genética, cuando una persona obtiene de sus padres
ciertos rasgos (el color de los ojos o de la piel, una enfermedad genética, etc...) se dice que los
hereda. Del mismo modo en POO cuando una clase hereda de otra obtiene todos los rasgos que
tuviese la primera.
Dado que una clase es un patrón que define cómo es y cómo se comporta una cierta
entidad, una clase que hereda de otra obtiene todos los rasgos de la primera y añade otros
nuevos y además también puede modificar algunos de los que ha heredado.
Así, en nuestro juego que involucra personas, podemos tener clases de personas más
especializadas para representar personajes especiales del juego. Por ejemplo, podríamos definir
clases como Pirata, Piloto o Estratega que heredan de la clase Persona. Todos
los objetos de estas clases heredan las propiedades y los métodos de Persona, pero pueden
particularizar algunos de ellos y además añadir cosas propias.
No solo eso. Lo bueno de la herencia es que podemos reutilizar todo lo que tuviésemos
en la clase base. Supongamos que en nuestro juego, los piratas hablan de forma diferente a los
demás. El método Hablar() se modifica para que le añada un ¡Arrrr! o un ¡nadie
lo nota pero el ron se agota! aleatoriamente a la frase y que así parezca más
un pirata. Para que el pirata hable no tendríamos que volver a hacer todo el código relacionado
con hablar. Eso ya sabe cómo hacerlo por el mero hecho de ser una persona (por heredar de la
clase Persona).
Lo único que tendríamos que hacer es añadir esas interjecciones de pirata a la frase y
luego delegar la síntesis de voz y todo lo demás a la clase base. Sería facilísimo y
conseguiríamos consistencia entre todas las clases a la hora de particularizar la forma de hablar.
Polimorfismo
32
La palabra polimorfismo viene del griego "polys" (muchos) y "morfo" (forma), y quiere
decir "cualidad de tener muchas formas".
Supongamos que en nuestro juego tenemos un montón de personajes que están juntos
en un mismo escenario. Hay varios piratas, algunos estrategas y un montón de otros tipos de
personas.
En un momento dado necesitamos que todos se pongan a hablar. Cada uno lo hace de
una forma diferente, ya que son tipos de personajes distintos. Sería algo bastante tedioso tener
que localizar primero a los de un tipo y hacerlos hablar, luego a los de otro y así sucesivamente.
La idea es que puedas tratarlos a todos como personas, independientemente del tipo específico
de persona que sean y simplemente decirles que hablen.
De hecho, el polimorfismo puede ser más complicado que eso ya que se puede dar
también mediante la sobrecarga de métodos y, sobre todo, a través del uso de interfaces, pero
el concepto puntual es este.
33
sistema cumple con los requerimientos. ¿De qué manera el sistema de la biblioteca capturará y
registrará los préstamos de libros?
La esencia de estas actividades consiste en situar el dominio de un problema y su
solución lógica dentro de la perspectiva de los objetos.
Durante el análisis orientado a objetos se procura ante todo identificar y describir los
objetos o conceptos dentro del dominio del problema.
Durante el diseño orientado a objetos, se procura definir objetos lógicos del software.
Como dichos modelos están semánticamente enlazados las pruebas comienzan durante
estas actividades de ingeniería (análisis- diseño).
34
Hacer software no es fácil, Diseñar software orientado a objetos es difícil, y diseñar
software orientado a objetos reutilizable es todavía más difícil.
...y un software capaz de evolucionar tiene que ser reutilizable (al menos para las
versiones futuras)
¿Como hacerlos?
Hay que estudiar los diseños de otros programadores: Estos diseños contienen patrones
que deben ser entendidos, memorizados y aplicados repetidamente.
Christopher Alexander (1977): Cada patrón describe un problema que ocurre una y
otra vez en nuestro entorno, y describe la esencia de la solución a ese problema, de
tal modo que pueda utilizarse esta solución un millón de veces más, sin siquiera
hacerlo de la misma manera dos veces
Existen diversas maneras de agrupar los patrones de diseño. Quizá la más extendida es
agruparlos según su propósito. En este caso tendríamos las siguientes categorías:
35
Patrones estructurales: utilizados para crear clases u objetos que incluidos dentro de
estructuras más complejas.
Patrones de diseño creacionales: Son los que dan solución a cómo gestionar la creación
de objetos proporcionando la mejor solución para cada situación. En esta categoría
encontramos; Factory, Object Pool, Singleton.
Patrones de diseño de comportamiento: Estos son los que identifican patrones comunes
de comunicación entre objetos. El más famoso puede que sea el Observer, pero también
patrones como Chain of responsibility o Memento
Conclusión
36