#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 orientada 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, ofreciendo a la vista una interfaz simplificada del dominio para realizar ciertas tareas relacionadas de forma independiente a posibles cambios en el dominio. \end_layout \begin_layout Subsection 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