aboutsummaryrefslogtreecommitdiff
path: root/tds/n1.lyx
diff options
context:
space:
mode:
Diffstat (limited to 'tds/n1.lyx')
-rw-r--r--tds/n1.lyx1605
1 files changed, 1605 insertions, 0 deletions
diff --git a/tds/n1.lyx b/tds/n1.lyx
new file mode 100644
index 0000000..d683c07
--- /dev/null
+++ b/tds/n1.lyx
@@ -0,0 +1,1605 @@
+#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 Section
+Modelos UML
+\end_layout
+
+\begin_layout Standard
+Un
+\series bold
+modelo
+\series default
+ es una representación de un aspecto de la realidad obtenida mediante abstracció
+n para ayudar a comprender y razonar sobre este.
+ Los modelos se expresan en un lenguaje, y a mediados de los 90 había muchos
+ lenguajes de modelos de software orientado a objetos.
+
+\end_layout
+
+\begin_layout Standard
+En 1994, Grady Booch, James Rumbaugh e Ivar Jacobson crean el
+\series bold
+UML
+\series default
+ (
+\series bold
+\emph on
+\lang english
+Unified Modeling Language
+\series default
+\emph default
+\lang spanish
+), un lenguaje para visualizar, especificar construir y documentar modelos
+ de un sistema de software desde una perspectiva orientado a objetos que
+ busca eliminar confusión y reunir los puntos fuertes de cada método, y
+ este es estandarizado por el
+\series bold
+OMG
+\series default
+, un grupo que propone, elabora y mantiene especificaciones para aplicaciones
+ empresariales como Corba, OCL o MDA.
+\end_layout
+
+\begin_layout Standard
+UML se aplica en el análisis y el diseño de aplicaciones, para documentar
+ modelos y para generar código.
+ Es útil para razonar sobre alternativas, creando diagramas y evaluándolos
+ en base a los casos de uso, y aunque se puede usar como lenguaje de programació
+n, no fue diseñado para esto, por lo que se usa poco a lo largo del desarrollo.
+\end_layout
+
+\begin_layout Standard
+Un
+\series bold
+modelo UML
+\series default
+ es una especificación de un aspecto del sistema de interés para ciertos
+ usuarios o desarrolladores, y un
+\series bold
+diagrama UML
+\series default
+ representa parte de la información de un modelo de forma gráfica o textual.
+ Así:
+\end_layout
+
+\begin_layout Itemize
+Los
+\series bold
+modelos estructurales
+\series default
+ describen la estructura del sistema.
+ Son representados por
+\series bold
+diagramas de clases
+\series default
+, que describen los tipos de objetos de un sistema y las relaciones entre
+ ellos, y
+\series bold
+diagramas de objetos
+\series default
+, que muestran ejemplos concretos de objetos.
+\end_layout
+
+\begin_layout Itemize
+Los
+\series bold
+modelos de comportamiento
+\series default
+ describen las acciones que ejecutan partes del sistema.
+ Son representados por:
+\end_layout
+
+\begin_deeper
+\begin_layout Itemize
+
+\series bold
+Diagramas de interacción
+\series default
+, que describen cómo los objetos colaboran para realizar una actividad.
+ Distinguimos los
+\series bold
+diagramas de secuencia
+\series default
+, que muestran la secuencia de mensajes, y
+\series bold
+diagramas de colaboración
+\series default
+ o
+\series bold
+comunicación
+\series default
+, que muestran los canales de comunicación.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Máquinas de estado
+\series default
+, que describen los estados en los que se puede encontrar una parte del
+ sistema y las transiciones entre ellos.
+ Distinguimos
+\series bold
+diagramas de estado
+\series default
+ y
+\series bold
+diagramas de actividades
+\series default
+.
+\end_layout
+
+\end_deeper
+\begin_layout Subsection
+Diagramas de clases
+\end_layout
+
+\begin_layout Standard
+Describen los tipos de objetos de un sistema y las relaciones entre ellos,
+ a nivel conceptual o de clases de diseño o implementación.
+ Solo aparece la información que se considera relevante para el propósito.
+\end_layout
+
+\begin_layout Standard
+Una clase se representa con un recuadro dividido en 3 partes: de arriba
+ a abajo, nombre de la clase, atributos y métodos.
+ Encima del nombre de la clase puede haber un
+\family sans
+
+\begin_inset Quotes cld
+\end_inset
+
+
+\emph on
+estereotipo
+\emph default
+
+\begin_inset Quotes crd
+\end_inset
+
+
+\family default
+, que indica el tipo de clase.
+\end_layout
+
+\begin_layout Standard
+Los atributos se expresan cada uno en una línea como
+\end_layout
+
+\begin_layout Standard
+\align center
+[
+\family sans
+\emph on
+visibilidad
+\family default
+\emph default
+]
+\family sans
+\emph on
+nombre
+\family default
+\emph default
+ [
+\family sans
+:
+\emph on
+tipo
+\family default
+\emph default
+] [
+\family sans
+[
+\emph on
+multiplicidad
+\emph default
+]
+\family default
+],
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+noindent
+\end_layout
+
+\end_inset
+
+donde
+\family sans
+\emph on
+visibilidad
+\family default
+\emph default
+ es
+\family sans
++
+\family default
+ para un atributo público,
+\family sans
+#
+\family default
+ para uno protegido,
+\family sans
+–
+\family default
+ para uno privado o
+\family sans
+~
+\family default
+ para visibilidad a nivel de paquete, y la multiplicidad tiene forma
+\family sans
+\emph on
+inicio
+\family default
+..
+\family sans
+fin
+\family default
+\emph default
+,
+\family sans
+\emph on
+cantidad
+\family default
+\emph default
+ o similares.
+ Se pueden añadir otras características como un valor por defecto (
+\family sans
+=
+\emph on
+valor
+\family default
+\emph default
+) o
+\family sans
+{
+\lang english
+readOnly
+\lang spanish
+}
+\family default
+.
+ Los métodos se representan de forma similar, pero al nombre le sigue [
+\family sans
+(
+\emph on
+parámetro
+\family default
+\emph default
+ [
+\family sans
+:
+\emph on
+tipo
+\family default
+\emph default
+]
+\family sans
+,
+\family default
+...
+\family sans
+)
+\family default
+].
+ Los atributos y métodos estáticos o de clase aparecen subrayados, y las
+ clases y métodos abstractos están en cursiva.
+\end_layout
+
+\begin_layout Standard
+Las interfaces se suelen representar como una clase con estereotipo
+\family sans
+
+\begin_inset Quotes cld
+\end_inset
+
+
+\lang english
+interface
+\lang spanish
+
+\begin_inset Quotes crd
+\end_inset
+
+
+\family default
+ o con un círculo pequeño vacío con el nombre de la interfaz debajo.
+\end_layout
+
+\begin_layout Standard
+Las relaciones pueden ser:
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Dependencia
+\series default
+: Una clase usa los métodos de otra.
+\end_layout
+
+\begin_deeper
+\begin_layout Standard
+\align center
+\begin_inset External
+ template RasterImage
+ filename n1.1.png
+ scale 50
+
+\end_inset
+
+
+\end_layout
+
+\end_deeper
+\begin_layout Itemize
+
+\series bold
+Generalización
+\series default
+: Una clase hereda de otra.
+\end_layout
+
+\begin_deeper
+\begin_layout Standard
+\align center
+\begin_inset External
+ template RasterImage
+ filename n1.2.png
+ scale 50
+
+\end_inset
+
+
+\end_layout
+
+\end_deeper
+\begin_layout Itemize
+
+\series bold
+Asociación
+\series default
+: Los objetos de dos clases están conectados.
+ Se puede indicar el atributo de una clase que referencia a los elementos
+ de la otra, y/o su multiplicidad, en la relación, en el extremo de la otra.
+ Dicho atributo no se debe indicar en la lista de atributos de la clase.
+\end_layout
+
+\begin_deeper
+\begin_layout Standard
+\align center
+\begin_inset External
+ template RasterImage
+ filename n1.3.png
+ scale 50
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Si desde un objeto de una clase se puede acceder a elementos de la otra
+ por la relación pero no al revés, esto se puede indicar con una punta de
+ flecha (hacia la otra).
+\end_layout
+
+\end_deeper
+\begin_layout Itemize
+
+\series bold
+Agregación
+\series default
+: Asociación en que un objeto contiene a otros.
+ Se puede indicar lo mismo que en la asociación, pero en la referencia de
+ la parte al todo se asume multiplicidad 1.
+\end_layout
+
+\begin_deeper
+\begin_layout Standard
+\align center
+\begin_inset External
+ template RasterImage
+ filename n1.4.png
+ scale 50
+
+\end_inset
+
+
+\end_layout
+
+\end_deeper
+\begin_layout Itemize
+
+\series bold
+Composición
+\series default
+: Agregación en que cada parte pertenece a un único agregado y si se elimina
+ un agregado se eliminan todas sus partes.
+ Así, la multiplicidad de la parte al agregado es siempre 1.
+\end_layout
+
+\begin_deeper
+\begin_layout Standard
+\align center
+\begin_inset External
+ template RasterImage
+ filename n1.5.png
+ scale 50
+
+\end_inset
+
+
+\end_layout
+
+\end_deeper
+\begin_layout Itemize
+
+\series bold
+Realización
+\series default
+: Una clase implementa una interfaz.
+\end_layout
+
+\begin_deeper
+\begin_layout Standard
+\align center
+\begin_inset External
+ template RasterImage
+ filename n1.6.png
+ scale 50
+
+\end_inset
+
+
+\end_layout
+
+\end_deeper
+\begin_layout Subsection
+Diagramas de objetos
+\end_layout
+
+\begin_layout Standard
+Un objeto se muestra como un recuadro dividido una parte superior con formato
+ [
+\family sans
+\emph on
+nombre
+\family default
+\emph default
+]
+\family sans
+:
+\emph on
+tipo
+\family default
+\emph default
+ y una parte inferior con los atributos relevantes uno por línea, con formato
+
+\family sans
+\emph on
+nombre
+\emph default
+ =
+\emph on
+valor
+\family default
+\emph default
+.
+ Un
+\series bold
+enlace
+\series default
+ es una instancia de una asociación entre objetos, y se muestra igual que
+ en los diagramas de clase pero sin indicar multiplicidades.
+\end_layout
+
+\begin_layout Subsection
+Diagramas de colaboración
+\end_layout
+
+\begin_layout Standard
+Un
+\series bold
+mensaje
+\series default
+ es una comunicación entre dos objetos que transmite información para desencaden
+ar una actividad.
+ 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
+
+\begin_inset Quotes cld
+\end_inset
+
+create
+\begin_inset Quotes crd
+\end_inset
+
+
+\family default
+.
+ Un objeto que reciba este mensaje no puede haber recibido ningún otro antes.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+De destrucción
+\series default
+:
+\family sans
+
+\begin_inset Quotes cld
+\end_inset
+
+destroy
+\begin_inset Quotes crd
+\end_inset
+
+
+\family default
+.
+ Un objeto que reciba este mensaje no puede recibir ningún otro después.
+\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
+Una
+\series bold
+interacción
+\series default
+ es un comportamiento dado por un conjunto de mensajes intercambiados entre
+ un conjunto de objetos para lograr un propósito.
+ La representamos añadiendo sobre un diagrama de objetos los mensajes intercambi
+ados.
+ Los mensajes se numeran del 1 en adelante y se indican como
+\family sans
+\emph on
+número
+\emph default
+:
+\emph on
+mensaje
+\family default
+\emph default
+ al lado del enlace sobre el que se envían, acompañados de una flecha paralela
+ al enlace que va del emisor al receptor.
+ Se puede usar la misma flecha para más de un mensaje, y se pueden añadir
+ enlaces de un objeto a sí mismo si es necesario.
+\end_layout
+
+\begin_layout Standard
+A veces se usa
+\series bold
+numeración jerárquica
+\series default
+: si el envío de un mensaje
+\begin_inset Formula $n$
+\end_inset
+
+ resulta en el envío de más mensajes directamente (porque estén en el cuerpo
+ del método en
+\begin_inset Formula $n$
+\end_inset
+
+), estos se numeran como
+\begin_inset Formula $n$
+\end_inset
+
+.1,
+\begin_inset Formula $n$
+\end_inset
+
+.2, etc., de forma recursiva.
+\end_layout
+
+\begin_layout Standard
+Si hay varios objetos del mismo tipo que reciben igual tratamiento, se pueden
+ representar como un solo objeto con varios recuadros de igual tamaño apilados
+ detrás.
+ Si se quiere indicar que un usuario causaría el envío de un mensaje o recibiría
+ información de mensajes pero no se quiere representar a través de qué objeto,
+ el objeto se puede sustituir por un monigote que simboliza un usuario de
+ forma abstracta.
+\end_layout
+
+\begin_layout Subsection
+Diagramas de secuencia
+\end_layout
+
+\begin_layout Standard
+Una
+\series bold
+línea de vida
+\series default
+ es un objeto (sin los enlaces) junto a una línea de tiempo vertical hacia
+ abajo que marca su existencia.
+ Representamos un mensaje entre líneas de vida como una flecha horizontal
+ del emisor al receptor etiquetada con el mensaje en forma [
+\family sans
+\emph on
+número
+\emph default
+:
+\family default
+]
+\family sans
+\emph on
+mensaje
+\family default
+\emph default
+, y la numeración, como en los diagramas de comunicación, puede ser secuencial
+ o jerárquica.
+\end_layout
+
+\begin_layout Standard
+Para una llamada a un método de la misma clase, la flecha sale del objeto
+ y vuelve por debajo al mismo objeto.
+ Se puede indicar el regreso de una llamada a un método con una línea discontinu
+a del receptor al emisor.
+\end_layout
+
+\begin_layout Standard
+Un
+\series bold
+foco de control
+\series default
+ es un rectángulo muy vertical que representa el tiempo durante el que un
+ objeto está ejecutando un método suyo, y sustituye a la línea de vida o,
+ si la ejecución está contenida en un foco de control del mismo objeto,
+ a una de las verticales de dicho foco, sin pegarse a su inicio o fin.
+\end_layout
+
+\begin_layout Standard
+Los mensajes de creación señalan al objeto creado; los de destrucción, a
+ una
+\begin_inset Quotes cld
+\end_inset
+
+X
+\begin_inset Quotes crd
+\end_inset
+
+ en la línea de vida del objeto destruido, y los que llaman a otro método,
+ al principio del foco de control (el borde superior).
+ La flecha de regreso de una llamada parte del final del foco de control.
+\end_layout
+
+\begin_layout Standard
+Aunque no se recomiendan, existen operadores de control, indicados como
+ un recuadro alrededor de un conjunto de mensajes con su nombre arriba a
+ la izquierda en el recuadro.
+ Son:
+\end_layout
+
+\begin_layout Enumerate
+
+\series bold
+Ejecución opcional
+\series default
+ (
+\family sans
+opt
+\family default
+): El cuerpo se ejecuta si se cumple una condición, indicada en la parte
+ de arriba del recuadro entre corchetes en la línea encargada de comprobar
+ la condición.
+\end_layout
+
+\begin_layout Enumerate
+
+\series bold
+Condicional
+\series default
+ (
+\family sans
+alt
+\family default
+): El cuerpo se divide en regiones mediante líneas discontinuas horizontales.
+ Cada parte tiene una condición asociada y se ejecuta el cuerpo de la región
+ cuya condición se satisface.
+\end_layout
+
+\begin_layout Enumerate
+
+\series bold
+Paralela
+\series default
+ (
+\family sans
+par
+\family default
+): El cuerpo se divide en regiones que se ejecutan en paralelo.
+\end_layout
+
+\begin_layout Enumerate
+
+\series bold
+Iterativa
+\series default
+ (
+\family sans
+loop
+\family default
+[
+\family sans
+(
+\emph on
+inicio
+\emph default
+,
+\emph on
+fin
+\emph default
+)
+\family default
+]): El cuerpo se ejecuta un número de veces y/o mientras se cumpla una condición.
+\end_layout
+
+\begin_layout Enumerate
+
+\series bold
+Referencia
+\series default
+ (
+\family sans
+ref
+\family default
+): El cuerpo (el interior del recuadro salvo el nombre) se sustituye por
+ el nombre de otra interacción, que es la que se ejecuta.
+\end_layout
+
+\begin_layout Section
+Patrones GRASP
+\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 GRASP
+\series default
+ ayudan a decidir cómo distribuir responsabilidades entre las clases de
+ un programa, implementando cada responsabilidad mediante uno o más métodos
+ de una o más clases según el tamaño de esta.
+\end_layout
+
+\begin_layout Subsection
+Bajo acoplamiento
+\end_layout
+
+\begin_layout Standard
+El
+\series bold
+acoplamiento
+\series default
+ es el nivel de dependencia directa entre distintas clases.
+ 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 Subsection
+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 Subsection
+Experto en información
+\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
+ que acaparan varias responsabilidades poco relacionadas.
+ Esto favorece un bajo acoplamiento y una alta cohesión.
+\end_layout
+
+\begin_layout Standard
+\begin_inset Float figure
+wide false
+sideways false
+status open
+
+\begin_layout Plain Layout
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+hfil
+\end_layout
+
+\end_inset
+
+
+\begin_inset External
+ template RasterImage
+ filename n2.1.png
+ scale 50
+
+\end_inset
+
+
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+hfil
+\end_layout
+
+\end_inset
+
+
+\begin_inset External
+ template RasterImage
+ filename n2.2.png
+ scale 50
+
+\end_inset
+
+
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+hfil
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+\begin_inset Caption Standard
+
+\begin_layout Plain Layout
+A la izquierda, un ejemplo de programa que no cumple el patrón experto.
+ A la derecha, el mismo programa tras aplicar el patrón experto.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\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) y recorrer largos caminos en la estructura
+ de objetos, pues esto causa un diseño frágil ante cambios.
+\end_layout
+
+\begin_layout Subsection
+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 Subsection
+Controlador
+\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, permitiendo reutilizar código, desarrollar distintas capas
+ en paralelo y cambiar algo de una capa haciendo pocos o ningún cambio en
+ el resto.
+ La
+\series bold
+arquitectura en 4 capas
+\series default
+ se divide en las siguientes 5 capas:
+\end_layout
+
+\begin_layout Enumerate
+
+\series bold
+Presentación
+\series default
+: Muestra ventanas o similares, genera informes y recibe eventos del usuario.
+\end_layout
+
+\begin_layout Enumerate
+
+\series bold
+Aplicación
+\series default
+: Mantiene una sesión, gestiona peticiones de la capa de presentación y
+ coordina las transiciones entre ventanas o similares.
+\end_layout
+
+\begin_layout Enumerate
+
+\series bold
+Dominio
+\series default
+ o
+\series bold
+negocio
+\series default
+: Gestiona peticiones de la capa de aplicación e implementa la lógica de
+ la aplicación y reglas de negocio.
+\end_layout
+
+\begin_layout Enumerate
+
+\series bold
+Servicios técnicos
+\series default
+: Persistencia de los datos y otros servicios que pueda necesitar la capa
+ de dominio.
+\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.
+ Es muy común, y en Java suele usarse con HTML y CSS para la capa de presentació
+n,
+\lang english
+Spring
+\lang spanish
+ para la de dominio y
+\lang english
+Hibernate
+\lang spanish
+ para la persistencia.
+\begin_inset Foot
+status open
+
+\begin_layout Plain Layout
+La arquitectura MVC (Modelo-Vista-Controlador) consta de 3 capas que se
+ comunican de manera circular.
+ La vista obtiene sus datos del modelo a través de una interfaz e informa
+ de los eventos al controlador, el cual los procesa y los usa para modificar
+ el modelo o cambiar de vista.
+ El modelo recibe los datos del controlador e informa a la vista, que se
+ habrá registrado en el modelo mediante
+\emph on
+\lang english
+listeners
+\emph default
+\lang spanish
+.
+ Con esto el modelo no sabe nada de la vista, aunque cada vista conoce la
+ interfaz de lectura proporcionada por la parte correspondiente del modelo.
+\end_layout
+
+\end_inset
+
+
+\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 o presentación, ni viceversa, 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 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.
+\end_layout
+
+\begin_layout Subsection
+Polimorfismo
+\end_layout
+
+\begin_layout Standard
+Cuando se requiere una misma funcionalidad de varias clases o clases no
+ previstas, se define una interfaz que provea esa funcionalidad y se usan
+ objetos de la interfaz, facilitando añadir nuevas alternativas.
+ 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
+
+\begin_layout Subsection
+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
+
+
+\end_layout
+
+\begin_layout Subsection
+Variaciones protegidas
+\end_layout
+
+\begin_layout Standard
+Proteger a elementos del código de las variaciones de otros elementos, por
+ ejemplo mediante interfaces.
+ Algunos principios para esto:
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Principio de ocultación de la información
+\series default
+: Ocultar los detalles de implementación al cliente, por ejemplo, declarando
+ los atributos privados y ofreciendo métodos para acceder a ellos y modificarlos.
+ Esto permite establecer restricciones sobre los valores de los atributos
+ en los
+\emph on
+\lang english
+setters
+\emph default
+\lang spanish
+ y cambiar la representación de los datos sin afectar al código cliente,
+ así como ejecutar efectos colaterales como notificar de los cambios a otros
+ objetos.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Principio de acceso uniforme
+\series default
+: Ofrecer una sintaxis uniforme que no distinga si los valores son almacenados
+ en el objeto o calculados.
+ Esto es soportado por Eiffel y C#, y favorece que una responsabilidad implement
+ada como un método pase a ser un atributo sin afectar a la ocultación de
+ información.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Principio de sustitución de Liskov
+\series default
+: Una variable de un tipo debe poder contener un valor de cualquier subclase
+ de este, por lo que las subclases deben ser semánticamente consistentes
+ con la superclase.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Principio abierto-cerrado
+\series default
+: Un módulo debe ser abierto para extensión, pudiendo añadir nueva funcionalidad
+, pero cerrado para modificación, para que el código que dependa del módulo
+ siga funcionando.
+\end_layout
+
+\begin_layout Subsection
+Servicios
+\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 Section
+Composición y herencia
+\end_layout
+
+\begin_layout Standard
+Para añadir variabilidad a una clase, podemos definir una subclase de esta
+ clase, pero en general esto hace que la subclase dependa de los detalles
+ de implementación de la superclase para funcionar correctamente, rompiendo
+ la encapsulación y haciendo que la subclase sea más difícil de comprender
+ y pueda fallar por cambios en la implementación de la superclase.
+\end_layout
+
+\begin_layout Standard
+Por ello en general es preferible la composición: hacer que la clase acepte
+ parámetros de alguna interfaz y, para implementar variabilidad, crear una
+ subclase de la interfaz, o bien crear un nuevo tipo basado en el original
+ y generalmente con la misma funcionalidad pero añadiendo la funcionalidad
+ deseada.
+\end_layout
+
+\begin_layout Section
+Proceso de desarrollo de software
+\end_layout
+
+\begin_layout Standard
+Un proceso establece cómo construir software de forma sistemática mediante
+ etapas como el estudio de viabilidad, el análisis de requisitos, el diseño
+ de la solución, la implementación, la fase de pruebas, el despliegue y
+ el mantenimiento.
+ Tipos de métodos:
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Pesados
+\series default
+: Predictivos en vez de adaptativos, con planificación detallada a largo
+ plazo y un ambiente burocrático con rigidez y control.
+
+\end_layout
+
+\begin_deeper
+\begin_layout Standard
+Un ejemplo es
+\series bold
+RUP
+\series default
+ (
+\series bold
+\emph on
+\lang english
+Rational Unified Process
+\series default
+\emph default
+\lang spanish
+), que usa modelos UML en cada etapa e intentó convertirse en estándar de
+ facto.
+ Muchos decían usarlo pero esto era poco creíble, y actualmente el interés
+ es escaso.
+\end_layout
+
+\end_deeper
+\begin_layout Itemize
+
+\series bold
+Ágiles
+\series default
+: Enfocados a responder a los cambios en vez de planificar con antelación,
+ centrándose en las relaciones entre personas y colaborando con los clientes
+ en todo el proceso.
+ Priorizan trabajar con el software frente a realizar modelos, pues en muchos
+ dominios la calidad y la productividad dependen de las buenas prácticas,
+ técnicas y herramientas y no del uso de modelos.
+ Muy usados, adecuados para proyectos de no más de 10 personas-año.
+\end_layout
+
+\begin_deeper
+\begin_layout Standard
+Un ejemplo es el
+\series bold
+\emph on
+\lang english
+Extreme Programming
+\series default
+\emph default
+\lang spanish
+ (
+\series bold
+XP
+\series default
+).
+ Scrum y Kanban son muy usados.
+\end_layout
+
+\end_deeper
+\begin_layout Standard
+El
+\series bold
+diseño dirigido por dominio
+\series default
+ (
+\series bold
+DDD
+\series default
+) es la creación y el uso de un modelo del dominio para guiar el diseño
+ y la implementación del resto del sistema.
+ En este, un analista y un experto en el dominio representan con gráficos
+ o texto el conocimiento sobre el dominio en un lenguaje compartido orientado
+ a la creación de código, normalmente como un modelo entidad-relación en
+ que las entidades son clases y las relaciones son asociaciones entre ellas.
+\end_layout
+
+\begin_layout Standard
+Los objetos se clasifican en
+\series bold
+entidades
+\series default
+, objetos con una identidad que se mantiene a lo largo de la vida del sistema;
+
+\series bold
+objetos valor
+\series default
+, que no tienen una identidad, pueden ser compartidos y deberían ser inmutables,
+ y servicios.
+\end_layout
+
+\begin_layout Standard
+Las clases se agrupan en
+\series bold
+módulos
+\series default
+ para dominar la complejidad y favorecer la cohesión, con una fachada para
+ reducir el acoplamiento.
+ Un
+\series bold
+agregado
+\series default
+ es un grupo de objetos relacionados que se consideran como una unidad,
+ y al que se accede a través de un objeto raíz que es una entidad y controla
+ que el resto de objetos satisfagan los invariantes del agregado.
+\end_layout
+
+\begin_layout Standard
+Un
+\series bold
+repositorio
+\series default
+ o
+\series bold
+catálogo
+\series default
+ es un objeto que encapsula la lógica para buscar, recuperar, añadir, eliminar
+ entidades, aunque no se encarga de crearlas.
+\end_layout
+
+\begin_layout Standard
+
+\series bold
+Refactorizar
+\series default
+ código es hacer un cambio al código para mejorar su calidad o añadirle
+ nuevos conceptos sin cambiar el comportamientos.
+ Son
+\series bold
+técnicos
+\series default
+ si mejoran la calidad del código mediante
+\emph on
+\lang english
+refactorings
+\emph default
+\lang spanish
+ como extraer o mover un método, eliminar una comprobación explícita de
+ tipo, dividir una clase, etc., o
+\series bold
+de dominio
+\series default
+ si mejoran el modelo del dominio para añadir nuevos conceptos.
+\end_layout
+
+\end_body
+\end_document