diff options
Diffstat (limited to 'tds/n1.lyx')
| -rw-r--r-- | tds/n1.lyx | 1605 |
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 |
