Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
See discussions, stats, and author profiles for this publication at: https://www.researchgate.net/publication/267196110 Análisis, Diseño y Mantenimiento del Software Article CITATION 1 READS 3,092 2 authors: Manuel Arias National Distance Education University 19 PUBLICATIONS 114 CITATIONS SEE PROFILE Angeles Manjarrés Riesco National Distance Education University 52 PUBLICATIONS 260 CITATIONS SEE PROFILE All content following this page was uploaded by Angeles Manjarrés Riesco on 20 January 2015. The user has requested enhancement of the downloaded file. https://www.researchgate.net/publication/267196110_Analisis_Diseno_y_Mantenimiento_del_Software?enrichId=rgreq-b8bfb07b89eca4df65cd21806045909d-XXX&enrichSource=Y292ZXJQYWdlOzI2NzE5NjExMDtBUzoxODc2MjI1MTMxOTI5NjBAMTQyMTc0NDEwMTM0Mg%3D%3D&el=1_x_2&_esc=publicationCoverPdf https://www.researchgate.net/publication/267196110_Analisis_Diseno_y_Mantenimiento_del_Software?enrichId=rgreq-b8bfb07b89eca4df65cd21806045909d-XXX&enrichSource=Y292ZXJQYWdlOzI2NzE5NjExMDtBUzoxODc2MjI1MTMxOTI5NjBAMTQyMTc0NDEwMTM0Mg%3D%3D&el=1_x_3&_esc=publicationCoverPdf https://www.researchgate.net/?enrichId=rgreq-b8bfb07b89eca4df65cd21806045909d-XXX&enrichSource=Y292ZXJQYWdlOzI2NzE5NjExMDtBUzoxODc2MjI1MTMxOTI5NjBAMTQyMTc0NDEwMTM0Mg%3D%3D&el=1_x_1&_esc=publicationCoverPdf https://www.researchgate.net/profile/Manuel-Arias?enrichId=rgreq-b8bfb07b89eca4df65cd21806045909d-XXX&enrichSource=Y292ZXJQYWdlOzI2NzE5NjExMDtBUzoxODc2MjI1MTMxOTI5NjBAMTQyMTc0NDEwMTM0Mg%3D%3D&el=1_x_4&_esc=publicationCoverPdf https://www.researchgate.net/profile/Manuel-Arias?enrichId=rgreq-b8bfb07b89eca4df65cd21806045909d-XXX&enrichSource=Y292ZXJQYWdlOzI2NzE5NjExMDtBUzoxODc2MjI1MTMxOTI5NjBAMTQyMTc0NDEwMTM0Mg%3D%3D&el=1_x_5&_esc=publicationCoverPdf https://www.researchgate.net/institution/National-Distance-Education-University?enrichId=rgreq-b8bfb07b89eca4df65cd21806045909d-XXX&enrichSource=Y292ZXJQYWdlOzI2NzE5NjExMDtBUzoxODc2MjI1MTMxOTI5NjBAMTQyMTc0NDEwMTM0Mg%3D%3D&el=1_x_6&_esc=publicationCoverPdf https://www.researchgate.net/profile/Manuel-Arias?enrichId=rgreq-b8bfb07b89eca4df65cd21806045909d-XXX&enrichSource=Y292ZXJQYWdlOzI2NzE5NjExMDtBUzoxODc2MjI1MTMxOTI5NjBAMTQyMTc0NDEwMTM0Mg%3D%3D&el=1_x_7&_esc=publicationCoverPdf https://www.researchgate.net/profile/Angeles-Riesco?enrichId=rgreq-b8bfb07b89eca4df65cd21806045909d-XXX&enrichSource=Y292ZXJQYWdlOzI2NzE5NjExMDtBUzoxODc2MjI1MTMxOTI5NjBAMTQyMTc0NDEwMTM0Mg%3D%3D&el=1_x_4&_esc=publicationCoverPdf https://www.researchgate.net/profile/Angeles-Riesco?enrichId=rgreq-b8bfb07b89eca4df65cd21806045909d-XXX&enrichSource=Y292ZXJQYWdlOzI2NzE5NjExMDtBUzoxODc2MjI1MTMxOTI5NjBAMTQyMTc0NDEwMTM0Mg%3D%3D&el=1_x_5&_esc=publicationCoverPdf https://www.researchgate.net/institution/National-Distance-Education-University?enrichId=rgreq-b8bfb07b89eca4df65cd21806045909d-XXX&enrichSource=Y292ZXJQYWdlOzI2NzE5NjExMDtBUzoxODc2MjI1MTMxOTI5NjBAMTQyMTc0NDEwMTM0Mg%3D%3D&el=1_x_6&_esc=publicationCoverPdf https://www.researchgate.net/profile/Angeles-Riesco?enrichId=rgreq-b8bfb07b89eca4df65cd21806045909d-XXX&enrichSource=Y292ZXJQYWdlOzI2NzE5NjExMDtBUzoxODc2MjI1MTMxOTI5NjBAMTQyMTc0NDEwMTM0Mg%3D%3D&el=1_x_7&_esc=publicationCoverPdf https://www.researchgate.net/profile/Angeles-Riesco?enrichId=rgreq-b8bfb07b89eca4df65cd21806045909d-XXX&enrichSource=Y292ZXJQYWdlOzI2NzE5NjExMDtBUzoxODc2MjI1MTMxOTI5NjBAMTQyMTc0NDEwMTM0Mg%3D%3D&el=1_x_10&_esc=publicationCoverPdf Análisis, Diseño y Mantenimiento del Software Manuel Arias Calleja y Ángeles Manjarrés Riesco Dpto. de Inteligencia Arti�cial - ETSI Informática - UNED Actualizada en Octubre de 2006 Parte correspondiente al primer parcial II Índice general Guía de estudio de la asignatura V Presentación y objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . V Contexto y conocimientos previos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . V Esquema y resumen de contenidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . VI Material y medios de estudio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . VII 1. Contexto de la asignatura en la Ingeniería de Software 1 1.1. Necesidad de una metodología . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1.1. Sistemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1.2. La crisis del software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1.3. De�nición de metodología . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1.4. Finalidad de una metodología . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1.5. Taxonomía de las metodologías . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2. Ciclo de vida del software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2.1. Ciclos de vida en cascada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.2.2. Modelo de ciclo de vida en espiral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.2.3. Ciclos de vida orientados a objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.3. Notaciones de especi�cación y diseño (UML) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.3.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.3.2. Modelo de casos de uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.3.3. Modelo estructural estático . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.3.4. Modelo de comportamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 1.3.5. Modelo estructural de implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Ejercicios y actividades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 2. Fase de especi�cación 27 2.1. Obtención de requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.1.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 2.1.2. Técnicas de obtención de requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.2. Análisis de requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.3. Representación de requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.4. Análisis orientado a objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.5. Validación de requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.6. Bases de documentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Ejercicios y actividades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 3. Fase de diseño 43 3.1. Conceptos y elementos del diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 3.1.1. Patrones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 3.2. Diseño estructurado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3.3. Diseño orientado a objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47 3.4. Validación y con�rmación del diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3.4.1. Revisión del diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3.4.2. Veri�cación del diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3.4.3. Validación del diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3.5. Documentación: especi�cación del diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Ejercicios y actividades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 4. Fase de implementación 53 4.1. Guías de estilo de codi�cación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 4.1.1. Traducción del diseño a la implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 4.1.2. Estilo de programación orientado a objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 4.1.3. Normas para programadores en C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 4.1.4. Normas para programadores en C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61III IV Índice general 4.1.5. Normas para programadores en Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 4.2. Técnicas de depuración . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 4.3. Documentación del código . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 4.3.1. Tipos de comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 4.3.2. Consideraciones generales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Bibliografía 75 Índice alfabético 76 Guía de estudio de la asignatura Autores: Manuel Arias Calleja. Basado en una versión del año 2003 por Manuel Arias Calleja y José Ramón Álvarez Sánchez. Revisado: Octubre de 2006 por Manuel Arias Calleja y Ángeles Manjarrés Riesco Revisión de los elementos del UML: Ángeles Manjarrés y Manuel Arias Calleja Revisión de los principios de orientación a objetos: Manuel Arias Asignatura: Análisis, Diseño y Mantenimiento de Software Código: 55-402-4 (4o curso de la titulación: �Ingeniero Informático�) Breve descripción: Análisis y de�nición de requisitos. Diseño, propiedades y mantenimiento del software. Presentación y objetivos El objetivo principal de la Ingeniería del software (IS) es el desarrollo y mantenimiento de software de forma sistemática y productiva, asegurando su calidad, �abilidad y facilidad de uso. Los enfoques más comunes de la docencia de la IS, se centran en el análisis de los procesos de desarrollo y mantenimiento, así como de las técnicas integrales y de apoyo al servicio de la obtención de productos de alta calidad que satisfagan al usuario. Esta Guía didáctica está diseñada para conducir el estudio de la asignatura en sus aspectos puramente técnicos, que serán los evaluados en las pruebas presenciales. En la Guía de Curso se detallan objetivos docentes adicionales que serán cubiertos mediante actividades NO obligatorias que los alumnos podrán seguir en los cursos virtuales a la vez que estudian el temario convencional. Contexto y conocimientos previos Contexto académico previo Ingeniería del software es una materia troncal del segundo ciclo que en la titulación de Ingeniero en Informática, impartida por la ETSII de la Universidad Nacional de Educación a Distancia (Resolución de 21 de marzo de 2001, BOE 10 de abril), se ha dividido en dos asignaturas obligatorias y anuales del cuarto curso, cada una de las cuales tiene asignados 9 créditos (5 teóricos y 4 prácticos). Las denominaciones que se han dado a estas dos asignaturas complementarias son Análisis, Diseño y Mantenimiento del software (descrita como �Análisis y de�nición de requisitos. Diseño, propiedades y mantenimiento del software�) y Análisis y Gestión del Desarrollo del Software (descrita como �Análisis de aplicaciones. Gestión de con�guraciones. Plani�cación y gestión de proyectos informáticos�). Ambas asignaturas se hayan fuertemente vinculadas, en tanto que se complementan para proporcionar una visión general del proceso completo de la producción de software, tanto desde un punto de vista técnico como humano, vertientes que caracterizan todo proceso de ingeniería. El programa de la asignatura Análisis y Gestión del Desarrollo del Software está estructurado en dos cuatrimestres. El primer cuatrimestre se dedica al Proceso Software Personal (PSP), cuyo objetivo es la adquisición de una correcta disciplina personal para el desarrollo de un software de calidad en los plazos y costes comprometidos. El segundo cuatrimestre está dedicado a la gestión global del proceso de desarrollo software en el que intervienen decenas o centenares de ingenieros. Su objetivo es también obtener un software de calidad en los plazos y costes plani�cados, si bien en este caso se destacan la problemática y las técnicas asociadas al trabajo en equipo. Las asignaturas de Ingeniería del software deberían, idealmente, ser cursadas en paralelo por los alumnos, dado su carácter mutuamente complementario. En de�nitiva, el objeto de la asignatura Análisis y Gestión del Desarrollo del Software es mostrar cómo se evalúan las técnicas de ingeniería estudiados en la asignatura Análisis, Diseño y Mantenimiento del software, y cómo se aplican en un contexto profesional. Otras asignaturas relacionadas Son muchas y diversas las asignaturas de la titulación relacionadas con la asignatura Análisis, Diseño y Mantenimiento del Software. El haber cursado algunas de estas asignaturas (o bien las asignaturas equivalentes de carreras impartidas en otras universidades) es requisito imprescindible para su adecuado seguimiento.V VI Índice general En concreto, es razonable esperar que el alumno matriculado en Ingeniería del software haya seguido previamente las asig- naturas obligatorias del primer ciclo Ingeniería del software e Ingeniería del Software de Gestión, como iniciación a la materia objeto de esta memoria (dada la extensión de los contenidos, es conveniente que el alumno parta de una visión introductoria y general de la ingeniería de software, conozca los modelos de ciclo de vida básicos y alguna metodología estructurada). Por otro lado, el alumno sólo podrá dar pleno sentido al contenido de esta materia si ha cursado las asignaturas que se encuadran en el componente que en la sección anterior se ha etiquetado por Fundamentos de la computación. Entre tales asig- naturas se cuentan las relacionadas con la teoría de la programación (Programación I, Programación II, Programación III, Es- tructura de Datos y Algoritmos y Lenguajes de Programación, todas ellas asignaturas obligatorias del primer ciclo), y las que estudian la teoría de la computabilidad (Teoría de autómatas I, Teoría de autómatas II). (Obviamente, la comprensión de las mencionadas asignaturas a su vez ha exigido del alumno los conocimientos matemáticos que se proporcionan en las asignaturas Lógica matemática, Análisis Matemático, Algebra, Ampliación de Matemáticas y Matemática discreta. Resulta asimismo altamente recomendable que el alumno haya cursado también algunas asignaturas relacionadas con los temas anteriores pero de una orientación más práctica y especí�ca. Es el caso de las optativas del tercer curso Programación Concurrente, Programación Declarativa y Programación Orientada a la Inteligencia Arti�cial (orientadas a la programación), y Diseño y Evaluación de Con�guraciones, y Con�guración, Diseño y Gestión de Sistemas Informáticos.Es también de interés, si bien no imprescindible para la asimilación de los contenidos, que el alumno disponga de conocimien- tos del campo de la Inteligencia Arti�cial. En particular, la asignatura Sistemas basados en conocimiento I, asignatura optativa del tercer curso, aborda el estudio de las diferentes fases del ciclo de desarrollo de un sistema experto, coincidentes en lo esencial con las fases de desarrollo de los productos software convencionales. Sin duda el alumno que haya estudiado esta asignatura dispondrá de una visión más abierta, y la re�exión sobre los paralelismos y discrepancias entre ambas disciplinas le ayudará a profundizar en la materia. De hecho, a medida que aumenta la complejidad de las aplicaciones software en dominios no tradi- cionalmente abordados por la Inteligencia arti�cial, la ingeniería del conocimiento y la IS convencional han ido eliminando progresivamente sus difusas fronteras, y comenzado a bene�ciarse mutuamente de sus respectivos avances. En concreto, el uso de las técnicas OO se ha generalizado en todos los ámbitos, y las técnicas de formalización de requisitos se ven enriquecidas por los interesantes resultados obtenidos en el campo del procesamiento del lenguaje natural, tradicionalmente estudiado en la Inteligencia Arti�cial. El conocimiento de los principios básicos de la Inteligencia Arti�cial, que se estudian en la asignatura obligatoria del segundo curso Introducción a la Inteligencia Arti�cial, es también sin duda de utilidad en este contexto. En el programa del 4o curso existe un grupo de asignaturas que guarda una evidente relación con la Ingeniería del software, y que resulta interesante que el alumno estudie en paralelo con las asignaturas de Ingeniería del software, tratando de establecer las oportunas conexiones. Es particularmente el caso de la asignatura obligatoria Lógica computacional, donde se estudian los fun- damentos de las técnicas formales de desarrollo software y de la asignatura Inteligencia Arti�cial e Ingeniería del Conocimiento, que redunda en el estudio de las técnicas de la ingeniería del conocimiento. Finalmente, es preciso destacar que los conocimien- tos adquiridos en estas asignaturas son esenciales para el seguimiento de una buena parte de las asignaturas del quinto curso, en particular, de las obligatorias Sistemas Informáticos I, Sistemas Informáticos II y Sistemas Informáticos III, más las optativas Aprendizaje y Personalización del Software, Diseño de Sistemas de Trabajo Cooperativo (CSCW) y Calidad de Software; y sir- ven de introducción a las asignaturas optativas Sistemas en tiempo real, Seguridad en las comunicaciones y en la información y Sistemas de comunicación de datos. Asimismo son obviamente indispensables para la realización del Proyecto de Fin de Carrera, ejercicio de desarrollo de un proyecto informático que debe llevarse a cabo con el rigor de un proyecto real, y que es obligatorio para la obtención del título. Por supuesto será fundamental para la formación posterior del alumno titulado y para el ejercicio de su práctica profesional. Esquema y resumen de contenidos A continuación exponemos un resumen de los temas que componen el contenido de la asignatura que se expandirá más adelante. Estos temas se podrían agrupar en tres partes que se corresponden con los objetivos presentados anteriormente: Parte I: Introducción. Tema 1. Parte II: Fases de Construcción. Temas 2 al 6. Parte III: Metodologías y Herramientas. Temas 7 y 8. La primera parte es preparatoria e incluye la introducción y ubicación de los elementos que van a conformar la asignatura. En la segunda parte se van describiendo las distintas fases del desarrollo y mantenimiento del software. La parte �nal incluye un conjunto de metodologías donde se recopilan y organizan de diferentes formas las fases, junto con algunas herramientas de desarrollo. Esta asignatura es anual y por lo tanto se divide en dos parciales. A los efectos de exámenes parciales se considera que los temas del 1 al 4 pertenecen al primer parcial y los temas del 5 al 8 pertenecen al segundo parcial. Esquema: Tema 1: Contexto de la Asignatura en la IS • Necesidad de una metodología • Ciclo de vida del software • Notaciones de especi�cación y diseño Índice general VII Tema 2: Fase de Requisitos • Obtención de requisitos • Análisis de requisitos • Representación de requisitos • Validación de requisitos • Bases de documentación Tema 3: Fase de Diseño • Conceptos y elementos del diseño • Métodos de diseño • Validación y con�rmación del diseño • Documentación: especi�cación del diseño Tema 4: Fase de Implementación • Guías de estilo de codi�cación • Iteración de pruebas y depuración • Manuales técnico y de usuario Tema 5: Fases de Pruebas • Veri�cación y validación a lo largo del ciclo de vida • Técnicas y métodos de prueba • Documentación de pruebas Tema 6: Fase de Entrega y Mantenimiento • Finalización del proyecto • Plani�cación de revisiones y organización del mantenimiento • Recopilación y organización de documentación Tema 7: Metodologías de Desarrollo • Proceso Uni�cado de Rational • Método Extreme Programming • Métodos de software libre: �catedral� vs. �bazar� Tema 8: Herramientas de Desarrollo y Validación • Herramientas CASE • CVS (Concurrent Versioning System) • Entornos de desarrollo de interfaces Material y medios de estudio Estructura de esta Guía Didáctica y libro base En los siguientes capítulos de esta guía de estudio se detallan los contenidos con la información que el alumno de educación a distancia necesita para poder estudiar la asignatura. Al principio de cada capítulo se incluye un �Tutorial previo� con los elementos que describen el contexto, conocimiento previo, objetivos y guía de estudio para ese capítulo. En esta asignatura se utilizará como material básico de estudio el libro [Pre05] (opcionalmente se podrá seguir la asignatura con la edición anterior [Pre01], pero la referencia para las preguntas de los exámenes es la sexta edición): Roger S. Pressman. Ingeniería de Software: un Enfoque Práctico. McGraw-Hill, 2005 Este libro base cubre la mayor parte del temario. En esta guía los contenidos de cada capítulo se sustituirán por la referencia (entre corchetes como [Pre05, sec. ... y cap ...]) a los apartados del libro base, o bien se incluirán desarrollados directamente en esta guía si no existe una correspondencia directa con el libro base. Al �nal de cada capítulo se incluye en esta guía un �Tutorial posterior� que contiene ejercicios o actividades propuestas adicionales a las que aparecen en el libro base, para que el alumno pueda comprobar si ha logrado los objetivos del capítulo, y también información adicional para la extensión de conocimientos para los alumnos interesados en profundizar en el tema, junto con referencias alternativas sobre los mismos contenidos. Al �nal de esta guía didáctica se incluye en un apéndice el glosario de términos habituales en la Ingeniería de Software que pueden aparecer en el contenido1, también se incluye una recopilación de referencias bibliogra�cas (recomendadas o referidas en el material), más un indice alfabético de referencia para conceptos y términos que aparecen en el material. 1Además al �nal del libro base [Pre05] o [Pre01] hay un apéndice que recopila todas las siglas en ingles y castellano usadas profusamente en Ingeniería del Software. VIII Índice general Medios Adicionales Adicionalmente a esta guía, el alumno dispondrá de los medios de comunicación habituales con su Profesor Tutor en el Centro Asociado o a través de las Tutorías Telemáticas (o Cursos Virtuales) de la UNED http://virtual.uned.es/, y también con el Equipo Docente en la Sede Central (en las direcciones, teléfonos y horarios indicados en la Guía de Curso). Esto se complementa con los canales de comunicación y recopilación de información tanto en soporte físico (CDROM) como en línea a través de la página de Internet de la asignatura en la UNED http://www.ii.uned.es/superior/cuarto/ADMSoft.html. En todos estosmedios se incluirá la información particular de referencias y contenidos que se detallan en los capítulos de esta guía, con la ventaja adicional de que en los medios en línea los enlaces de direcciones en Internet y otros materiales se irán ampliando y actualizando más frecuentemente. Se recomienda encarecidamente el seguimiento de los cursos virtuales. Además del libro base (que contiene al �nal de cada capítulo �otras lecturas y fuentes de información�) y del material incluido en esta guía, también se recomiendan como bibliografía complementaria general los libros [Som98] (o la edición en inglés más reciente [Som01]) y [RBP+96]: Ian Sommerville. Ingeniería de Software. Addison-Wesley Iberoamericana, 1998 James Rumbaugh, Michael Blaha, William Premerlani, Frederick Eddy, and William Lorensen. Modelado y diseño orien- tado a objetos. Metodología OMT y OMT II. Prentice Hall, 1996 Evaluación La evaluación o�cial de la asignatura se hará por medio de las pruebas presenciales habituales de la UNED. Se harán dos pruebas parciales, una para cada cuatrimestre. Las pruebas subjetivas consistirán en una parte de preguntas teóricas breves sobre aspectos relevantes del temario correspondiente, más posiblemente otra parte práctica compuesta de ejercicios con supuestos prácticos que describirán parcialmente un problema de diseño de software sobre el cual se pedirá al alumno completar o extender algunos aspectos relacionados con el temario correspondiente. La puntuación correspondiente a cada pregunta se especi�cará en el enunciado. En la nota �nal se tendrá en cuenta la compensación entre preguntas dentro de un mismo examen parcial así como la compensación de ambos parciales. Los parciales compensan a partir de 4 y se guardan hasta septiembre. En algunos capítulos puede haber propuestas para realizar prácticas por el propio alumno, estas serán totalmente voluntarias (y que por tanto no podrán ser tenidas en cuenta para la puntuación de la nota �nal), pero se recomienda al alumno su realización para ayudarle a una mejor comprensión de los temas. Capítulo 1 Contexto de la asignatura en la Ingeniería de Software Tutorial previo Introducción Al inicio de la asignatura es conveniente repasar algunos conceptos generales sobre Ingeniería de Software e introducir los temas que se van a estudiar. En el desarrollo de sistemas software es necesario plani�car el uso de recursos y temporizar adecuadamente las diferentes actividades para no sobrepasar los límites económicos y de tiempo dedicados a un proyecto. Es principalmente con este objetivo que se han ido desarrollando el conjunto de técnicas que reciben el nombre de Ingeniería del Software. Gracias a estas técnicas el desarrollo del software se sistematiza en la medida de lo posible, de modo que el resultado sea previsiblemente aceptable, es decir, cumpla las expectativas planteadas en términos de tiempo de desarrollo, precio �nal, mantenibilidad y e�ciencia. Una metodología de desarrollo reúne un conjunto de prácticas que se ejercen en las diferentes fases del ciclo de vida de un producto software. Esas fases son: especi�cación, diseño, codi�cación, pruebas y mantenimiento. Para dar soporte a las diferentes etapas, y particularmente a las etapas de análisis y diseño, se han de�nido notaciones de modelado tales como el difundido estándar UML. En este primer capítulo se muestra la utilidad de seguir una metodología en el desarrollo de software. A continuación se presentan los aspectos más generales del ciclo de vida del software y se introducen las distintas fases del desarrollo en que se profundizará en los capítulos del bloque II (temas 2 al 6). Finalmente, se describe el lenguaje UML, de uso extendido y soportado actualmente por varias herramientas CASE capaces de generar código a partir de los diagramas de esta notación. Relación con otros temas Con este tema se pretende asegurar que el alumno dispone de base su�ciente para abordar el estudio del resto de la asignatura. Es recomendable el repaso de las asignaturas previas de la titulación en que se estudiaron las bases de la Ingeniería del Software y el desarrollo de programas. Al mismo tiempo este tema es importante por proporcionar una visión general de las diferentes fases de un ciclo de desarrollo de software y de su coordinación en metodologías. Para hacerse una composición de lugar sobre lo que se habla en este capítulo y en la asignatura en general es recomendable haber desarrollado algún proyecto en un lenguaje de programación. Objetivos del tema Este tema es introductorio. El alumno debe comprobar que dispone de los conocimientos básicos necesarios para afrontar el resto de la asignatura, entendiendo la estructura general del desarrollo del software, así como las implicaciones y relaciones con la plani�cación y gestión de proyectos informáticos. Para ello debe: comprender la necesidad de utilizar una metodología en el desarrollo de aplicaciones, comprender las ventajas e inconvenientes de los diferentes ciclos de vida para discernir cuando es adecuado usar uno u otro, y saber utilizar (en un nivel medio) la notación UML para la especi�cación y diseño de sistemas. Guía de estudio y esquema Es conveniente realizar una lectura inicial del tema para identi�car sus contenidos y repasar los conceptos que considere necesarios, bien acudiendo a textos de asignaturas ya cursadas, bien estudiando las referencias proporcionadas en el apartado de �extensión de conocimientos�. El capítulo tiene tres partes: La explicación acerca de la necesidad de una metodología se incluye directamente en esta guía y, adicionalmente, se puede estudiar en el libro base [Pre05, cap. 1, y secs. 2.1 y 2.2] o en la edición anterior [Pre01, cap. 1, y secs. 2.1 y 2.2]. Los ciclos de vida. Se da una descripción de cada uno y una lista de ventajas e inconvenientes. También este apartado está en esta guía y se puede extender su estudio en el libro base [Pre05, secs. 3.1 a 3.5.2] o en la edición anterior [Pre01, secs. 2.3 a 2.12]. 1 2 Contexto de la asignatura en la Ingeniería de Software La notación de especi�cación y diseño UML. La mejor forma de asimilar esta parte consiste en estudiar la teoría e ir haciendo pequeños ejemplos. En esta guía se incluye este apartado junto referencias a los apartados del libro base [Pre05, secs. 8.4 a 8.8 y 7.5] o en la quinta edición [Pre01, sec. 22.5] y [Pre01, cap. 20]. Advertimos que este material de estudio del UML se re�ere a la primera versión del lenguaje. Hemos creído conveniente formar al alumno en esta primera versión debido a que aún la segunda es relativamente reciente y es de preveer que ambas versiones convivan en el mundo empre- sarial durante un tiempo signi�cativo. (Las novedades introducidas en la segunda versión se estudiarán en una adenda a esta guía que se publicará el primero de noviembre en la Web de la asignatura). 1.1. Necesidad de una metodología El proceso de construcción del software requiere, como en cualquier otra ingeniería, identi�car las tareas que se han de realizar sobre el software y aplicar esas tareas de una forma ordenada y efectiva. Adicionalmente y aunque no es el objeto principal de esta asignatura, el desarrollo del software es realizado por un conjunto coordinado de personas simultáneamente y, por lo tanto, sus esfuerzos deben estar dirigidos por una misma metodología que estructure las diferentes fases del desarrollo. En temas posteriores, en primer lugar se explicarán en detalle las mencionadas fases y a continuación las metodologías usuales que las gestionan. En esta asignatura se hará especial énfasis en los temas relacionados con el análisis, diseño y mantenimiento del software, mencionando apenas los temas especí�cos de la organización y gestión de proyectos que conciernen a la distribución de medios y tareas entre las personas a cargo del desarrollo, ya que estos últimos temas son objeto de otras asignaturas de la titulación. 1.1.1. Sistemas La Ingeniería de Sistemas es el contexto genérico en que se situan las herramientas y metodologíasusadas para crear sistemas. Un sistema puede estar formado por subsistemas de diferentes tipos. La ingeniería de sistemas constituye el primer paso de toda ingeniería: proporciona una visión global de un sistema en su conjunto para que, posteriormente, cada uno de sus subsistemas se analice con la rama de la ingeniería adecuada. Una de esas ramas es la ingeniería del software. La Ingeniería del Software trata, según Bauer [Bau72], del establecimiento de los principios y métodos de la ingeniería, orientados a obtener software económico, que sea �able y funcione de manera e�ciente sobre máquinas reales. El sistema es un conjunto de elementos que cooperan entre sí para proporcionar una funcionalidad. En el caso de un sistema informático, consta de dos tipos de elementos: Hardware y Software. 1.1.2. La crisis del software Desde el momento en que se introdujeron computadores con capacidad para soportar aplicaciones de tamaño considerable (años 60), las técnicas de desarrollo para los hasta entonces pequeños sistemas dejaron progresivamente de ser válidas. Estas técnicas consistían básicamente en codi�car y corregir (code-and-�x) que se resume en lo siguiente: No existe necesariamente una especi�cación del producto �nal, en su lugar se tienen algunas anotaciones sobre las características generales del programa. Inmediatamente se empieza la codi�cación y simultáneamente se va depurando. Cuando el programa cumple con las especi�caciones y parece que no tiene errores se entrega. La ventaja de este enfoque es que no se gasta tiempo en plani�cación, gestión de los recursos, documentación, etc. Si el proyecto es de un tamaño muy pequeño y lo realiza un equipo pequeño (una sola persona o dos) no es un mal sistema para producir un resultado pronto. Hoy en día es un método de desarrollo que se usa cuando hay plazos muy breves para entregar el producto �nal y no existe una exigencia explícita por parte de la dirección de usar alguna metodología de ingeniería del software. Puede dar resultado, pero la calidad del producto es imprevisible. Las consecuencias de este tipo de desarrollos eran: 1. El costo era mucho mayor de lo originalmente previsto. 2. El tiempo de desarrollo también excedía lo proyectado. 3. La calidad del código producido era imprevisible y en promedio baja. Aunque se han desarrollado técnicas para paliar estos problemas, hoy en día aún se considera normal que una aplicación rebase sus proyecciones iniciales de tiempo y dinero y que se descubran bugs (errores informáticos) en su ejecución. Esto se debe a que todavía no se aplica de un modo sistemático la ingeniería del software durante el desarrollo. 1.1.3. De�nición de metodología En la literatura sobre este tema existen muchas de�niciones sobre lo que es una metodología. Más o menos todas ellas coinciden en que debería tener al menos las siguientes características: 1. De�ne cómo se divide un proyecto en fases y las tareas que se deben realizar en cada una de ellas. 2. Especi�ca para cada una de las fases cuáles son las entradas que recibe y las salidas que produce. 3. Establece alguna forma de gestionar el proyecto. Teniendo esto en cuenta establecemos la siguiente de�nición: Metodología es un modo sistemático de producir software. 1.1 Necesidad de una metodología 3 1.1.4. Finalidad de una metodología Los atributos deseables en el producto �nal son: 1. Adecuación: El sistema satisface las expectativas del usuario. 2. Mantenibilidad: Facilidad para realizar cambios una vez que el sistema está funcionando en la empresa del cliente. 3. Usabilidad: Facilidad de aprender a manejar el sistema por parte de un usuario que no tiene por qué ser informático. La resistencia de los usuarios a aceptar el nuevo sistema estará relacionada con este atributo. 4. Fiabilidad: Capacidad de un sistema de funcionar correctamente durante un tiempo dado. La diferencia con la corrección es que aquí interesa el tiempo, es decir, no se trata del número absoluto de defectos en el sistema sino de los que se mani�estan en un intervalo de tiempo. Interesan sobre todo: a) MTBF: Mean Time Between Failures (Tiempo medio entre fallos) b) Disponibilidad: Probabilidad de que el sistema esté funcionando en un instante dado. 5. Corrección: Densidad de defectos mínima. 6. E�ciencia: El sistema es capaz de realizar su tarea con el mínimo consumo de recursos necesario. 1.1.5. Taxonomía de las metodologías Existen dos grupos de metodologías en función de la mentalidad con la que abordan un problema: metodología estructurada o metodología orientada a objetos. Metodología estructurada Constituyó la primera aproximación al problema del desarrollo de software. Está orientada a procesos, es decir, se centra en especi�car y descomponer la funcionalidad del sistema. Se utilizan varias herramientas: Diagramas de �ujo de datos (DFD): Representan la forma en que los datos se mueven y se transforman. Incluyen: • Procesos • Flujos de datos • Almacenes de datos Gestionar Altas/Bajas Gestionar Pedidos Gestionar Devoluciones Películas Disponibles Alta/Baja Película Pedido Película Devolución Película Figura 1.1: Ejemplo de DFD Los procesos individuales se pueden a su vez �explosionar� en otros DFD de mayor nivel de detalle. Especi�caciones de procesos: Descripciones de los procesos de�nidos en un DFD que no se puede descomponer más. Pueden hacerse en pseudocódigo, con tablas de decisión o en un lenguaje de programación. Diccionario de datos: Nombres de todos los tipos de datos y almacenes de datos junto con sus de�niciones. La información que se incluye en él se puede ver en [Pre01, sec. 12.7]. Diagramas de transición de estados: Modelan procesos que dependen del tiempo Diagramas entidad-relación: Los elementos del modelo E/R se corresponden con almacenes de datos en el DFD. En este diagrama se muestran las relaciones entre dichos elementos Los lenguajes de programación también re�ejan esta dicotomía que existe entre las metodologías; así, existen lenguajes para la programación estructurada. Los más famosos son: Cobol, Fortran, C, Pascal y Modula 2. Metodología orientada a objetos Constituye una aproximación posterior.Cuenta con mayor número de adeptos y es previsible que termine sustituyendo a la anterior. Además, es ampliamente admitido que proporciona una serie de ventajas: 1. Está basada en componentes, lo que signi�ca que facilita la reutilización de código escrito por terceras personas. 4 Contexto de la asignatura en la Ingeniería de Software 2. Facilita el mantenimiento, debido a que favorece que los cambios están más localizados. La mentalidad que subyace al diseño estructurado es: ¿Cómo se puede dividir el sistema en partes más pequeñas que puedan ser resueltas por algoritmos sencillos y qué información se intercambian?. En el diseño orientado a objetos la idea es sin embargo: ¿Cuáles son los tipos de datos que hay que utilizar, qué características tienen y cómo se relacionan?. La orientación a objetos supone un paradigma distinto del tradicional (no necesariamente mejor o peor) que implica focalizar la atención en las estructuras de datos. El concepto de objetos tuvo sus orígenes en la inteligencia arti�cial como un modo de representación del conocimiento. El primer lenguaje orientado a objetos fue Simula67, desarrollado por Kristen Nggaard y Ole- Johan Dahl en el Centro de Cálculo noruego, pero el que se considera el primer lenguaje orientado a objetos puro fue Smaltalk, donde todos los elementos del lenguaje son objetos. El lenguaje C++ fue una ampliación de C para que soportara objetos; resultó muy e�ciente pero también muy complejo. Java es otro lenguaje orientado a objetos derivado del C++ pero más sencillo y concebido con la idea de minimizar los errores. Objetos y clases Un objeto consta de una estructura de datos y de una colección de métodos (antes llamados procedimientos o funciones) que manipulan esos datos. Los datos de�nidos dentro de un objeto son sus atributos. Un objeto sólo puede ser manipulado a través de su interfaz, esto es,de una colección de funciones que implementa y que son visibles desde el exterior. Los conceptos importantes en el contexto de clases y objetos se pueden consultar en [Pre01, sec. 20.1] y [Pre01, sec. 20.2]. En resumen son: 1. Encapsulamiento: Característica intrínseca de los sistemas orientados a objetos. Consiste en que se ocultan los detalles de implementación de las clases, lo cual simpli�ca su manipulación. 2. Clases: Describen abstracciones de datos y operaciones necesarias para su manipulación. Dentro de una clase se de�nen: Atributos: Tipo de datos contenidos en una clase. Métodos: Algoritmos internos de la clase. 3. Polimor�smo: Capacidad de un objeto de presentar varios comportamientos diferentes en función de cómo se utilice; por ejemplo, se pueden de�nir varios métodos con el mismo nombre pero diferentes argumentos. 4. Herencia: Relación de generalización; cuando varias clases comparten características comunes, éstas se ponen en una clase antecesora. 5. Asociación: Relación entre clases que cooperan con alguna �nalidad. Durante la etapa de análisis se identi�can los objetos del dominio del problema. En el diseño se de�nen las características de los objetos. 1.2. Ciclo de vida del software Al igual que otros sistemas de ingeniería, los sistemas de software requieren un tiempo y esfuerzo considerable para su desarrollo y deben permanecer en uso por un periodo mucho mayor. Durante este tiempo de desarrollo y uso, desde que se detecta la necesidad de construir un sistema de software hasta que éste es retirado, se identi�can varias etapas que en conjunto se denominan ciclo de vida del software. En cada caso, en función de cuáles sean las características del proyecto, se con�gurará el ciclo de vida de forma diferente. Usualmente se consideran las etapas: especi�cación y análisis de requisitos, diseño del sistema, implementación del software, aplicación y pruebas, entrega y mantenimiento. Un aspecto esencial dentro de las tareas del desarrollo del software es la documentación de todos los elementos y especi�caciones en cada fase. Dado que esta tarea siempre estará in�uida por la fase del desarrollo en curso, se explicará de forma distribuida a lo largo de las diferentes fases como un apartado especial para recalcar su importancia en el conjunto del desarrollo del software. Tal como ya hemos mencionado, las etapas principales en cualquier ciclo de vida son: 1. Análisis: Se construye un modelo de los requisitos 2. Diseño: A partir del modelo de análisis se deducen las estructuras de datos, la estructura en la que descompone el sistema, y la interfaz de usuario. 3. Codi�cación: Se construye el sistema. La salida de esta fase es código ejecutable. 4. Pruebas: Se comprueba que se cumplen criterios de corrección y calidad. 5. Mantenimiento: En esta fase, que tiene lugar después de la entrega, se asegura que el sistema siga funcionando y adap- tándose a nuevos requisitos. Las etapas constan de tareas. La documentación es una tarea importante que se realiza en todas las etapas. Cada etapa tiene como entrada uno o varios documentos procedentes de las etapas anteriores y produce otros documentos de salida según se muestra en la �gura 1.2. Algunos autores dividen la fase del diseño en dos partes: Diseño global o arquitectónico y diseño detallado. En el primero se transforman los requisitos en una arquitectura de alto nivel, se de�nen las pruebas que debe satisfacer el sistema en su conjunto, se esboza la documentación y se plani�ca la integración. En el detallado, para cada módulo se re�na el diseño y se de�nen los requisitos del módulo y su documentación. Las formas de organizar y estructurar la secuencia de ejecución de las tareas en las diferentes fases de cada uno de los métodos pueden dar lugar a un tipo de ciclo de vida diferente. Los principales ciclos de vida que se van a presentar a continuación realizan estas tareas. Cada uno de ellos tiene sus ventajas e inconvenientes. 1.2 Ciclo de vida del software 5 Figura 1.2: Etapa genérica 1.2.1. Ciclos de vida en cascada El ciclo de vida inicialmente propuesto por Royce en 1970, fue adaptado para el software a partir de ciclos de vida de otras ramas de la ingeniería. Es el primero de los propuestos y el más ampliamente seguido por las organizaciones (se estima que el 90 % de los sistemas han sido desarrollados así). La estructura se muestra en la �gura 1.3. Figura 1.3: Ciclo de vida en cascada Descripción Este modelo admite la posibilidad de hacer iteraciones. Así por ejemplo, si durante el mantenimiento se ve la necesidad de cambiar algo en el diseño se harán los cambios necesarios en la codi�cación y se tendrán que realizar de nuevo las pruebas, es decir, si se tiene que volver a una de las etapas anteriores al mantenimiento se recorrerán de nuevo el resto de las etapas. Después de cada etapa se realiza una revisión para comprobar si se puede pasar a la siguiente. Trabaja en base a documentos, es decir, la entrada y la salida de cada fase es un tipo de documento especí�co. Idealmente, cada fase podría hacerla un equipo diferente gracias a la documentación generada entre las fases. Los documentos son: Análisis: Toma como entrada una descripción en lenguaje natural de lo que quiere el cliente. Produce el S.R.D. (Software Requirements Document). Diseño: Su entrada es el S.R.D. Produce el S.D.D. (Software Design Document) Codi�cación: A partir del S.D.D. produce módulos. En esta fase se hacen también pruebas de unidad. Pruebas: A partir de los módulos probados se realizan la integración y pruebas de todo el sistema. El resultado de las pruebas es el producto �nal listo para entregar. Ventajas La plani�cación es sencilla. 6 Contexto de la asignatura en la Ingeniería de Software La calidad del producto resultante es alta. Permite trabajar con personal poco cuali�cado. Inconvenientes Lo peor es la necesidad de tener todos los requisitos al principio. Lo normal es que el cliente no tenga perfectamente de�nidas las especi�caciones del sistema, o puede ser que surjan necesidades imprevistas. Si se han cometido errores en una fase es difícil volver atrás. No se tiene el producto hasta el �nal, esto quiere decir que: • Si se comete un error en la fase de análisis no se descubre hasta la entrega, con el consiguiente gasto inútil de recursos. • El cliente no verá resultados hasta el �nal, con lo que puede impacientarse . No se tienen indicadores �ables del progreso del trabajo (síndrome del 90 %).1 Es comparativamente más lento que los demás y el coste es mayor también. Tipos de proyectos para los que es adecuado Aquellos para los que se dispone de todas las especi�caciones desde el principio, por ejemplo, los de reingeniería. Se está desarrollando un tipo de producto que no es novedoso. Proyectos complejos que se entienden bien desde el principio. Como el modelo en cascada ha sido el más seguido ha generado algunas variantes. Ahora veremos algunas. Ciclo de vida en V Propuesto por Alan Davis, tiene las mismas fases que el anterior pero tiene en consideración el nivel de abstracción de cada una. Una fase además de utilizarse como entrada para la siguiente, sirve para validar o veri�car otras fases posteriores. Su estructura está representada en la �gura 1.4. Figura 1.4: Ciclo de vida en V Ciclo de vida tipo sashimi Según el modelo en cascada puro una fase sólo puede empezar cuando ha terminado la anterior. En este caso, sin embargo, se permite un solapamiento entre fases. Por ejemplo, sin tener terminado del todo el diseño se comienza a implementar. El nombre �sashimi� deriva del estilo de presentación en rodajas de pescado crudo en Japón. Una ventaja de este modelo es que no necesita generar tanta documentación como el ciclo de vida en cascada puro debido a la continuidad del mismo personal entre fases. Los problemas planteados son: Es aún más difícil controlar el progreso del proyecto debido a que los �nales de fase ya no son un punto de referencia claro. Al hacer cosas en paralelo, si hay problemas de comunicaciónpueden surgir inconsistencias. La fase de �concepto� consiste en de�nir los objetivos del proyecto, bene�cios, tipo de tecnología y tipo de ciclo de vida. El diseño arquitectónico es el de alto nivel, el detallado el de bajo nivel. En la �gura 1.5 se ha representado la estructura del ciclo de vida sashimi. 1Consiste en creer que ya se ha completado el 90 % del trabajo, pero en realidad queda mucho más porque el 10 % del código da la mayor parte de los problemas 1.2 Ciclo de vida del software 7 Figura 1.5: Ciclo de vida sashimi Ciclo de vida en cascada con subproyectos Si, una vez que se ha llegado al diseño arquitectónico, se comprueba que el sistema se divide en varios subsistemas indepen- dientes entre sí, sería razonable suponer que a partir de ese punto cada uno se puede desarrollar por separado y en consecuencia en paralelo con los demás. Cada uno tendrá seguramente fechas de terminación distintas. Una vez que han terminado todos se integran y se prueba el sistema en su conjunto. La ventaja es que se puede tener a más gente trabajando en paralelo de forma e�ciente. El riesgo es que existan interdependencias entre los subproyectos. Ciclo de vida en cascada incremental En este caso se va creando el sistema añadiendo pequeñas funcionalidades. Cada uno de los pequeños incrementos es com- parable a las modi�caciones que ocurren dentro de la fase de mantenimiento. La ventaja de este método es que no es necesario tener todos los requisitos en un principio. El inconveniente es que los errores en la detección de requisitos se encuentran tarde. Hay dos partes en el ciclo de vida, que lo hacen similar al ciclo de vida tipo sashimi. Por un lado están el análisis y el diseño global. Por otro lado están los pequeños incrementos que se llevan a cabo en las fases de diseño detallado, codi�cación y mantenimiento. Figura 1.6: Cascada incremental Ciclo de vida en cascada con reducción de riesgos Como se ha comentado anteriormente, uno de los problemas del ciclo de vida en cascada es que si se entienden mal los requisitos esto sólo se descubrirá cuando se entregue el producto. Para evitar este problema se puede hacer un desarrollo iterativo durante las fases de análisis y diseño global. Esto consistiría en: 1. Preguntar al usuario. 2. Hacer el diseño global que se desprende del punto 1. 3. Hacer un prototipo de interfaz de usuario, hacer entrevistas con los usuarios enseñándoles el prototipo y volver con ello al punto 1 para identi�car más requisitos o corregir malentendidos. El resto es igual al ciclo de vida en cascada. 8 Contexto de la asignatura en la Ingeniería de Software 1.2.2. Modelo de ciclo de vida en espiral Propuesto inicialmente por Boehm en 1988. Consiste en una serie de ciclos que se repiten. Cada uno tiene las mismas fases y cuando termina da un producto ampliado con respecto al ciclo anterior. En este sentido es parecido al modelo incremental, la diferencia importante es que tiene en cuenta el concepto de riesgo. Un riesgo puede ser muchas cosas: requisitos no comprendidos, mal diseño, errores en la implementación, etc. Un representación típica de esta estructura se muestra en la �gura 1.7. Figura 1.7: Ciclo de vida en espiral En cada iteración Boehm recomienda recopilar la siguiente lista de informaciones: Objetivos: Se hacen entrevistas a los clientes, se les hace rellenar cuestionarios, etc. Alternativas: Son las diferentes formas posibles de conseguir los objetivos. Se consideran desde dos puntos de vista • Características del producto. • Formas de gestionar el proyecto. Restricciones: • Desde el punto de vista del producto: Interfaces de tal o cual manera, rendimiento, etc. • Desde el punto de vista organizativo: Coste, tiempo, personal, etc. Riesgos: Lista de riesgos identi�cados. Resolución de riesgos: La técnica más usada es la construcción de prototipos. Resultados: Es el producto que queda después de la resolución de riesgos. Planes: Lo que se va a hacer en la siguiente fase. Compromiso: Decisiones de gestión sobre cómo continuar. Al terminar una iteración se comprueba que lo que se ha hecho efectivamente cumple con los requisitos establecidos; también se veri�ca que funciona correctamente. El propio cliente evalúa el producto. No existe una diferencia muy clara entre cuándo termina el proyecto y cuándo empieza la fase de mantenimiento. Cuando hay que hacer un cambio, éste puede consistir en un nuevo ciclo. Ventajas No necesita una de�nición completa de los requisitos para empezar a funcionar. Al entregar productos desde el �nal de la primera iteración es más fácil validar los requisitos. El riesgo en general es menor porque, si todo se hace mal, sólo se ha perdido el tiempo y recursos invertidos en una iteración (las anteriores iteraciones están bien). El riesgo de sufrir retrasos es menor, ya que al identi�car los problemas en etapas tempranas hay tiempo de subsanarlos. 1.2 Ciclo de vida del software 9 Inconvenientes Es difícil evaluar los riesgos. Necesita de la participación continua por parte del cliente. Cuando se subcontrata hay que producir previamente una especi�cación completa de lo que se necesita, y esto lleva tiempo. Dónde es adecuado Sistemas de gran tamaño. Proyectos donde sea importante el factor riesgo. Cuando no sea posible de�nir al principio todos los requisitos. 1.2.3. Ciclos de vida orientados a objetos Los tipos de ciclos de vida que se han visto hasta ahora son relativos al análisis y diseño estructurados, pero el desarrollo de sistemas orientados a objetos tiene la particularidad de estar basados en un diseñado de componentes que se relacionan entre ellos a través de interfaces, o lo que es lo mismo, son más modulares y por lo tanto el trabajo se puede dividir en un conjunto de miniproyectos. Además, hoy en día existe una tendencia a reducir los riesgos y, en este sentido, el ciclo de vida en cascada no proporciona muchas facilidades. Debido a todo esto, el ciclo de vida típico en una metodología de diseño orientado a objetos es el ciclo de vida en espiral. En este texto sólo veremos un tipo de ciclo de vida orientado a objetos, que es además el más representativo: el modelo fuente. Modelo fuente Fue creado por Henderson-Sellers y Edwards en 1990. Es un tipo de ciclo de vida pensado para la orientación a objetos y posiblemente el más seguido. Un proyecto se divide en las fases: 1. Plani�cación del negocio 2. Construcción: Es la más importante y se divide a su vez en otras cinco actividades: Plani�cación, Investigación, Especi�- cación, Implementación y Revisión. 3. Entrega o �liberación�. Figura 1.8: Ciclo de vida fuente 10 Contexto de la asignatura en la Ingeniería de Software La primera y la tercera fase son independientes de la metodología de desarrollo orientado a objetos. Además de las tres fases, existen dos periodos: 1. Crecimiento: Es el tiempo durante el cual se construye el sistema 2. Madurez: Es el periodo de mantenimiento del producto. Cada mejora se plani�ca igual que el periodo anterior, es decir, con las fases de Plani�cación del negocio, Construcción y Entrega. Cada clase puede tener un ciclo de vida sólo para ella debido a que cada una puede estar en una fase diferente en un momento cualquiera. La ventaja es que permite un desarrollo solapado e iterativo. En la �gura 1.8 se muestra un esquema de este tipo de ciclo de vida. 1.3. Notaciones de especi�cación y diseño (UML) Una parte esencial de todas las tareas del desarrollo del software, en particular de la especi�cación de requisitos y del diseño, es la utilización de una notación para la descripción de modelos que permita la mecanización parcial del proceso de producción. Dado que en la actualidad la fase de implementación se suele realizar con tecnologías orientadas a objetos, y que adicionalmente este tipo de enfoque también es aplicable en otras fases del desarrollo, es importante que el alumno conozca al menos los principios básicos de las notaciones orientadas a objetos, y en especial de la más extendida últimamente, la notación UML(Uni�ed Modelling Language, Lenguaje Uni�cado de Modelado). 1.3.1. Introducción Modelos La construcción de todo sistema de ingeniería requiere un estudio previo que consiste en la identi�cación de sus componentes y de las relaciones entre éstas, la comprensión de sus propiedades, y la concepción de su comportamiento dinámico. El resultado de este estudio es un modelo o representación del sistema. Un modelo es una representación de la realidad donde se abstrae lo no esencial. La abstracción permite gestionar la complejidad y experimentar con diferentes soluciones. Para un mismo sistema se puede de�nir más de un modelo diferente en función del aspecto que interese destacar o el nivel de detalle deseado. El modelado permite pues ver un sistema desde diferentes perspectivas, haciendo así más sencillo su entendimiento y desarrollo. Finalmente, los modelos juegan un papel esencial en la comunicación con el cliente y entre los profesionales que forman parte del equipo de desarrollo. �UML�, siglas de Uni�ed Modeling Language es un lenguaje concebido, como su nombre indica, para expresar modelos. No es nada más que eso, no indica cómo se deben hacer el desarrollo y ni siquiera el análisis orientados a objetos y, en consecuencia, no es una metodología de desarrollo. Es importante tener bien claro que tan sólo se trata de una notación; ahora bien, es la notación que se ha convertido en el estándar de facto de la mayor parte de las metodologías de desarrollo orientado a objetos que existen hoy en día. El UML se utiliza para la especi�cación, visualización, construcción y documentación de sistemas software. De esta frase, la palabra visualización es la más importante; UML es un lenguaje grá�co, esto es, basado en diagramas, y está pensado para �entrar por los ojos�, tanto de los desarrolladores como de los clientes. Se buscó en él un lenguaje fácil de aprender pero rico en signi�cado, estándar, estable, con�gurable e independiente de lenguajes de programación o procesos de desarrollo particulares. Al mismo tiempo se pretendió que soportara conceptos de desarrollo de alto nivel tales como colaboraciones, armazones (frame- works), patrones y componentes, y permitiera abordar aspectos clave del desarrollo de software actual tales como escalabilidad, concurrencia, distribución, ejecutabilidad, etc. El UML soporta todo el ciclo de vida del desarrollo de software y en distintas áreas de aplicación (sistemas distribuidos, tiem- po real, aplicaciones monoproceso, sistemas de información corporativos, banca/�nanzas, telecomunicaciones, defensa/espacio, electromedicina, ciencia, ...). Diferentes herramientas CASE orientadas a objeto que dan soporte al desarrollo basado en UML (Rational Rose, Together, Objecteering, Paradigm Plus, ...) proliferan en el mercado del software. Este capítulo no pretende ser exhaustivo, debe entenderse más bien como una introducción inicial abreviada a este lenguaje de modelado. Para ver una mínima introducción a conceptos de orientación a objetos puede ser interesante leer primero la sección 3.3 de esta guía. Historia Grady Booch, Jim Rumbaugh e Ivar Jacobson (los apodados "tres amigos") desarrollaron los tres métodos de desarrollo orientado a objetos más seguidas de la industria. De la uni�cación del OMT (Object Modeling Technique) de Rumbaugh y el método de Booch nació la primera versión del UML en el año 1994. Posteriormente, se incorporaron el método OOSE (Object- Oriented Software Engineering) de Jacobson y algunos conceptos de otros lenguajes de modelado. En la actualidad el UML es un estándar abierto del grupo OMG (Object Management Group) y se halla en su versión 2.0. Elementos del lenguaje UML A continuación se presenta una clasi�cación general de los elementos del lenguaje UML. En las secciones siguientes se explica cómo estos elementos se combinan para construir diferentes tipos de modelos, y se de�nen algunos elementos adicionales que intervienen especí�camente en estos modelos. En el lenguaje UML se distinguen básicamente tres tipos de elementos: 1.3 Notaciones de especi�cación y diseño (UML) 11 1. Bloques de construcción: Pueden ser Entidades, Relaciones o Diagramas. 2. Mecanismos comunes: Entre ellos se distinguen Especi�caciones, Adornos y Mecanismos de extensión. 3. Reglas de combinación Los bloques de construcción se de�nen como abstracciones y tienen manifestaciones concretas denominadas Instancias. Las instancias más comunes son las instancias de clase (Objetos) y las instancias de asociación (Enlaces). Las instancias pueden identi�carse mediante un nombre o bien ser anónimas. En cuanto a las Entidades, pueden ser: Estructurales: Entre ellas se distinguen Casos de uso, Clases, Componentes y Nodos. Un tipo particular de clases son las Interfaces. De agrupamiento: Son los Paquetes. Tipos particulares de paquetes son los Modelos y los Subsistemas. Entre los mod- elos se distinguen Modelos de casos de uso, Modelos estructurales estáticos, Modelos de comportamiento y Modelos estructurales de implementación. De comportamiento: Son, principalmente, las Acciones, los Estados, las Transiciones y los Mensajes. Las Relaciones, se clasi�can principalmente en: Dependencias Asociaciones Generalizaciones Se distingue entre Diagramas de: Casos de uso Clases Objetos Secuencia Colaboración Estados Actividades Componentes Despliegue Como veremos en las seciones siguientes, los modelos de casos de uso se describen mediante diagramas de casos de uso y diagramas de secuencia; Los modelos estructurales estáticos mediante diagramas de clases y de objetos, los modelos de compor- tamiento mediante diagramas de secuencia, diagramas de colaboración,diagramas de estados y diagramas de actividades; y los modelos estructurales de implementación mediante diagramas de componentes y diagramas de despliegue. En cuanto a los Mecanismos comunes se clasi�can en: Especi�caciones: Descripciones textuales detalladas de la sintaxis y semántica de un bloque de construcción. Adornos: Elementos grá�cos y textuales que pueden añadirse a la notación grá�ca básica para proporcionar detalles adicionales de la especi�cación (símbolos de visibilidad, compartimentos adicionales, notas, roles, representación de clases y características especiales - abstracta, raíz, hoja - etc). Mecanismos de extensión: Posibilidades de extensión controlada del lenguaje para adecuarse a aplicaciones, procesos o dominios de aplicación concretos. Se distingue entre Estereotipos, Valores etiquetados y Restricciones. En las secciones siguientes explicamos los diferentes tipos de modelos que pueden de�nirse en UML, describiendo al mismo tiempo los elementos que intervienen en los correspondientes diagramas. Hemos optado por describir estos elementos a medida que se hace referencia a ellos por entender que en un contexto de modelado concreto se pueden entender mejor su utilidad y signi�cado. Por lo general no distinguiremos entre los diferentes tipos de adornos o mecanismos de extensión que estos elementos constituyen, por no considerarlo relevante en el nivel de estudio del lenguaje exigido para esta asignatura. Los símbolos grá�cos que los denotan aparecen ilustrados en las �guras de esta sección. Las antes mencionadas reglas de combinación están implícitas en la descripción de los diferentes diagramas. 1.3.2. Modelo de casos de uso Representa la visión que tendría del sistema un usuario externo, y es desarrollado por los analistas con la colaboración de los expertos del dominio de aplicación. Un caso de uso expresa lo que comúnmente se denomina una transacción, esto es, una interacción entre el sistema y el usuario u otro sistema que es visto como un �actor� externo: p.e., un usuario que pulsa el botón de llamada de un ascensor, o un periférico que solicita datos de un ordenador central. Los casos de uso sirven para especi�car los requisitos funcionales del sistema e identi�car los escenarios de prueba. Nor- malmente se utilizan en las primeras etapas de desarrollo. En particular, algunas metodologías están dirigidaspor casos de uso, de forma que es a partir de ellos que se derivan los modelos estructurales y de comportamiento. En cualquier caso, siempre es preciso asegurarse de que el modelo de casos de uso es coherente con estos modelos. En UML los casos de uso se de�nen mediante diagramas de casos de uso y de secuencia, y descripciones textuales (especi�- caciones) que resultan de cumplimentar unas plantillas estándar. 12 Contexto de la asignatura en la Ingeniería de Software Entidades En los casos de uso intervienen dos entidades estructurales: Casos de uso: Consisten en una secuencia de Acciones (unidades básicas de comportamiento; habitualmente implemen- tadas por una sentencia de ejecución), y posibles variantes de estas acciones, que puede realizar el sistema al interaccionar con los actores. Actores: De�nen un conjunto de roles que desempeñan los usuarios cuando interaccionan con los casos de uso. Interviene también en los casos de uso una entidad de agrupamiento, el Límite del sistema, que representa el límite entre el sistema físico y los actores que con él interaccionan. Relaciones En los modelos de casos de uso pueden estar implicadas relaciones de los tres tipos principales: Asociación: Indica la participación de un actor en un caso de uso (véase la �gura 1.9), esto es, la comunicación de una �instancia� de un actor con �instancias� del caso de uso o de otro actor que interviene en el caso de uso. Generalización: Muestra una taxonomía entre casos de uso o actores generales, y casos de uso o actores más especí�cos. Dependencia: Puede indicar que el comportamiento de un cierto caso de uso extiende el de un caso de uso base, cuali- �cándose con un estereotipo «extend», o bien que el comportamiento de un caso de uso incluye el de un caso de uso base, cuali�cándose con un estereotipo «include» (véase la �gura 1.10). Cuando un caso de uso extiende a otro, añade algunos pasos a la secuencia de interacciones por él especi�cada. Cuando un caso de uso incluye a otro, signi�ca que contiene la secuencia de interacciones por él especi�cada. Este último concepto se identi�ca con el de llamada a subrutinas: Cuando dos o más casos de uso tienen una parte signi�cativa en común, es útil de�nir casos de uso elementales que representan las secuencias repetidas. Figura 1.9: Asociación entre un caso de uso y un actor Figura 1.10: Relaciones entre casos de uso Diagramas En la �gura 1.9 se ilustra un diagrama de casos de uso elemental. En cuanto a los diagramas de secuencia, que completan los modelos de casos de uso, se verán en detalle en la sección posterior �Modelado de comportamiento�. Mecanismos comunes Como especi�caciones de los casos de uso se utilizan las denominadas Descripciones de casos de uso, obtenidas al cumpli- mentar una plantilla donde se detallan los actores implicados, las precondiciones y postcondiciones, la secuencia normal de acciones emprendidas por los actores y respuestas asociadas del sistema, y los posibles escenarios alternativos y excepcionales. La información contenida en estas especi�caciones tiene una traducción diagramática en los diagramas de casos de uso y diagra- mas de secuencia. Modelado de casos de uso Al modelar casos de uso es importante asegurarse de que cada caso de�nido describe una parte signi�cativa del funcionamien- to del sistema. Para evitar la de�nición de un número excesivo de casos de uso, hay que tener presente que un caso de uso no es un paso, operación o actividad individual de un proceso, sino un proceso completo que incluye varios pasos. 1.3 Notaciones de especi�cación y diseño (UML) 13 Otro aspecto importante a tener en cuenta es la utilidad de los casos de uso en la comunicación entre analistas, desarrolladores del software y expertos del dominio de aplicación: deben se entendibles por todos y constituir una descripción de alto nivel del sistema que no incorpore conceptos de diseño. Para identi�car casos de uso es recomendado comenzar por modelar el contexto con que habrá de relacionarse, fase que implica los siguientes pasos: 1. Identi�cación de los actores que interactúan con el sistema. 2. Organización de estos actores. 3. Especi�cación de la correspondientes vías de comunicación. A continuación, para cada uno de estos actores, habrán de identi�carse los procesos que inician o en los que participan. Los casos de uso resultantes deben constituir un modelo de requisitos del sistema. Los siguientes pasos a seguir en la de�nición de casos de uso serán pues: 1. Identi�cación de las necesidades de los actores. 2. Designación de estas necesidades como casos de uso. 3. Identi�cación de los casos de uso que pueden ser especializaciones de otros y búsqueda de secuencias parciales comunes en los casos de uso ya encontrados. Un enfoque alternativo consiste en prestar inicialmente atención a los Eventos relevantes que condicionan respuestas del sistema, y buscar después qué actores y casos de uso están relacionados con estos eventos. 1.3.3. Modelo estructural estático Muestra una visión de la estructura interna del sistema en términos de las entidades que lo integran y las relaciones que existen entre ellas, capturando el vocabulario del dominio de aplicación. Este modelo es desarrollado por analistas, diseñadores y programadores y se de�ne mediante diagramas de clases y de objetos. Entidades estructurales Las entidades estructurales implicadas en un modelo estructural estático son de tipo: Clase : Descripción de un conjunto de objetos que comparten los mismos atributos, operaciones, relaciones y semántica. Interfaz: Nombre asignado a un conjunto de operaciones que caracterizan el comportamiento de un elemento.Puede verse como un tipo particular de clase. Clases Las clases son abstracciones del dominio de aplicación o bien de la tecnología utilizada en su desarrollo. Constituyen el elemento básico de modelado en el paradigma de orientación a objetos. Una clase se instancia en objetos excepto cuando se de�ne como Clase abstracta (un adorno de clase). Las clases abstractas se utilizan en niveles altos de las jerarquías de clases para de�nir abstracciones muy generales de las que derivar otras clases. En una jerarquía de clases existe una clase Raíz o base sin Superclases, que da origen a la jerarquía, y clases Hojas sin Subclases. El signi�cado de estas jerarquías está ligado al concepto de Herencia, que se presentará en una sección posterior. En la �gura 1.11 se ilustran las partes de una clase, que se disponen de arriba a abajo en el orden siguiente: Figura 1.11: Plantilla para una clase en UML 1. Nombre: Distingue a la clase del resto de clases en el ámbito del modelo. Consiste en una cadena de cualquier longitud que puede contener letras, números y signos de puntuación (exceptuando � � y �::�). Aparece en cursiva en el caso de las clases abstractas (clases que carecen de instancias). El nombre de clase puede aparecer opcionalmente precedido del nombre del paquete en que la clase se utiliza; su sintaxis se de�ne pues, en notación BNF: [paquete::]nombre-simple. 14 Contexto de la asignatura en la Ingeniería de Software 2. Atributos: Representan propiedades características compartidas por todos los objetos de la clase. Una clase puede tener cualquier número de atributos. Un nombre de atributo consiste en una cadena de cualquier longitud que puede contener letras y números. Sobre ellos pueden proporcionarse diferentes informaciones: a) Tipo: Atributo:Tipo b) Valor inicial: Atributo:Tipo=Valor ó Atributo=Valor c) Restricciones: Condiciones semánticas que pueden expresarse utilizando cualquier lenguaje, incluido el lenguaje nat- ural, si bien UML tiene un lenguaje semi-formal asociado para expresar restricciones: el lenguaje OCL. Se encierran siempre entre corchetes. d) Visibilidad o Alcance: Determina en qué medida otras clases pueden hacer uso del atributo. Un atributo público (+) es visible para cualquier clase externa; un atributo protegido (#) es visible para cualquier descendiente en la jerarquía de herencia; y un atributoprivado (-) es sólo visible para la propia clase. El valor por defecto de la visibilidad es siempre público. e) Ámbito: Puede ser de dos tipos: de instancia: cuando cada objeto tiene su propio valor, de clase: cuando todas las instancias de una clase comparten un valor. (p.e., las variables static en Java). Este tipo de ámbito se indica subrayando el nombre del atributo. Toda esta información es opcional, de hecho, es común que en las especi�caciones de las clases no se detallen más que los nombres de sus atributos. Su sintaxis se resumen en: [visibilidad]nombre [:tipo][=valorInicial][restricciones]. Atributos derivados son aquellos cuyo valor puede computarse a partir de valores de otros atributos; aunque no añaden información semántica al modelo, se hacen explícitos por claridad o propósitos de diseño. 3. Operaciones: Son servicios básicos ofrecidos por los objetos de una clase, que con frecuencia provocan cambios en sus estados (se adornan con query aquellas operaciones que no tienen ningún efecto secundario, esto es, que no modi�can el estado del sistema). Al igual que en el caso de los atributos, pueden especi�carse su visibilidad, ámbito y propiedades. Se pueden indicar también el tipo de los argumentos que reciben y el tipo del valor que retornan. Tanto si se especi�can sus argumentos como si no, han de añadirse un paréntesis abierto y otro cerrado al �nal de su nombre, de acuerdo a la sintaxis: [visibilidad]nombre([parámetros])[:tipoRetorno][propiedades]. La sintaxis completa de los parámetros es: [dirección]nombre:tipo[= valorPorDefecto]. La implementación concreta que una clase hace de una operación se denomina Método. La descripción de un método puede realizarse mediante una especi�cación textual descrita en cualquier lenguaje elegido (p.e., el OCL). Al igual que existen clases abstractas existen Operaciones abstractas, esto es, operaciones que se de�nen exclusivamente como una signatura. Las clases que contienen este tipo de operaciones requieren subclases que proporcionen métodos para su implementación. Las operaciones de las clases hoja de una jerarquía de clases obligada- mente habrán de tener un método asociado. 4. Responsabilidades: Son descripciones de lo que hace la clase en su conjunto. Esta información casi nunca se incluye en los diagramas. 5. Otras: Una clase puede incluir partes adicionales prede�nidas (p.e., excepciones) o de�nidas por el usuario. La información que se ha incluído en la �gura 1.11 es mucha más de la que se suele mostrar: una clase puede representarse con un simple rectángulo que contiene su nombre; véase la �gura 1.12. También es común omitir parte de la información de un apartado. Los puntos suspensivos que aparecen el la �gura 1.11 al �nal de las secciones de atributos y operaciones indican que la representación de la clase es abreviada, o lo que es lo mismo, que faltan atributos y operaciones que no se ha considerado necesario detallar para el propósito del diagrama en cuestión. Ascensor Figura 1.12: La representación de clase más sencilla posible Las instancias de clase se denominan objetos. Los objetos se caracterizan por un estado de�nido por los valores especí�cos de sus atributos en cada instante de tiempo. La notación grá�ca de una clase en un diagrama de clases coincide con la de un objeto en un diagrama de objetos. La sintaxis de su nombre, que aparece subrayado, es: [nombreInstancia][:nombreClase] (vésase la �gura 1.13). ascensor2:Ascensor Figura 1.13: Símbolo en UML de un objeto Interfaces Las interfaces son conjuntos de operaciones que especi�can parte de la funcionalidad (un servicio) proporcionada por una clase o componente, con independencia de su implementación. Pueden verse como contratos entre los clientes de la interfaz y sus implementaciones; el programador responsable de la interfaz puede optar por implementar una nueva o bien adquirir o reutilizar otra implementación, con tal de que el estipulado contrato se cumpla. 1.3 Notaciones de especi�cación y diseño (UML) 15 Una interfaz y la clase que la implementa están relacionadas mediante una realización (un tipo particular de relación de dependencia), donde una clase puede realizar varias interfaces y una interfaz puede realizarse por más de una clase. Por otro lado, una clase �cliente� puede usar varias interfaces con las que estará relacionada mediante una relación de uso (otro tipo de relación de dependencia). Las interfaces establecen conexiones entre los componentes de una aplicación, y representan los principios de modularidad y ocultación necesarios en diseños orientados a objetos de calidad. En cuanto a su representación diagramática, las interfaces se muestran como clases sin atributos mediante dos representa- ciones alternativas que se muestran en la �gura 1.14: como clases con estereotipo «interfaz» y, en forma abreviada, sin mostrar las operaciones. Al tratarse de un tipo particular de clases, entre las interfaces pueden darse relaciones de herencia. Todas las operaciones de una interfaz son públicas. ObjetoGrafico <<interface>> Dibujable +Dibujar() ObjetoGrafico Dibujable <<interface>> Iterable <<interface>> Collection <<interface>> List <<interface>> Queue <<interface>> Set <<interface>> SortedSet Figura 1.14: Interfaces Relaciones Asociación Es una relación conceptual, que no es inherente a la naturaleza de las clases sino al papel que juegan en el modelo. Especi�ca que las instancias de una clase están conectadas con las de otra. No se trata de una relación fuerte, es decir, el tiempo de vida de dos objetos relacionados es independiente (a menos que exista una restricción asociada a la relación que indique lo contrario). La representación grá�ca de una asociación (véase la �gura 1.15) es básicamente una línea que conecta las clases, pero puede incluir opcionalmente un nombre que da idea de su interpretación en el dominio de la aplicación, así como otros adornos en sus extremos tales como: Un triángulo relleno que indica su dirección (cuando la asociación no es simétrica). Un nombre de rol que cuali�ca el papel que juega cada una de las partes en la asociación (una clase puede desempeñar distintos roles en distintas asociaciones). Una indicación de Navegabilidad, propiedad del rol que consiste en la posibilidad de �ir� desde el objeto origen al objeto destino, es decir, implica la visibilidad de los atributos del objeto destino por parte del objeto origen. Por defecto la navegabilidad es bidireccional, En la �gura 1.17 se ilustra una asociación no bidireccional: dada una password, no se puede acceder directamente al usuario a que pertenece (al menos en principio). Un valor de multiplicidad que especi�ca por cada clase de la asociación el número de objetos que se relacionan con un solo objeto de la clase asociada. Una Cali�cación, atributo de la asociación que permite localizar una cierta instancia cuando la multiplicidad de la asi- ciación es mayor que la unidad en el extremo considerado. (véase la �gura 1.18). Un símbolo de Agregación, que indica una asociación de tipo todo/parte y se representa con un símbolo de diamante (véase la �gura 1.19). Sirve para modelar elementos que se relacionan utilizando expresiones como: �es parte de�, �tiene un�, �consta de�, etc. Una asociación de agregación fuerte, donde las partes (componentes) no pueden existir independi- entemente del todo que las integra (entidad compuesta), se denomina (Composición), y se denota mediante un diamante negro. Figura 1.15: Ejemplo de una asociación En una composición, cada componente pertenece a un todo y sólo a uno (en la �gura 1.19 no se cumple esto, por ejemplo, la antigua Unión Soviética tenía una parte europea y una parte asiática). En la �gura 1.20 vemos un ejemplo de este tipo de relación. 16 Contexto de la asignatura en la Ingeniería de Software Es posible que dos clases estén relacionadas entre sí por más de una asociación o que una clase esté relacionada con muchas clases por diferentes asociaciones. Por lo general, las asociaciones son relaciones
Compartir