Prólogo
¿A quién va dirigido este libro?
Estructura del libro
Novedades en la segunda edición
estilos de programación
Diagramas y programas de ejemplo
Feedback
Agradecimientos académicos
Capítulo 1. UML en el contexto de la ingeniería del software
1.1 La necesidad de un modelo unificado
1.2 ¿Por qué modelar?
1.3 Modelos de proceso software
1.4 Metodologías de desarrollo
1.5 Calidad del software
1.6 Desarrollo de software seguro
1.7 MDA
Capítulo 2. Diagramas de casos de uso
2.1 Introducción
2.2 Actores
2.3 Casos de uso
2.4 Especificación de los casos de uso
2.5 Flujo principal
2.6 Uso de <> y <>
2.7 Caso de estudio: Mercurial
2.8 Caso de estudio: Servicio de cifrado remoto
Capítulo 3. Diagramas de robustez
3.1 Conceptos básicos
3.2 Importancia de los diagramas de robustez
3.3 Caso de estudio: Ajedrez
3.4 Caso de estudio: Mercurial
3.5 Caso de estudio: Servicio de cifrado remoto
Capítulo 4. Modelo del dominio
4.1 Extracción de conceptos
4.2 Identificar asociaciones
4.3 Establecer los atributos
4.4 Herencia
4.5 Agregación y composición
4.6 Ejemplo de modelado: “Spindizzy”
4.7 Caso de estudio: Ajedrez
4.8 Caso de estudio: Mercurial
4.9 Caso de estudio: Servicio de cifrado remoto
Capítulo 5. Diagramas orientados a la arquitectura
5.1 Taxonomía de estilos arquitectónicos
5.2 Diagramas de componentes
5.3 Diagramas de despliegue
5.4 Diagramas de paquetes
Capítulo 6. Diagramas de clases
6.1 Clases
6.2 Asociaciones
6.3 Herencia
6.4 Interfaces
6.5 Dependencias
6.6 Excepciones
6.7 Clases parametrizables
6.8 Ejemplo de modelado: “Spindizzy”
6.9 Caso de estudio: Ajedrez
6.10 Caso de estudio: Mercurial
6.11 Caso de estudio: Servicio de cifrado remoto
Capítulo 7. Diagramas de secuencias
7.1 Conceptos preliminares
7.2 Estructura básica
7.3 Ejemplo de modelado: “servidor ftp”
7.4 Fragmentos combinados
7.5 Parametrización
7.6 Caso de estudio: Ajedrez
7.7 Caso de estudio: Mercurial
7.8 Caso de estudio: Servicio de cifrado remoto
Capítulo 8. Diagramas de comunicación
8.1 Estructura básica
8.2 Saltos condicionales
8.3 Iteraciones
8.4 Caso de estudio: Ajedrez
8.5 Caso de estudio: Mercurial
8.6 Caso de estudio: Servicio de cifrado remoto
Capítulo 9. Patrones de diseño
9.1 ¿Por qué patrones?
9.2 Tipos de patrones
9.3 Patrones arquitectónicos
9.4 Patrones de diseño GoF
9.5 Caso de estudio: Ajedrez
9.6 Caso de estudio: Mercurial
9.7 Caso de estudio: Servicio de cifrado remoto
Capítulo 10. Buenas prácticas de programación
10.1 Patrones de diseño Grasp
10.2 Caso de estudio: Ajedrez
10.3 Caso de estudio: Mercurial
10.4 Caso de estudio: Servicio de cifrado remoto
Capítulo 11. Diagramas de estado
11.1 Conceptos básicos
11.2 Estructura de un estado
11.3 Estructura de las transiciones
11.4 Tipos de nodos
11.5 Eventos
11.6 Estados compuestos
11.7 Sincronización de submáquinas
11.8 Simplificación del diagrama de estados
11.9 Historial
11.10 Caso de estudio: Ajedrez
11.11 Caso de estudio: Mercurial
11.12 Caso de estudio: Servicio de cifrado remoto
Capítulo 12. Diagramas de actividad
12.1 Estructura básica
12.2 Estructuras de control
12.3 Eventos de tiempo
12.4 Nodos objeto
12.5 Nodos de datos
12.6 Particiones
12.7 Parametrización
12.8 Regiones.
12.9 Manejo de excepciones
12.10 Conectores
12.11 Señales y eventos
12.12 Múltiples flujos
12.13 Streaming
12.14 Multicasting
12.15 Caso de estudio: Ajedrez
12.16 Caso de estudio: Mercurial
12.17 Caso de estudio: Servicio de cifrado remoto
Capítulo 13. Diagramas de estructura compuesta
13.1 Estructura básica
13.2 Colaboraciones
13.3 Uso de la colaboración
13.4 Caso de estudio: Ajedrez
13.5 Caso de estudio: Mercurial
13.6 Caso de estudio: Servicio de cifrado remoto (cliente)
13.7 Caso de estudio: Servicio de cifrado remoto (servidor)
Capítulo 14. Ocl (object constrint language)
14.1 Estructura básica
14.2 Tipos y operadores
14.3 Modelo de referencia: “academia”
14.4. Expresiones de restricción
14.5 Expresiones de definición
14.6 Colecciones
14.7 Navegación
14.8 OCL en los diagramas de estado
14.9 Caso de estudio: Ajedrez
14.10 Caso de estudio: Mercurial
14.11 Caso de estudio: Servicio de cifrado remoto
Capítulo 15. Ingeniería directa en Java
15.1 Diagramas de clases
15.2 Diagramas de secuencias
15.3 Diagramas de estado
15.4 Caso de estudio: Mercurial
Capítulo 16. Ingeniería directa en C++
16.1 Diagrama de clases
16.2 Diagramas de secuencias
16.3 Diagramas de estado
16.4 Caso de estudio: Ajedrez
Capítulo 17. Ingeniería directa en Python
17.1 Diagrama de clases
17.2 Diagramas en secuencias
17.3 Diagramas de estado
17.4 Caso de estudio: Servicio de cifrado remoto
Anexo A. Programación orientada a objetos
A.1 Breve reseña histórica
A.2 Características de la POO
A.3 Clases y objetos
A.4 Programación orientada a objetos en C++
A.5 Programación orientada a objetos en Java
A.6 Programación orientada a objetos en Python
Anexo B. Resumen de notación UML
B.1 Diagrama de casos de uso
B.2 Diagrama de robustez
B.3 Diagrama de componentes
B.4 Diagrama de despliegue
B.5 Diagrama de paquetes
B.6 Diagrama de clases
B.7 Diagrama de secuencias
B.8 Diagrama de comunicación
B.9 Diagrama de estados
B.10 Diagrama de actividades
B.11 Diagrama de estructura compuesta
Bibliografía y referencias web
Material adicional
Índice alfabético