sábado, 30 de noviembre de 2013

Unidad 3 Introducción al Desarrollo Ágil

Unidad 3

3.1 ¿Qué es la Agilidad?

Las metodologías de desarrollo ágiles y el Software Libre son enfoques muy conocidos para el desarrollo de software. Aunque son muy diferentes, presentan muchas concordancias como, por ejemplo, los principios y valores básicos. En particular, hay muchas analogías entre el desarrollo de Software Libre y la programación extrema (enfoque al código e inclusión de cambios, por citar algunas). Este artículo presenta estos principios y valores básicos e identifica las concordancias entre ambas metodologías.


3.2 Que es el proceso ágil

Las metodologías ágiles (AMS, Agile Methods) se han desarrollado con mucho éxito en los últimos años al igual que el Software Libre (SL). Aunque estos enfoques de desarrollo de software parecen muy diferentes, presentan muchas concordancias, como demostró Koch.
Tanto las AMs como el SL empujan hacia una organización menos formal y jerárquica en el desarrollo de software y más centrada en la persona, con un énfasis mayor en:
- centrarse en el objetivo principal del desarrollo — producir un sistema de gestión con la cantidad correcta de funcionalidades. Esto significa que el sistema final tiene que incluir sólo el mínimo número de características necesarias para satisfacer por completo al cliente real.
- eliminar actividades que se relacionaron con algunos documentos 'formales' de especificaciones que no tienen una relación directa clara con el resultado final del producto. Este enfoque está claramente vinculado a la "gestión ligera" ( Lean Management).
Las AMs reconocen explícitamente sus vínculos con la gestión ligera, mientras que el SL los mantiene implícitos. Más aún, el desarrollo de software mediante las AMs o el SL parecen similares bajo varios puntos de vista, como éstos:
1. Los orígenes de ambos enfoques son bastante antiguos, pero ahora se han revitalizado con renovado interés, como reconoce explícitamente Beck para las AMs (en particular la programación extrema — XP, eXtreme Programming) y prueba Fuggetta para el SL [10].
2. Ambos son rompedores, en el sentido de que alteran valores establecidos en la producción de software.
3. Ambos han tenido éxito, mientras que enfoques más tradicionales han fallado (el proyecto C3 para AMs y el navegador de Mozilla/Firefox para el SL).



3.3 Modelo Ágil

Los principios básicos compartidos por todas las AMs están enumerados en el llamado Agile Manifesto. La tabla 1 identifica los principios de las AMs en el SL.
En conjunto, es evidente que el SL adopta muchos de los valores fomentados por los partidarios de las AMs. Tales evidencias reclaman un análisis subsecuente para determinar el grado y la profundidad de dicha adopción. Por otra parte, las AMs y el SL son clases de métodos de desarrollo de software que incluyen un amplio número de métodos específicos.
Por tanto, es importante considerar los casos específicos para determinar cómo se dan realmente en la práctica las interacciones entre las AMs y el SL, más allá de consideraciones que, por sí solas, resultan bastante inútiles al final.

3.4 Principales metodologías

Los principios fundamentales son:
1. Retroalimentación rápida: volviendo al valor de la retroalimentación, ésta debería ocurrir tan pronto como fuera posible, tener el impacto más alto en el proyecto y limitar lo más posible las interrupciones potenciales.

2. Asumir la sencillez: según lo mencionado, la sencillez es un valor muy importante. Por lo tanto, la sencillez debería ser asumida en todas las fases del desarrollo.

3. Cambios incrementales: el cambio (en su mayor parte procedente de la retroalimentación) no debería hacerse todo de una vez. Por consiguiente debería ser un proyecto permanente e incremental, dirigido a crear un sistema evolutivo.

4. Adopción del cambio: el cambio debería ser manejado con valor y no ser evitado. El sistema en su totalidad, y el código, debería ser organizado para facilitar el cambio más amplio posible.

5. Calidad del trabajo: la calidad debería ser la principal preocupación. La carencia de calidad genera revisiones y derroches que deberían ser evitados en la mayor medida posible. Otros principios de XP son:
Enseñe a aprender: la identificación de requisitos es un proceso de aprendizaje global. Por lo tanto, el aprendizaje es de suma importancia en el sistema.

b. Inversión inicial pequeña: el trabajo previo debería ser lo más escaso posible, puesto que subsiguientes cambios pueden destruirlo.
Jugar a ganar: todos los desarrollos deberían ser guiados por la clara convicción de que lo que hacemos es realmente factible. Experimentos concretos: las ideas deberían no ser validadas a través de discusiones largas y teóricas sino vía experimentaciones concretas en el código base.
Comunicación abierta, honesta: la comunicación debería ser siempre simple y fácil. El cliente no debería ocultar sus prioridades ni los desarrolladores y directivos deberían ocultar el estado actual del trabajo.

3.4.1 Cristal

Primero hay que comprender que un cristal tiene la capacidad de recibir, almacenar y liberar una orden, o sea, una intención (ya sabemos que el mayor poder del Mago reside en su voluntad, en su intención).
También comentar que cuando se habla de cristales significa que hablamos de cuarzo y derivados (cuarzo ahumado, amatista, citrino… y minerales sobre todo cristalinos). Pero el mejor sin duda es el cuarzo hialino o cristal de roca. Preferiblemente debería ser una cristalización natural, con su extremo en punta, ya que su estructura molecular original actúa como amplificador de todo tipo de energía o, en este caso, intenciones que se desean canalizar a través de él.
Una vez purificado el mineral para eliminar todo tipo de energía residual que pueda tener, hay que seguir unos pasos:

DESPEJARLO:
Se tiene que despejar de toda clase de pensamiento: Se sostiene en la mano izquierda con la punta del cristal hacia arriba y con la mano derecha a poca distancia cubriéndolo pero sin tocarlo debes concentrarte. Imagina un haz de luz blanca que fluye a través de la mano hacia la base del cuarzo, que sube por su cuerpo y sale por la punta superior. Siente como esa luz pasa hacia los lados y se introduce en el interior de nuevo.
Así queda borrada cualquier otra programación previa.

PROGRAMARLO:
Hay que pensar en lo que deseamos que transmita ese cristal, en el bien deseado, preferiblemente visualizando a esa persona (o a uno mismo) bien, con el beneficio que le deseas. Hay que tener cuidado de que no se crucen imágenes negativas. De esta manera esas imágenes quedan instaladas en el cristal y luego se verán amplificadas por la vibración natural del cuarzo, por los triángulos espirales de su punta.

3.4.2 SCRUM

Scrum es un marco de trabajo para la gestión y desarrollo de software basada en un proceso iterativo e incremental utilizado comúnmente en entornos basados en el desarrollo ágil de software.
SCRUM es un modelo de referencia que define un conjunto de prácticas y roles, y que puede tomarse como punto de partida para definir el proceso de desarrollo que se ejecutará durante un proyecto. Los roles principales en Scrum son el ScrumMaster, que mantiene los procesos y trabaja de forma similar al director de proyecto, el ProductOwner, que representa a los stakeholders (interesados externos o internos), y el Team que incluye a los desarrolladores.

Durante cada sprint, un periodo entre una y cuatro semanas (la magnitud es definida por el equipo), el equipo crea un incremento de software potencialmente entregable (utilizable). El conjunto de características que forma parte de cada sprint viene del Product Backlog, que es un conjunto de requisitos de alto nivel priorizados que definen el trabajo a realizar. Los elementos del Product Backlog que forman parte del sprint se determinan durante la reunión de Sprint Planning. Durante esta reunión, el Product Owner identifica los elementos del Product Backlog que quiere ver completados y los hace del conocimiento del equipo. Entonces, el equipo determina la cantidad de ese trabajo que puede comprometerse a completar durante el siguiente sprint.2 Durante el sprint, nadie puede cambiar el Sprint Backlog, lo que significa que los requisitos están congelados durante el sprint.

Roles Principales

Product Owner

El Product Owner representa la voz del cliente. Se asegura de que el equipo Scrum trabaje de forma adecuada desde la perspectiva del negocio. El Product Owner escribe historias de usuario, las prioriza, y las coloca en el Product Backlog.
ScrumMaster (o Facilitador)
El Scrum es facilitado por un ScrumMaster, cuyo trabajo primario es eliminar los obstáculos que impiden que el equipo alcance el objetivo del sprint. El ScrumMaster no es el líder del equipo (porque ellos se auto-organizan), sino que actúa como una protección entre el equipo y cualquier influencia que le distraiga. El ScrumMaster se asegura de que el proceso Scrum se utiliza como es debido. El ScrumMaster es el que hace que las reglas se cumplan.

Equipo de desarrollo

El equipo tiene la responsabilidad de entregar el producto. Un pequeño equipo de 3 a 9 personas con las habilidades transversales necesarias para realizar el trabajo (análisis, diseño, desarrollo, pruebas, documentación, etc).

3.4.3 DSDM

El método de desarrollo de sistemas dinámicos (en inglés Dynamic Systems Development Method o DSDM) es un método que provee un framework para el desarrollo ágil de software, apoyado por su continua implicación del usuario en un desarrollo iterativo y creciente que sea sensible a los requerimientos cambiantes, para desarrollar un sistema que reuna las necesidades de la empresa en tiempo y presupuesto. 

Es uno de un número de métodos de desarrollo ágil de software y forma parte del alianza ágil.
DSDM fue desarrollado en el Reino Unido en los años 90 por un consorcio de proveedores y de expertos en la materia del desarrollo de sistemas de información (IS), el consorcio de DSDM, combinando sus experiencias de mejores prácticas. El consorcio de DSDM es una organización no lucrativa y proveedor independiente, que posee y administra el framework. La primera versión fue terminada en enero de 1995 y publicada en febrero de 1995. La versión actualmente en uso (abril de 2006) es la versión 4.2: El framework para el Negocio Centralizado Desarrollado lanzado en mayo de 2003.

Como extensión del Desarrollo rápido de aplicaciones (RAD), DSDM se centra en los proyectos de sistemas de información que son caracterizados por presupuestos y agendas apretadas. DSDM trata los problemas que ocurren con frecuencia en el desarrollo de los sistemas de información en lo que respecta a pasar sobre tiempo y presupuesto y otras razones comunes para la falta en el proyecto tal como falta de implicación del usuario y de la comisión superior de la gerencia.

DSDM consiste en 3 fases: fase del pre-proyecto, fase del ciclo de vida del proyecto, y fase del post-proyecto. La fase del ciclo de vida del proyecto se subdivide en 5 etapas:
·        
      estudio de viabilidad,
·         estudio de la empresa,
·         iteración del modelo funcional,
·         diseño e iteración de la estructura, e
·         implementación.

DSDM reconoce que los proyectos son limitados por el tiempo y los recursos, y los planes acorde a las necesidades de la empresa. Para alcanzar estas metas, DSDM promueve el uso del RAD con el consecuente peligro que demasiadas esquinas estén cortadas. DSDM aplica algunos principios, roles, y técnicas.

En algunas circunstancias, hay posibilidades para integrar contenido de otros métodos, tal como el Proceso Unificado de Rational (RUP), Programación Extrema (XP), y Proyectos en ambientes controlados (PRINCE2), para complementar el DSDM en la realización de un proyecto. Otro método ágil que tiene semejanzas proceso y concepto con DSDM es Scrum.

3.4.4 FDD

Desarrollo Basado en Funcionalidades
FDD con sus siglas en inglés Feature Driven Development es un enfoque á gil para el desarrollo de sistemas. Fue desarrollado por Jeff De Luca y el viejo gurú de la Orientación a Objetos Peter Coad. Como las otras metodologías adaptables, se enfoca en iteraciones cortas que entregan funcionalidad tangible. Dicho enfoque no hace énfasis en la obtención de los requerimientos sino en cómo se realizan las fases de diseño y construcción. Sin embargo, fue diseñado para trabajar con otras actividades de desarrollo de software y no requiere la utilización de ningún modelo de proceso específico. Además, hace énfasis en aspectos de calidad durante todo el proceso e incluye un monitoreo permanente del avance del proyecto. Al contrario de otras metodologías, FDD  afirma ser conveniente para el desarrollo de sistemas críticos.

Los desarrolladores entran en dos tipos:

·         Dueños de clases
·         Programadores jefe

Los programadores jefe son los desarrolladores más experimentados. A ellos se les asignan rasgos a construir. Sin embargo ellos no los construyen solos. Sólo identifican qué clases se involucran en la implantación de un rasgo y juntan a los dueños de dichas clases para que formen un equipo para desarrollar ese rasgo. El programador jefe actúa como el coordinador, diseñador líder y mentor, mientras los dueños de clases hacen gran parte de la codificación del rasgo.

FDD tiene cinco procesos. Los primeros tres se hacen al principio del proyecto.

·         Desarrollar un Modelo
·         Global Construir una Lista de los Rasgos
·         Planear por Rasgo
·         Diseñar por Rasgo
·         Construir por Rasgo

En las primeras tres fases se ocupa gran parte del tiempo al inicio del proyecto, pero a medida que se avanza en las iteraciones las otras dos van ocupando más tiempo, y las primeras solo son para el refinamiento del siguiente.

Los últimos dos se hacen en cada iteración. Cada proceso se divide en tareas y se da un criterio de comprobación.


El Proceso

Dicho proceso consiste de cinco fases secuenciales durante las cuales el diseño y la construcción del sistema se llevan a cabo.

La parte iterativa del proceso de FDD (Diseño y Construcción) soporta un desarrollo ágil, con adaptaciones rápidas para cambios de último momento en los requerimientos.

1- Develop an Overall Modell (desarrollar modelo general)
Cuando esta fase comienza, los expertos del dominio ya tienen una idea del contexto y los requerimientos del sistema. Es probable que el documento de especificación de requerimientos ya exista. Sin embargo, FDD no hace énfasis en la recolección y administración de los requerimientos. Los expertos del dominio presentan un informe llamado walkthrough en el cual los miembros del equipo y el Chief Arquitect son informados a través de una descripción de alto nivel del sistema.
El dominio global es dividido en diferentes áreas y se realiza un walkthrough detallado para cada una de dichas áreas por parte de los expertos del dominio. Luego de cada walkthrough, un grupo de desarrolladores realizan un modelo de objetos para el área del dominio. Además, el equipo de desarrollo discute y decide cual es el modelo de objetos más apropiado para cada área del dominio. Simultáneamente, el modelo global del sistema es construido.

2- Build a Features List (construir lista de rasgos)
Los walkthroughs, el modelo de objetos y los requerimientos existentes ofrecen una buena base para construir una features list que resuma la funcionalidad del sistema a ser desarrollado. En dicha lista, el equipo de desarrolladores presenta cada una de las funcionalidades evaluadas por el cliente. Las funcionalidades son presentadas por cada área del dominio y éstas forman un Mejor List Sets. Dicha lista es divida en subconjuntos en base a la funcionalidad. Estas representan diferentes actividades con un área específica del dominio. La features list es revisada por los usuarios y sponsors del sistema para su validación y aprobación.

3- Plan by Feature (planear por rasgos)
En esta etapa se incluye la creación de un plan de alto nivel, en el cual la features list es ordenada en base a la prioridad y a la dependencia entre cada feature. Además, las clases identificadas en la primera etapa son asignadas a cada programador.



3.4.5 ASD

Adaptable Software Development (ASD) es un proceso de desarrollo de software que surgió de un rápido desarrollo de aplicaciones de trabajo por Jim Highsmith y Sam Bayer. Incorpora el principio de que la adaptación continua del proceso a la obra que nos ocupa es el estado normal de las cosas.

Adaptativa de desarrollo de software reemplaza la tradicional cascada ciclo con una serie repetida de especular, colaborar y aprender ciclos. Este ciclo dinámico ofrece para el aprendizaje continuo y la adaptación a la situación emergente del proyecto. Las características de un ciclo de vida de los TEA son que es misión se centró, función basada, iterativo, timeboxed , riesgo impulsada, y cambiar tolerante.

La palabra especular se refiere a la paradoja de la planificación - es más probable que asumir que todas las partes interesadas son comparativamente equivocado para algunos aspectos de la misión del proyecto, al tratar de definirlo colaboración se refiere a los esfuerzos para equilibrar el trabajo basado en las piezas predecibles. el medio ambiente (planificación y orientación de ellos) y la adaptación a la mezcla circundante incierta de los cambios causados ​​por diversos factores - la tecnología, requisitos, los interesados, los proveedores de software, etc Los ciclos de aprendizaje, desafiando a todas las partes interesadas, se basan en las iteraciones cortas con el diseño, construir y pruebas. Durante estas iteraciones el conocimiento se recoge haciendo pequeños errores basados ​​en suposiciones falsas y corregir esos errores, lo que conduce a una mayor experiencia y, finalmente, la maestría en el dominio del problema

Unidad 2 Modelaje de lenguaje unificado (UML)

Unidad 2 Modelaje de lenguaje unificado (UML) 




2.1 Introducción


Lenguaje Unificado de Modelado (LUM o UML, por sus siglas en inglés, Unified Modeling Language) es el lenguaje de modelado de sistemas de software más conocido y utilizado en la actualidad; está respaldado por el OMG (Object Management Group). Es un lenguaje gráfico para visualizar, especificar, construir y documentar un sistema. UML ofrece un estándar para describir un "plano" del sistema (modelo), incluyendo aspectos conceptuales tales como procesos de negocio, funciones del sistema, y aspectos concretos como expresiones de lenguajes de programación, esquemas de bases de datos y compuestos reciclados.

Collage de diagramas UML.

2.2 Tipos de Diagramas 

  • Diagramas de Estructura
  • Diagramas de Comportamiento 



2.3 Diagramas de Estructura


Un diagrama de estructura es un tipo de diagrana en el Lenguaje de Modelado Unificado (UML), que muestra la estructura interna de una clase y las colaboraciones que esta estructura hace posibles. Esto puede incluir partes internas, puertas mediante las cuales, las partes interactúan con cada una de las otras o mediante las cuales, instancias de la clase interactúan con las partes y con el mundo exterior, y conectores entre partes o puertas. 



2.3.1 Diagrama de clase 


Un diagrama de clases es un tipo de diagrama estático que describe la estructura de un sistema mostrando sus clases, orientados a objetos.

  • Propiedad de objetos que tienen propiedades y/u operaciones que contienen un contexto y un dominio, los primeros dos ejemplos son clases de datos y el tercero clase de lógica de negocio, dependiendo de quién diseñe el sistema se pueden unir los datos con las operaciones.
  • El diagrama de clases incluye mucha más información como la relación entre un objeto y otro, la herencia de propiedades de otro objeto, conjuntos de operaciones/propiedades que son implementadas para una interfaz gráfica.
  • Presenta las clases del sistema con sus relaciones estructurales y de herencia.


Ejemplo de Diagrama de clase 


2.3.2 Diagrama  de Componentes


Un diagrama de componentes es un diagrama tipo del Lenguaje Unificado de Modelado.
Un diagrama de componentes representa cómo un sistema de software es dividido en componentes y muestra las dependencias entre estos componentes. Los componentes físicos incluyen archivos, cabeceras, bibliotecas compartidas, módulos, ejecutables, o paquetes. Los diagramas de Componentes prevalecen en el campo de la arquitectura de software pero pueden ser usados para modelar y documentar cualquier arquitectura de sistema




2.3.3 Diagrama de Objetos


Los diagramas de objetos son utilizados durante el proceso de Análisis y Diseño de los sistemas informáticos en la metodología UML.
Se puede considerar un caso especial de un diagrama de clases en el que se muestran instancias específicas de clases (objetos) en un momento particular del sistema. Los diagramas de objetos utilizan un subconjunto de los elementos de un diagrama de clase. Los diagramas de objetos no muestran la multiplicidad ni los roles, aunque su notación es similar a los diagramas de clase.
Una diferencia con los diagramas de clase es que el compartimiento de arriba va en la forma Nombre de objeto: Nombre de clase.

Ejemplo de Diagrama de Objetos


2.3.4 Diagramas de Paquetes 


En el Lenguaje Unificado de Modelado, un diagrama de paquetes muestra cómo un sistema está dividido en agrupaciones lógicas mostrando las dependencias entre esas agrupaciones. Dado que normalmente un paquete está pensado como un directorio, los diagramas de paquetes suministran una descomposición de la jerarquía lógica de un sistema.
Los Paquetes están normalmente organizados para maximizar la coherencia interna dentro de cada paquete y minimizar el acoplamiento externo entre los paquetes. Con estas líneas maestras sobre la mesa, los paquetes son buenos elementos de gestión. Cada paquete puede asignarse a un individuo o a un equipo, y las dependencias entre ellos pueden indicar el orden de desarrollo requerido.



2.3.5 Diagrama de actividades


En Lenguaje Unificado de Modelado (UML), un diagrama de actividades representa los flujos de trabajo paso a paso de negocio y operacionales de los componentes en un sistema. Un diagrama de actividades muestra el flujo de control general.

Características 

Un diagrama de flujo presenta generalmente un único punto de inicio y un único punto de término, aunque puede tener más, siempre que cumpla con la lógica requerida.
Las siguientes son acciones previas a la realización del diagrama de flujo:
  • Identificar las ideas principales al ser incluidas en el diagrama de flujo. Deben estar presentes el autor o responsable del proceso, los autores o responsables del proceso anterior y posterior y de otros procesos interrelacionados, así como las terceras partes interesadas.
  • Definir qué se espera obtener del diagrama de flujo.
  • Identificar quién lo empleará y cómo.
  • Establecer el nivel de detalle requerido.
  • Determinar los límites del proceso a describir.
Los pasos a seguir para construir el diagrama de flujo son:
  • Establecer el alcance del proceso a describir. De esta manera quedará fijado el comienzo y el final del diagrama. Frecuentemente el comienzo es la salida del proceso previo y el final la entrada al proceso siguiente.
  • Identificar y listar las principales actividades/subprocesos que están incluidos en el proceso a describir y su orden cronológico.
  • Si el nivel de detalle definido incluye actividades menores, listarlas también.
  • Identificar y listar los puntos de decisión.
  • Construir el diagrama respetando la secuencia cronológica y asignando los correspondientes símbolos.
  • Asignar un título al diagrama y verificar que esté completo y describa con exactitud el proceso elegido.



2.4 Diagramas de comportamiento 


Los diagramas de comportamiento se emplean para visualizar, especificar, construir y documentar los aspectos dinámicos de un sistema.

Los aspectos dinámicos de un sistema de software involucran cosas tales como el flujo de mensajes a lo largo del tiempo y el movimiento físico de componentes en una red. 




2.4.1 Diagrama de Caso de uso 

En el Lenguaje de Modelado Unificado, un diagrama de casos de uso es una especie de diagrama de comportamiento UML mejorado. El Lenguaje de Modelado Unificado (UML), define una notación gráfica para representar casos de uso llamada modelo de casos de uso. UML no define estándares para que el formato escrito describa los casos de uso, y así mucha gente no entiende que esta notación gráfica define la naturaleza de un caso de uso; sin embargo una notación gráfica puede solo dar una vista general simple de un caso de uso o un conjunto de casos de uso. Los diagramas de casos de uso son a menudo confundidos con los casos de uso. Mientras los dos conceptos están relacionados, los casos de uso son mucho más detallados que los diagramas de casos de uso.
  • La descripción escrita del comportamiento del sistema al afrontar una tarea de negocio o un requisito de negocio. Esta descripción se enfoca en el valor suministrado por el sistema a entidades externas tales como usuarios humanos u otros sistemas.
  • La posición o contexto del caso de uso entre otros casos de uso. Dado que es un mecanismo de organización, un conjunto de casos de uso coherentes y consistentes promueven una imagen fácil de comprender del comportamiento del sistema, un entendimiento común entre el cliente/propietario/usuario y el equipo de desarrollo.





2.4.2 Diagramas de Secuencia 

El diagrama de secuencia es un tipo de diagrama usado para modelar interacción entre objetos en un sistema según uml . En inglés se pueden encontrar como "sequence diagram", "event-trace diagrams", "event scenarios" o "timing diagrams"

Utilidad 

Un diagrama de secuencia muestra la interacción de un conjunto de objetos en una aplicación a través del tiempo y se modela para cada caso de uso. Mientras que el diagrama de casos de uso permite el modelado de una vista business del escenario, el diagrama de secuencia contiene detalles de implementación del escenario, incluyendo los objetos y clases que se usan para implementar el escenario y mensajes intercambiados entre los objetos.
Típicamente se examina la descripción de un caso de uso para determinar qué objetos son necesarios para la implementación del escenario. Si se dispone de la descripción de cada caso de uso como una secuencia de varios pasos, entonces se puede "caminar sobre" esos pasos para descubrir qué objetos son necesarios para que se puedan seguir los pasos. Un diagrama de secuencia muestra los objetos que intervienen en el escenario con líneas discontinuas verticales, y los mensajes pasados entre los objetos como flechas horizontales.


2.4.3 Diagramas de Estado

Los diagramas de estado muestran el conjunto de estados por los cuales pasa un objeto durante su vida en una aplicación en respuesta a eventos (por ejemplo, mensajes recibidos, tiempo rebasado o errores), junto con sus respuestas y acciones. También ilustran qué eventos pueden cambiar el estado de los objetos de la clase. Normalmente contienen: estados y transiciones. Como los estados y las transiciones incluyen, a su vez, eventos, acciones y actividades, vamos a ver primero sus definiciones.
Al igual que otros diagramas, en los diagramas de estado pueden aparecer notas explicativas y restricciones.




2.4.4 Diagramas de Colaboración

Un diagrama de colaboración en las versiones de UML es esencialmente un diagrama que muestra interacciones organizadas alrededor de los roles. A diferencia de los diagramas de secuencia, los diagramas de colaboración, también llamados diagramas de comunicación, muestran explícitamente las relaciones de los roles. Por otra parte, un diagrama de comunicación no muestra el tiempo como una dimensión aparte, por lo que resulta necesario etiquetar con números de secuencia tanto la secuencia de mensajes como los hilos concurrentes.
  • Muestra cómo las instancias específicas de las clases trabajan juntas para conseguir un objetivo común.
  • Implementa las asociaciones del diagrama de clases mediante el paso de mensajes de un objeto a otro. Dicha implementación es llamada "enlace".
Un diagrama de comunicación es también un diagrama de clases que contiene roles de clasificador y roles de asociación en lugar de sólo clasificadores y asociaciones. Los roles de clasificador y los de asociación describen la configuración de los objetos y de los enlaces que pueden ocurrir cuando se ejecuta una instancia de la comunicación. Cuando se instancia una comunicación, los objetos están ligados a los roles de clasificador y los enlaces a los roles de asociación. El rol de asociación puede ser desempeñado por varios tipos de enlaces temporales, tales como argumentos de procedimiento o variables locales del procedimiento. Los símbolos de enlace pueden llevar estereotipos para indicar enlaces temporales.



2.4.5 Diagramas de Distribución 


El  diagrama de distribución UML muestra la arquitectura física de un sistema informático. Puede representar a los equipos y a los dispositivos,  y también mostrar sus interconexiones y el software que se encontrará  en cada máquina.  



2.5 Adaptación de UML al proceso de desarrollo 

La estructura y naturaleza de los pasos en un esfuerzo de desarrollo es lo que se conoce metodología.
Método antiguo
El método en “cascada”, y establece que el análisis, diseño, codificación y distribución van uno después de otro como las actividades en un diagrama de actividades, solamente cuando se haya completado uno se podrá iniciar otro, este medoto reduce el impacto de la compresión obtenida en el proyecto.

El método reciente

La moderna ingeniria de programas tiende a la colaboración entre las fases del desarrollo. La ventaja es que conforme crece la compresión, el equipo incorpora nuevas ideas y genera un sistema mas confiable.
Proceso de desarrollo.

El equipo tiene que formarse de analistas para comunicarse con el cliente y comprender el problema, diseñadores para generar una solución, programadores para codificarla e ingenieros de sistemas para distribuirla; además de utilizar adecuadamente y asignar el tiempo necesario para cada fase.

Un equipo de desarrollo deberá:

* Asegurar que el equipo de desarrollo cuenta con una firme compresión del problema que se intenta resolver.
* Dar pie a un equipo que conste de una colección de responsabilidades.
* Fomentar la comunicación entre los miembros del equipo que ostente tales responsabilidades.
* Dar pie a la intercomunicación entre las fases del proceso de desarrollo.
* Desarrollar productos de trabajo que comuniquen el progreso al cliente, y eliminar el papeleo superfluo.

GRAPPLE

Para enfrentar este reto de varias facetas, GRAPPLE( Guias para la ingeniería de aplicaciones rapidas), es un conjunto de ideas adaptables y flexibles, da la oportunidad a un gerente de proyectos, con creatividad, de agregar sus propias ideas respecto a lo que funcionara en una organización en particular, y puede sustraer los pasos incluidos que no funcionen.



Unidad 1 Paradigma Orientado a Objetos

Unidad 1 Paradigma Orientado a Objetos

Conceptos Básicos.


¿Qué es la Orientación a Objetos?

Es una manera de pensar, otra manera de resolver un problema; lo más reciente en metodologías de desarrollo de software. Es un proceso mental humano aterrizado en una computadora. Antes se adecuaba el usuario al entendimiento de la computadora. Actualmente, se le enseña a la computadora a entender el problema.

La Orientación a Objetos es un paradigma, es decir, es un modelo para aclarar algo o para explicarlo. La Orientación a Objetos es el paradigma que mejora el diseño, desarrollo y mantenimiento del software ofreciendo una solución a largo plazo a los problemas y preocupaciones que han existido desde el comienzo del desarrollo del software:

La falta de potabilidad del código, su reusabilidad, la modificación (que antes era difícil de lograr), ciclos de desarrollo largo, técnicas de programación no intuitivas.
La Orientación a Objetos está basada en los tres métodos de organización que utilizamos desde la infancia; entre un objeto y sus atributos (automóvil > marca, color, número de llantas, etc.); Entre un objeto y sus componentes donde incluso otros objetos pueden formar parte de otros objetos (agregación) (camión > motor, parabrisas, llantas); entre un objeto y su relación con otros objetos (camión > vehículos automotores; una bicicleta no entraría en esta relación).
La metodología del software orientado a objetos consiste en:
·         Saber el espacio del problema
·         Realizar una abstracción
·         Crear los objetos (espacio de la solución)
·         Instanciarlos (esto es, traerlos a la vida)
·         Dejarlos vivir (ellos ya saben lo que tienen que hacer)



Abstracción.


Expresa las características esenciales de un objeto, las cuales distinguen al objeto de los demás.
Imaginemos que queremos aplicar la abstracción a las Aves.
El objeto seria el pájaro, y sus características, por ejemplo, serian:
      Pico
      Alas
      Plumas
      Patas
Las funcionalidades asociadas serian:
·         Volar
·         Parar
·         etc. 


Herencia.


Es una propiedad que permite que los objetos sean creados a partir de otros ya existentes, obteniendo características (métodos y atributos) similares a los ya existentes.
¢  El gato y el Perro tendrían la herencia (métodos y atributos) del Mamífero.

Polimorfismo.


Es la capacidad que tienen los objetos de una clase de responder al mismo mensaje o evento en función de los parámetros utilizados durante su invocación
Hay dos tipos:
Dinámico: es el que el código no incluye ningún tipo de especificación sobre el tipo de datos.
Estático: es el que los tipos a los que se aplica el polimorfismo deben ser explicitados y declarados uno por uno antes de ser utilizados.

Encapsulamiento.


La encapsulación es un mecanismo que consiste en organizar datos y métodos de una estructura, conciliando el modo en que el objeto se implementa, es decir, evitando el acceso a datos por cualquier otro medio distinto a los especificados. Por lo tanto, la encapsulación garantiza la integridad de los datos que contiene un objeto.
Ocultación de datos
público: funciones de toda clase pueden acceder a los datos o métodos de una clase que se define con el nivel de acceso público. Este es el nivel de protección de datos más bajo
protegido: el acceso a los datos está restringido a las funciones de clases heredadas, es decir, las funciones miembro de esa clase y todas las subclases
privado: el acceso a los datos está restringido a los métodos de esa clase en particular. Este es nivel más alto de protección de datos

Asociaciones.


Una asociación es una conexión entre clases, una conexión (enlace) semántica entre objetos de las clases implicadas en la asociación. El establecimiento de una asociación define los roles (papeles) o dependencias entre objetos de dos clases y su cordialidades (multiplicidad); es decir, cuantas instancias (ejemplares) de cada clase pueden estar implicadas en una asociación.
Una asociación es, normalmente, bidireccional, lo que significa que si un objeto se asocia con otros objetos, ambos objetos se conocen entre sí. Una asociación representa que objetos de dos clases tienen un enlace entre ellos, lo que significa por ejemplo, que ellos conocen sobre los otros, están conectados a, para cada x hay una y, etc. La asociación se representa por una línea que une a las dos clases y el nombre de la asociación se escribe en la línea.

Agregación.


Una agregación es una relación que representa a los objetos compuestos. Un objeto es compuesto si se compone a su vez de otros objetos. La agregación de objetos permite describir modelos del mundo real que se componen de otros modelos, que a su vez se componen de otros modelos.


Este es un concepto que se utiliza para expresar tipos de relaciones entre objetos parte-de (part-of) o tiene-un(has-a). El objeto componente, también a veces denominado continente o contenedor, es un objeto agregado que se compone de múltiples objetos.

viernes, 29 de noviembre de 2013

Instituto Tecnológico de Apizaco 



MOD O.O.Y DES. AGIL




M.C. EDUARDO SANCHEZ LUCERO


Jesús García Piña 

Eros Jiar Monroy Garrido