diff options
Diffstat (limited to 'pds')
| -rw-r--r-- | pds/n.lyx | 30 | ||||
| -rw-r--r-- | pds/n1.lyx | 138 | ||||
| -rw-r--r-- | pds/n5.1.puml | 6 | ||||
| -rw-r--r-- | pds/n5.1.svg | 19 | ||||
| -rw-r--r-- | pds/n5.lyx | 1901 | ||||
| -rw-r--r-- | pds/n6.1.puml | 14 | ||||
| -rw-r--r-- | pds/n6.1.svg | 27 | ||||
| -rw-r--r-- | pds/n6.2.puml | 21 | ||||
| -rw-r--r-- | pds/n6.2.svg | 34 | ||||
| -rw-r--r-- | pds/n6.lyx | 700 |
10 files changed, 2805 insertions, 85 deletions
@@ -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 @@ -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 |
