PRÓLOGO
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.3.1 Modelo en cascada
1.3.2 Modelo en espiral
1.3.3 Relación de las fases con los diagramas UML
1.4 MDA
1.4.1 Introducción
1.4.2 Características de 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.5.1 Sentencia condicional "si"
2.5.2 Sentencia de control "para"
2.5.3 Sentencia de control "mientras"
2.6 USO DE Y
2.7 CASO DE ESTUDIO: MERCURIAL
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.3.1 Caso de uso "Hacer jugada"
3.3.2 Caso de uso "Configurar parámetros"
3.3.3 Caso de uso "Validar usuario"
3.4 CASO DE ESTUDIO: MERCURIAL
3.4.1 Caso de uso "Listar ficheros"
3.4.2 Caso de uso "Clonar repositorio"
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
CAPÍTULO 5. DIAGRAMAS ORIENTADOS A LA ARQUITECTURA
5.1 TAXONOMÍA DE ESTILOS ARQUITECTÓNICOS
5.1.1 Tuberías y filtros
5.1.2 Por capas
5.1.3 Repositorios
5.1.4 Intérprete
5.1.5 Distribuidas
5.1.6 Programa principal / subprograma
5.2 DIAGRAMAS DE COMPONENTES
5.2.1 Interfaces
5.2.2 Componentes
5.2.3 Puertos
5.2.4 Dependencias
5.2.5 Caso de estudio: Ajedrez
5.2.6 Caso de estudio: Mercurial
5.3 DIAGRAMAS DE DESPLIEGUE
5.3.1 Nodos
5.3.2 Artefactos
5.3.3 Caso de estudio: Ajedrez
5.3.4 Caso de estudio: Mercurial
5.4 DIAGRAMAS DE PAQUETES
5.4.1 Paquetes
5.4.2 Generalización
5.4.3 Relaciones de dependencia
5.4.4 Caso de estudio: Ajedrez
5.4.5 Caso de estudio: Mercurial
CAPÍTULO 6. DIAGRAMAS DE CLASES
6.1 CLASES
6.2 ASOCIACIONES
6.2.1 Multiplicidad
6.2.2 Agregación y composición
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
CAPÍTULO 7. DIAGRAMAS DE SECUENCIAS
7.1 CONCEPTOS PRELIMINARES
7.2 ESTRUCTURA BÁSICA
7.2.1 Línea de vida
7.2.2 Activación
7.2.3 Mensajes síncronos y asíncronos
7.2.4 Creación, destrucción e invocación recursiva
7.3 EJEMPLO DE MODELADO: "SERVIDOR FTP"
7.3.1 Un solo cliente
7.3.2 Dos clientes
7.4 FRAGMENTOS COMBINADOS
7.4.1 Saltos condicionales
7.4.2 Iteraciones
7.4.3 Paralelismo
7.5 PARAMETRIZACIÓN
7.6 CASO DE ESTUDIO: AJEDREZ
7.6.1 Turno del jugador humano
7.6.2 Turno de la IA
7.7 CASO DE ESTUDIO: MERCURIAL
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
CAPÍTULO 9. PATRONES DE DISEÑO
9.1 ¿POR QUÉ PATRONES?
9.2 TIPOS DE PATRONES
9.3 PATRONES ARQUITECTÓNICOS
9.3.1 Sistemas genéricos
9.3.2 Sistemas distribuidos
9.3.3 Sistemas interactivos
9.4 PATRONES DE DISEÑO
9.4.1 Descripción de un patrón de diseño
9.4.2 Patrones de creación
9.4.3 Patrones estructurales
9.4.4 Patrones de comportamiento
9.5 CASO DE ESTUDIO: AJEDREZ
9.5.1 Patrón Facade
9.5.2 Patrón Observer
9.5.3 Patrón Strategy
9.6 CASO DE ESTUDIO: MERCURIAL
9.6.1 Patrón Facade e Interpreter
9.6.2 Patrón Composite
CAPÍTULO 10. DIAGRAMAS DE ESTADO
10.1 CONCEPTOS BÁSICOS
10.2 ESTRUCTURA DE UN ESTADO
10.3 ESTRUCTURA DE LAS TRANSICIONES
10.4 TIPOS DE NODOS
10.4.1 Nodos inicial y final
10.4.2 Nodos de interconexión
10.4.3 Nodos condicionales
10.5 EVENTOS
10.1.1 Eventos de llamada
10.1.2 Eventos de tiempo
10.6 ESTADOS COMPUESTOS
10.6.1 Estados compuestos simples
10.6.2 Estados compuestos ortogonales
10.7 SINCRONIZACIÓN DE SUBMÁQUINAS
10.8 SIMPLIFICACIÓN DEL DIAGRAMA DE ESTADOS
10.9 HISTORIAL
10.9.1 Historia superficial
10.9.2 Historia profunda
10.10 CASO DE ESTUDIO: AJEDREZ
10.11 CASO DE ESTUDIO: MERCURIAL
CAPÍTULO 11. DIAGRAMAS DE ACTIVIDAD
11.1 ESTRUCTURA BÁSICA
11.2 ESTRUCTURAS DE CONTROL
11.2.1 Nodos de decisión
11.2.2 Nodos de concurrencia y paralelismo
11.3 EVENTOS DE TIEMPO
11.4 NODOS OBJETO
11.5 NODOS DE DATOS
11.6 PARTICIONES
11.7 PARAMETRIZACIÓN
11.8 REGIONES
11.8.1 Regiones de expansión
11.8.2 Regiones interrumpibles
11.8.3 Regiones "if"
11.8.4 Regiones "loop"
11.9 MANEJO DE EXCEPCIONES
11.10 CONECTORES
11.11 SEÑALES Y EVENTOS
11.12 MÚLTIPLES FLUJOS
11.13 STREAMING
11.14 MULTICASTING
11.15 CASO DE ESTUDIO: AJEDREZ
11.16 CASO DE ESTUDIO: MERCURIAL
CAPÍTULO 12. DIAGRAMAS DE ESTRUCTURA COMPUESTA
12.1 ESTRUCTURA BÁSICA
12.1.1 Puertos
12.2 COLABORACIONES
12.3 USO DE LA COLABORACIÓN
12.4 CASO DE ESTUDIO: AJEDREZ
12.4.1 Diagrama de estructura compuesta
12.4.2 Colaboración
12.4.3 Uso de la colaboración
12.5 CASO DE ESTUDIO: MERCURIAL
12.5.1 Diagrama de estructura compuesta
12.5.2 Colaboración
12.5.3 Uso de la colaboración
CAPÍTULO 13. OCL (OBJECT CONSTRAINT LANGUAGE)
13.1 ESTRUCTURA BÁSICA
13.2 TIPOS Y OPERADORES
13.3 MODELO DE REFERENCIA: "ACADEMIA"
13.4 EXPRESIONES DE RESTRICCIÓN
13.4.1 Expresión inv:
13.4.2 Expresión pre:
13.4.3 Expresión post:
13.4.4 Operador @pre
13.5 EXPRESIONES DE DEFINICIÓN
13.5.1 Expresión body:
13.5.2 Expresión init:
13.5.3 Expresión def:
13.5.4 Expresión let:
13.5.5 Expresión derive:
13.6 COLECCIONES
13.6.1 Nociones básicas
13.6.2 Operaciones básicas
13.7 NAVEGACIÓN
13.8 OCL EN LOS DIAGRAMAS DE ESTADO
13.9 CASO DE ESTUDIO: AJEDREZ
13.10 CASO DE ESTUDIO: MERCURIAL
CAPÍTULO 14. INGENIERÍA DIRECTA EN JAVA
14.1 DIAGRAMAS DE CLASES
14.1.1 Representación de una clase
14.1.2 Asociaciones
14.1.3 Herencia
14.1.4 Agregación
14.1.5 Composición
14.1.6 Clases abstractas
14.1.7 Clases internas
14.1.8 Clases asociación
14.1.9 Asociación calificada
14.2 DIAGRAMAS DE SECUENCIAS
14.2.1 Interacción básica
14.2.2 Creación, destrucción, automensajes y recursividad
14.2.3 Saltos condicionales
14.2.4 Iteraciones
14.3 DIAGRAMAS DE ESTADO
14.4 CASO DE ESTUDIO: MERCURIAL
CAPÍTULO 15. INGENIERÍA DIRECTA EN C++
15.1 DIAGRAMAS DE CLASES
15.1.1 Representación de una clase
15.1.2 Asociaciones
15.1.3 Herencia simple
15.1.4 Herencia múltiple
15.1.5 Agregación
15.1.6 Composición
15.1.7 Clases abstractas e interfaces
15.1.8 Clases asociación
15.1.9 Asociación calificada
15.2 DIAGRAMAS DE SECUENCIAS
15.2.1 Interacción básica
15.2.2 Creación, destrucción, automensajes y recursividad
15.2.3 Saltos condicionales
15.2.4 Iteraciones
15.3 DIAGRAMAS DE ESTADO
15.4 CASO DE ESTUDIO: AJEDREZ
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.4.1 Clases y objetos
A.4.2 Herencia
A.4.3 Polimorfismo
A.5 PROGRAMACIÓN ORIENTADA A OBJETOS EN JAVA
A.5.1 Clases y objetos
A.5.2 Paquetes
A.5.3 Herencia
A.5.4 Interfaces
A.5.5 Polimorfismo
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
REFERENCIAS WEB
ÍNDICE ANALÍTICO
Los formalismos de la Programación Orientada a Objetos son una parte clave en la preparación deLos formalismos de la Programación Orientada a Objetos son una parte clave en la preparación de cualquier informático, aunque no son menos importantes los conocimientos de Análisis y Diseño Software. Desde esta perspectiva podemos afirmar que existen dos niveles en la formación de un ingeniero de software: las capacidades de programación algorítmica y las capacidades de Análisis y Diseño Orientados a Objetos desde un prisma arquitectónico. Por esta razón se hace cada vez más necesario el estudio de estas dos disciplinas en los centros universitarios de Ingeniería y de Formación Profesional Informática.
Al adentrarse en las páginas de este libro no solo hallará una explicación completa y amigable de la sintaxis y semántica de UML 2.x, sino también una gran colección de ejemplos del mundo real que le ayudarán a progresar rápidamente en el aprendizaje. Además, mediante la evolución de dos proyectos software basados en un videojuego de ajedrez y una aplicación CVS, recorrerá los aspectos esenciales del Análisis y Diseño Orientado a Objetos con UML, desde la adquisición de requisitos hasta la implementación en los lenguajes Java y C++.
Por ello, en este volumen encontrará:
Una introducción al estado del arte de la Ingeniería de Software
Diagramas inteligibles y explicaciones detalladas de la sintaxis UML 2.x
Once tipos de diagramas más modelado del dominio y patrones de diseño
Un capítulo completo dedicado a OCL (Object Constraint Language)
Implementación en Java y C++ de los diagramas explicados
Descarga de los códigos y esquemáticos desde el servidor de Ra-Ma
Una referencia completa de UML y Programación Orientada a Objetos