aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--defs.tex11
-rw-r--r--gpds/n4.lyx433
-rw-r--r--pds/n.lyx30
-rw-r--r--pds/n1.lyx138
-rw-r--r--pds/n5.1.puml6
-rw-r--r--pds/n5.1.svg19
-rw-r--r--pds/n5.lyx1901
-rw-r--r--pds/n6.1.puml14
-rw-r--r--pds/n6.1.svg27
-rw-r--r--pds/n6.2.puml21
-rw-r--r--pds/n6.2.svg34
-rw-r--r--pds/n6.lyx700
-rw-r--r--tds/n1.lyx14
13 files changed, 3250 insertions, 98 deletions
diff --git a/defs.tex b/defs.tex
index f5dd9f0..55c8ce3 100644
--- a/defs.tex
+++ b/defs.tex
@@ -83,5 +83,12 @@
\def\eoffsets{\end{center}}
% Notices
-\def\sremember#1{\begin{center}\begin{tabular}{|p{0.9\textwidth}|}\multicolumn{1}{p{0.9\textwidth}}{{\kern-.3em\small {[}#1{]}}}\tabularnewline\hline\kern-1ex}
-\def\eremember{\tabularnewline\hline\end{tabular}\par\end{center}\vspace{.3em}}
+\def\sremember#1{%
+ \vspace{-1ex}\begin{center}\begin{tabular}{|p{0.9\textwidth}|}%
+ \multicolumn{1}{p{0.9\textwidth}}{{\kern-.3em\small {[}#1{]}}}%
+ \tabularnewline\hline\nobreak\vspace{-1ex}
+}
+\def\eremember{%
+ \nobreak\vspace{-1em}\tabularnewline\hline%
+ \end{tabular}\par\end{center}\vspace{.3em}%
+}
diff --git a/gpds/n4.lyx b/gpds/n4.lyx
new file mode 100644
index 0000000..56b5950
--- /dev/null
+++ b/gpds/n4.lyx
@@ -0,0 +1,433 @@
+#LyX 2.3 created this file. For more info see http://www.lyx.org/
+\lyxformat 544
+\begin_document
+\begin_header
+\save_transient_properties true
+\origin unavailable
+\textclass book
+\use_default_options true
+\begin_modules
+algorithm2e
+\end_modules
+\maintain_unincluded_children false
+\language spanish
+\language_package default
+\inputencoding auto
+\fontencoding global
+\font_roman "default" "default"
+\font_sans "default" "default"
+\font_typewriter "default" "default"
+\font_math "auto" "auto"
+\font_default_family default
+\use_non_tex_fonts false
+\font_sc false
+\font_osf false
+\font_sf_scale 100 100
+\font_tt_scale 100 100
+\use_microtype false
+\use_dash_ligatures true
+\graphics default
+\default_output_format default
+\output_sync 0
+\bibtex_command default
+\index_command default
+\paperfontsize default
+\spacing single
+\use_hyperref false
+\papersize default
+\use_geometry false
+\use_package amsmath 1
+\use_package amssymb 1
+\use_package cancel 1
+\use_package esint 1
+\use_package mathdots 1
+\use_package mathtools 1
+\use_package mhchem 1
+\use_package stackrel 1
+\use_package stmaryrd 1
+\use_package undertilde 1
+\cite_engine basic
+\cite_engine_type default
+\biblio_style plain
+\use_bibtopic false
+\use_indices false
+\paperorientation portrait
+\suppress_date false
+\justification true
+\use_refstyle 1
+\use_minted 0
+\index Index
+\shortcut idx
+\color #008000
+\end_index
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\paragraph_indentation default
+\is_math_indent 0
+\math_numbering_side default
+\quotes_style french
+\dynamic_quotes 0
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+\tracking_changes false
+\output_changes false
+\html_math_output 0
+\html_css_as_file 0
+\html_be_strict false
+\end_header
+
+\begin_body
+
+\begin_layout Standard
+Un
+\series bold
+documento de requisitos
+\series default
+ (
+\series bold
+del proyecto
+\series default
+) o
+\series bold
+especificación funcional
+\series default
+ combina un SRS y un SyRS.
+ Contiene un conjunto exhaustivo y preciso de los requisitos, validados,
+ y sirve como contrato entre el cliente y los desarrolladores.
+\end_layout
+
+\begin_layout Standard
+Se prepara en un bucle de 4 fases:
+\end_layout
+
+\begin_layout Enumerate
+
+\series bold
+Obtención
+\series default
+, en que se determinan los requisitos para llegar un conocimiento suficiente
+ del problema y establecer los límites del sistema.
+\end_layout
+
+\begin_layout Enumerate
+
+\series bold
+Análisis
+\series default
+, en que se examinan los requisitos para delimitarlos y definirlos exactamente.
+\end_layout
+
+\begin_layout Enumerate
+
+\series bold
+Especificación
+\series default
+, en que se escriben los requisitos.
+\end_layout
+
+\begin_layout Enumerate
+
+\series bold
+Validación
+\series default
+, en que se examina si los documentos de requisitos definen el software
+ que los usuarios esperan.
+\end_layout
+
+\begin_layout Standard
+Puede estructurarse como:
+\end_layout
+
+\begin_layout Enumerate
+Necesidades del usuario o requisitos del negocio.
+\end_layout
+
+\begin_layout Enumerate
+Documento de Requisitos del Producto (
+\series bold
+PRD
+\series default
+,
+\emph on
+\lang english
+Product Requirements Document
+\emph default
+\lang spanish
+).
+\end_layout
+
+\begin_layout Enumerate
+Especificación de requisitos de software (SRS) o hardware.
+\end_layout
+
+\begin_layout Enumerate
+
+\emph on
+\lang english
+Tests
+\emph default
+\lang spanish
+ para los requisitos de software (
+\series bold
+STS
+\series default
+,
+\emph on
+\lang english
+Software Test Specification
+\emph default
+\lang spanish
+) o hardware.
+\end_layout
+
+\begin_layout Standard
+Otra posible estructura es:
+\end_layout
+
+\begin_layout Enumerate
+
+\series bold
+Documento de Visión
+\series default
+ (
+\series bold
+y Alcance
+\series default
+), con la lista de participantes clave, los requisitos de negocio y el PRD.
+\end_layout
+
+\begin_layout Enumerate
+
+\series bold
+Documento de Casos de Uso
+\series default
+, con los requisitos de usuario como casos de uso.
+\end_layout
+
+\begin_layout Enumerate
+SRS.
+\end_layout
+
+\begin_layout Standard
+El tipo y número de documentos de requisitos, la organización y preparación
+ de estos y la forma de definir interrelaciones o jerarquías entre los requisito
+s deben estar claras desde el principio del proyecto, y aunque pueden variar
+ de un proyecto a otro según las características de cada uno, es preferible
+ que se conviertan en una norma.
+\end_layout
+
+\begin_layout Section
+Clasificación de requisitos
+\end_layout
+
+\begin_layout Standard
+Los requisitos pueden ser:
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Del dominio del problema:
+\series default
+
+\series bold
+requisitos de empresa
+\series default
+ o
+\series bold
+de producto
+\series default
+,
+\series bold
+objetivos
+\series default
+,
+\series bold
+necesidades
+\series default
+ o
+\series bold
+reglas de negocio
+\series default
+, y son requisitos de alto nivel de la organización o el cliente, recogidos
+ en el PRD.
+ Información general de las necesidades de los usuarios.
+ Reglas.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Del dominio de la solución: Requisitos de usuario
+\series default
+, tareas que el usuario debe poder realizar con el producto, representadas
+ mediante texto, casos de uso o descripciones de escenarios.
+
+\series bold
+Requisitos de software
+\series default
+, funcionales o no, atributos de calidad y restricciones de diseño.
+ Requisitos de hardware.
+\end_layout
+
+\begin_layout Standard
+CMMi 2.0 distingue requisitos:
+\end_layout
+
+\begin_layout Description
+Del
+\begin_inset space ~
+\end_inset
+
+cliente Resultado de obtener necesidades; resolver conflictos entre ellas
+ y las expectativas, limitaciones e interfaces, y definir las soluciones
+ con las partes interesadas afectadas de forma aceptable para ellas.
+\end_layout
+
+\begin_layout Description
+Contractual Resultado del análisis y refinamiento de los requisitos del
+ cliente en un conjunto de requisitos adecuado para su inclusión en solicitudes
+ o acuerdos con proveedores.
+\end_layout
+
+\begin_layout Description
+
+\series bold
+De
+\begin_inset space ~
+\end_inset
+
+producto
+\series default
+ Refinamiento de los requisitos de cliente en lenguaje próximo a los desarrollad
+ores para guiar el diseño del sistema.
+\end_layout
+
+\begin_layout Description
+De
+\begin_inset space ~
+\end_inset
+
+componente
+\begin_inset space ~
+\end_inset
+
+de
+\begin_inset space ~
+\end_inset
+
+producto Especificación completa de un componente de un producto o servicio,
+ incluyendo ajuste, forma y función.
+\end_layout
+
+\begin_layout Description
+De
+\begin_inset space ~
+\end_inset
+
+contexto Estándares aplicables, leyes, políticas, prácticas habituales,
+ decisiones de dirección, rendimiento, etc.
+\end_layout
+
+\begin_layout Description
+Derivados Inferidos de requisitos de contexto o necesarios para especificar
+ un componente.
+ Puede aparecer también en el análisis y diseño de componentes.
+\end_layout
+
+\begin_layout Description
+Asignado
+\begin_inset space ~
+\end_inset
+
+(
+\emph on
+allocated
+\series bold
+\emph default
+)
+\series default
+ Requisito resultante de imponer todo o parte de un requisito de nivel superior
+ a un componente de diseño de nivel inferior, lógico o físico, incluyendo
+ una persona, un consumible, un incremento de la entrega o la arquitectura.
+\end_layout
+
+\begin_layout Description
+Técnicos Propiedades de productos o servicios a ser adquiridos o desarrollados.
+\end_layout
+
+\begin_layout Description
+No
+\begin_inset space ~
+\end_inset
+
+técnicos Afectan a la adquisición o el desarrollo del sistema pero no son
+ propiedades de este.
+\end_layout
+
+\begin_layout Standard
+Los requisitos se pueden definir mediante:
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Lenguaje natural.
+
+\series default
+ Si el texto es preciso, es lo más fácil de entender, pero si la especificación
+ es grande o compleja puede no ser manejable.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Texto y técnicas
+\series default
+ intuitivas o formales, como diagramas, lenguajes de descripción de diseños
+ o especificaciones lógicas formales.
+ Es lo ideal para sistemas de tamaño medio o grande.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Solo técnicas.
+
+\series default
+ Difícil de entender y rastrear.
+\end_layout
+
+\begin_layout Section
+Estándares
+\end_layout
+
+\begin_layout Standard
+La NASA, la ESA y el Departamento de Defensa de EE.UU.
+ tienen sus propios estándares para especificación de requisitos, pero los
+ más usados son:
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+IEEE Std.
+ 830-1998
+\begin_inset Note Note
+status open
+
+\begin_layout Plain Layout
+
+\series bold
+diapo 28
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_body
+\end_document
diff --git a/pds/n.lyx b/pds/n.lyx
index ea7d663..7dc15b5 100644
--- a/pds/n.lyx
+++ b/pds/n.lyx
@@ -273,7 +273,7 @@ filename "n3.lyx"
\end_layout
\begin_layout Chapter
-Modelado del negocio
+Modelado de negocio
\end_layout
\begin_layout Standard
@@ -286,5 +286,33 @@ filename "n4.lyx"
\end_layout
+\begin_layout Chapter
+Modelado de diseño preliminar
+\end_layout
+
+\begin_layout Standard
+\begin_inset CommandInset include
+LatexCommand input
+filename "n5.lyx"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Chapter
+Modelado de diseño completo
+\end_layout
+
+\begin_layout Standard
+\begin_inset CommandInset include
+LatexCommand input
+filename "n6.lyx"
+
+\end_inset
+
+
+\end_layout
+
\end_body
\end_document
diff --git a/pds/n1.lyx b/pds/n1.lyx
index d6c0d5f..ce9005e 100644
--- a/pds/n1.lyx
+++ b/pds/n1.lyx
@@ -5,6 +5,9 @@
\save_transient_properties true
\origin unavailable
\textclass book
+\begin_preamble
+\input{../defs}
+\end_preamble
\use_default_options true
\begin_modules
algorithm2e
@@ -308,44 +311,16 @@ UML
\end_layout
\begin_layout Standard
-\begin_inset ERT
-status open
-
-\begin_layout Plain Layout
-
-
-\backslash
-sremember{TDS}
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
Un
\series bold
+sistema
+\series default
+ es algo que se está desarrollando.
+ Un
+\series bold
modelo
\series default
- es una representación de un aspecto de la realidad obtenida mediante abstracció
-n.
-\end_layout
-
-\begin_layout Standard
-\begin_inset ERT
-status open
-
-\begin_layout Plain Layout
-
-
-\backslash
-eremember
-\end_layout
-
-\end_inset
-
-
+ es una abstracción de un sistema para comprenderlo mejor.
\end_layout
\begin_layout Standard
@@ -486,17 +461,24 @@ eremember
\end_layout
\begin_layout Standard
-UML también añadió mejoras, dio estabilidad al mercado y permitió mejores
- herramientas CASE.
+La notación UML también añadió mejoras, dio estabilidad al mercado y permitió
+ mejores herramientas CASE.
Permite modelar sistemas desde los requisitos hasta los ejecutables, es
escalable a sistemas grandes y los pueden usar tanto personas como máquinas,
debido a un equilibrio entre expresividad y simplicidad.
\end_layout
\begin_layout Standard
-Muchas empresas de software hacen poco o ningún modelado, pues este requiere
- un proceso de desarrollo, personas formadas en las técnicas, tiempo y herramien
-tas.
+Una
+\series bold
+vista
+\series default
+ es una proyección de la estructura del sistema centrada en algún aspecto.
+ Un
+\series bold
+diagrama
+\series default
+ es una representación gráfica de elementos de un modelo.
\end_layout
\begin_layout Standard
@@ -507,7 +489,7 @@ status open
\backslash
-sremember{TDS}
+begin{samepage}
\end_layout
\end_inset
@@ -515,61 +497,52 @@ sremember{TDS}
\end_layout
-\begin_layout Itemize
-Los
-\series bold
-modelos estructurales
-\series default
- [...] son representados por
-\series bold
-diagramas de clases
-\series default
- [...] y [...]
-\series bold
-de objetos
-\series default
- [...].
+\begin_layout Standard
+UML tiene 5 vistas, cada una con varios tipos de diagramas:
\end_layout
-\begin_layout Itemize
-Los
+\begin_layout Enumerate
+
\series bold
-modelos de comportamiento
+Vista de casos de uso
\series default
- [...] son representados por:
+, centrada el comportamiento, con diagramas de casos de uso.
\end_layout
-\begin_deeper
-\begin_layout Itemize
-[...]
-\series bold
-Diagramas de secuencia
-\series default
- [...] y [...]
+\begin_layout Enumerate
+
\series bold
-de
+Vista de diseño
\series default
- [...]
+, centrada en el vocabulario del programa y su funcionalidad, con diagramas
+ de clases, de estados y de interacción.
+\end_layout
+
+\begin_layout Enumerate
+
\series bold
-comunicación
+Vista de procesos
\series default
- [...].
+, con los mismos diagramas que la de diseño pero centrada en el funcionamiento,
+ la escalabilidad y el rendimiento.
\end_layout
-\begin_layout Itemize
-[...]
+\begin_layout Enumerate
+
\series bold
-De estado
+Vista de implementación
\series default
- y [...]
+, con diagramas de estados, de interacción y de componentes.
+\end_layout
+
+\begin_layout Enumerate
+
\series bold
-de actividades
+Vista de despliegue
\series default
-.
- [De casos de uso.]
+, con diagramas de estado, de interacción y de despliegue.
\end_layout
-\end_deeper
\begin_layout Standard
\begin_inset ERT
status open
@@ -578,7 +551,7 @@ status open
\backslash
-eremember
+end{samepage}
\end_layout
\end_inset
@@ -586,13 +559,10 @@ eremember
\end_layout
-\begin_layout Itemize
-Los modelos de implementación son representados por diagramas de componentes
- y diagramas de despliegue.
-\end_layout
-
\begin_layout Standard
-UML es una notación, no un método de desarrollo.
+Muchas empresas de software hacen poco o ningún modelado, pues este requiere
+ un proceso de desarrollo, personas formadas en las técnicas, tiempo y herramien
+tas.
\end_layout
\begin_layout Section
diff --git a/pds/n5.1.puml b/pds/n5.1.puml
new file mode 100644
index 0000000..c591583
--- /dev/null
+++ b/pds/n5.1.puml
@@ -0,0 +1,6 @@
+@startuml
+skinparam style strictuml
+actor ": Sistema" as Actor
+participant ": Sistema" as System
+Actor --> System : actualizarPáginaPrincipal()
+@enduml
diff --git a/pds/n5.1.svg b/pds/n5.1.svg
new file mode 100644
index 0000000..84f4c49
--- /dev/null
+++ b/pds/n5.1.svg
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="143px" preserveAspectRatio="none" style="width:285px;height:143px;" version="1.1" viewBox="0 0 285 143" width="285px" zoomAndPan="magnify"><defs/><g><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="43" x2="43" y1="82.2969" y2="131.4297"/><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="235" x2="235" y1="82.2969" y2="131.4297"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="64" x="8" y="78.9951">: Sistema</text><ellipse cx="43" cy="13" fill="#FEFECE" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><path d="M43,21 L43,48 M30,29 L56,29 M43,48 L30,63 M43,48 L56,63 " fill="none" style="stroke: #A80036; stroke-width: 2.0;"/><rect fill="#FEFECE" height="30.2969" style="stroke: #A80036; stroke-width: 1.5;" width="78" x="196" y="51"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="64" x="203" y="70.9951">: Sistema</text><polygon fill="#A80036" points="223,109.4297,233,113.4297,223,117.4297" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="43" x2="229" y1="113.4297" y2="113.4297"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="168" x="50" y="108.3638">actualizarPáginaPrincipal()</text><!--
+@startuml
+skinparam style strictuml
+actor ": Sistema" as Actor
+participant ": Sistema" as System
+Actor - -> System : actualizarPáginaPrincipal()
+@enduml
+
+PlantUML version 1.2018.13(Mon Nov 26 18:11:51 CET 2018)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11+9-post-Debian-1deb10u1
+Operating System: Linux
+OS Version: 5.7.0-2-pinebookpro-arm64
+Default Encoding: UTF-8
+Language: en
+Country: null
+--></g></svg> \ No newline at end of file
diff --git a/pds/n5.lyx b/pds/n5.lyx
new file mode 100644
index 0000000..c497771
--- /dev/null
+++ b/pds/n5.lyx
@@ -0,0 +1,1901 @@
+#LyX 2.3 created this file. For more info see http://www.lyx.org/
+\lyxformat 544
+\begin_document
+\begin_header
+\save_transient_properties true
+\origin unavailable
+\textclass book
+\begin_preamble
+\input{../defs}
+\end_preamble
+\use_default_options true
+\begin_modules
+algorithm2e
+\end_modules
+\maintain_unincluded_children false
+\language spanish
+\language_package default
+\inputencoding auto
+\fontencoding global
+\font_roman "default" "default"
+\font_sans "default" "default"
+\font_typewriter "default" "default"
+\font_math "auto" "auto"
+\font_default_family default
+\use_non_tex_fonts false
+\font_sc false
+\font_osf false
+\font_sf_scale 100 100
+\font_tt_scale 100 100
+\use_microtype false
+\use_dash_ligatures true
+\graphics default
+\default_output_format default
+\output_sync 0
+\bibtex_command default
+\index_command default
+\paperfontsize default
+\spacing single
+\use_hyperref false
+\papersize default
+\use_geometry false
+\use_package amsmath 1
+\use_package amssymb 1
+\use_package cancel 1
+\use_package esint 1
+\use_package mathdots 1
+\use_package mathtools 1
+\use_package mhchem 1
+\use_package stackrel 1
+\use_package stmaryrd 1
+\use_package undertilde 1
+\cite_engine basic
+\cite_engine_type default
+\biblio_style plain
+\use_bibtopic false
+\use_indices false
+\paperorientation portrait
+\suppress_date false
+\justification true
+\use_refstyle 1
+\use_minted 0
+\index Index
+\shortcut idx
+\color #008000
+\end_index
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\paragraph_indentation default
+\is_math_indent 0
+\math_numbering_side default
+\quotes_style french
+\dynamic_quotes 0
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+\tracking_changes false
+\output_changes false
+\html_math_output 0
+\html_css_as_file 0
+\html_be_strict false
+\end_header
+
+\begin_body
+
+\begin_layout Standard
+El análisis estudia lo que hay que hacer, no cómo hacerlo, y enfatiza la
+ investigación del problema para llegar a unos requisitos que deben cumplir
+ las soluciones.
+ El diseño traduce esto en una representación del software, una solución
+ conceptual que satisface los requisitos.
+ Mientras que el análisis orientado a objetos estudia un problema o un sistema
+ según los conceptos del dominio, como clases conceptuales, asociaciones
+ y cambios de estado, el diseño orientado a objetos especifica una solución
+ según conceptos del software como clases, atributos, métodos y colaboraciones.
+\end_layout
+
+\begin_layout Standard
+Un
+\series bold
+diseño preliminar
+\series default
+ es una visión ideal del sistema obtenida a partir de los modelos de caso
+ de uso y del dominio, que define los subsistemas del software mediante
+ paquetes sin tener en cuenta restricciones tecnológicas ni requisitos no
+ funcionales.
+ Esta se refina en un modelo del diseño completo añadiendo aspectos relacionados
+ con la plataforma tecnológica concreta, patrones de diseño y requisitos
+ no funcionales como los de rendimiento y uso de memoria.
+\end_layout
+
+\begin_layout Section
+Diagrama de secuencia del sistema (DSS)
+\end_layout
+
+\begin_layout Standard
+\begin_inset Note Note
+status open
+
+\begin_layout Plain Layout
+TODO Cada evento da lugar a una operación, que se puede describir mediante
+ un
+\series bold
+contrato
+\series default
+ especificado con una plantilla.
+ Crear una
+\series bold
+colaboración
+\series default
+ por operación y crear el
+\series bold
+modelo de clases del diseño
+\series default
+ a partir del modelo del dominio conforme se definen las operaciones.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Es un diagrama de secuencia UML que muestra los eventos generados por un
+ actor durante un escenario de un caso de uso y las posibles comunicaciones
+ con sistemas externos.
+\end_layout
+
+\begin_layout Standard
+Los sistemas se tratan como cajas negras, teniendo claros sus límites, y
+ se representan como objetos.
+ El actor se nombra como objetos y se representan con un monigote.
+ No se suele indicar el nombre del objeto.
+\end_layout
+
+\begin_layout Standard
+Normalmente se hace un DSS para el escenario principal de un caso de uso
+ y uno para cada escenario alternativo o frecuente, y se elige que el sistema
+ sea el propio software.
+\end_layout
+
+\begin_layout Standard
+Cuando el caso de uso se inicia automáticamente, lo inicia un actor de tipo
+ Sistema.
+
+\begin_inset Note Note
+status open
+
+\begin_layout Plain Layout
+TODO Resto del FAQ.
+\end_layout
+
+\end_inset
+
+ Los argumentos de los mensajes deben ser valores primitivos, no colecciones
+ (salvo cadenas de caracteres, consideradas primitivas) ni objetos del dominio.
+ Para referirse a objetos del dominio se usan identificadores.
+\end_layout
+
+\begin_layout Standard
+\align center
+\begin_inset Float figure
+wide false
+sideways false
+status open
+
+\begin_layout Plain Layout
+\align center
+\begin_inset External
+ template VectorGraphics
+ filename n5.1.svg
+ scale 50
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+\begin_inset Caption Standard
+
+\begin_layout Plain Layout
+DSS de una interacción iniciada automáticamente.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
+Contratos
+\end_layout
+
+\begin_layout Standard
+Cada evento en un DSS da lugar a una operación a implementar.
+ Un
+\series bold
+contrato
+\series default
+ describe una operación mediante:
+\end_layout
+
+\begin_layout Enumerate
+
+\series bold
+Precondiciones
+\series default
+, condiciones que se deben cumplir para poder ejecutar la operación.
+ Generalmente, la declaración del contrato ya restringe los valores que
+ pueden tomar los argumentos mediante tipos.
+\end_layout
+
+\begin_layout Enumerate
+
+\series bold
+Postcondiciones
+\series default
+, valores devueltos si los hay y cambios en el dominio resultantes de ejecutar
+ la operación.
+ Los cambios se suelen indicar como creación y eliminación de objetos con
+ ciertos atributos, creación y eliminación de asociaciones y modificación
+ de atributos, y entendiendo que lo que no se especifica queda constante.
+\end_layout
+
+\begin_layout Standard
+Los contratos sirven cuando hay mucha complejidad y se necesita precisión,
+ o cuando la operación no están clara, pero normalmente no hacen falta ya
+ que la mayoría de detalles se pueden inferir obviamente de los casos de
+ uso.
+\end_layout
+
+\begin_layout Standard
+Una posible plantilla es:
+\end_layout
+
+\begin_layout Description
+Nombre
+\family sans
+\emph on
+nombre_operación
+\emph default
+(
+\family default
+[
+\family sans
+\emph on
+argumento
+\emph default
+:
+\emph on
+Tipo
+\emph default
+,
+\family default
+...]
+\family sans
+)
+\end_layout
+
+\begin_layout Description
+Referencias
+\begin_inset space ~
+\end_inset
+
+cruzadas Opcional, lista de casos de uso en los que puede darse la operación.
+\end_layout
+
+\begin_layout Description
+Precondiciones Suposiciones relevantes.
+ Se pueden nombrar objetos con notación matemática informal y luego usarlos
+ en las postcondiciones.
+\end_layout
+
+\begin_layout Description
+Postcondiciones Cambios en el dominio, con predicados como
+\begin_inset Quotes cld
+\end_inset
+
+se ha creado un objeto tal
+\begin_inset Quotes crd
+\end_inset
+
+ o similares.
+\end_layout
+
+\begin_layout Section
+Patrones
+\lang english
+GRASP
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+sremember{TDS}
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Los objetos de una clase conocen sus datos privados y realizan acciones
+ sobre ellos, como cálculos o creación de otros objetos, y para ello pueden
+ iniciar acciones en otros objetos y coordinarlas.
+ Los
+\series bold
+patrones
+\lang english
+GRASP
+\series default
+\lang spanish
+ ayudan a [...] distribuir responsabilidades entre las clases [...].
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+eremember
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+sremember{TDS}
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+vspace{-1em}
+\backslash
+paragraph{Bajo acoplamiento}
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+[...] Hay acoplamiento entre las clases
+\begin_inset Formula $A$
+\end_inset
+
+ y
+\begin_inset Formula $B$
+\end_inset
+
+ si
+\begin_inset Formula $A$
+\end_inset
+
+ posee un atributo de tipo
+\begin_inset Formula $B$
+\end_inset
+
+, tiene un método con algún parámetro o valor de retorno de tipo
+\begin_inset Formula $B$
+\end_inset
+
+, es subclase directa o indirecta de
+\begin_inset Formula $B$
+\end_inset
+
+ o implementa la interfaz
+\begin_inset Formula $B$
+\end_inset
+
+.
+ Reducir el acoplamiento favorece la reutilización, la comprensión y el
+ mantenimiento del código.
+\end_layout
+
+\begin_layout Paragraph
+Alta cohesión
+\end_layout
+
+\begin_layout Standard
+La
+\series bold
+cohesión
+\series default
+ es el grado de relación entre los elementos de un mismo módulo, como los
+ métodos de una clase, las clases de un paquete, etc.
+ Aumentarla favorece la reutilización, la comprensión y el mantenimiento
+ del código.
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+eremember
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Tipos de cohesión, de mayor a menor:
+\end_layout
+
+\begin_layout Description
+Funcional Se hace una sola función.
+\end_layout
+
+\begin_layout Description
+Secuencial La salida de una tarea sirve como entrada a la siguiente.
+\end_layout
+
+\begin_layout Description
+Comunicacional Las actividades comparten datos.
+\end_layout
+
+\begin_layout Description
+Procedural Actividades distintas en las que el flujo de ejecución va de
+ una a la siguiente.
+\end_layout
+
+\begin_layout Description
+Temporal Actividades distintas relacionadas por el tiempo.
+\end_layout
+
+\begin_layout Description
+Lógica Actividades de la misma categoría lógica.
+\end_layout
+
+\begin_layout Description
+Coincidental
+\begin_inset space ~
+\end_inset
+
+o
+\begin_inset space ~
+\end_inset
+
+casual Actividades distintas sin relaciones significativas entre ellas.]
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+sremember{TDS}
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+vspace{-1em}
+\backslash
+paragraph{Experto [...]}
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Se asigna una responsabilidad a la clase que tiene la información necesaria
+ para cumplirla.
+ Las responsabilidades se distribuyen de forma homogénea, evitando crear
+
+\series bold
+clases dios
+\series default
+ [...].
+ [...]
+\end_layout
+
+\begin_layout Standard
+El
+\series bold
+principio
+\begin_inset Quotes cld
+\end_inset
+
+no hables con extraños
+\begin_inset Quotes crd
+\end_inset
+
+
+\series default
+ desaconseja enviar mensajes a objetos obtenidos de forma indirecta (a través
+ de mensajes a otros objetos) [...].
+\end_layout
+
+\begin_layout Paragraph
+Creador
+\end_layout
+
+\begin_layout Standard
+Una clase
+\begin_inset Formula $A$
+\end_inset
+
+ tiene la responsabilidad de crear instancias de
+\begin_inset Formula $B$
+\end_inset
+
+ si
+\begin_inset Formula $A$
+\end_inset
+
+ es un agregado de instancias de
+\begin_inset Formula $B$
+\end_inset
+
+, contiene o registra instancias de
+\begin_inset Formula $B$
+\end_inset
+
+, hace un uso específico de instancias de
+\begin_inset Formula $B$
+\end_inset
+
+ o proporciona los datos necesarios para inicializar un objeto de
+\begin_inset Formula $B$
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Paragraph
+Controlador
+\end_layout
+
+\begin_layout Standard
+La
+\series bold
+separación modelo-vista
+\series default
+ consiste en que las clases del modelo o dominio no conozcan a las de la
+ vista [...][y las de la vista no incluyan ninguna lógica de negocio], lo que
+ favorece la cohesión, permite desarrollar la vista y el dominio en paralelo
+ y permite conectar otras vistas al modelo, incluso simultáneamente, y ejecutar
+ el modelo en un proceso independiente a la capa de presentación.
+\end_layout
+
+\begin_layout Standard
+Una forma de conseguir esto es con un
+\series bold
+controlador
+\series default
+, una clase [...] intermediaria entre el [...] modelo y la vista, ofreciendo a
+ la vista una interfaz simplificada del dominio para realizar ciertas tareas
+ relacionadas de forma independiente a posibles cambios en el dominio.
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+eremember
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Un
+\series bold
+controlador fachada
+\series default
+ no tiene estado y simplemente expone operaciones.
+ A veces esto resulta en controladores
+\begin_inset Quotes cld
+\end_inset
+
+saturados
+\begin_inset Quotes crd
+\end_inset
+
+ y debemos usar un
+\series bold
+controlador caso de uso
+\series default
+, que se dedica a las operaciones de un solo caso de uso y puede tener estado.
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+sremember{TDS}
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+vspace{-1em}
+\backslash
+paragraph{Polimorfismo}
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Cuando se requiere una misma funcionalidad de varias clases o clases no
+ previstas, se define una interfaz [o superclase] que provea esa funcionalidad
+ y se usan objetos de la interfaz [o superclase], facilitando añadir nuevas
+ alternativas.
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+Se programa
+\series bold
+hacia la interfaz
+\series default
+, evitando declarar variables de clases concretas y usando patrones de creación
+ para conseguir un sistema basado en interfaces y no en implementaciones
+ concretas.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Paragraph
+Indirección
+\end_layout
+
+\begin_layout Standard
+Cuando no sea deseable un acoplamiento directo entre dos clases, crear una
+ clase intermediaria que proporcione una interfaz más adecuada a cada parte.
+\begin_inset Foot
+status open
+
+\begin_layout Plain Layout
+Teorema Fundamental de la Ingeniería de Software: Todo problema se puede
+ solucionar con un nivel más de indirección, salvo el problema de demasiados
+ niveles de indirección.
+\end_layout
+
+\end_inset
+
+ [Muchos patrones de diseño GoF, como adaptador, fachada o mediador, usan
+ indirección.]
+\end_layout
+
+\begin_layout Paragraph
+Variaciones protegidas
+\end_layout
+
+\begin_layout Standard
+Proteger a elementos del código de las variaciones de otros [...], por ejemplo
+ mediante interfaces.
+ [Es un principio fundamental y se puede usar, por ejemplo, para lectura
+ de datos de fuentes externas o búsqueda de servicios.][...]
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Principio de ocultación de la información
+\series default
+ [...].
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Principio abierto-cerrado
+\series default
+ [...].
+\end_layout
+
+\begin_layout Paragraph
+Servicios [o fabricaciones puras]
+\end_layout
+
+\begin_layout Standard
+Encapsulan un proceso o transformación en el dominio que no es una responsabilid
+ad natural de otra clase.
+ No tienen estado.
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+eremember
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Algunos servicios aparecen en patrones de diseño, como pueden ser:
+\end_layout
+
+\begin_layout Itemize
+Fábricas, para crear objetos complejos.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Repositorios
+\series default
+ o catálogos, fachadas a una colección de objetos con identidad con métodos
+ para buscar, guardar y borrar objetos, usadas para evitar el acoplamiento
+ de las clases de dominio con la base de datos concreta.
+\end_layout
+
+\begin_deeper
+\begin_layout Standard
+Se puede definir un repositorio por concepto o uno genérico (con plantillas),
+ y la definición de las interfaces de los repositorios, pero no sus implementaci
+ones, forman parte de la capa de dominio.
+\end_layout
+
+\begin_layout Standard
+En esta asignatura, el acceso a los repositorios se hace solo desde el controlad
+or y los repositorios no crean los objetos.
+\end_layout
+
+\end_deeper
+\begin_layout Itemize
+
+\series bold
+Servicios de dominio
+\series default
+, que encapsulan reglas de negocio que afectan a varios conceptos.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Servicios de aplicación
+\series default
+, que encapsulan operaciones como accesos al exterior.
+\end_layout
+
+\begin_layout Standard
+Si se abusa de los servicios, se crea un diseño centrado en procesos o funciones
+ y no en objetos,
+\begin_inset Foot
+status open
+
+\begin_layout Plain Layout
+La conclusión lógica de esto es que hay que abusar de los servicios para
+ así favorecer la programación funcional.
+\end_layout
+
+\end_inset
+
+ por lo que hay que vigilar si hay fabricaciones puras con un único método.
+\end_layout
+
+\begin_layout Section
+Colaboraciones
+\end_layout
+
+\begin_layout Standard
+Una
+\series bold
+colaboración
+\series default
+ es una secuencia de intercambios de mensajes para implementar una operación,
+ expresada con un diagrama UML de interacción.
+ El diseño de colaboraciones es la parte más difícil del análisis y diseño
+ orientado a objetos y es el punto de partida para la programación.
+\end_layout
+
+\begin_layout Standard
+Hay dos tipos de diagramas de interacción: los diagramas de secuencia, centrados
+ en la cronología de los mensajes, y los de colaboración o comunicación,
+ centrados en la organización estructural de los objetos.
+\end_layout
+
+\begin_layout Standard
+En los de colaboración, podemos indicar la cronología mediante numeración
+ secuencial o jerárquica.
+ También podemos mezclar ambas numeraciones, usando la secuencial en general
+ por ser más sencilla y la jerárquica en caso de ambigüedad, como al indicar
+ el interior de bucles y operaciones condicionales.
+ En diagramas de secuencia se puede hacer esto, pero la ambigüedad ya la
+ resuelven las líneas de activación.
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+sremember{TDS}
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Tipos de mensaje:
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Simple
+\series default
+:
+\family sans
+\emph on
+método
+\emph default
+(
+\family default
+[
+\family sans
+\emph on
+argumento
+\emph default
+,
+\family default
+...]
+\family sans
+)
+\family default
+.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+De asignación
+\series default
+:
+\family sans
+\emph on
+variable
+\emph default
+ :=
+\emph on
+método
+\emph default
+(
+\family default
+[
+\family sans
+\emph on
+argumento
+\emph default
+,
+\family default
+...]
+\family sans
+)
+\family default
+.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+De creación
+\series default
+:
+\family sans
+\lang english
+
+\begin_inset Quotes cld
+\end_inset
+
+create
+\begin_inset Quotes crd
+\end_inset
+
+
+\family default
+\lang spanish
+[[
+\family sans
+(
+\emph on
+argumento
+\emph default
+,
+\family default
+...
+\family sans
+)
+\family default
+]].
+ [...]
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+De destrucción
+\series default
+:
+\family sans
+\lang english
+
+\begin_inset Quotes cld
+\end_inset
+
+destroy
+\begin_inset Quotes crd
+\end_inset
+
+
+\family default
+\lang spanish
+.
+ [...][No lo usaremos ya que Java tiene recolección de basura.]
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+De condición
+\series default
+:
+\family sans
+[
+\emph on
+condición
+\emph default
+]
+\emph on
+mensaje
+\family default
+\emph default
+.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+De iteración
+\series default
+:
+\family sans
+*
+\emph on
+mensaje
+\family default
+\emph default
+,
+\family sans
+[
+\emph on
+multiplicidad
+\emph default
+]
+\emph on
+mensaje
+\family default
+\emph default
+.
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+eremember
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+En esta asignatura las colaboraciones consisten en programar en UML, por
+ lo que añadimos una sintaxis para la iteración,
+\family sans
+[*
+\emph on
+var
+\emph default
+
+\lang english
+IN
+\lang spanish
+
+\emph on
+colección
+\emph default
+
+\family default
+[(
+\family sans
+\lang english
+WHILE
+\family default
+\lang spanish
+|
+\family sans
+\lang english
+UNTIL
+\family default
+\lang spanish
+)
+\family sans
+\emph on
+condición
+\family default
+\emph default
+]
+\family sans
+]
+\emph on
+mensaje
+\family default
+\emph default
+.
+ Realmente te puedes inventar la sintaxis siempre que se entienda.
+\end_layout
+
+\begin_layout Standard
+Además, se pueden añadir notas en UML a los objetos para aclarar lo que
+ ocurre entre mensajes en una interacción (llamadas a métodos estáticos,
+ asignaciones de atributos, etc.).
+\end_layout
+
+\begin_layout Standard
+Los objetos se representan con su tipo, pudiendo usar añadir el nombre como
+ aclaración o si tenemos que referirnos a estos en otra parte.
+ Si solo hace falta que el objeto cumpla cierta interfaz, aun cuando este
+ reciba un mensaje
+\lang english
+
+\begin_inset Quotes cld
+\end_inset
+
+create
+\begin_inset Quotes crd
+\end_inset
+
+
+\lang spanish
+, el objeto es el del tipo interfaz, y se añade encima el estereotipo
+\lang english
+
+\begin_inset Quotes cld
+\end_inset
+
+interface
+\begin_inset Quotes crd
+\end_inset
+
+
+\lang spanish
+.
+\end_layout
+
+\begin_layout Standard
+Se puede simplificar inventando operaciones de conveniencia en las clases
+ e interfaces de Java, pero cuando un objeto se crea, este debe inicializar
+ sus atributos y por tanto crear un objeto por atributo no primitivo cuyo
+ valor no venga dado al constructor.
+\end_layout
+
+\begin_layout Standard
+Para diseñar una colaboración, primero escogemos un controlador de acuerdo
+ al contexto de la operación en el sistema.
+ Este recupera de los repositorios los objetos correspondientes a los identifica
+dores; delega la tarea según el patrón experto o el creador, y si hace falta
+ guarda los objetos creados.
+\end_layout
+
+\begin_layout Standard
+El creador será una clase conectada en el modelo de dominio a la clase de
+ la instancia a crear o, si ninguna de las clases conectadas es apropiada,
+ el propio controlador.
+\end_layout
+
+\begin_layout Standard
+En el inicio de la aplicación, se suele crear un objeto de dominio inicial
+ que se encarga de crear los objetos de dominio que dependen de él.
+\end_layout
+
+\begin_layout Section
+Modelo de clases de diseño
+\end_layout
+
+\begin_layout Standard
+Un diagrama de clases puede ser conceptual (de conceptos),
+\series bold
+de especificación
+\series default
+ (de tipos que representan la Interfaz
+\begin_inset Foot
+status open
+
+\begin_layout Plain Layout
+Está en mayúsculas para indicar que se trata de una interfaz en el sentido
+ de una serie de estructuras y funciones a implementar, no necesariamente
+ a través de una interfaz Java.
+\end_layout
+
+\end_inset
+
+) o
+\series bold
+de implementación
+\series default
+ (que representa las clases tal como se implementan).
+\end_layout
+
+\begin_layout Standard
+El modelo de clases del diseño es de especificación y se crea a partir del
+ modelo conceptual y las colaboraciones.
+ Para empezar, se toma el diagrama de clases conceptual, usando los nombres
+ de las clases del dominio para reducir el salto entre problema y solución,
+ y se añaden las clases y los métodos usados en las colaboraciones y los
+ atributos usados en los contratos.
+ Puede haber conceptos en el modelo conceptual que no aparezcan en el de
+ diseño.
+\end_layout
+
+\begin_layout Standard
+Los atributos de las clases de diseño tienen tipo y el
+\begin_inset Quotes cld
+\end_inset
+
+
+\family sans
+-
+\family default
+
+\begin_inset Quotes crd
+\end_inset
+
+ inicial se cambia por su
+\series bold
+visibilidad
+\series default
+,
+\family sans
+-
+\family default
+ para privada,
+\family sans
+#
+\family default
+ para protegida,
+\family sans
++
+\family default
+ para pública y
+\family sans
+~
+\family default
+ para nivel de paquete.
+ También pueden tener propiedades indicadas al final con
+\family sans
+{
+\emph on
+propiedad
+\emph default
+}
+\family default
+, como
+\family sans
+{readOnly}
+\family default
+ o
+\family sans
+{addOnly}
+\family default
+.
+ Los atributos de clase van subrayados, y los calculados se almacenan.
+\end_layout
+
+\begin_layout Standard
+Las clases tienen operaciones con formato [
+\family sans
+\emph on
+visibilidad
+\family default
+\emph default
+]
+\family sans
+nombre(
+\family default
+[
+\family sans
+\emph on
+parámetro
+\emph default
+:
+\emph on
+Tipo
+\emph default
+,
+\family default
+ ...]
+\family sans
+)
+\family default
+[
+\family sans
+: TipoDevuelto
+\family default
+] (
+\family sans
+{
+\emph on
+propiedad
+\emph default
+}
+\family default
+)*, y propiedades como
+\family sans
+{isQuery}
+\family default
+,
+\family sans
+{sequential}
+\family default
+ o
+\family sans
+{concurrent}
+\family default
+.
+\end_layout
+
+\begin_layout Standard
+Un objeto
+\begin_inset Formula $B$
+\end_inset
+
+ es
+\series bold
+visible
+\series default
+ por uno
+\begin_inset Formula $A$
+\end_inset
+
+ si
+\begin_inset Formula $B$
+\end_inset
+
+ es un atributo de
+\begin_inset Formula $A$
+\end_inset
+
+, un parámetro de un mensaje recibido por
+\begin_inset Formula $A$
+\end_inset
+
+, un valor devuelto por una llamada hecha por
+\begin_inset Formula $A$
+\end_inset
+
+ o accesible globalmente.
+ Para que
+\begin_inset Formula $A$
+\end_inset
+
+ envíe un mensaje a
+\begin_inset Formula $B$
+\end_inset
+
+,
+\begin_inset Formula $B$
+\end_inset
+
+ debe ser visible por
+\begin_inset Formula $A$
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Standard
+Si
+\begin_inset Formula $A$
+\end_inset
+
+ envía un mensaje a
+\begin_inset Formula $B$
+\end_inset
+
+, crea una instancia de
+\begin_inset Formula $B$
+\end_inset
+
+ o necesita una conexión con
+\begin_inset Formula $B$
+\end_inset
+
+,
+\begin_inset Formula $A$
+\end_inset
+
+ tiene
+\series bold
+navegabilidad
+\series default
+ con
+\begin_inset Formula $B$
+\end_inset
+
+.
+ Las asociaciones tienen navegabilidad si, a través de ellas, los objetos
+ de una clase tienen navegabilidad con los de la otra pero no al revés,
+ lo que se indica con una punta de flecha en el extremo de la asociación
+ al que se navega desde el otro.
+\end_layout
+
+\begin_layout Standard
+Una
+\series bold
+dependencia
+\series default
+ indica que los cambios en la definición de una clase
+\begin_inset Formula $B$
+\end_inset
+
+ pueden afectar a la implementación de
+\begin_inset Formula $A$
+\end_inset
+
+, lo que se indica con una flecha punteada de
+\begin_inset Formula $A$
+\end_inset
+
+ a
+\begin_inset Formula $B$
+\end_inset
+
+.
+ Solo se indican las dependencias importantes, y nunca si la visibilidad
+ es de atributo.
+\end_layout
+
+\begin_layout Standard
+Una
+\series bold
+asociación cualificada
+\series default
+ es una en que una de las partes accede a la otra a través de un diccionario
+ o similar.
+ Se indica situando un rectángulo entre la parte que accede así a la otra
+ y su extremo de la asociación, sin espacio.
+ El nombre de la clave, como parámetro, está dentro del rectángulo, y el
+ valor es de la otra parte.
+\end_layout
+
+\begin_layout Standard
+Una
+\series bold
+interfaz
+\series default
+ es un conjunto de operaciones que caracteriza el comportamiento de un elemento.
+ Se define como una clase con estereotipo
+\lang english
+
+\begin_inset Quotes cld
+\end_inset
+
+interface
+\begin_inset Quotes crd
+\end_inset
+
+
+\lang spanish
+ o con un pequeño círculo con el nombre de la interfaz.
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+En el segundo caso, una línea que conecta una clase con la interfaz indica
+ que la clase implementa la interfaz, y una línea que conecta una clase
+ con un arco de circunferencia que rodea el círculo indica una dependencia
+ de la clase en la interfaz.
+\end_layout
+
+\begin_layout Plain Layout
+En
+\emph on
+\lang english
+Unified Process
+\emph default
+\lang spanish
+ podemos distinguir entre:
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Objetos entidad
+\series default
+ o de dominio (
+\lang english
+
+\begin_inset Quotes cld
+\end_inset
+
+entity
+\begin_inset Quotes crd
+\end_inset
+
+
+\lang spanish
+), con un círculo tachado, igual que se tacha un caso de uso al indicar
+ que es de negocio.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Objetos control
+\series default
+ o controladores (
+\lang english
+
+\begin_inset Quotes cld
+\end_inset
+
+control
+\begin_inset Quotes crd
+\end_inset
+
+
+\lang spanish
+), con un círculo con una flecha a la izquierda en su parte superior.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Objetos frontera
+\series default
+ o interfaces de usuario (
+\lang english
+
+\begin_inset Quotes cld
+\end_inset
+
+boundary
+\begin_inset Quotes crd
+\end_inset
+
+
+\lang spanish
+), con un círculo unido a la izquierda por un segmento corto horizontal
+ a uno vertical.
+\end_layout
+
+\begin_layout Plain Layout
+En todos los casos el nombre de la clase va debajo.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Se puede, pero no se suele, indicar que una clase lanza una excepción añadiendo
+ una dependencia con estereotipo
+\lang english
+
+\begin_inset Quotes cld
+\end_inset
+
+send
+\begin_inset Quotes crd
+\end_inset
+
+
+\lang spanish
+ de esta clase a una con estereotipo
+\lang english
+
+\begin_inset Quotes cld
+\end_inset
+
+exception
+\begin_inset Quotes crd
+\end_inset
+
+
+\lang spanish
+.
+\end_layout
+
+\begin_layout Section
+Diagramas de estados
+\end_layout
+
+\begin_layout Standard
+Complementan el modelo de datos y el funcional con una máquina de estados
+ determinista que describe el comportamiento de las instancias de una clase.
+\end_layout
+
+\begin_layout Standard
+Una transición entre estados se indica con una flecha entre los estados
+ etiquetada con
+\family sans
+\emph on
+evento
+\emph default
+
+\family default
+[
+\family sans
+[
+\emph on
+condición
+\emph default
+]
+\family default
+]
+\family sans
+
+\family default
+[
+\family sans
+/
+\emph on
+acción
+\family default
+\emph default
+], donde la
+\family sans
+\emph on
+acción
+\family default
+\emph default
+ es una expresión de código o un envío de mensaje de la forma
+\family sans
+^
+\emph on
+otro_objeto
+\emph default
+.
+\emph on
+mensaje
+\emph default
+(
+\family default
+[
+\family sans
+\emph on
+argumento
+\emph default
+,
+\family default
+...]
+\family sans
+)
+\family default
+.
+ Las transiciones son atómicas y consisten en que se recibe el evento y
+ se ejecuta la acción correspondiente si la hay, mientras se cambia de estado.
+\end_layout
+
+\begin_layout Standard
+Un estado se representa con un rectángulo redondeados con el nombre del
+ estado, seguido opcionalmente por una o más de:
+\end_layout
+
+\begin_layout Itemize
+Acciones de entrada,
+\family sans
+\series bold
+entry
+\series default
+ /
+\emph on
+acción
+\family default
+\emph default
+, y de salida,
+\family sans
+\series bold
+exit
+\series default
+ /
+\emph on
+acción
+\family default
+\emph default
+.
+\end_layout
+
+\begin_layout Itemize
+Transiciones internas, indicadas solo con la etiqueta, que no cambian el
+ estado.
+\end_layout
+
+\begin_layout Itemize
+Subestados, con un diagrama de estados dentro del estado.
+ Si aparece, el estado es
+\series bold
+compuesto
+\series default
+.
+\end_layout
+
+\begin_layout Itemize
+Actividades, en segundo plano,
+\family sans
+\series bold
+do
+\series default
+ /
+\emph on
+acción
+\family default
+\emph default
+.
+\end_layout
+
+\begin_layout Itemize
+Eventos diferidos,
+\family sans
+\emph on
+evento
+\emph default
+ /
+\series bold
+defer
+\family default
+\series default
+.
+\end_layout
+
+\begin_layout Standard
+Tipos de evento:
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Llamada:
+\series default
+ Se recibe un mensaje,
+\family sans
+\emph on
+método
+\emph default
+(
+\family default
+[
+\family sans
+\emph on
+parámetro
+\emph default
+,
+\family default
+...]
+\family sans
+)
+\family default
+.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Señal:
+\series default
+ Se recibe una señal asíncrona,
+\family sans
+\emph on
+señal
+\emph default
+(
+\family default
+[
+\family sans
+\emph on
+parámetro
+\emph default
+,
+\family default
+...]
+\family sans
+)
+\family default
+.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Tiempo:
+\series default
+ Pasa un tiempo absoluto o desde que se produjo un evento, normalmente la
+ última transición del objeto,
+\family sans
+\lang english
+after
+\lang spanish
+ (
+\emph on
+tiempo_o_duración
+\emph default
+)
+\family default
+,
+\family sans
+\lang english
+after
+\lang spanish
+
+\emph on
+duración
+\emph default
+ desde
+\emph on
+algo
+\family default
+\emph default
+.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Cambio:
+\series default
+ Se cumple una condición,
+\family sans
+\lang english
+when
+\lang spanish
+ (
+\emph on
+condición
+\emph default
+)
+\family default
+.
+\end_layout
+
+\begin_layout Standard
+Los diagramas de estados tienen un
+\series bold
+estado inicial
+\series default
+, único si no contamos subestados, un pseudoestado que se representa como
+ en los diagramas de actividades y que tiene una única transición, saliente,
+ con etiqueta opcional
+\family sans
+/
+\emph on
+acción
+\family default
+\emph default
+.
+\end_layout
+
+\begin_layout Standard
+Los estados compuestos tienen dentro un
+\series bold
+estado final
+\series default
+, representado como en los diagramas de actividades y único si no contamos
+ subestados de estados compuestos del subdiagrama, aunque puede representarse
+ varias veces.
+ No tiene transiciones salientes, y al entrar el objeto es susceptible de
+ las transiciones salientes del estado compuesto.
+ El diagrama principal puede tener un estado final, y al llegar a este se
+ destruye el objeto.
+\end_layout
+
+\begin_layout Standard
+Un estado compuesto puede tener, en vez transiciones salientes normales,
+ una única transición saliente sin evento, que se ejecuta al llegar a su
+ estado final.
+\end_layout
+
+\begin_layout Standard
+Un diagrama de estados se puede usar para un caso de uso, una clase conceptual
+ o de diseño o incluso un sistema completo.
+\end_layout
+
+\end_body
+\end_document
diff --git a/pds/n6.1.puml b/pds/n6.1.puml
new file mode 100644
index 0000000..b362c2c
--- /dev/null
+++ b/pds/n6.1.puml
@@ -0,0 +1,14 @@
+@startuml
+left to right direction
+component Bot <<executable>>
+component GraphicsMagick
+component telebot
+component libcurl
+() HTTP
+
+GraphicsMagick -0)- Bot : MagickWand
+Bot -(0- telebot : TelegramAPI
+telebot ..> HTTP : <<use>>
+libcurl - HTTP
+Bot ..> HTTP : <<use>>
+@enduml
diff --git a/pds/n6.1.svg b/pds/n6.1.svg
new file mode 100644
index 0000000..cdb6aa6
--- /dev/null
+++ b/pds/n6.1.svg
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="161px" preserveAspectRatio="none" style="width:774px;height:161px;" version="1.1" viewBox="0 0 774 161" width="774px" zoomAndPan="magnify"><defs><filter height="300%" id="ft6xnqcbhgpfa" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><!--entity Bot--><rect fill="#FEFECE" filter="url(#ft6xnqcbhgpfa)" height="52.5938" style="stroke: #A80036; stroke-width: 1.5;" width="115" x="276" y="61.5"/><rect fill="#FEFECE" height="5" style="stroke: #A80036; stroke-width: 1.5;" width="10" x="271" y="66.5"/><rect fill="#FEFECE" height="5" style="stroke: #A80036; stroke-width: 1.5;" width="10" x="271" y="104.0938"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="95" x="286" y="84.4951">«executable»</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="24" x="321.5" y="100.792">Bot</text><!--entity GraphicsMagick--><rect fill="#FEFECE" filter="url(#ft6xnqcbhgpfa)" height="36.2969" style="stroke: #A80036; stroke-width: 1.5;" width="129" x="6" y="70"/><rect fill="#FEFECE" height="5" style="stroke: #A80036; stroke-width: 1.5;" width="10" x="1" y="75"/><rect fill="#FEFECE" height="5" style="stroke: #A80036; stroke-width: 1.5;" width="10" x="1" y="96.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="109" x="16" y="92.9951">GraphicsMagick</text><!--entity telebot--><rect fill="#FEFECE" filter="url(#ft6xnqcbhgpfa)" height="36.2969" style="stroke: #A80036; stroke-width: 1.5;" width="69" x="533" y="114"/><rect fill="#FEFECE" height="5" style="stroke: #A80036; stroke-width: 1.5;" width="10" x="528" y="119"/><rect fill="#FEFECE" height="5" style="stroke: #A80036; stroke-width: 1.5;" width="10" x="528" y="140.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="49" x="543" y="136.9951">telebot</text><!--entity libcurl--><rect fill="#FEFECE" filter="url(#ft6xnqcbhgpfa)" height="36.2969" style="stroke: #A80036; stroke-width: 1.5;" width="60" x="703" y="8"/><rect fill="#FEFECE" height="5" style="stroke: #A80036; stroke-width: 1.5;" width="10" x="698" y="13"/><rect fill="#FEFECE" height="5" style="stroke: #A80036; stroke-width: 1.5;" width="10" x="698" y="34.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="40" x="713" y="30.9951">libcurl</text><!--entity HTTP--><ellipse cx="733" cy="88" fill="#FEFECE" filter="url(#ft6xnqcbhgpfa)" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="37" x="714.5" y="117.9951">HTTP</text><!--link GraphicsMagick to Bot--><path d="M135.1739,88 C178.2163,88 234.2683,88 275.7981,88 " fill="none" id="GraphicsMagick-Bot" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="79" x="166" y="84.0669">MagickWand</text><path d="M213.1243,95.0711 A10,10 0 0 0 213.1243 80.9289" fill="#FFFFFF" style="stroke: #A80036; stroke-width: 1.5;"/><ellipse cx="206.0532" cy="88" fill="#FFFFFF" rx="6" ry="6" style="stroke: #A80036; stroke-width: 1.5;"/><!--link Bot to telebot--><path d="M391.0425,98.82 C435.4284,107.166 495.3631,118.4358 532.7087,125.458 " fill="none" id="Bot-telebot" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="80" x="422" y="100.0669">TelegramAPI</text><path d="M458.8731,104.3794 A10,10 0 0 0 456.2597 118.278" fill="#FFFFFF" style="stroke: #A80036; stroke-width: 1.5;"/><ellipse cx="464.5157" cy="112.6354" fill="#FFFFFF" rx="6" ry="6" style="stroke: #A80036; stroke-width: 1.5;"/><!--link telebot to HTTP--><path d="M602.1942,122.7762 C638.2984,113.1775 693.0801,98.6132 718.766,91.7843 " fill="none" id="telebot-HTTP" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="723.7883,90.449,714.0627,88.8958,718.9562,91.7337,716.1182,96.6272,723.7883,90.449" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="39" x="633" y="100.0669">«use»</text><!--link libcurl to HTTP--><path d="M733,44.1489 C733,55.6982 733,67.2476 733,78.7969 " fill="none" id="libcurl-HTTP" style="stroke: #A80036; stroke-width: 1.0;"/><!--link Bot to HTTP--><path d="M391.3275,81.2073 C401.2135,80.2882 411.3918,79.4928 421,79 C532.853,73.2627 561.3102,70.6699 673,79 C688.6674,80.1685 706.4461,83.0306 718.5572,85.2161 " fill="none" id="Bot-HTTP" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="723.695,86.1642,715.5702,80.5975,718.778,85.2569,714.1186,88.4647,723.695,86.1642" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="39" x="548" y="70.0669">«use»</text><!--
+@startuml
+left to right direction
+component Bot <<executable>>
+component GraphicsMagick
+component telebot
+component libcurl
+() HTTP
+
+GraphicsMagick -0)- Bot : MagickWand
+Bot -(0- telebot : TelegramAPI
+telebot ..> HTTP : <<use>>
+libcurl - HTTP
+Bot ..> HTTP : <<use>>
+@enduml
+
+PlantUML version 1.2018.13(Mon Nov 26 18:11:51 CET 2018)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11+9-post-Debian-1deb10u1
+Operating System: Linux
+OS Version: 5.7.0-2-pinebookpro-arm64
+Default Encoding: UTF-8
+Language: en
+Country: null
+--></g></svg> \ No newline at end of file
diff --git a/pds/n6.2.puml b/pds/n6.2.puml
new file mode 100644
index 0000000..1ba71c7
--- /dev/null
+++ b/pds/n6.2.puml
@@ -0,0 +1,21 @@
+@startuml
+left to right direction
+node ": GenericPC" as PC <<client workstation>> {
+ node ": WebBrowser" as Browser <<browser>> {
+ rectangle WebClient <<artifact>>
+ }
+}
+
+node ": Raspberry Pi 4" as Server <<server>> {
+ node ": Raspbian" as Raspbian <<OS>> {
+ node ": PostgreSQL 12" as DB <<database>>
+ node ": Apache 2" as Apache <<web server>>
+ artifact ": MusicManager" as Manager <<artifact>>
+ }
+}
+
+Browser -- Apache : HTTPS
+WebClient -- Manager : DASH
+Apache - Manager : FastCGI
+Manager -- DB : SQL
+@enduml
diff --git a/pds/n6.2.svg b/pds/n6.2.svg
new file mode 100644
index 0000000..745d22b
--- /dev/null
+++ b/pds/n6.2.svg
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="311px" preserveAspectRatio="none" style="width:918px;height:311px;" version="1.1" viewBox="0 0 918 311" width="918px" zoomAndPan="magnify"><defs><filter height="300%" id="fllsqz6c3or4r" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><!--cluster PC--><polygon fill="#FFFFFF" filter="url(#fllsqz6c3or4r)" points="6,77,16,67,220,67,220,258,210,268,6,268,6,77" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="210" x2="219" y1="77" y2="68"/><line style="stroke: #000000; stroke-width: 1.5;" x1="6" x2="210" y1="77" y2="77"/><line style="stroke: #000000; stroke-width: 1.5;" x1="210" x2="210" y1="77" y2="268"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="138" x="40" y="92.9951">«client workstation»</text><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="94" x="62" y="109.292">: GenericPC</text><!--cluster Browser--><polygon fill="#FFFFFF" filter="url(#fllsqz6c3or4r)" points="18,125,28,115,207,115,207,250,197,260,18,260,18,125" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="197" x2="206" y1="125" y2="116"/><line style="stroke: #000000; stroke-width: 1.5;" x1="18" x2="197" y1="125" y2="125"/><line style="stroke: #000000; stroke-width: 1.5;" x1="197" x2="197" y1="125" y2="260"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="73" x="72" y="140.9951">«browser»</text><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="113" x="52" y="157.292">: WebBrowser</text><!--cluster Server--><polygon fill="#FFFFFF" filter="url(#fllsqz6c3or4r)" points="299,26,309,16,896,16,896,289,886,299,299,299,299,26" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="886" x2="895" y1="26" y2="17"/><line style="stroke: #000000; stroke-width: 1.5;" x1="299" x2="886" y1="26" y2="26"/><line style="stroke: #000000; stroke-width: 1.5;" x1="886" x2="886" y1="26" y2="299"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="61" x="563" y="41.9951">«server»</text><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="126" x="530.5" y="58.292">: Raspberry Pi 4</text><!--cluster Raspbian--><polygon fill="#FFFFFF" filter="url(#fllsqz6c3or4r)" points="307,74,317,64,888,64,888,281,878,291,307,291,307,74" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="878" x2="887" y1="74" y2="65"/><line style="stroke: #000000; stroke-width: 1.5;" x1="307" x2="878" y1="74" y2="74"/><line style="stroke: #000000; stroke-width: 1.5;" x1="878" x2="878" y1="74" y2="291"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="38" x="574.5" y="89.9951">«OS»</text><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="82" x="552.5" y="106.292">: Raspbian</text><!--entity WebClient--><rect fill="#FEFECE" filter="url(#fllsqz6c3or4r)" height="52.5938" style="stroke: #000000; stroke-width: 1.5;" width="90" x="67" y="198.5"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="64" x="80" y="221.4951">«artifact»</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="70" x="77" y="237.792">WebClient</text><!--entity DB--><polygon fill="#FEFECE" filter="url(#fllsqz6c3or4r)" points="728,226.5,738,216.5,880,216.5,880,269.0938,870,279.0938,728,279.0938,728,226.5" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="870" x2="879" y1="226.5" y2="217.5"/><line style="stroke: #000000; stroke-width: 1.5;" x1="728" x2="870" y1="226.5" y2="226.5"/><line style="stroke: #000000; stroke-width: 1.5;" x1="870" x2="870" y1="226.5" y2="279.0938"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="81" x="758.5" y="249.4951">«database»</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="112" x="743" y="265.792">: PostgreSQL 12</text><!--entity Apache--><polygon fill="#FEFECE" filter="url(#fllsqz6c3or4r)" points="317.5,122.5,327.5,112.5,451.5,112.5,451.5,165.0938,441.5,175.0938,317.5,175.0938,317.5,122.5" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="441.5" x2="450.5" y1="122.5" y2="113.5"/><line style="stroke: #000000; stroke-width: 1.5;" x1="317.5" x2="441.5" y1="122.5" y2="122.5"/><line style="stroke: #000000; stroke-width: 1.5;" x1="441.5" x2="441.5" y1="122.5" y2="175.0938"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="94" x="332.5" y="145.4951">«web server»</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="74" x="342.5" y="161.792">: Apache 2</text><!--entity Manager--><rect fill="#FEFECE" filter="url(#fllsqz6c3or4r)" height="55.5938" style="stroke: #000000; stroke-width: 1.5;" width="139" x="315" y="227"/><polygon fill="#FEFECE" points="437,232,437,246,449,246,449,238,443,232,437,232" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="443" x2="443" y1="232" y2="238"/><line style="stroke: #000000; stroke-width: 1.5;" x1="449" x2="443" y1="238" y2="238"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="64" x="347.5" y="252.9951">«artifact»</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="109" x="325" y="269.292">: MusicManager</text><!--link Browser to Apache--><path d="M207.3535,156.3515 C207.6869,156.3283 208.0206,156.305 208.3547,156.2817 C209.6911,156.1885 211.033,156.0949 212.38,156.001 C215.074,155.8132 217.7881,155.6239 220.5178,155.4336 C231.4363,154.6723 242.6029,153.8937 253.7209,153.1185 C275.9569,151.5682 297.9982,150.0313 317.4709,148.6736 " fill="none" id="Browser-Apache" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="41" x="243" y="148.0669">HTTPS</text><!--link WebClient to Manager--><path d="M157.3037,229.9876 C200.2089,234.7111 265.2573,241.8724 314.7726,247.3236 " fill="none" id="WebClient-Manager" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="38" x="244.5" y="236.0669">DASH</text><!--link Apache to Manager--><path d="M384.5,175.5298 C384.5,191.7367 384.5,211.3193 384.5,226.99 " fill="none" id="Apache-Manager" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="49" x="348.5" y="205.8169">FastCGI</text><!--link Manager to DB--><path d="M454.1485,249.8943 C473.9618,248.8178 495.5714,248 515.5,248 C515.5,248 515.5,248 666.5,248 C686.4327,248 707.9908,248 727.9934,248 " fill="none" id="Manager-DB" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="26" x="578" y="244.0669">SQL</text><!--
+@startuml
+left to right direction
+node ": GenericPC" as PC <<client workstation>> {
+ node ": WebBrowser" as Browser <<browser>> {
+ rectangle WebClient <<artifact>>
+ }
+}
+
+node ": Raspberry Pi 4" as Server <<server>> {
+ node ": Raspbian" as Raspbian <<OS>> {
+ node ": PostgreSQL 12" as DB <<database>>
+ node ": Apache 2" as Apache <<web server>>
+ artifact ": MusicManager" as Manager <<artifact>>
+ }
+}
+
+Browser - - Apache : HTTPS
+WebClient - - Manager : DASH
+Apache - Manager : FastCGI
+Manager - - DB : SQL
+@enduml
+
+PlantUML version 1.2018.13(Mon Nov 26 18:11:51 CET 2018)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11+9-post-Debian-1deb10u1
+Operating System: Linux
+OS Version: 5.7.0-2-pinebookpro-arm64
+Default Encoding: UTF-8
+Language: en
+Country: null
+--></g></svg> \ No newline at end of file
diff --git a/pds/n6.lyx b/pds/n6.lyx
new file mode 100644
index 0000000..809c57e
--- /dev/null
+++ b/pds/n6.lyx
@@ -0,0 +1,700 @@
+#LyX 2.3 created this file. For more info see http://www.lyx.org/
+\lyxformat 544
+\begin_document
+\begin_header
+\save_transient_properties true
+\origin unavailable
+\textclass book
+\begin_preamble
+\input{../defs}
+\end_preamble
+\use_default_options true
+\begin_modules
+algorithm2e
+\end_modules
+\maintain_unincluded_children false
+\language spanish
+\language_package default
+\inputencoding auto
+\fontencoding global
+\font_roman "default" "default"
+\font_sans "default" "default"
+\font_typewriter "default" "default"
+\font_math "auto" "auto"
+\font_default_family default
+\use_non_tex_fonts false
+\font_sc false
+\font_osf false
+\font_sf_scale 100 100
+\font_tt_scale 100 100
+\use_microtype false
+\use_dash_ligatures true
+\graphics default
+\default_output_format default
+\output_sync 0
+\bibtex_command default
+\index_command default
+\paperfontsize default
+\spacing single
+\use_hyperref false
+\papersize default
+\use_geometry false
+\use_package amsmath 1
+\use_package amssymb 1
+\use_package cancel 1
+\use_package esint 1
+\use_package mathdots 1
+\use_package mathtools 1
+\use_package mhchem 1
+\use_package stackrel 1
+\use_package stmaryrd 1
+\use_package undertilde 1
+\cite_engine basic
+\cite_engine_type default
+\biblio_style plain
+\use_bibtopic false
+\use_indices false
+\paperorientation portrait
+\suppress_date false
+\justification true
+\use_refstyle 1
+\use_minted 0
+\index Index
+\shortcut idx
+\color #008000
+\end_index
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\paragraph_indentation default
+\is_math_indent 0
+\math_numbering_side default
+\quotes_style french
+\dynamic_quotes 0
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+\tracking_changes false
+\output_changes false
+\html_math_output 0
+\html_css_as_file 0
+\html_be_strict false
+\end_header
+
+\begin_body
+
+\begin_layout Standard
+Una vez hecho el diseño preliminar, refinamos iterativamente el modelo de
+ clases del diseño y las colaboraciones considerando los requisitos no funcional
+es y las restricciones del entorno hasta obtener un diseño adecuado para
+ pasar a la implementación.
+\end_layout
+
+\begin_layout Standard
+Se define la arquitectura del sistema; se concretan estructuras de datos
+ y patrones de diseño, y se diseñan la interfaz de usuario, el manejo de
+ la persistencia y la distribución.
+\end_layout
+
+\begin_layout Standard
+.
+\end_layout
+
+\begin_layout Section
+Arquitectura en capas
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+sremember{TDS}
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Dividir una aplicación en
+\series bold
+capas
+\series default
+ que reúnen clases relacionadas con un mismo aspecto del sistema evita el
+ acoplamiento[...].
+ [...]
+\series bold
+Arquitectura en
+\series default
+[...] 5 capas:
+\end_layout
+
+\begin_layout Enumerate
+
+\series bold
+Presentación
+\series default
+: Muestra ventanas o similares, genera informes [...].
+\end_layout
+
+\begin_layout Enumerate
+
+\series bold
+Aplicación
+\series default
+: Mantiene una sesión, gestiona peticiones [...] y coordina las transiciones
+ entre ventanas o similares.
+\end_layout
+
+\begin_layout Enumerate
+
+\series bold
+Dominio
+\series default
+ o
+\series bold
+negocio
+\series default
+: [...] Implementa [...] reglas de negocio.
+\end_layout
+
+\begin_layout Enumerate
+
+\series bold
+Servicios técnicos
+\series default
+: Persistencia [...] y otros servicios [...].
+\end_layout
+
+\begin_layout Enumerate
+
+\series bold
+Base
+\series default
+: Bibliotecas y utilidades genéricas.
+\end_layout
+
+\begin_layout Standard
+La
+\series bold
+arquitectura en 3 capas
+\series default
+ tiene capas de presentación, dominio y persistencia.
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+eremember
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
+Paquetes
+\end_layout
+
+\begin_layout Standard
+Un
+\series bold
+paquete
+\series default
+ es un elemento organizativo con elementos de cualquier tipo.
+ Debe tener un conjunto de elementos equilibrado y ser cohesivo y poco acoplado
+ con otros paquetes.
+ Los paquetes se pueden anidar.
+\end_layout
+
+\begin_layout Standard
+Los paquetes se representan en UML con un rectángulo con una solapa que
+ sobresale de la parte izquierda del borde superior, dividido horizontalmente
+ en dos partes: el nombre del paquete y, opcionalmente, una lista de objetos,
+ uno por línea, con un indicador de visibilidad como el de los atributos
+ de clases.
+\end_layout
+
+\begin_layout Standard
+Un paquete anidado puede ver todo lo de sus paquetes padres.
+ Cuando un paquete
+\series bold
+importa
+\series default
+ otro, lo que se indica con una flecha de uno a otro con estereotipo
+\lang english
+
+\begin_inset Quotes cld
+\end_inset
+
+import
+\begin_inset Quotes crd
+\end_inset
+
+
+\lang spanish
+, puede usar sus elementos públicos.
+ La importación no es transitiva.
+\end_layout
+
+\begin_layout Standard
+Los paquetes permiten agrupar elementos, normalmente del mismo tipo, para
+ manejarlos en conjunto.
+\end_layout
+
+\begin_layout Section
+Modelo de componentes
+\end_layout
+
+\begin_layout Standard
+Un
+\series bold
+componente
+\series default
+ es una parte lógica, modular, autocontenida y reemplazable de un sistema
+ que conforma un conjunto de interfaces y proporciona su implementación.
+ Modela artefactos como ejecutables, bibliotecas, archivos o documentos.
+ Tipos:
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Productos del trabajo:
+\series default
+ Resultado directo del desarrollo.
+ Código fuente, ficheros de datos, etc.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+De despliegue:
+\series default
+ Necesarios y suficientes para formar un sistema.
+ Ejecutables compilados, bibliotecas dinámicas, etc.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+De ejecución:
+\series default
+ Se crean durante la ejecución, como los objetos COM.
+\begin_inset Foot
+status open
+
+\begin_layout Plain Layout
+El equivalente en software libre es GObject, usado sobre todo en GNOME.
+ En Linux la comunicación entre componentes se hace a través de D-Bus, con
+ bibliotecas para GObject, Qt y lenguajes de alto nivel con introspección.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Un
+\series bold
+diagrama de componentes
+\series default
+ UML permite modelar ejecutables y bibliotecas, código fuente o una API.
+ Los componentes se representan como en la figura
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "fig:component"
+plural "false"
+caps "false"
+noprefix "false"
+
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Standard
+\begin_inset Float figure
+wide false
+sideways false
+status open
+
+\begin_layout Plain Layout
+\align center
+\begin_inset External
+ template VectorGraphics
+ filename n6.1.svg
+ scale 50
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+\begin_inset Caption Standard
+
+\begin_layout Plain Layout
+\begin_inset CommandInset label
+LatexCommand label
+name "fig:component"
+
+\end_inset
+
+Ejemplo de diagrama de componentes.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Se puede representar una dependencia de un componente en otro con una flecha
+ del uno al otro, o bien se pueden añadir interfaces a los componentes conectánd
+olos a un círculo pequeño etiquetado con el nombre de la interfaz y hacer
+ que otros componentes usen esa interfaz conectándolos a un arco de circunferenc
+ia que rodea al círculo o añadiendo una flecha punteada hacia el círculo
+ posiblemente etiquetada con
+\lang english
+
+\begin_inset Quotes cld
+\end_inset
+
+use
+\begin_inset Quotes crd
+\end_inset
+
+
+\lang spanish
+.
+ Incluso se puede añadir el arco sin conectarlo con nada, etiquetado con
+ el nombre de la interfaz, para indicar que
+\begin_inset Quotes cld
+\end_inset
+
+alguien
+\begin_inset Quotes crd
+\end_inset
+
+ tiene que proporcionarle esa interfaz.
+\end_layout
+
+\begin_layout Standard
+Los componentes pueden tener estereotipos como
+\lang english
+
+\begin_inset Quotes cld
+\end_inset
+
+artifact
+\begin_inset Quotes crd
+\end_inset
+
+
+\lang spanish
+,
+\lang english
+
+\begin_inset Quotes cld
+\end_inset
+
+component
+\begin_inset Quotes crd
+\end_inset
+
+
+\lang spanish
+,
+\lang english
+
+\begin_inset Quotes cld
+\end_inset
+
+input
+\begin_inset Quotes crd
+\end_inset
+
+
+\lang spanish
+,
+\lang english
+
+\begin_inset Quotes cld
+\end_inset
+
+service
+\begin_inset Quotes crd
+\end_inset
+
+
+\lang spanish
+,
+\lang english
+
+\begin_inset Quotes cld
+\end_inset
+
+user interaction
+\begin_inset Quotes crd
+\end_inset
+
+
+\lang spanish
+, etc.
+\end_layout
+
+\begin_layout Section
+Diagrama de despliegue
+\end_layout
+
+\begin_layout Standard
+Un
+\series bold
+nodo
+\series default
+ es un recurso que existe en tiempo de ejecución y en el que se ejecutan
+ los componentes.
+ Puede ser un
+\series bold
+nodo dispositivo
+\series default
+, un recurso computacional físico con memoria y capacidad de procesamiento,
+ o un
+\series bold
+nodo entorno de ejecución
+\series default
+, un recurso software que se ejecuta en otro nodo y puede albergar otros
+ elementos software, como es el caso de un sistema operativo, un gestor
+ de bases de datos o un navegador web.
+\end_layout
+
+\begin_layout Standard
+Un
+\series bold
+diagrama de despliegue
+\series default
+ muestra la configuración de los nodos que participan en la ejecución y
+ de los componentes en los nodos.
+ Los nodos se representan como objetos pero
+\begin_inset Quotes cld
+\end_inset
+
+en relieve
+\begin_inset Quotes crd
+\end_inset
+
+, con estereotipos como
+\lang english
+
+\begin_inset Quotes cld
+\end_inset
+
+web server cluster
+\begin_inset Quotes crd
+\end_inset
+
+
+\lang spanish
+,
+\lang english
+
+\begin_inset Quotes cld
+\end_inset
+
+servlet container
+\begin_inset Quotes crd
+\end_inset
+
+
+\lang spanish
+, etc., con unos dentro de otros y con componentes dentro de los nodos.
+ Los componentes admiten varias notaciones.
+\end_layout
+
+\begin_layout Standard
+\begin_inset Float figure
+wide false
+sideways false
+status open
+
+\begin_layout Plain Layout
+\align center
+\begin_inset External
+ template VectorGraphics
+ filename n6.2.svg
+ scale 40
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+Si alguien está leyendo esto y encuentra una forma de acortar la línea
+\begin_inset Quotes cld
+\end_inset
+
+SQL
+\begin_inset Quotes crd
+\end_inset
+
+, por favor que contacte conmigo o contribuya.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+\begin_inset Caption Standard
+
+\begin_layout Plain Layout
+\begin_inset CommandInset label
+LatexCommand label
+name "fig:deployment"
+
+\end_inset
+
+Ejemplo de diagrama de despliegue.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Los nodos y componentes se pueden comunicar mediante líneas, posiblemente
+ etiquetadas con la forma de comunicación.
+ Esto se muestra en la figura
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "fig:deployment"
+plural "false"
+caps "false"
+noprefix "false"
+
+\end_inset
+
+.
+ Los componentes se pueden represar con cualquiera de las notaciones de
+ las figuras
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "fig:component"
+plural "false"
+caps "false"
+noprefix "false"
+
+\end_inset
+
+ y
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "fig:deployment"
+plural "false"
+caps "false"
+noprefix "false"
+
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Section
+Más allá del diseño
+\end_layout
+
+\begin_layout Standard
+Tras el diseño, se hace la implementación y las actividades V&V (Verificación
+ y Validación).
+ En la
+\series bold
+verificación
+\series default
+ o
+\series bold
+prueba
+\series default
+ se comprueba si el software funciona bien, y en la
+\series bold
+validación
+\series default
+ se comprueba con el usuario si el software que se está construyendo es
+ el correcto.
+\end_layout
+
+\begin_layout Standard
+La programación
+\series bold
+
+\begin_inset Quotes cld
+\end_inset
+
+prueba primero
+\begin_inset Quotes crd
+\end_inset
+
+
+\series default
+ consiste en escribir código de prueba antes de escribir la implementación,
+ para luego escribir el código que satisface las pruebas.
+ Tiene la ventaja de que las pruebas se escriben; el programador queda satisfech
+o y grita
+\begin_inset Quotes cld
+\end_inset
+
+¡He superado la prueba!
+\begin_inset Quotes crd
+\end_inset
+
+
+\begin_inset Foot
+status open
+
+\begin_layout Plain Layout
+Fuente: Apuntes de la asignatura.
+ El grito de entusiasmo puede variar según el programador.
+\end_layout
+
+\end_inset
+
+; se verifica la corrección, y no hay miedo a los cambios.
+\end_layout
+
+\begin_layout Standard
+La validación la hace el usuario comprobando, para cada caso de uso, que
+ el sistema muestra el comportamiento esperado, considerando el escenario
+ principal, los excepcionales y los requisitos no funcionales.
+\end_layout
+
+\end_body
+\end_document
diff --git a/tds/n1.lyx b/tds/n1.lyx
index 4088d07..e487b0f 100644
--- a/tds/n1.lyx
+++ b/tds/n1.lyx
@@ -1297,17 +1297,9 @@ Una forma de conseguir esto es con un
controlador
\series default
, una clase que hace de intermediaria entre el código del modelo y la vista,
- procesando los eventos que le llegan de la vista para actualizar el modelo
- en consecuencia y actualizando la vista según la información del modelo.
-
-\end_layout
-
-\begin_layout Standard
-La vista solo contiene el código para mostrar lo que se le indique e informar
- de los eventos, pero no conoce su significado y delega todo el procesamiento
- en el controlador.
- El controlador entonces lee los datos necesarios de la vista y realiza
- la acción correspondiente en el modelo.
+ ofreciendo a la vista una interfaz simplificada del dominio para realizar
+ ciertas tareas relacionadas de forma independiente a posibles cambios en
+ el dominio.
\end_layout
\begin_layout Subsection