Este documento presenta una introducción al lenguaje Object Constraint Language (OCL). Explica que OCL es un lenguaje para especificar restricciones en modelos UML. Luego resume los orígenes y motivaciones de OCL, sus tipos de datos básicos, el uso de contexto y self, e introduce conceptos como invariantes, pre y post-condiciones. Finalmente, proporciona ejemplos de cómo usar OCL para definir restricciones en un modelo.
TECNOLÓGICO NACIONAL DE MÉXICOInstituto Tecnológico Superior de Guasave
Ingeniería en Sistemas Computacionales
Fundamentos de Programación
Unidad V: Modularidad
Retícula ISIC-2010-224: Programa: AED-1285
El documento describe los conceptos fundamentales del modelado orientado a objetos, incluyendo los modelos orientado a objetos, dinámico y funcional. Explica características clave como clases, objetos, herencia y polimorfismo. También resume varias metodologías como OOHDM, SOHDM y RUP, así como el lenguaje UML. El modelado de casos de uso también se discute brevemente.
Componentes y Librerías - Tópicos avanzados de programación.Giancarlo Aguilar
Este documento describe el uso de componentes y librerías en Java. Explica que las clases en Java pueden agruparse en paquetes lógicos llamados librerías. Detalla algunos paquetes comunes como java.lang y java.io y cómo crear y empaquetar componentes en archivos JAR para facilitar su reutilización.
Este documento describe diferentes tipos de datos como enteros, reales, caracteres, cadenas y booleanos. Explica que los tipos de datos indican el tipo de información que se almacena, imponiendo restricciones en los valores y operaciones permitidas. También discute la compatibilidad y relaciones entre tipos de datos.
El documento describe el proceso de estimación de puntos de función (PF), una métrica para medir el tamaño de un sistema de software. Explica cómo identificar los componentes de un sistema, asignar pesos basados en complejidad, calcular los PF sin ajustar y ajustados, y estimar el esfuerzo, duración y presupuesto de un proyecto basado en los PF.
El documento describe el Team Software Process (TSP), una metodología para dirigir el desarrollo de software en equipo. Explica que TSP establece un entorno para que el trabajo en equipo sea natural y normal, a través de planes personales, compromiso con la calidad, métricas y procesos definidos. También describe las fases del ciclo de vida TSP como lanzamiento, estrategia, requerimientos, diseño, implementación, pruebas y postmortem. Finalmente, resume los pasos para la organización TSP como establecer objetivos, roles
TECNOLÓGICO NACIONAL DE MÉXICOInstituto Tecnológico Superior de Guasave
Ingeniería en Sistemas Computacionales
Fundamentos de Programación
Unidad V: Modularidad
Retícula ISIC-2010-224: Programa: AED-1285
El documento describe los conceptos fundamentales del modelado orientado a objetos, incluyendo los modelos orientado a objetos, dinámico y funcional. Explica características clave como clases, objetos, herencia y polimorfismo. También resume varias metodologías como OOHDM, SOHDM y RUP, así como el lenguaje UML. El modelado de casos de uso también se discute brevemente.
Componentes y Librerías - Tópicos avanzados de programación.Giancarlo Aguilar
Este documento describe el uso de componentes y librerías en Java. Explica que las clases en Java pueden agruparse en paquetes lógicos llamados librerías. Detalla algunos paquetes comunes como java.lang y java.io y cómo crear y empaquetar componentes en archivos JAR para facilitar su reutilización.
Este documento describe diferentes tipos de datos como enteros, reales, caracteres, cadenas y booleanos. Explica que los tipos de datos indican el tipo de información que se almacena, imponiendo restricciones en los valores y operaciones permitidas. También discute la compatibilidad y relaciones entre tipos de datos.
El documento describe el proceso de estimación de puntos de función (PF), una métrica para medir el tamaño de un sistema de software. Explica cómo identificar los componentes de un sistema, asignar pesos basados en complejidad, calcular los PF sin ajustar y ajustados, y estimar el esfuerzo, duración y presupuesto de un proyecto basado en los PF.
El documento describe el Team Software Process (TSP), una metodología para dirigir el desarrollo de software en equipo. Explica que TSP establece un entorno para que el trabajo en equipo sea natural y normal, a través de planes personales, compromiso con la calidad, métricas y procesos definidos. También describe las fases del ciclo de vida TSP como lanzamiento, estrategia, requerimientos, diseño, implementación, pruebas y postmortem. Finalmente, resume los pasos para la organización TSP como establecer objetivos, roles
El documento describe diferentes paradigmas de programación como imperativo, lógico, funcional, orientado a objetos y orientado a eventos. Explica cada paradigma y da ejemplos de lenguajes de programación que los implementan. Concluye que el paradigma a usar depende del tipo de proyecto y que los paradigmas juegan un papel fundamental en el desarrollo de software.
Aquí está la clase Alumno con el constructor y los métodos solicitados:
public class Alumno {
private String nombre;
private int edad;
public Alumno(String nombre, int edad) {
this.nombre = nombre;
this.edad = edad;
}
public void imprimirDatos() {
System.out.println("Nombre: " + nombre);
System.out.println("Edad: " + edad);
}
public void esMayorEdad() {
if(edad >= 18) {
System.out.println(nombre + " es mayor de edad");
} else {
System
Este documento presenta los conceptos clave de la ingeniería de requerimientos de software. Explica el proceso de análisis de requerimientos, incluyendo el levantamiento, análisis, especificación y validación de requerimientos. También describe los componentes fundamentales de una Especificación de Requerimientos de Software (SRS) de alta calidad y los atributos que debe poseer.
UML (Lenguaje Unificado de Modelado) fue creado en 1995 por Grady Booch, Ivar Jacobson y James Rumbaugh. Desde entonces ha evolucionado a través de varias versiones para unificar los lenguajes de modelado de objetos. UML permite modelar sistemas mediante diagramas que representan clases, casos de uso, secuencias de mensajes y otros conceptos. Aunque no es un método de desarrollo en sí mismo, UML es útil para la comunicación, documentación y comprensión de sistemas de software.
Este documento explica los conceptos básicos del Lenguaje Unificado de Modelado (UML), incluyendo los diferentes tipos de diagramas como diagramas de clases, estados, componentes y despliegue. Describe elementos como clases, relaciones, cardinalidad y cómo representarlos visualmente.
Este documento describe las diferentes fases del proceso de programación, incluyendo la fase de modelado, la fase de tipos de datos abstractos (TDA), y la fase de estructuras de datos. Explica el concepto de TDA, incluyendo su definición, dominio, especificación sintáctica y semántica. También describe cómo los programadores pueden utilizar TDA al resolver problemas.
Este documento proporciona instrucciones para instalar MongoDB, un gestor de base de datos no SQL, en Windows. Explica cómo descargar e instalar MongoDB desde su sitio web oficial, mover el archivo descomprimido a la unidad local C, crear carpetas para almacenar las bases de datos, y usar comandos en la línea de comandos para ejecutar MongoDB y crear una base de datos de prueba. Concluye que MongoDB es fácil de instalar pero más complejo de usar que otros gestores de bases de datos debido a su sintaxis y almac
Este documento describe las interrupciones de software en un sistema operativo. Explica que las interrupciones de software son generadas por un programa mediante la instrucción INT y atendidas por una subrutina del sistema operativo. Detalla algunas interrupciones comunes como INT 21h para los servicios de DOS e INT 10h, 16h y 17h para servicios de video, teclado e impresora. Finalmente, resume el mecanismo de tratamiento de interrupciones por el sistema operativo.
Este documento compara los modelos Moprosoft y CMMI para el desarrollo de software. Moprosoft es un modelo mexicano con 9 procesos integrados para mejorar los procesos de software, mientras que CMMI es un marco internacional para mejorar la capacidad de una organización. Ambos modelos buscan mejorar la calidad y reducir costos, pero CMMI requiere más esfuerzo de implementación y evaluación. El documento describe las características, ventajas y desventajas de cada modelo.
Este documento describe los conceptos básicos de manejo de eventos en Java. Explica que un evento es una acción iniciada por el usuario como presionar un botón o cambiar texto. Luego detalla los principales tipos de eventos como MouseEvent, KeyEvent y ActionEvent. Finalmente, explica cómo implementar escuchas de eventos a través de interfaces como MouseListener y cómo se pueden usar adaptadores para simplificar la implementación.
El documento describe MoProSoft, un modelo de procesos para el desarrollo y mantenimiento de software en México. MoProSoft está dividido en 9 procesos organizados en 3 categorías: Alta Dirección, Gestión y Operación. Cada proceso se describe a través de un patrón que incluye su definición, prácticas y nivel de madurez. El objetivo de MoProSoft es incorporar las mejores prácticas de gestión e ingeniería de software en la industria de software mexicana.
Metricas del proyecto de Software - introduccionJose Diaz Silva
Introducción al manejo de las métricas de proyectos de software, considerando los aspectos de tamaño y los elementos de funcionalidad. Se explora la diferencia entre error y defecto , aclarando los conceptos de medida, medición, métrica e indicador. De la misma manera se exploran las métricas privadas y las públicas. Las ventajas y desventajas de estas métricas son mencionadas
Componentes y evolucion del modelado de negocios(investigacion)Anel Sosa
Este documento resume los componentes y la evolución del modelado de negocios. Explica que un modelo de negocios representa gráficamente aspectos de una empresa como su propósito, estructura y dinámica. Describe los cinco componentes clave de un modelo de negocios: procesos de negocio, reglas de negocio, objetos de negocio, actores y unidades organizativas. Luego resume cómo el modelado de negocios ha evolucionado a través de enfoques como la ingeniería de negocios, UML, BPM y BMM
El paradigma imperativo es el primer paradigma formalmente aceptado de programación. Se basa en determinar los datos necesarios para un cálculo, asignarles direcciones de memoria, y efectuar transformaciones paso a paso en los datos almacenados hasta obtener el resultado correcto. Algunos ejemplos de aplicaciones incluyen control de nóminas, control aéreo, inteligencia artificial, y dispositivos móviles.
Mapa conceptual - Institutos Reguladores Calidad de SoftwareKarloz Dz
El documento describe varias organizaciones internacionales de normalización como la Organización Internacional de Normalización (ISO), el Instituto Nacional Estadounidense de Estándares (ANSI), el Instituto de Ingenieros en Electricidad y Electrónica (IEEE) y la Comisión Electrotécnica Internacional (IEC), que se encargan de promover el desarrollo de estándares y normas a nivel internacional para productos, tecnologías de la información, sistemas operativos, lenguajes de programación y formatos de archivo. Muchas de estas normas se
El documento describe los beneficios de aplicar procesos de gestión de la calidad como CMMI. Estos incluyen reducir costos de desarrollo, mejorar la planificación y productividad, reducir defectos, y mejorar la calidad del producto y la imagen de marca. También señala que CMMI puede ser costoso y complejo de implementar, y no se ajusta bien a los enfoques centrados en el servicio.
Este documento presenta las ventajas y desventajas del modelo Moprosoft para el desarrollo y mantenimiento de software. Las ventajas incluyen que está basado en normas ISO, simplifica la relación entre el modelo de procesos y la organización, cuenta con nueve procesos y es específico para el desarrollo de software. Las desventajas son que define actividades de manera muy general y que el 33% de las prácticas como administración de configuración y medición y análisis no están cubiertas.
Este documento describe los elementos básicos de una clase en un lenguaje de programación, incluyendo atributos, operaciones, constructores, métodos analizadores y modificadores. Los atributos almacenan datos sobre el objeto, mientras que las operaciones permiten que el objeto realice acciones. Las clases definen el comportamiento y estado de los objetos a través de sus atributos y métodos.
Linea del tiempo de los lenguajes de programaciónEspitiaGiancarlo
El documento resume la historia de los lenguajes de programación desde 1840 hasta la actualidad. Comenzó con Ada Lovelace y su trabajo sobre la máquina analítica de Babbage en 1843. Luego, en las décadas de 1950 y 1960 se crearon lenguajes pioneros como FORTRAN, LISP, COBOL y BASIC, cada uno diseñado para un propósito diferente. En las décadas siguientes se desarrollaron muchos otros lenguajes importantes como C, Pascal, Ada, C++, Java, PHP y JavaScript, expandiendo las capacidades de programación. La
Este documento presenta una introducción al lenguaje de transformación de modelos Atlas Transformation Language (ATL). Explica los conceptos básicos de ATL como módulos, reglas, helpers y librerías. También describe los diferentes tipos de reglas en ATL como reglas emparejadas, reglas perezosas y reglas llamadas, así como la estructura y sintaxis de estas reglas. El objetivo final es transformar modelos de entrada en modelos de salida mediante la especificación de correspondencias entre elementos de los metamodelos de entrada y salida.
Este documento presenta una lección sobre arquitecturas dirigidas por modelos. Explica conceptos clave como abstracción, clasificación, generalización y diferentes tipos de modelos. También discute la importancia de construir modelos para simplificar la comprensión de sistemas complejos y cómo los modelos pueden usarse para comunicar ideas de manera más efectiva.
El documento describe diferentes paradigmas de programación como imperativo, lógico, funcional, orientado a objetos y orientado a eventos. Explica cada paradigma y da ejemplos de lenguajes de programación que los implementan. Concluye que el paradigma a usar depende del tipo de proyecto y que los paradigmas juegan un papel fundamental en el desarrollo de software.
Aquí está la clase Alumno con el constructor y los métodos solicitados:
public class Alumno {
private String nombre;
private int edad;
public Alumno(String nombre, int edad) {
this.nombre = nombre;
this.edad = edad;
}
public void imprimirDatos() {
System.out.println("Nombre: " + nombre);
System.out.println("Edad: " + edad);
}
public void esMayorEdad() {
if(edad >= 18) {
System.out.println(nombre + " es mayor de edad");
} else {
System
Este documento presenta los conceptos clave de la ingeniería de requerimientos de software. Explica el proceso de análisis de requerimientos, incluyendo el levantamiento, análisis, especificación y validación de requerimientos. También describe los componentes fundamentales de una Especificación de Requerimientos de Software (SRS) de alta calidad y los atributos que debe poseer.
UML (Lenguaje Unificado de Modelado) fue creado en 1995 por Grady Booch, Ivar Jacobson y James Rumbaugh. Desde entonces ha evolucionado a través de varias versiones para unificar los lenguajes de modelado de objetos. UML permite modelar sistemas mediante diagramas que representan clases, casos de uso, secuencias de mensajes y otros conceptos. Aunque no es un método de desarrollo en sí mismo, UML es útil para la comunicación, documentación y comprensión de sistemas de software.
Este documento explica los conceptos básicos del Lenguaje Unificado de Modelado (UML), incluyendo los diferentes tipos de diagramas como diagramas de clases, estados, componentes y despliegue. Describe elementos como clases, relaciones, cardinalidad y cómo representarlos visualmente.
Este documento describe las diferentes fases del proceso de programación, incluyendo la fase de modelado, la fase de tipos de datos abstractos (TDA), y la fase de estructuras de datos. Explica el concepto de TDA, incluyendo su definición, dominio, especificación sintáctica y semántica. También describe cómo los programadores pueden utilizar TDA al resolver problemas.
Este documento proporciona instrucciones para instalar MongoDB, un gestor de base de datos no SQL, en Windows. Explica cómo descargar e instalar MongoDB desde su sitio web oficial, mover el archivo descomprimido a la unidad local C, crear carpetas para almacenar las bases de datos, y usar comandos en la línea de comandos para ejecutar MongoDB y crear una base de datos de prueba. Concluye que MongoDB es fácil de instalar pero más complejo de usar que otros gestores de bases de datos debido a su sintaxis y almac
Este documento describe las interrupciones de software en un sistema operativo. Explica que las interrupciones de software son generadas por un programa mediante la instrucción INT y atendidas por una subrutina del sistema operativo. Detalla algunas interrupciones comunes como INT 21h para los servicios de DOS e INT 10h, 16h y 17h para servicios de video, teclado e impresora. Finalmente, resume el mecanismo de tratamiento de interrupciones por el sistema operativo.
Este documento compara los modelos Moprosoft y CMMI para el desarrollo de software. Moprosoft es un modelo mexicano con 9 procesos integrados para mejorar los procesos de software, mientras que CMMI es un marco internacional para mejorar la capacidad de una organización. Ambos modelos buscan mejorar la calidad y reducir costos, pero CMMI requiere más esfuerzo de implementación y evaluación. El documento describe las características, ventajas y desventajas de cada modelo.
Este documento describe los conceptos básicos de manejo de eventos en Java. Explica que un evento es una acción iniciada por el usuario como presionar un botón o cambiar texto. Luego detalla los principales tipos de eventos como MouseEvent, KeyEvent y ActionEvent. Finalmente, explica cómo implementar escuchas de eventos a través de interfaces como MouseListener y cómo se pueden usar adaptadores para simplificar la implementación.
El documento describe MoProSoft, un modelo de procesos para el desarrollo y mantenimiento de software en México. MoProSoft está dividido en 9 procesos organizados en 3 categorías: Alta Dirección, Gestión y Operación. Cada proceso se describe a través de un patrón que incluye su definición, prácticas y nivel de madurez. El objetivo de MoProSoft es incorporar las mejores prácticas de gestión e ingeniería de software en la industria de software mexicana.
Metricas del proyecto de Software - introduccionJose Diaz Silva
Introducción al manejo de las métricas de proyectos de software, considerando los aspectos de tamaño y los elementos de funcionalidad. Se explora la diferencia entre error y defecto , aclarando los conceptos de medida, medición, métrica e indicador. De la misma manera se exploran las métricas privadas y las públicas. Las ventajas y desventajas de estas métricas son mencionadas
Componentes y evolucion del modelado de negocios(investigacion)Anel Sosa
Este documento resume los componentes y la evolución del modelado de negocios. Explica que un modelo de negocios representa gráficamente aspectos de una empresa como su propósito, estructura y dinámica. Describe los cinco componentes clave de un modelo de negocios: procesos de negocio, reglas de negocio, objetos de negocio, actores y unidades organizativas. Luego resume cómo el modelado de negocios ha evolucionado a través de enfoques como la ingeniería de negocios, UML, BPM y BMM
El paradigma imperativo es el primer paradigma formalmente aceptado de programación. Se basa en determinar los datos necesarios para un cálculo, asignarles direcciones de memoria, y efectuar transformaciones paso a paso en los datos almacenados hasta obtener el resultado correcto. Algunos ejemplos de aplicaciones incluyen control de nóminas, control aéreo, inteligencia artificial, y dispositivos móviles.
Mapa conceptual - Institutos Reguladores Calidad de SoftwareKarloz Dz
El documento describe varias organizaciones internacionales de normalización como la Organización Internacional de Normalización (ISO), el Instituto Nacional Estadounidense de Estándares (ANSI), el Instituto de Ingenieros en Electricidad y Electrónica (IEEE) y la Comisión Electrotécnica Internacional (IEC), que se encargan de promover el desarrollo de estándares y normas a nivel internacional para productos, tecnologías de la información, sistemas operativos, lenguajes de programación y formatos de archivo. Muchas de estas normas se
El documento describe los beneficios de aplicar procesos de gestión de la calidad como CMMI. Estos incluyen reducir costos de desarrollo, mejorar la planificación y productividad, reducir defectos, y mejorar la calidad del producto y la imagen de marca. También señala que CMMI puede ser costoso y complejo de implementar, y no se ajusta bien a los enfoques centrados en el servicio.
Este documento presenta las ventajas y desventajas del modelo Moprosoft para el desarrollo y mantenimiento de software. Las ventajas incluyen que está basado en normas ISO, simplifica la relación entre el modelo de procesos y la organización, cuenta con nueve procesos y es específico para el desarrollo de software. Las desventajas son que define actividades de manera muy general y que el 33% de las prácticas como administración de configuración y medición y análisis no están cubiertas.
Este documento describe los elementos básicos de una clase en un lenguaje de programación, incluyendo atributos, operaciones, constructores, métodos analizadores y modificadores. Los atributos almacenan datos sobre el objeto, mientras que las operaciones permiten que el objeto realice acciones. Las clases definen el comportamiento y estado de los objetos a través de sus atributos y métodos.
Linea del tiempo de los lenguajes de programaciónEspitiaGiancarlo
El documento resume la historia de los lenguajes de programación desde 1840 hasta la actualidad. Comenzó con Ada Lovelace y su trabajo sobre la máquina analítica de Babbage en 1843. Luego, en las décadas de 1950 y 1960 se crearon lenguajes pioneros como FORTRAN, LISP, COBOL y BASIC, cada uno diseñado para un propósito diferente. En las décadas siguientes se desarrollaron muchos otros lenguajes importantes como C, Pascal, Ada, C++, Java, PHP y JavaScript, expandiendo las capacidades de programación. La
Este documento presenta una introducción al lenguaje de transformación de modelos Atlas Transformation Language (ATL). Explica los conceptos básicos de ATL como módulos, reglas, helpers y librerías. También describe los diferentes tipos de reglas en ATL como reglas emparejadas, reglas perezosas y reglas llamadas, así como la estructura y sintaxis de estas reglas. El objetivo final es transformar modelos de entrada en modelos de salida mediante la especificación de correspondencias entre elementos de los metamodelos de entrada y salida.
Este documento presenta una lección sobre arquitecturas dirigidas por modelos. Explica conceptos clave como abstracción, clasificación, generalización y diferentes tipos de modelos. También discute la importancia de construir modelos para simplificar la comprensión de sistemas complejos y cómo los modelos pueden usarse para comunicar ideas de manera más efectiva.
Este documento introduce los conceptos básicos de los meta-modelos y su relación con los modelos. Explica que un meta-modelo especifica los elementos de un lenguaje de modelado y permite definir transformaciones entre modelos. Además, describe la arquitectura de cuatro capas que incluye objetos, modelos, meta-modelos y meta-meta-modelos, siendo este último nivel especificado por MOF. Finalmente, concluye explicando los usos principales de los meta-modelos como declarar lenguajes de modelado y definir transformaciones entre modelos.
1) El zoológico de Quillota desea desarrollar una aplicación para gestionar el funcionamiento de los animales, ya que se han perdido varios, mediante el uso de la programación orientada a objetos.
2) Se definirán las clases y sus atributos, así como un esquema de herencia para modelar las relaciones entre clases.
3) La programación orientada a objetos es un paradigma de programación basado en conceptos como herencia, encapsulamiento, polimorfismo y abstracción, que organiza el software en objetos con datos y
Modelos de Marcas en Arquitecturas dirigidas por ModelosRicardo Tesoriero
Este documento trata sobre los modelos de marcado y las marcas. Explica que las marcas son extensiones livianas de los modelos que capturan información adicional necesaria para las transformaciones sin contaminar los modelos. También define que un modelo de marcado establece la relación entre las marcas de la misma forma que los metamodelos lo hacen con los modelos. Finalmente, discute formas de marcado, aplicaciones de marcas y la relación entre marcas y elementos de los modelos.
Este documento presenta una introducción a las arquitecturas dirigidas por modelos y la construcción de lenguajes. Explica que los meta-modelos definen lenguajes de una manera abstracta y que el Meta Object Facility (MOF) y los perfiles de UML son enfoques comunes para definir formalmente la sintaxis y semántica de un lenguaje específico. También cubre conceptos como estereotipos, restricciones y notaciones gráficas que son elementos clave en la construcción de lenguajes.
MOF básico para Arquitecturas dirigidas por ModelosRicardo Tesoriero
El documento describe la arquitectura Meta Object Facility (MOF) 2.0, que es el fundamento para la gestión de metadatos independientes de plataforma en el enfoque Modelo Dirigido por Arquitectura (MDA). MOF 2.0 unifica los conceptos de modelado con UML 2.0 y define dos variantes principales: EMOF (MOF esencial) y CMOF (MOF completo). El documento también explica varios paquetes como Reflection, Identifiers y Extension que proveen capacidades de extensión a los meta-modelos.
Este documento trata sobre las transformaciones de modelos en arquitecturas dirigidas por modelos. Explica brevemente las capas de abstracción, repasa la transformación de modelos y presenta un ejemplo informal de la transformación entre un modelo de análisis y uno de diseño para un sistema bancario. Luego define conceptos como funciones y reglas de transformación para mapear modelos de una forma reutilizable.
El documento describe los conceptos fundamentales de la programación orientada a objetos (POO). Explica que la POO se basa en abstracciones del mundo real como objetos que tienen estado, comportamiento e identidad. Define clases como plantillas para crear objetos, los cuales interactúan mediante el envío de mensajes que activan métodos.
La programación orientada a objetos representa problemas como objetos con atributos y comportamiento. Una clase es un modelo que define el estado y comportamiento de los objetos que se crean a partir de ella. Los objetos son instancias de clases que contienen datos y funciones. La herencia permite que las subclases hereden atributos y métodos de sus superclases.
Este documento presenta Acceleo, un lenguaje de transformación de modelos a texto. Explica los principales componentes de Acceleo como módulos, plantillas, consultas y ayudantes. Detalla el uso de plantillas para generar texto, bucles, condiciones y asignaciones. También cubre consultas OCL para extraer información de los modelos.
Este documento describe los conceptos fundamentales de la programación orientada a objetos. Explica que la POO se basa en modelar problemas mediante objetos del mundo real y sus interacciones. Define conceptos como clases, objetos, atributos, métodos, mensajes, encapsulamiento, herencia y polimorfismo.
Terminología y conceptos en Arquitecturas dirigidas por ModelosRicardo Tesoriero
Este documento presenta un resumen de los conceptos clave de las Arquitecturas Dirigidas por Modelos (MDA). Explica que una MDA separa la especificación funcional de un sistema de los detalles de implementación en una plataforma específica. Define conceptos como modelo, meta-modelo, plataforma e introduce los puntos de vista independiente de plataforma (PIM) y específico de plataforma (PSM) que son clave en MDA.
Resumen Programación Orientada a Objetos 20_06_2023 (1).pptxDELIAMARINAHERAZOTUI
Este documento presenta una conferencia sobre el diseño de software usando el paradigma de programación orientada a objetos. La conferencia incluye una introducción a la programación orientada a objetos, una explicación de objetos y clases, y una guía detallada para crear un diagrama de clases usando la notación UML. El objetivo es ayudar a los asistentes a la conferencia a diseñar soluciones de software siguiendo buenas prácticas de diseño orientado a objetos.
Introdución a las Arquitecturas Dirigidas por ModelosRicardo Tesoriero
Este documento presenta una introducción a los métodos avanzados de desarrollo de software. Explica que los métodos tradicionales de desarrollo de software son caros y propensos a errores, por lo que se necesitan nuevos enfoques. Además, describe cómo la industria del software ha estado elevando los niveles de abstracción y reutilización a lo largo de los años para mejorar la productividad y la calidad. Finalmente, introduce el concepto de Arquitectura Dirigida por Modelos como un nuevo enfoque prometedor.
Este documento proporciona una introducción a los conceptos básicos de la programación orientada a objetos en Java, incluyendo objetos, clases, mensajes y herencia. También explica los diferentes tipos de datos primitivos y referenciados en Java, así como las convenciones para nombrar variables.
Un objeto es una entidad con características y comportamiento propios. Una clase describe los atributos y operaciones comunes de un conjunto de objetos. Los diagramas de clases representan las clases y sus relaciones en un sistema.
Este documento presenta una lección sobre el lenguaje de transformación de modelos Atlas Transformation Language (ATL). Se introducen conceptos clave como módulos ATL, tipos de datos primitivos y de colecciones en ATL, así como operaciones y características de estos tipos. También se explican conceptos como reglas ATL, helpers y atributos y cómo se pueden usar para transformar modelos.
El documento introduce los conceptos básicos de la orientación a objetos, incluyendo sus características como la identidad, abstracción, clasificación, encapsulamiento, herencia, polimorfismo y persistencia. También describe el proceso de desarrollo orientado a objetos, desde los requisitos hasta la codificación y pruebas.
reglas de pruntuacion y semantica de sintaxis y elementosSharonChan94
sintaxis y semantica Regla en forma general:
IF cond1 AND cond2 AND ... condn
THEN acc1 AND acc2 AND ... Accm
•
Ejemplo de regla
sin variables:
IF (coche COCHE-JUAN) AND
(luces COCHE-JUAN ténues)
THEN (verificar_batería COCHE-JUAN)
•
Ejemplo de regla
con variables:
IF (coche $x) AND (luces $x ténues)
THEN (verificar_batería $x)
Regla en forma general:
IF cond1 AND cond2 AND ... condn
THEN acc1 AND acc2 AND ... Accm
•
Ejemplo de regla
sin variables:
IF (coche COCHE-JUAN) AND
(luces COCHE-JUAN ténues)
THEN (verificar_batería COCHE-JUAN)
•
Ejemplo de regla
con variables:
IF (coche $x) AND (luces $x ténues)
THEN (verificar_batería $x)
Similar a OCL en Arquitecturas dirigidas por Modelos (20)
reglas de pruntuacion y semantica de sintaxis y elementos
OCL en Arquitecturas dirigidas por Modelos
1. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Métodos Avanzados de Desarrollo de Software
Asignatura Optativa de 4º Año
Grado en Informática
Departamento de Sistemas Informáticos
Universidad de Castilla-La Mancha
Métodos avanzados de
desarrollo de software
Tema IV: Object Constraint Language (OCL).
Conceptos básicos orientados a MDA
2. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Índice
• Introducción
• Orígenes y motivación
• OCL y OCLInEcore
• Valores básicos y tipos
• Contexto y Self
• Acceso a Propiedades y
Operaciones
• If then else endif
• Invariantes, pre y post
condiciones
• Atributos / propiedades
derivadas
• Valores iniciales
• Definición de
propiedades y
operaciones
• Colecciones
• Collect, select, reject
• Forall, exists
• Iterate
• Sortedby y Sum
• Sequence, Bag, Set y
OrderedSet
• Expresiones Let
• Tuplas
• Otros usos
3. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Orígenes
• En 1996, la OMG pidió propuestas sobre el Diseño y Análisis
de Objetos
• En 1997, IBM conjuntamente con ObjectTime enviaron una
propuesta que incluía OCL
• OCL fue desarrollado por Jos Warmer como un lenguaje para
el modelado de negocios dentro de IBM
• Es derivado de método Syntropy de Steve Cook y John Daniels
4. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Introducción
• ¿Qué es OCL?
• Es un lenguaje para especificar restricciones sobre objetos en
UML
• Especifica condiciones que deben mantenerse para el sistema
que está siendo modelado
• ¿Por qué?
• UML no está suficientemente refinado para describir todos los
aspectos relevantes de una especificación
• El lenguaje natural lleva a ambigüedades…
• Los lenguajes formales son «muy matemáticos» => no son fáciles
de usar
• Por lo tanto, tenemos OCL para rellenar la brecha
5. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Especificación de OCL
• OCL es un lenguaje puro de especificación; por lo tanto una
expresión en OCL no tiene efectos laterales (secundarios).
Cuando se evalúa una expresión en OCL, simplemente retorna
un valor, no puede cambiar nada del modelo.
• Esto significa que el estado del sistema nunca cambia por
culpa de una evaluación de una expresión OCL, aunque una
expresión OCL puede usarse para especificar un cambio de
estado (por ej., en una post condición)
• OCL no es un lenguaje de programación; no es posible escribir
una programa lógico o controlar el flujo de la información
con OCL
6. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
¿Cómo podemos usar OCL?
• Forma de especificación de invariantes sobre clases y tipos
• Describir pre y post condiciones en Operaciones y Métodos
• Lenguaje de consultas
• Establecer invariantes de tipos sobre Estereotipos
• Describir Guardas
• Especificar (conjuntos) de objetivos para mensajes y acciones
• Especificar restricciones sobre las operaciones
• Especificar reglas de derivación para atributos en cualquier
expresión sobre un modelo UML
7. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
OCL y OCLInEcore
• OCL es un lenguaje estándar cuya especificación la define la
OMG
• Por lo tanto, tiene una sintaxis y semántica determinada.
• Por otro lado, desde una perspectiva práctica, la definición de
modelos se definen en ECORE (que es una dialecto de MOF)
• Para poder escribir restricciones en ECORE se utiliza el
lenguaje OCLInEcore
8. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
OCL
• Las expresiones OCL utilizan 2 conceptos fundamentales:
• self (self)
• Hace referencia a una instancia definida por el contexto
• context (context)
• Hace referencia a un elemento del modelo en el cual está definida la
expresión (por ej. una clase, una propiedad, una operación, etc.)
• OCL permite expresar
• Invariantes
• Pre-condiciones
• Post-condiciones
• Consultas
9. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Valores básicos
Tipo (OCL) Valores
Boolean true, false
Integer 1, -5, 2, 34, 26534,…
Real 1.5, 3.14, …
String ‘To be or not to be’,…
Tipo Operaciones
Integer *,+,-,/, =, abs()
Real *,+,-,/, =, floor()
Boolean and, or, xor, not, implies, if-then-else-endif
String concat(), size(), substring(), >, <, =
10. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Más sobre tipos
Tipo Subtipo de Condición Descripción
Set(T1) Collection(T2) Si T1 es compatible con T2 Sin orden ni repetidos
Sequece(T1) Collection(T2) Si T1 es compatible con T2 Ordenado con repetidos
Bag(T1) Collection(T2) Si T1 es compatible con T2 Sin orden con repetidos
OrderedSet(T1) Collection(T2) Si T1 es compatible con T2 Ordenado sin repetidos
Integer Collection(T2) Si T1 es compatible con T2
Expresión OCL Válido Explicación
1 + 2 * 34 si
1 + ‘motorcycle’ no String no es compatible con Integer
23 * false no Boolean no es compatible con Integer
12 +13.5 si
Válido Explicación
Casting object.oclAsType(Type2) Evalúa object con el tipo Type2
Operador Infijo A + B A.+(B)
Comentarios -- -- Comentario
11. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
El Contexto y Self Toda expresión OCL tiene un contexto
Si el contexto está
asociado a Propiedad
multi-valuada (por ej.
clientes, ventas,
productos, ítems, etc.)
self se refiere a la
colección apuntada por
la relación
Si el contexto está
asociado a una una
Propiedad simple (por ej.
destinatario, libreria,
producto, etc.) self se
refiere a la instancia del
objeto apuntados.
Si el contexto esta
asociado a una Clase (por
ej. Cliente, Factura, etc.)
self se asocia a cada una
de las instancias de la
clase.
12. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
self.libreria
Acceso a propiedades
self.ventas
Acceso a Propiedades y Operaciones
self.nombre
contexto
referencia
Acceso a atributos
self.librosFaltantes()
Acceso a operaciones
self.libreria.librosFaltantes()
Acceso a otros contextos
RECORDAR: self hace referencia al contexto
self.libreria.nombre
13. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
El if then else endif
• En OCL todo es una función
• Por lo tanto, el if es una función
• <expresión boolean> define una expresión que devuelve un
boolean
• <expresión if true> define la expresión que se
evalúa/devuelve si <expresión boolean> es true
• <expresión if false> define la expresión que se
evalúa/devuelve si <expresión boolean> es false
if (self.stock < self.stockMin)
then true
else false
endif
if (<expresión boolean>)
then <expresión if true>
else <expresión if false>
endif
14. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Propiedades definidas en todos los
objetos
• Hay muchas propiedades definidas en todos los objetos
• oclIsTypeOf (t : OclType) : Boolean
• oclIsKindOf (t : OclType) : Boolean
• oclInState (s : OclState) : Boolean
• oclIsNew () : Boolean
• oclAsType (t : OclType) : instance of
OclType
• Ejemplo
context Libro
inv: self.oclIsTypeOf( Libro ) -- is true
inv: self.oclIsKindOf( Libro ) -- is true
inv: self.oclIsTypeOf( Producto ) -- is false
inv: self.oclIsKindOf( Producto ) -- is true
inv: self.oclIsTypeOf( Libreria ) -- is false
inv: self.oclIsKindOf( Libreria ) -- is false
15. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Invariantes
• Un invariante es una condición que siempre se cumple para el
contexto de la instancia de la clase en el que está definida
• El contexto de un invariante asociado a una Clase indica que la
condición en OCL se debe cumplir para todas las instancias de esa
clase
• La sintáis es:
Donde:
• <variable contexto> define la forma que se tiene para referirse al
contexto desde la expresión
• <contexto> define el tipo al cuál está asociado el contexto (ej.
clase)
• <nombre invariante> identifica al invariante
• <expresión OCL> define la condición que debe cumplirse
context <variable contexto> : <contexto>
inv <nombre invariante> : <expresión OCL>
16. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Ejemplo Invariante
• Un invariante en OCL es una expresión es una restricción
estereotipada como un «invariant»
• Por ejemplo: Especifiquemos que el atributo cantidad de una
Item de una Factura debe ser mayor que 0
• Existen varias formas de escribir el invariante:
context i : Item inv ItemCantidadMAQ0: i.cantidad > 0 Contexto explícito
context Item inv ItemCantidadMAQ0: self.cantidad > 0 Contexto anónimo
Contexto implícitoinv ItemCantidadMAQ0: self.cantidad > 0
17. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Pre/Post Condiciones
• Una precondición define una condición que debe cumplirse antes de ejecutar una
operación
• Un postcondición es una condición que debe cumplirse después de haberse ejecutado una
operación
• Como el contexto define la entidad donde se ejecuta la expresión de la condición, en este
caso es una operación.
• Dónde
• <tipo> Nombre de la entidad que contiene la operación (por ej. una clase)
• <nombre operación> define el nombre de la operación dentro del tipo
• <param> define la variable para hacer referencia al parámetro dentro de la expresión
• <tipo param> define el tipo del parámetro
• <tipo retorno> define el tipo del valor de retorno de la operación
• <expresión precondición> define la expresión precondición (pueden referenciarse
los parámetros)
• <expresión postcondición> define la expresión de la postcondición (pueden
referenciarse: los parámetros, los valores anteriores a la ejecución de la operación agregando
el postfijo @pre y al valor de retorno con la variable result
context <tipo> : : <nombre operación> (<param1> : <tipo param>, ... )
: <tipo retorno>
pre <nombre pre> : <expression precondición>
post <nombre post> : <expression postcondición>
18. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Pre/Post condiciones
Ejemplo OCL
• Supongamos que queremos establecer pre y post condiciones en la
operación incStock(cant:Integer) definada en la clase
Producto que tiene por objeto incrementar la variable stock con
la cantidad establecida en el parámetro cant.
• La precondición establece que cant debe ser mayor que 0
• La post-condición establece que el valor de stock debe ser el
valor de esta variable antes de ser ejecutada la operación más el
valor de cant.
context Producto :: incStock (cant : Integer) : void
pre CantidadValida : cant > 0
post StockValido : self.stock@pre + cant = self.stock
Pre / Post nombradas
context Producto :: incStock (cant : Integer) : void
pre : cant > 0
post : self.stock@pre + cant = self.stock
Pre / Post anónimas
19. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Propiedades derivadas
• Una propiedad derivada es un propiedad cuyo valor se calcula a
partir de una expresión definida en función de otros valores
• El contexto, en este caso es la propiedad (asociación o atributo) que
se quiere definir
• Dónde:
• <tipo> Nombre de la entidad que contiene la operación (por ej. una
clase)
• <nombre/rol propiedad> define el nombre de la propiedad dentro
del tipo
• <tipo propiedad> define el tipo del valor de la propiedad
• <expresión calculo> define la expresión precondición (pueden
referenciarse los parámetros)
context <tipo> :: <nombre/rol propiedad> : <tipo propiedad>
derive : <expression cálculo>
20. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Propiedades / Atributos derivados
Ejemplo OCL
• Supongamos que queremos especificar el valor de la
propiedad precio falta de la clase Libro
context Libro:: falta : Boolean
derive: if (self.stock < self.stockMin)
then true
else false
endif
21. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Operaciones en OCL
• OCL NO es un lenguaje operacional, sino de especificación
• Sin embargo, además de condiciones (devolver un boolean), podemos
especificar consultas (devolver objetos)
• El contexto de las consultas son las operaciones
• Dónde
• <tipo> Nombre de la entidad que contiene la operación (por ej. una clase)
• <nombre operación> define el nombre de la operación dentro del tipo
• <param> define la variable para hacer referencia al parámetro dentro de la
expresión
• <tipo param> define el tipo del parámetro
• <tipo retorno> define el tipo del valor de retorno de la operación
• <expresión precondición> define la expresión precondición (pueden
referenciarse los parámetros)
context <tipo> :: <nombre operación> (<param> : <tipo param>, ... )
: <tipo retorno>
body : <expresión consulta>
22. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Operaciones en OCL
Ejemplo
• Supongamos que queremos especificar la operación
productosFaltantes() : Sequence(Producto)
en la clase Libreria
context Producto :: hayStock(cant:Integer) : Boolean
body : self.stock => cant
23. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Valor inicial de una propiedad
• Una expresión OCL puede ser utilizada para el valor inicial de una
propiedad.
• El contexto, en este caso es la propiedad (asociación o atributo) que se
quiere definir
• Dónde
• <tipo> Nombre de la entidad que contiene la operación (por ej. una clase)
• <nombre/rol propiedad> define el nombre de la operación dentro del tipo
• <tipo propiedad> define el tipo del valor de la propiedad
• <expresión calculo> define la expresión precondición (pueden
referenciarse los parámetros)
context Libreria :: nombre : String
init: ‘DefaultName’
context <tipo> : : <nombre/rol propiedad> : <tipo propiedad>
init: <expression cálculo>
24. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Definición de operaciones y
atributos
• Para poder reusar variables/operaciones en múltiples expresiones
OCL se puede usar el estereotipo «definition».
• Por ejemplo:
-- Atributo con valor por omisión
-- Atributo derivado
-- Operación (notar los ( ) )
context Libreria
def : acronimo: String = ‘LMADS’
context Item
def : totalIva : Integer = self.precio * self.cantidad
context Producto
def : hayEnStock(cant : Integer) : Boolean
= self.stock > cant
25. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Colecciones
• Literales
• Conjuntos
• Set { 1 , 2 , 5 , 88 }
• Set { 'apple,' 'orange,' 'strawberry' }
• Secuencias
• Sequence { 1, 3, 45, 2, 3 }
• Sequence { 'ape,' 'nut' }
• Sequence { 1..(6+4)} -- 1,2,3,4,5,6,7,8,9,10
• Bolsas
• Bag {1, 3, 4, 3, 5 }
• Operaciones
• collection1->union(collection2)
26. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Operaciones en Collection
• Uso
• Operaciones
• size(): número de elementos de self
• includes(o: oclAny): devuelve true si o está en self
• excludes(o: oclAny): devuelve true si o no está en self
• count (o: oclAny): devuelve la cantidad de veces que o ocurren en self
• includesAll(c:Collection): devuelve true si todos los objetos de c están en self
• excludesAll(c:Collection): devuelve true si ninguno de los objetos de c están en
self
• isEmpty(): devuelve true si la colección está vacía
• notEmpty(): devuelve true si la colección no está vacía
• sum(): devuelve el valor que representa la suma de todos los elementos en self.
Los elementos deben soportar (+)
• asBag(): devuelve un Bag con los elementos de self
• asSequence(): devuelve una Sequence con los elementos de self
• asSet(): devuelve un Set con los elementos de self
self->operation_name(parameters)
27. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Operaciones de Sequence
• union(c:Collection): devuelve una secuencia con los elementos de self seguida
de los de c
• flatten(): devuelve una secuencia con que contiene los hijos de las colecciones
contenidas en self
• append(o:oclAny): devuelve una copia de self con el elemento o al final
• prepend(o:oclAny): devuelve una copia de self con el elemento o al principio
• insertAt(n:Integer, o:oclAny): devuelve una copia de self con el elemento o en la
posición n
• subSequence(lower:Integer, upper:Integer): devuelve la secuencia de elementos
de self comprendida entre lower y upper
• at(n:Integer): devuelve el elemento en n de self
• indexOf(o:oclAny): devuelve el primer índice de o en self
• first(): devuelve el primer elemento de self
• last(): devuelve el último elemento de self
• including(o:oclAny): devuelve una copia de self con el elemento o al final
• excluding(o:oclAny): devuelve una copia de self con todas las ocurrencias de o en
self removidas
28. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Operaciones de Set
• union(c:Collection): devuelve un Set compuesto con los y los de c sin
duplicados
• intersection(c:Collection): devuelve un Set con los elementos que
aparecen en self y c
• - (s:Set): devuelve un Set compuesto de los elementos de self que no
están en s
• including(o:oclAny): devuelve una copia de self con el elemento o
• excluding(o:oclAny): devuelve una copia de self sin el elemento o
• symetricDifference(s:Set): devuelve un Set compuesto por los
elementos que están en self o s pero no en ambos
• flatten() no está definido
29. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Operaciones de Bag
• union(c:Collection): devuelve un Set compuesto con los y los
de c sin duplicados
• intersection(c:Collection): devuelve un Set con los elementos
que aparecen en self y c
• including(o:oclAny): devuelve una copia de self con el
elemento o
• excluding(o:oclAny): devuelve una copia de self sin el
elemento o
• flatten(): devuelve una secuencia con que contiene los hijos de
las colecciones contenidas en self
30. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Operaciones en OrderedSet
• append(o:oclAny): devuelve una copia de self con el elemento o al final, si no está
• prepend(o:oclAny): devuelve una copia de self con el elemento o al principio, si no
está
• insertAt(n:Integer, o:oclAny): devuelve una copia de self con el elemento o en la
posición n, si no está
• subOrderedSet(lower:Integer, upper:Integer): devuelve una subSecuencia de self
desde lowes hasta upper
• at(n:Integer): devuelve el elemento en n de self
• indexOf(o:oclAny): devuelve el primer índice de o en self
• first(): devuelve el primer elemento de self
• last(): devuelve el último elemento de self
• union(c:Collection): devuelve un OrderedSet compuesto de los elementos de self
seguidos de los de c con los duplicados removidos
• flatten(): devuelve on OrderedSet que contiene los hijos de las colecciones
contenidas en self
• including (o:oclAny): devuelve una copia de self con el elemento o añadido al final
de la colección
• excluding (o:oclAny): devuelve una copia de self con el elemento o removido
31. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Operación collect
• Especifica una colección derivada de otra colección
• NO es una sub-colección
collection->collect( v : Type | expression-with-v )
collection->collect( v | expression-with-v )
collection->collect( expression )
32. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Operación collect
Ejemplo
context Libreria::idFiscalClientes() : Sequence(String)
body : self.clientes->collect( c : Cliente| c.idFiscal)
context Libreria::idFiscalClientes() : Sequence(String)
body : self.clientes->collect( c | c.idFiscal)
context Libreria::idFiscalClientes() : Sequence(String)
body : self.clientes->collect(idFiscal)
context Libreria::idFiscalClientes() : Sequence(String)
body : self.clientes.idFiscal
33. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Operaciones select y reject
• Es difícil que un modelo no necesite expresar colecciones
• Las operaciones como select() y reject() se utilizan para crear
nuevas colecciones a partir de colecciones existentes
• select
• reject
collection->reject( v : Type | boolean-expression-with-v )
collection->reject( v | boolean-expression-with-v )
collection->reject( boolean-expression )
collection->select( v : Type | boolean-expression-with-v )
collection->select( v | boolean-expression-with-v )
collection->select( boolean-expression )
34. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Ejemplos de operaciones
select y reject
• Ejemplo con select()
• Devuelve los productos faltantes
• Ejemplo con reject()
• Devuelve los productos faltantes
context Libreria :: productosFaltantes() : Set(Producto)
body: self.productos->select(falta)
context Libreria :: productosFaltantes() : Set(Producto)
body: self.productos->reject(not enFalta)
35. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Operación ForAll
• Permite especificar que una condición booleana la satisfacen
todos los elementos de una colección
• Ejemplo: Un producto puede estar como máximo en 1 ítem
por factura
collection->forAll( v : Type | boolean-expression-with-v )
collection->forAll( v | boolean-expression-with-v )
collection->forAll( boolean-expression )
context Factura
inv: self.items -> forAll( i1, i2 : Item | i1 <> i2 implies
i1.producto <> i2.producto)
36. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Operación Exists
• Sirve para saber si al menos un elemento de la colección
satisface una condición
• Ejemplo: Todos los ítems de una factura deben tener una
cantidad > 0
collection->exists( v : Type | boolean-expression-with-v )
collection->exists( v | boolean-expression-with-v )
collection->exists( boolean-expression )
context Factura
inv: not self.items->exists(i : Item | i.cantidad = 0)
37. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Operación Iterate
• Todas las operaciones que hemos visto pueden escribirse
utilizando esta operación (es más genérica)
• Ejemplo:
• Es equivalente a:
collection->iterate( elem : Type;
acc : Type = <expression> |
expression-with-elem-and-acc )
collection->collect(x : T | x.property)
collection->iterate(x : T; acc : T2 = Bag{} |
acc->including(x.property))
38. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Iterate - Ejemplo
• Ejemplo: Obtener mejor venta
context Libreria :: mejorVenta(): Factura
body : self.ventas->iterate(fv:Factura; mejor:Factura =
self.ventas->first() |
if (fv.total > mejor.total) then fv else mejor endif)
39. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Operación SortedBy
• El objetivo de esta operación es ordenar una colección de acuerdo
con un criterio
• Para poder comparar, lo ideal es utilizar expresiones que devuelvan
tipos básicos String o Int.
• Para invertir el orden
• Ejemplo: Ordenar las ventas de mayor a menor
collection->sortedBy(x : T | x.property)
collection->sortedBy(x : T | -x.property)
context Libreria :: ventasPorTotalAsc() : OrderedSet(Factura)
body : self.ventas->sortedBy(f:Factura | f.total)
40. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Operación Sum
• El objetivo de esta operación es sumar una colección de
números (Integer, Real)
• Ejemplo: Calcular el total de las ventas
collection->sum()
context Libreria :: totalVentas() : Integer
body : self.ventas.total->sum()
41. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Expresiones let
• Permiten definir una sub expresión
• Sólo se calculan cuando se definen, por lo tanto son muy útiles cuando
una expresión se necesita más de una vez
• Let permite definir una o más variables que pueden ser usadas en las
restricciones.
• Dónde
• <nombre variable> define el nombre de la variable dentro del alcance
IN
• <tipo variable> define el tipo de la variable dentro del alcance IN
• <tipo propiedad> define el tipo del valor de la propiedad
• <expresión calculo> define la expresión que calcula el valor de la
variable
• <expresión uso> define la expresión de uso de una variable
let <nombre variable> : <tipo variable> = <expression
calculo> in <expresión uso>;
42. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Expresiones let
Ejemplo OCL
• Por ejemplo, queremos obtener los productos que cuestan
mas que el promedio
context Libreria :: productosMasCarosQueElPromedio :
Sequence(Producto)
body: let promedio : Real =
self.productos.precio->sum() / self.productos->size()
in
self.productos->select(precio > promedio);
43. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Tuplas
• Una tupla es una secuencia ordenada con un número limitado de
objetos heterogéneos
• Muy útiles para colecciones de valores intermedios
• Definición dl tipo de una tupla
• Instanciación de una tupla
• Acceso
• Dónde
• <nombre> define una referencia al valor de la tupla
• <tipo> define el tipo del valor
• <valor> establece el valor de la referencia
Tuple ( <nombre> : <tipo>, ......)
Tuple { <nombre> = <valor>, ......}
<tupla>.<nombre>
44. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Tuplas - Ejemplo
context Libreria:: productoMasVendido():Producto
body: let items : Sequence(Item) =
self.ventas.items->flatten() ,
producto_cantidad : Sequence ( Tuple (p : Producto, c
: Integer)) =
self.productos->collect(p : Producto | Tuple{p = p, c
= items->select(producto = p).cantidad->sum())
in
libro_cantidad->sortedBy(- c)->first().p;
45. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Diagrama de clases (Librería)
46. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
OTROS USOS
47. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
OCL
Ejemplo de máquina de estado
48. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
OCL para especificar guardas
• Una guarda es una condición Booleana que puede o no validar
el disparo de la ocurrencia de un evento.
• Por ejemplo
context ExpressionInOcl
inv: not self.guard.transition.getStateMachine()
.context.oclIsUndefined()
and
self.guard.transition.getStateMachine()
.context.oclIsKindOf(Classifier)
and
self.bodyExpression.type.name = ’Boolean’
49. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
OCL para especificar mensajes
• Para especificar que una comunicación ha ocurrido se utiliza
el operador (^) hasSent.
• Observer design pattern
• Por ejemplo:
context Subject::hasChanged()
post: observer^update(12, 14)
50. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
OCL Estándar Library
• Ver Capítulo 11 de la especificación de OCL 2.0
Especialmente las operaciones
sobre las colecciones
51. Prof. Dr. Ricardo TESORIERO – Departamento de Sistemas Informáticos- Universidad de Castilla-La Mancha
[ricardo.tesoriero@uclm.es]
Referencias
1. OCL 2.0 Wikipedia:
http://es.wikipedia.org/wiki/Lenguaje_de_especificaci%C3%
B3n_OCL2.0
2. Especificación de OCL 2.0 de la OMG
http://www.omg.org/spec/OCL/2.0/