Accesos directos a las distintas zonas del curso
Ir a los contenidos
Ir a menú navegación principal
Ir a menú pie de página
Subject's code : 31105043
Resumen: Este tema introduce el curso, presentando mediante un caso de estudio en qué consiste el desarrollo de una familia de productos software mediante un enfoque generativo y cuáles son sus ventajas respecto a la construcción de productos aislados.
Objetivos: (i) Comprender la importancia de los conceptos de reutilización y abstracción en la producción de software. (ii) Ofrecer una visión panorámica del curso.
1.1. Motivación:
1.1.a. Reutilización
1.1.b. Abstracción
1.2. Ejemplo práctico de motivación: “Diccionarios en Java”.
1.3. Organización del curso.
Resumen: Este tema presenta los principios metodológicos que guían el desarrollo de una línea de productos software, es decir, los fundamentos de la ingeniería de dominio e ingeniería de aplicación.
Objetivos: (i) Distinguir las dos grandes fases de desarrollo de una línea de productos software. (ii) Aprender a modelar los aspectos comunes y variables de una familia de productos mediante diagramas de características.
2.1. Ingeniería de Dominio e Ingeniería de Aplicación.
2.2. Análisis de Dominio: Diagramas de características.
Resumen: Con el objetivo de facilitar la ingeniería de aplicación, la parametrización de una línea de productos suele realizarse mediante lenguajes específicos de dominio (DSL, Domain Specific Language). En este tema se estudiará cómo construir un DSL.
Objetivos: (i) Comprender las cualidades deseables de un DSL. (ii) Aprender cómo desarrollar un DSL.
3.1. Cualidades deseables de un Lenguaje Específico de Dominio (Domain Specific Language, DSL).
3.2. Sintaxis y Semántica de un DSL:
3.2.a. Gramáticas BNF
3.2.b. Metamodelos
3.3. Cómo implementar un analizador para DSLs:
3.3.a. Metaparsers, Lenguajes de Transformación.
3.3.b. XML
3.3.c. DSLs embebidos en Lenguajes de Propósito General.
3.3.d. Herramientas de Metamodelado (DSL Tools de Microsoft, GME+EMF de Eclipse).
Resumen: Durante el ciclo de vida de una línea de productos software, resulta vital gestionar convenientemente las características comunes y variables de todos los productos. Lamentablemente, no existe una técnica general para manejar la variabilidad de manera óptima, sino distintos mecanismos específicos para situaciones particulares.
Objetivos: Adquirir una visión panorámica de las distintas maneras de gestionar la variabilidad de software.
4.1. Motivación
a. Cualidades deseables para una técnica de gestión de la variabilidad.
b. Inexistencia de una técnica de “propósito general”
4.2. Técnicas internas: composición, herencia, polimorfismo, genericidad, orientación a aspectos.
4.3. Técnicas externas: generación de código.
Resumen: Ruby es un lenguaje que ofrece interesantes prestaciones generativas. Este tema introduce el uso de Ruby en metaprogramación.
Objetivos: Aprender a utilizar Ruby para desarrollar una familia de productos software mediante un enfoque generativo.
5.1. Justificación del uso de Ruby.
5.2. Análisis de DSLs con Ruby.
5.2.a. Metaparsers (racc, rockit)
5.2.b. XML
5.2.c. DSLs embebidos.
5.3. Generación de código con Ruby.
5.3.a. Librería de plantillas de texto ERB.
Resumen: Este tema presenta la estructura de los artículos científicos y propone el enunciado de un supuesto práctico que los alumnos deberán resolver aplicando los conceptos aprendidos en la asignatura.
Objetivos: Aplicar el temario del curso a un supuesto práctico que ejemplifique la bondad del desarrollo de líneas de productos software.
6.1. Enunciado.
6.2. Estructura y contenidos de un artículo científico.
6.3. Consulta de artículos desde la UNED.