MySQL4OCL: Un compilador de OCL a MySQL Carolina Inés Dania Director: Dr. Manuel García Clavel Colaboradora externa: Dra. Marina Soledad Egea Gonzalez Departamento de Sistemas Informáticos y Computación Universidad Complutense de Madrid 28 de septiembre de 2011 Wednesday, September 28, 11 Organización Wednesday, September 28, 11 Organización • Introducción Desarrollo dirigido por modelos UML - OCL Base de datos - SQL y MySQL Wednesday, September 28, 11 Organización • Introducción Desarrollo dirigido por modelos UML - OCL Base de datos - SQL y MySQL • MySQL4OCL: Descripción general De diagramas UML a tablas MySQL De expresiones OCL a procedimientos almacenados Wednesday, September 28, 11 Organización • Introducción Desarrollo dirigido por modelos UML - OCL Base de datos - SQL y MySQL • MySQL4OCL: Descripción general De diagramas UML a tablas MySQL De expresiones OCL a procedimientos almacenados • MySQL4OCL: Arquitectura Optimizaciones y caso de estudio Wednesday, September 28, 11 Organización • Introducción Desarrollo dirigido por modelos UML - OCL Base de datos - SQL y MySQL • MySQL4OCL: Descripción general De diagramas UML a tablas MySQL De expresiones OCL a procedimientos almacenados • MySQL4OCL: Arquitectura Optimizaciones y caso de estudio • Conclusiones y trabajo futuro Wednesday, September 28, 11 MDA: Desarrollo de software dirigido por modelos Wednesday, September 28, 11 MDA: Desarrollo de software dirigido por modelos Diagrama de clases/objetos Consultas OCL Wednesday, September 28, 11 MDA: Desarrollo de software dirigido por modelos UML/OCL Diagrama de clases/objetos Consultas OCL Wednesday, September 28, 11 MDA: Desarrollo de software dirigido por modelos UML/OCL Diagrama de clases/objetos Consultas OCL Wednesday, September 28, 11 Base de datos Consultas SQL MDA: Desarrollo de software dirigido por modelos UML/OCL SQL/MySQL Diagrama de clases/objetos Consultas OCL Base de datos Consultas SQL Wednesday, September 28, 11 MDA: Desarrollo de software dirigido por modelos UML/OCL Diagrama de clases/objetos Consultas OCL Wednesday, September 28, 11 Marco teórico SQL/MySQL Base de datos Consultas SQL MDA: Desarrollo de software dirigido por modelos UML/OCL Marco teórico Diagrama de clases/objetos Consultas OCL MySQL4OCL Wednesday, September 28, 11 SQL/MySQL Base de datos Consultas SQL MDA: Desarrollo de software dirigido por modelos UML/OCL Marco teórico Diagrama de clases/objetos Consultas OCL MySQL4OCL Wednesday, September 28, 11 SQL/MySQL Base de datos Consultas SQL MDA: Desarrollo de software dirigido por modelos Definición formal UML/OCL Marco teórico Diagrama de clases/objetos Consultas OCL MySQL4OCL Wednesday, September 28, 11 SQL/MySQL Base de datos Consultas SQL MDA: Desarrollo de software dirigido por modelos Definición formal UML/OCL Marco teórico Diagrama de clases/objetos Consultas OCL MySQL4OCL Wednesday, September 28, 11 Implementación SQL/MySQL Base de datos Consultas SQL UML: Lenguaje de modelado unificado Wednesday, September 28, 11 UML: Lenguaje de modelado unificado • Diagrama de clases Wednesday, September 28, 11 UML: Lenguaje de modelado unificado • Diagrama de clases • Diagrama de objetos Wednesday, September 28, 11 UML: Lenguaje de modelado unificado • Diagrama de clases • Diagrama de objetos Wednesday, September 28, 11 UML: Lenguaje de modelado unificado • • • Diagrama de clases • Diagrama de objetos clases atributos 20 Trip + origin : String + destination : String PrivateTrip trips * tripCoach RegularTrip + availableSeats : Integer 2. Preliminares Coach coaches + model : String + numberOfSeats : Integer * regularTrips passengers * touristGroup * Figura 2.3: Diagrama de clases Coach_Company Wednesday, September 28, 11 Person + name : String UML: Lenguaje de modelado unificado • • • Diagrama de clases • Diagrama de objetos clases atributos 2020 Trip Trip trips + origin : String trips + origin : String + destination : String + destination : String * * PrivateTrip PrivateTrip 2. Preliminares Preliminares 2. Coach Coach coaches ++model model: :String String coaches numberOfSeats :: Integer Integer ++numberOfSeats ** tripCoach tripCoach RegularTrip Person RegularTrip Person regularTrips passengers passengers + name : String + availableSeats : Integer regularTrips + availableSeats : Integer * touristGroup * + name : String * touristGroup * Figura 2.3: Diagrama de clases Coach_Company Figura 2.3: Diagrama de clases Coach_Company Wednesday, September 28, 11 UML: Lenguaje de modelado unificado • • • • Diagrama de clases • Diagrama de objetos clases atributos asociaciones (extremo de asociación) 20 2020 Trip Trip Trip trips origin String ++origin :: String trips + origin : String destination :: String String ++destination + destination : String * * PrivateTrip PrivateTrip PrivateTrip 2. Preliminares Preliminares 2.2. Preliminares Coach Coach Coach coaches coaches + ++model model:: :String String coaches model String ++numberOfSeats numberOfSeats: ::Integer Integer * + numberOfSeats Integer ** tripCoach tripCoach tripCoach RegularTrip Person RegularTrip Person regularTrips passengers RegularTrip Person regularTrips passengers availableSeats :: Integer + +name : String passengers ++ availableSeats Integer regularTrips name : String * touristGroup * + availableSeats : Integer + name : String * touristGroup * * touristGroup * Figura 2.3: 2.3: Diagrama Diagrama de Figura de clases clases Coach_Company Coach_Company Figura 2.3: Diagrama de clases Coach_Company Wednesday, September 28, 11 UML: Lenguaje de modelado unificado • • • • • Diagrama de clases • Diagrama de objetos clases atributos asociaciones (extremo de asociación) herencia 20 20 2020 Trip Trip Trip Trip trips origin String trips ++origin origin String :::String trips ++ origin : String destination:::String String ++destination destination String ++ destination : String * ** PrivateTrip PrivateTrip PrivateTrip PrivateTrip 2. Preliminares Preliminares Preliminares 2.2. Preliminares Coach Coach Coach coaches ++model coaches + model:: :String String coaches model String ++numberOfSeats numberOfSeats: ::Integer Integer Integer * + numberOfSeats Integer ** tripCoach tripCoach tripCoach RegularTrip Person RegularTrip Person RegularTrip Person regularTrips passengers RegularTrip Person passengers regularTrips availableSeats :: Integer + +name : String regularTrips passengers ++availableSeats availableSeats name :: String + Integer String * touristGroup * + availableSeats : Integer + name : String * * touristGroup * touristGroup * Figura 2.3: 2.3: Diagrama Diagrama de clases Coach_Company Figura 2.3: Figura de clases Coach_Company Figura 2.3: Diagrama de clases Coach_Company Wednesday, September 28, 11 UML: Lenguaje de modelado unificado • • • • • Diagrama de clases • Diagrama de objetos clases atributos asociaciones (extremo de asociación) herencia 20 20 2020 20 Trip Trip Trip Trip Trip trips origin String trips ++origin :::String trips +origin origin :String String trips ++ origin : String destination String ++destination :::String +destination destination :String String ++ destination : String * *** PrivateTrip PrivateTrip PrivateTrip PrivateTrip PrivateTrip 2. Preliminares Preliminares Preliminares 2.2. Preliminares Preliminares 2. coaches coaches coaches coaches * *** tripCoach tripCoach tripCoach tripCoach Coach Coach Coach Coach + model::: String :String String ++model model + model String + Integer numberOfSeats:: ::Integer Integer Integer ++numberOfSeats numberOfSeats + numberOfSeats Integer RegularTrip Person RegularTrip Person RegularTrip Person RegularTrip Person regularTrips passengers regularTrips RegularTrip Person passengers regularTrips availableSeats String availableSeats ::: Integer Integer regularTrips ++ name :: String passengers +++availableSeats availableSeats name :: String + Integer String * touristGroup * ** + availableSeats : Integer + name : String * touristGroup * touristGroup * Figura 2.3: Diagrama clases Coach_Company Figura2.3: 2.3: Diagrama Diagrama de Figura 2.3: Figura de clases Coach_Company Figura 2.3: Diagrama de clases Coach_Company Wednesday, September 28, 11 UML: Lenguaje de modelado unificado • • • • • Diagrama de clases • Diagrama de objetos clases atributos 20 asociaciones (extremo de asociación) herencia Trip + origin : String + destination : String 20 20 2020 20 PrivateTrip 2. Preliminares Coach trips * coaches + model : String tripCoach * + numberOfSeats : Integer Person 2. Preliminares Preliminares Preliminares 2.2. Preliminares Preliminares 2. + name : String RegularTrip + availableSeats : Integer regularTrips passengers * touristGroup * Figura 2.3: Diagrama de clases Coach_Company Trip Trip Trip Trip Trip trips origin String trips ++origin :::String trips +origin origin :String String trips ++ origin : String destination String ++destination :::String +destination destination :String String ++ destination : String * *** Coach Coach Coach Diagramas de objetos Coach coaches + coaches model :String String coaches ++model model ::: String coaches Un diagrama de objetos modela el estado de un sistema en un momento + model String + numberOfSeats : :Integer Integer particular. es similar a la de :los diagramas de clases. Los diagramas numberOfSeats Integer Integer *** Su+ ++notación numberOfSeats numberOfSeats : Integer * de objetos se utilizan, principalmente, para el análisis y validación de los modelos tripCoach tripCoach tripCoach tripCoach que describen los diagramas de clase. Un diagrama de objetos está compuesto por: PrivateTrip PrivateTrip PrivateTrip PrivateTrip PrivateTrip Objetos. Son instancias de las clases. Pueden tener valores asignados sus atributos (tanto propios como “heredados”). Person Person RegularTrip RegularTrip RegularTrip Person RegularTrip Person regularTrips passengers regularTrips RegularTrip Person passengers regularTrips availableSeats String Enlaces (“links”). Son instancias de+las asociaciones entre clases. availableSeats ::: Integer Integer regularTrips name :: String passengers +++availableSeats availableSeats + name : String + Integer : String * touristGroup * ** + availableSeats : Integer + name : String touristGroup Ejemplo 2. La figura 2.4 muestra el* diagrama de objetos que modela un estado * touristGroup * concreto de la empresa de vehículos descrita en la figura 2.3, en el que la empresa dispone actualmente de una flota de cinco vehículos, aunque cuatro de ellos ya están comprometidos. la ruta Madrid-Barcelona tiene actualmente un pasajero, y la ruta SevillaFigura 2.3: Diagrama de clases Coach_Company Figura 2.3: Diagrama tiene dos pasajeros. Figura 2.3: 2.3: Diagrama de clases Madrid Figura Coach_Company Figura 2.3: Diagrama de clases Coach_Company Wednesday, September 28, 11 2.3 OCL: Un lenguaje de restricciones y consultas UML: Lenguaje de modelado unificado • clases • atributos 20 2.3. OCL: Un lenguaje de restricciones y consultas (extremo de asociación) • asociaciones • herencia • objetos • valores • Diagrama de clases • Diagrama de objetos 20 20 2020 20 MadZar : Trip origin = Madrid destination = Zaragoza Trip + origin : String + destination : String trips * tripCoach 21 2. Preliminares Coach coaches + model : String * + numberOfSeats : Integer Pcso : Coach PrivateTrip RegularTrip Person 2.regularTrips Preliminares Preliminares 2.2. Preliminares passengers Preliminares 2. Preliminares model = Picasso + availableSeats : Integer + name : String * touristGroup * numberOfSeats = 6 Figura 2.3: Diagrama de clases Coach_Company Smrt :Coach Coach Trip Trip Coach Trip Trip Trip Coach Diagramas de objetos Coach model = Smart trips coaches Person origin String + trips coaches MadBar : RegularTripcoaches ++:origin model :String String + :::String trips coaches +origin origin :String String ++model model ::: String trips Un diagrama de objetos modela el estado de un sistema en un momento +p1 origin : String + model String numberOfSeats tripCoach +destination destination :String String + numberOfSeats : :Integer Integer particular. Su notación es similar a la=de2:los diagramas de clases. Los diagramas name+ =+ Susanita + destination : String numberOfSeats Integer tripCoach : + Integer origin = Madrid * tripCoach + destination : String + numberOfSeats * * * tripCoach destination : String + numberOfSeats : Integer * ** * de objetos se utilizan, principalmente, para el análisis y validación de los modelos destination = Barcelona availableSeats = 10 que describen los diagramas de clase. Un diagrama de objetos está compuesto por: Btle1 : Coach Objetos. Son instancias de las clases. Pueden tener valores asignados sus p2 : Person model = New Beetle atributos (tanto propios como “heredados”). PrivateTrip RegularTrip Person PrivateTrip RegularTrip Person PrivateTrip RegularTrip Person PrivateTrip RegularTrip Person regularTrips passengers name = Manolito numberOfSeats = 5 regularTrips PrivateTrip RegularTrip Person passengers regularTrips availableSeats :: Integer String Enlaces (“links”). Son instancias de+las asociaciones entre clases. availableSeats Integer name :: String regularTrips passengers +++availableSeats availableSeats + name : String + : Integer : String SevMad1 : RegularTrip * touristGroup * ** + availableSeats : Integer + name : String * diagrama touristGroup Ejemplo 2. La figura 2.4 muestra el de objetos que modela un estado * touristGroup * origin = Sevilla concreto de la empresa de vehículos descrita en la figura 2.3, en el que Btle2 : Coach destination = Madrid p3 : Person la empresa dispone actualmente de una flota de cinco vehículos, aunque model = New Beetle availableSeats = 8 cuatro de ellos ya están comprometidos. name = Miguelito numberOfSeats = 6 la ruta Madrid-Barcelona tiene actualmente un pasajero, y la ruta SevillaFigura 2.3: Diagrama de clases Coach_Company Figura 2.3: Diagrama tiene dos pasajeros. Figura 2.3: 2.3: Diagrama de clases Madrid Figura Coach_Company Figura 2.3: Diagrama de clases Coach_Company SevMad2 : PrivateTrip Wednesday, September 28, 11 origin = Sevilla Btle3 : Coach 2.3 OCL: Un lenguaje de restricciones y consultas UML: Lenguaje de modelado unificado 2.3. OCL: Un lenguaje de restricciones y consultas 21 Pcso : Coach • clases MadZar : Trip model = Picasso • atributos 20 2.3. OCL: Un lenguaje de restricciones y consultas origin = Madrid (extremo de asociación)= 6 numberOfSeats • asociaciones destination Zaragoza • =herencia • objetos Smrt : Coach • valores • Diagrama de clases • Diagrama de objetos p1 : Person 20 20 2020 name = Susanita 20 MadBar : RegularTrip : Trip originMadZar = Madrid origin = Madrid destination = Barcelona destination = Zaragoza availableSeats = 10 Trip + origin : String + destination : String Coach trips * 2. Preliminares 21 coaches + model : String tripCoach * + numberOfSeats : Integer modelPcso = Smart : Coach PrivateTrip RegularTrip = 22. Person Preliminares numberOfSeats Preliminares 2.2.regularTrips Preliminares passengers Preliminares 2. Preliminares model = Picasso + availableSeats : Integer + name : String * touristGroup * numberOfSeats = 6 Btle1 : Coach Figura 2.3: Diagrama de clases Coach_Company p2 : Person model = New Beetle Smrt :Coach Coach Trip Trip Coach Trip name = Manolito numberOfSeats =5 Trip Trip Coach Diagramas de objetos Coach model = Smart trips coaches Person origin String + SevMad1 RegularTripcoaches trips coaches MadBar : :RegularTrip ++:origin model :String String + :::String trips coaches +origin origin :String String ++model model ::: String trips Un diagrama de objetos modela el estado de un sistema en un momento +p1 origin : String + model String numberOfSeats tripCoach +destination destination :String String + numberOfSeats : :Integer Integer particular. Su notación es similar a la=de2:los diagramas de clases. Los diagramas name+ =+ Susanita Sevilla + destination : String numberOfSeats Integer tripCoach : + Integer origin = Madrid * tripCoach + destination : String + numberOfSeats * * ** * tripCoach destination : String + numberOfSeats : Integer *destination * Btle2 : Coach objetos se utilizan, principalmente, para el análisis y validación de los modelos = Madrid p3 : Person Barcelona de que describen los diagramas de clase. model = New Beetle Un diagrama de objetos está compuesto por: availableSeats = 810 name = Miguelito Btle1 : Coach numberOfSeats =6 Objetos. Son instancias de las clases. Pueden tener valores asignados sus p2 : Person model = New Beetle atributos (tanto propios como “heredados”). PrivateTrip RegularTrip Person PrivateTrip RegularTrip Person PrivateTrip RegularTrip Person PrivateTrip RegularTrip Person regularTrips passengers name = Manolito numberOfSeats = 5 regularTrips PrivateTrip RegularTrip Person passengers regularTrips availableSeats :: Integer String Enlaces (“links”). Son instancias de+las asociaciones entre clases. availableSeats Integer name :: String SevMad2 : RegularTrip PrivateTrip regularTrips passengers +++availableSeats availableSeats + name : String + : Integer : String SevMad1 : * touristGroup * Btle3 : Coach ** + availableSeats : Integer + name : String * diagrama touristGroup Ejemplo 2. La figura 2.4 muestra el de objetos que modela un estado origin = Sevilla * touristGroup * origin = Sevilla model = New Beetle concreto de la empresa de vehículos descrita en la figura 2.3, en el que Btle2 : Coach destination = Madrid destination = Madrid p3 : Person numberOfSeats = 5de una flota de cinco vehículos, aunque la empresa dispone actualmente model = New Beetle availableSeats = 8 cuatro de ellos ya están comprometidos. name = Miguelito numberOfSeats = 6 la ruta Madrid-Barcelona tiene actualmente un pasajero, y la ruta SevillaFigura 2.3: Diagrama de clases Coach_Company Figura 2.3: Diagrama tiene dos pasajeros. Figura 2.3: 2.3: Diagrama de clases Madrid Figura Coach_Company Figura 2.3: Diagrama de clases Coach_Company SevMad2 : PrivateTrip Figura 2.4: Diagrama de objetos Coach_Company_Sample Btle3 : Coach Wednesday, September 28, 11 origin = Sevilla 2.3 OCL: Un lenguaje de restricciones y consultas UML: Lenguaje de modelado unificado 2.3. OCL: Un lenguaje de restricciones y consultas 21 Pcso : Coach • clases MadZar : Trip model = Picasso • atributos 20 2.3. OCL: Un lenguaje de restricciones y consultas origin = Madrid (extremo de asociación)= 6 numberOfSeats • asociaciones destination Zaragoza • =herencia • objetos Smrt : Coach • valores • Diagrama de clases • Diagrama de objetos Trip + origin : String + destination : String trips * tripCoach 21 2. Preliminares Coach coaches + model : String * + numberOfSeats : Integer modelPcso = Smart MadBar : RegularTrip : Coach de restricciones y consultas 21 passengers Person PrivateTrip RegularTrip = 22. Preliminares numberOfSeats Preliminares 2. Preliminares regularTrips 2. Preliminares : Trip originMadZar = Madrid 2. * Preliminares model = Picasso + availableSeats : Integer + name : String touristGroup * origin = Madrid destination = Barcelona numberOfSeats = 6 destination = Zaragoza availableSeats = 10 Btle1 : Coach Figura 2.3: Diagrama de clases Coach_Company p2 : Person model = New Beetle Pcso Coach Smrt :Coach Trip Trip Coach Trip name = Manolito numberOfSeats =5 TripTrip Coach Diagramas de objetos Coach MadZar : Trip model = Picasso model Smart trips coaches Person origin String + SevMad1 RegularTripcoaches trips coaches MadBar : :RegularTrip ++:origin model :String String + :::String trips coaches +origin origin :String String ++model model ::: String trips Un diagrama de objetos modela el estado de un sistema en un momento +p1 origin : String + model String origin = Madrid numberOfSeats = 6 : :Integer numberOfSeats tripCoach +destination destination :String String + numberOfSeats particular. Su notación es similar a la de2:los diagramas de clases. Los diagramas name+ =+ Susanita Sevilla + destination : String numberOfSeats Integer tripCoach : + Integer origin = Madrid * tripCoach + destination : String + numberOfSeats Integer * * ** * tripCoach destination : String destination + numberOfSeats : Integer ==Zaragoza *destination * Btle2 : Coach objetos se utilizan, principalmente, para el análisis y validación de los modelos Madrid p3 : Person Barcelona de que describen los diagramas de clase. model = New Beetle Un diagrama de objetos está compuesto por: availableSeats = 810 name = Miguelito Btle1 :: Coach Coach Smrt numberOfSeats =6 Objetos. Son instancias de las clases. Pueden tener valores asignados sus p2 : Person model = New Beetle model = Smart p1 : Person atributos (tanto propios como “heredados”). MadBar : RegularTrip PrivateTrip RegularTrip Person PrivateTrip RegularTrip Person PrivateTrip RegularTrip Person PrivateTrip RegularTrip Person regularTrips passengers name = Manolito numberOfSeats = 5 regularTrips PrivateTrip RegularTrip Person numberOfSeats = 2 passengers regularTrips name = Susanita availableSeats String Enlaces (“links”). Son instancias de+las asociaciones entre clases. origin = ::Madrid availableSeats : Integer Integer name :: String SevMad2 : RegularTrip PrivateTrip regularTrips passengers +++availableSeats availableSeats + name : String + Integer : String SevMad1 : * touristGroup * Btle3 : Coach ** + availableSeats : Integer + name : String * diagrama touristGroup destination = Barcelona Ejemplo 2. La figura 2.4 muestra el de objetos que modela un estado origin = Sevilla * touristGroup * origin = Sevilla model = New Beetle concreto de la empresa de vehículos descrita en la figura 2.3, en el que availableSeats = 10 Btle2 : Coach Coach destination = Madrid Btle1 : destination = Madrid p3 : Person numberOfSeats = 5de una flota de cinco vehículos, aunque la empresa dispone actualmente model = New New Beetle availableSeats = 8 Beetle cuatromodel de ellos ya=están comprometidos. namep2=: Person Miguelito numberOfSeats = =5 6 name = Manolito numberOfSeats la ruta Madrid-Barcelona tiene actualmente un pasajero, y la ruta SevillaFigura 2.3: Diagrama de clases Coach_Company Figura 2.3: Diagrama Madrid tiene dos pasajeros. : RegularTrip Figura 2.3: 2.3:SevMad1 Figura Diagrama de clases Coach_Company Figura 2.3: origin Diagrama de clases Coach_Company = Sevilla SevMad2 : PrivateTrip Figura 2.4: Diagrama de objetos Coach_Company_Sample Btle3 : Coach Btle2 destination = Madrid p3 : Person 2.3 OCL: Un lenguaje de restricciones y consultas Wednesday, September 28, 11 origin = Sevilla p1 : Person 2.3. OCL: Un lenguaje 20 20 2020 name = Susanita 20 UML: Lenguaje de modelado unificado 2.3. OCL: Un lenguaje de restricciones y consultas 21 Pcso : Coach • clases MadZar : Trip model = Picasso • atributos 20 2. Preliminares 2.3. OCL: Un lenguaje de restricciones y consultas 21 origin = Madrid asociaciones (extremo de asociación) numberOfSeats = 6 • destination Zaragoza • =herencia • objetos Smrt : Coach • valores • enlaces modelPcso = Smart p1 : Person MadBar : RegularTrip : Coach 2.3. OCL: Un lenguaje de restricciones y consultas 2.3. OCL: Un lenguaje 21 20 2. Preliminares numberOfSeats = 2 Preliminares 20 2. Preliminares 2020 2. Preliminares MadZar : Trip name = Susanita origin = Madrid 20 model = Picasso2. Preliminares • Diagrama de clases • Diagrama de objetos Trip + origin : String + destination : String PrivateTrip origin = Madrid destination = Barcelona destination = Zaragoza availableSeats = 10 Coach trips * coaches + model : String tripCoach RegularTrip + availableSeats : Integer * + numberOfSeats : Integer regularTrips passengers * touristGroup * Person + name : String numberOfSeats = 6 Btle1 : Coach Figura 2.3: Diagrama de clases Coach_Company p2 : Person model = New Beetle Pcso Coach Smrt :Coach Trip Trip Coach Trip name = Manolito numberOfSeats =5 TripTrip Coach Diagramas de objetos Coach MadZar : Trip model == Picasso model Smart trips coaches Person origin String + SevMad1 RegularTripcoaches trips coaches MadBar : :RegularTrip ++:origin model :String String + :::String trips coaches +origin origin :String String ++model model ::: String trips Un diagrama de objetos modela el estado de un sistema en un momento +p1 origin : String + model String origin = Madrid numberOfSeats = 6 : :Integer numberOfSeats tripCoach +destination destination :String String + numberOfSeats particular. Su notación es similar a la de2:los diagramas de clases. Los diagramas name+ =+ Susanita Sevilla + destination : String numberOfSeats Integer tripCoach : + Integer origin = Madrid * tripCoach + destination : String + numberOfSeats Integer * * ** * tripCoach destination : String destination + numberOfSeats : Integer ==Zaragoza *destination * Btle2 : Coach objetos se utilizan, principalmente, para el análisis y validación de los modelos Madrid p3 : Person Barcelona de que describen los diagramas de clase. model = New Beetle Un diagrama de objetos está compuesto por: availableSeats = 810 name = Miguelito Btle1 :: Coach Coach Smrt numberOfSeats =6 Objetos. Son instancias de las clases. Pueden tener valores asignados sus p2 : Person model = New Beetle model = Smart p1 : Person p1 : Person atributos (tanto propios como “heredados”). MadBar : RegularTrip PrivateTrip RegularTrip Person PrivateTrip RegularTrip Person PrivateTrip RegularTrip Person PrivateTrip RegularTrip Person regularTrips passengers name = Manolito numberOfSeats = 5 regularTrips numberOfSeats = 2 PrivateTrip RegularTrip Person passengers regularTrips name == Susanita Susanita ++++availableSeats name availableSeats String Enlaces (“links”). Son instancias de+las asociaciones entre clases. origin = ::Madrid availableSeats : Integer Integer name :: String SevMad2 : RegularTrip PrivateTrip regularTrips passengers availableSeats + name : String Integer : String SevMad1 : * touristGroup * Btle3 : Coach ** + availableSeats : Integer + name : String * diagrama touristGroup destination = Barcelona Ejemplo 2. La figura 2.4 muestra el de objetos que modela un estado origin = Sevilla * touristGroup * origin = Sevilla model = New Beetle concreto de la empresa de vehículos descrita en la figura 2.3, en el que availableSeats = 10 Btle2 : Coach Coach destination = Madrid Btle1 : destination = Madrid p3 : Person numberOfSeats = 5de una flota de cinco vehículos, aunque la empresa dispone actualmente model New Beetle p2=:: Person Person availableSeats = 8 ==están New Beetle cuatromodel de ellos ya comprometidos. namep2 Miguelito numberOfSeats == 56 name == Manolito Manolito numberOfSeats name la ruta Madrid-Barcelona tiene actualmente un pasajero, y la ruta SevillaFigura 2.3: Diagrama de clases Coach_Company Figura 2.3: Diagrama SevMad1 : RegularTrip tiene dos pasajeros. Figura 2.3: 2.3: Diagrama de clases Madrid Figura Coach_Company Figura 2.3: origin Diagrama de clases Coach_Company = Sevilla SevMad2 : PrivateTrip Figura 2.4: Diagrama de objetos Coach_Company_Sample Btle2 Btle3 :: Coach Coach destination = Madrid p3 : Person p3 : Person 2.3 OCL: Un lenguaje de restricciones y consultas Wednesday, September 28, 11 origin = Sevilla UML: Lenguaje de modelado unificado 2.3. OCL: Un lenguaje de restricciones y consultas 2.3. OCL: Un lenguaje de restricciones y consultas 21 21 Pcso : Coach • clases MadZar : Trip model = Picasso • atributos 20 2. Preliminares Pcso : Coach 2.3. OCL: Un lenguaje de restricciones y consultas 21 origin = Madrid asociaciones (extremo de asociación) numberOfSeats = 6 • : Trip MadZar model = Picasso destination Zaragoza • =herencia origin = Madrid objetos numberOfSeats = 6 • destination = Zaragoza Smrt : Coach • valores • enlaces modelPcso = Smart p1 : Person MadBar : RegularTrip : Coach Coach Smrt : 2.3. OCL: Un lenguaje de restricciones y consultas 2.3. OCL: Un lenguaje 21 20 2. Preliminares numberOfSeats = 2 Preliminares 20 2. Preliminares 2020 2. Preliminares MadZar : Trip name = Susanita origin = Madrid 20 p1 : Person model = Picasso2. Preliminares model = Smart • Diagrama de clases • Diagrama de objetos Trip + origin : String + destination : String PrivateTrip Coach trips * coaches + model : String tripCoach RegularTrip + availableSeats : Integer * + numberOfSeats : Integer regularTrips passengers * touristGroup * Person + name : String MadBar : RegularTrip origin = Madrid destination = Barcelona numberOfSeats = 6 numberOfSeats =2 name = Susanita origin = Madrid destination = Zaragoza availableSeats = 10 Btle1 : Coach Figura 2.3: Diagrama de clases Coach_Company destination = Barcelona p2 : Person model = New Beetle Pcso Coach availableSeats = 10 Smrt ::Coach Trip Btle1 Coach Trip Coach Trip name = Manolito numberOfSeats =5 TripTrip Coach Diagramas de objetos Coach MadZar : Trip model ===Picasso model Smart trips coaches p2 Person origin String + SevMad1 RegularTripcoaches trips coaches MadBar : :RegularTrip +:+:Person model :String String + origin :::String model Beetle trips coaches +origin origin :String String ++model model ::New String trips Un diagrama de objetos modela el estado de un sistema en un momento +p1 origin : String + model : String origin = Madrid numberOfSeats = 62los numberOfSeats tripCoach +destination destination :String String + numberOfSeats Integer name Manolito particular. Su notación es similar a la=de5 diagramas de clases. Los diagramas name+==+ Susanita Sevilla numberOfSeats + destination : String numberOfSeats Integer tripCoach : + Integer origin = Madrid * tripCoach + destination : String + numberOfSeats :: ::Integer * * ** * tripCoach destination : String destination + numberOfSeats Integer = Zaragoza * * Btle2 : Coach objetos se utilizan, principalmente, para el análisis y validación de los modelos SevMad1 destination: RegularTrip = Madrid p3 : Person Barcelona de que describen los diagramas de clase. model = New Beetle Un diagrama de objetos está compuesto por: availableSeats origin = Sevilla = 810 name = Miguelito Btle1 ::: Coach Coach Smrt numberOfSeats =6 Btle2 Coach destination = Madrid p3 Objetos. Son instancias de las clases. Pueden tener valores asignados sus p2: :Person Person model = New Beetle model = Smart p1 : Person p1 : Person = New Beetle atributos (tanto propios como “heredados”). MadBar : RegularTrip PrivateTrip RegularTrip Person availableSeats = 8 regularTrips PrivateTrip RegularTrip Person PrivateTrip RegularTrip Person PrivateTrip RegularTrip Person name = Miguelito passengers name = Manolito numberOfSeats = 5 regularTrips numberOfSeats = 2 PrivateTrip RegularTrip Person passengers regularTrips 6 name == Susanita Susanita ++++availableSeats name availableSeats String Enlaces (“links”). Son instancias de+las asociaciones entre clases. origin = ::Madrid availableSeats : Integer Integer name :: String SevMad2 : RegularTrip PrivateTrip regularTrips passengers availableSeats + name : String Integer : String SevMad1 : * touristGroup * Btle3 : Coach ** + availableSeats : Integer + name : String * diagrama touristGroup destination = Barcelona Ejemplo 2. La figura 2.4 muestra el de objetos que modela un estado origin = Sevilla * touristGroup * origin = Sevilla model = New Beetle concreto de la empresa de vehículos descrita en la figura 2.3, en el que availableSeats = 10 Btle2 : Coach Coach destination = Madrid Btle1 : SevMad2 : PrivateTrip destination = Madrid p3 : Person numberOfSeats = 5de una flota de cinco vehículos, aunque Btle3 : Coach la empresa dispone actualmente model New Beetle p2=:: Person Person availableSeats ==están New Beetle origin = Sevilla = 8 cuatromodel de ellos ya comprometidos. namep2 Miguelito model = New Beetle numberOfSeats name == Manolito Manolito numberOfSeats ==actualmente 56 name destination = Madrid la ruta Madrid-Barcelona tiene un pasajero, y la ruta SevillanumberOfSeats = 5 Figura 2.3: Diagrama de clases Coach_Company Figura 2.3: Diagrama SevMad1 : RegularTrip tiene dos pasajeros. Figura 2.3: 2.3: Diagrama de clases Madrid Figura Coach_Company Figura 2.3: origin Diagrama de clases Coach_Company = Sevilla SevMad2 : PrivateTrip Figura 2.4: Diagrama de objetos Coach_Company_Sample Btle2 Btle3 :: Coach Coach destination = Madrid p3 : Person p3 : Person 2.3 OCL: Un lenguaje de restricciones y consultas Wednesday, September 28, 11 origin = Sevilla UML: Lenguaje de modelado unificado 2.3. OCL: Un lenguaje de restricciones y consultas 2.3. OCL: Un lenguaje de restricciones y consultas 21 21 Pcso : Coach • clases MadZar : Trip model = Picasso • atributos 20 2. Preliminares Pcso : Coach 2.3. OCL: Un lenguaje2.3. de restricciones y consultas 21 origin = Madrid asociaciones (extremo de asociación) numberOfSeats = 6 • lenguaje OCL:MadZar Un de restricciones y consultas : Trip model = Picasso destination = Zaragoza • herencia origin = Madrid objetos numberOfSeats = 6 • destination = Zaragoza Smrt : Coach • valores • enlaces modelPcso = Smart p1 : Person MadBar : RegularTrip : Coach Coach Smrt : 2.3. OCL: Un lenguaje de restricciones y consultas 2.3. OCL: Un lenguaje 21 20 2. Preliminares numberOfSeats = 2 Preliminares Pcso 20 2. Preliminares 2020 2. Preliminares MadZar : Trip name = Susanita origin = Madrid 20 p1 : Person model = Picasso2. Preliminares model = Smart • Diagrama de clases • Diagrama de objetos Trip + origin : String + destination : String PrivateTrip Coach trips * coaches + model : String tripCoach RegularTrip + availableSeats : Integer * + numberOfSeats : Integer regularTrips passengers * touristGroup * Person + name : String MadZar : Trip MadBar : RegularTrip model = Pi origin = Madrid destination = Barcelona numberOfSeats =6 numberOfSeats = 2 name = Susanita origin = Madrid origin = Madrid destination = Zaragoza availableSeats = 10 numberOfS Btle1 : Coach Figura 2.3: Diagrama de clases Coach_Company destination = Barcelona destination = Beetle Zaragoza p2 : Person model = New Pcso Coach availableSeats = 10 Smrt ::Coach Trip Btle1 Coach Trip Coach Trip name = Manolito numberOfSeats =5 TripTrip Coach Diagramas de objetos Coach MadZar : Trip model ===Picasso model Smart trips coaches p2 Person Smrt origin String + SevMad1 RegularTripcoaches trips coaches MadBar : :RegularTrip +:+:Person model :String String + origin :::String model Beetle trips coaches +origin origin :String String ++model model ::New String trips Un diagrama de objetos modela el estado de un sistema en un momento +p1 origin : String + model : String origin = Madrid numberOfSeats = 62los numberOfSeats tripCoach +destination destination :String String + numberOfSeats Integer name Manolito particular. Su notación es similar a la=de5 diagramas de clases. Los diagramas name+==+ Susanita Sevilla numberOfSeats + destination : String numberOfSeats Integer tripCoach : + Integer origin = Madrid * model = Sm tripCoach + destination : String + numberOfSeats :: ::Integer * * p1 : Person ** * MadBar : RegularTrip tripCoach destination : String destination + numberOfSeats Integer = Zaragoza * * Btle2 : Coach de objetos se utilizan, principalmente, para el análisis y validación de los modelos SevMad1 destination: RegularTrip = Madrid p3 : Person Barcelona que describen los diagramas de clase. numberOfS name = Susanita origin = Madrid model = New Beetle Un diagrama de objetos está compuesto por: availableSeats origin = Sevilla = 810 name = Miguelito Btle1 ::: Coach Coach Smrt numberOfSeats =6 destination = Barcelona Btle2 Coach destination = Madrid p3 Objetos. Son instancias de las clases. Pueden tener valores asignados sus p2: :Person Person model = New Beetle model = Smart availableSeats = 10 Person p1 : Person p1 : Person = New Beetle atributos (tanto propios como “heredados”). MadBar : RegularTrip PrivateTrip RegularTrip Person availableSeats = 8 regularTrips PrivateTrip RegularTrip Btle1 PrivateTrip RegularTrip Person PrivateTrip RegularTrip Person name = Miguelito passengers name = Manolito numberOfSeats = 5 regularTrips numberOfSeats = 2 PrivateTrip RegularTrip Person passengers regularTrips 6+lasname name == Susanita Susanita ++++availableSeats name availableSeats Integer String Enlaces (“links”). Son instancias de asociaciones entre clases. origin availableSeats : Person Integer :: String p2= :::Madrid SevMad2 : RegularTrip PrivateTrip regularTrips passengers availableSeats + name : String Integer : String SevMad1 : model = N * touristGroup * Btle3 : Coach ** + availableSeats : Integer + name : String * touristGroup destination = Barcelona Ejemplo 2. La figura 2.4 muestra *el diagrama de objetos que modela un estado origin= = =Manolito Sevilla name * touristGroup numberOfS origin Sevilla model = New Beetle concreto de la empresa de vehículos descrita en la figura 2.3, en el que availableSeats = 10 Btle2 ::Coach Coach destination = Madrid Btle1 : SevMad2 : PrivateTrip SevMad1 RegularTrip destination = Madrid p3 : Person numberOfSeats = 5de una flota de cinco vehículos, aunque Btle3 : Coach la empresa dispone actualmente model New Beetle p2=:: Person Person availableSeats ==están New Beetle origin = Sevilla = 8 cuatromodel de ellos ya comprometidos. origin = Sevilla namep2 Miguelito model = New Beetle numberOfSeats Btle2 name == Manolito Manolito numberOfSeats ==actualmente 56 name destination = Madrid destination = Madrid la ruta Madrid-Barcelona tiene un pasajero, y la ruta Sevillap3 : Person numberOfSeats = 5 Figura 2.3: Diagrama de clases Coach_Company Figura2.3: 2.3:SevMad1 Diagrama : RegularTrip Madrid tiene dos pasajeros. model = N Figura 2.3: Figura Diagrama de clases Coach_Company availableSeats =8 name = Miguelito Figura 2.3: origin Diagrama de clases Coach_Company = Sevilla numberOfS SevMad2 : PrivateTrip Figura 2.4: Diagrama de objetos Coach_Company_Sample Btle2 : Coach Btle3 : Coach destination = Madrid p3 Person :: Person 2.3 OCL: Un lenguaje de restricciones y consultas Wednesday, Septemberp3 28, 11 origin = Sevilla UML: Lenguaje de modelado unificado 2.3. OCL: Un lenguaje de restricciones y consultas 2.3. OCL: Un lenguaje de restricciones y consultas 21 21 Pcso : Coach • clases MadZar : Trip model = Picasso • atributos 20 2. Preliminares Pcso : Coach 2.3. OCL: Un lenguaje2.3. de restricciones y consultas 21 origin = Madrid asociaciones (extremo de asociación) numberOfSeats = 6 • lenguaje OCL:MadZar Un de restricciones y consultas : Trip model = Picasso destination = Zaragoza • herencia origin = Madrid numberOfSeats = 6 21 2.3. OCL: Un lenguaje de restricciones y consultas objetos • destination = Zaragoza Smrt : Coach • valores • enlaces modelPcso = Smart p1 : Person MadBar : RegularTrip : Coach Coach Smrt : 2.3. OCL: Un lenguaje de restricciones y consultas 2.3. OCL: Un lenguaje 21 20 2. Preliminares numberOfSeats = 2 Preliminares Pcso 20 2. Preliminares 2020 2. Preliminares MadZar : Trip name = Susanita origin = Madrid 20 p1 : Person model = Picasso2. Preliminares model = Smart • Diagrama de clases • Diagrama de objetos Trip + origin : String + destination : String PrivateTrip Coach trips * coaches + model : String tripCoach RegularTrip + availableSeats : Integer * + numberOfSeats : Integer regularTrips passengers * touristGroup * Person + name : String Pcso MadZar : Coach : Trip MadBar : RegularTrip model = Pi origin = Madrid destination = Barcelona numberOfSeats =6 numberOfSeats = 2 MadZar : Trip model = Picasso name = Susanita origin = Madrid origin = Madrid destination = Zaragoza availableSeats = 10 numberOfS Btle1 : Coach origin = Madrid numberOfSeats = =6 Zaragoza Figura 2.3: Diagrama de clases Coach_Company destination = Barcelona destination p2 : Person model = New Beetle destination = Zaragoza Pcso Coach availableSeats = 10 Smrt ::Coach Trip Btle1 Coach Trip Coach Trip name = Manolito numberOfSeats =5 TripTrip Coach Diagramas de objetos Coach MadZar : Trip model ==Coach model Smart trips coaches p2 Person Smrt origin String + SevMad1 RegularTripcoaches trips coaches MadBar : :RegularTrip +:+:Person +model model :String String + origin :::String model =Picasso Beetle trips coaches +origin origin :String String +Smrt model ::New String trips Un diagrama de :objetos modela el estado de un sistema en un momento +p1 origin : String + model : String origin = Madrid numberOfSeats = 62los numberOfSeats tripCoach +:destination destination :String String + numberOfSeats Integer name Manolito particular. Su notación es similar a la=de5 diagramas de clases. Los diagramas name+=p1 =+ Susanita Sevilla numberOfSeats + destination : String numberOfSeats Integer model = Smart tripCoach : + Integer origin = Madrid * model = Sm tripCoach + destination : String + numberOfSeats :: ::Integer Person * * p1 : Person ** MadBar RegularTrip * MadBar : RegularTrip tripCoach destination : String destination + numberOfSeats Integer = Zaragoza * * Btle2 : Coach de objetos se utilizan, principalmente, para el análisis y validación de los modelos SevMad1 : RegularTrip destination = Madrid numberOfSeats =de2clase. : Person Barcelona que describen numberOfS name p3 = Susanita origin ==Madrid los diagramas name Susanita origin = Madrid model = New Beetle = 810 Un diagrama de objetos está compuesto por: availableSeats origin = Sevilla name = Miguelito destination = Barcelona Btle1 ::: Coach Coach Smrt numberOfSeats =6 destination = Barcelona Btle2 Coach destination = =Madrid p3 availableSeats 10 Objetos. Son instancias de las clases. Pueden tener valores asignados sus p2: :Person Person Btle1 :== Coach model = New Beetle model Smart availableSeats = 10 Person p1 : Person p1 : Person New Beetle atributos (tanto propios como “heredados”). MadBar : RegularTrip PrivateTrip RegularTrip Person availableSeats = 8 regularTrips PrivateTrip RegularTrip Btle1 PrivateTrip RegularTrip Person PrivateTrip RegularTrip Person name = Miguelito p2 : Person passengers name = Manolito numberOfSeats = 5 model = New Beetle regularTrips numberOfSeats = 2 PrivateTrip RegularTrip Person passengers regularTrips 6+lasname name == Susanita Susanita name availableSeats Integer String Enlaces (“links”). Son instancias de asociaciones entre clases. origin availableSeats : Person Integer :: String p2= :::Madrid SevMad2 : RegularTrip PrivateTrip regularTrips passengers +++availableSeats availableSeats + name : String Integer : String SevMad1 : model = N name = Manolito + + numberOfSeats = 5 * touristGroup * Btle3 : Coach ** availableSeats : Integer + name : String * touristGroup destination = Barcelona Ejemplo 2. La figura 2.4 muestra *el diagrama de objetos que modela un estado SevMad1 :Sevilla RegularTrip* origin= = =Manolito Sevilla name touristGroup numberOfS origin model = New Beetle concreto de la empresa de vehículos descrita en la figura 2.3, en el que availableSeats = 10 Btle2 ::Coach Coach destination = Madrid origin = Sevilla Btle1 : SevMad2 : PrivateTrip SevMad1 RegularTrip destination = Madrid p3 : Person numberOfSeats = 5de una flota de cinco vehículos, aunque Btle3 : Coach Btle2 : Coach la empresa dispone actualmente model New Beetle destination = Madrid p2 Person p3 Person availableSeats =8 ==están New Beetle origin = Sevilla cuatromodel de ellos ya comprometidos. origin = Sevilla namep2 =:::Person Miguelito model = New BeetleBeetle model = New availableSeats =Madrid 8 numberOfSeats = 56 Btle2 name=== Manolito Miguelito name Manolito numberOfSeats = name destination = destination = Madrid la ruta Madrid-Barcelona tiene actualmente un pasajero, y la ruta Sevillap3 : Person numberOfSeats = 6 numberOfSeats = 5 Figura 2.3: Diagrama de clases Coach_Company Figura2.3: 2.3:SevMad1 Diagrama : RegularTrip Madrid tiene dos pasajeros. model = N Figura 2.3: Figura Diagrama de clases Coach_Company availableSeats =8 name = Miguelito Figura 2.3: origin Diagrama de clases Coach_Company = Sevilla numberOfS SevMad2 : PrivateTrip Figura 2.4: Diagrama de objetos Coach_Company_Sample Btle2 : Coach Btle3 : Coach SevMad2 : PrivateTrip destination = Madrid p3 Person Btle3 Coach :: Person 2.3 OCL: Un: lenguaje de restricciones y consultas Wednesday, Septemberp3 28, 11 origin = Sevilla Pcso : Coach 21 model = Picasso numberOfSeats21= 6 UML: Lenguaje de modelado unificado 2.3. OCL: Un lenguaje de restricciones y consultas MadZar : Trip 2.3. OCL: Un lenguaje de restricciones y consultas origin = Madrid destination = Zaragoza Pcso : Coach • clases MadZar : Trip model = Picasso • atributos Smrt : Coach 20 2. Preliminares Pcso : Coach 2.3. OCL: Un lenguaje2.3. de restricciones y consultas 21 origin = Madrid asociaciones (extremo de asociación) numberOfSeats = 6 • lenguaje OCL:MadZar Un de restricciones y =consultas : RegularTrip Trip model Smart model = Picasso p1 : Person MadBar : destination = Zaragoza • herencia origin = Madrid numberOfSeats = 6 21 numberOfSeats =2 2.3. = OCL: Un lenguaje de restricciones yMadrid consultas objetos • name Susanita origin = destination = Zaragoza valores Smrt : Coach destination•• =enlaces Barcelona modelPcso = Smart p1 : Person MadBar : RegularTrip : Coach Coach Smrt : availableSeats = 10 2.3. OCL: Un lenguaje de restricciones y consultas 2.3. OCL: Un lenguaje 21 20 2. Preliminares numberOfSeats = 2 Preliminares Pcso Btle1 : Coach 20 2. Preliminares 2020 2. Preliminares MadZar : Trip name = Susanita origin = Madrid 20 p1 : Person model = Picasso2. Preliminares model = Smart • Diagrama de clases • Diagrama de objetos Trip + origin : String + destination : String PrivateTrip Coach trips * coaches + model : String tripCoach RegularTrip + availableSeats : Integer * + numberOfSeats : Integer regularTrips passengers * touristGroup * Person + name : String Pcso MadZar : Coach : Trip MadBar : RegularTrip origin = Madrid destination = Barcelona numberOfSeats ==6 New Beetle model = Pi model numberOfSeats = 2 MadZar : Trip model = Picasso origin = Madrid origin = Madrid destination = Zaragoza availableSeats = 10 numberOfS Btle1 : Coach numberOfSeats = 5 origin = Madrid numberOfSeats = =6 Zaragoza Figura 2.3: Diagrama de clases Coach_Company destination = Barcelona destination p2 : Person model = New Beetle SevMad1 : =RegularTrip destination = Zaragoza Pcso Coach availableSeats 10 Smrt ::Coach Trip Btle1 Coach Trip Coach Trip name = Manolito numberOfSeats =5 Coach TripTrip Coach Diagramas de objetos MadZar : Trip origin = Sevilla model ==Coach model Smart trips coaches p2 Person Smrt origin String + SevMad1 RegularTripcoaches trips coaches MadBar : :RegularTrip +:+:Person +model model :String String + origin :::String model =Picasso Beetle trips coaches +origin origin :String String +Smrt model ::New String trips Btle2 : Coach Un diagrama de :objetos modela el estado de un sistema en un momento +p1 origin : String + model : String origin = Madrid numberOfSeats = 62los destination = Madridparticular. numberOfSeats p3 : =Person tripCoach +:destination destination :String String + numberOfSeats Integer name Manolito Su notación es similar a la=de5 diagramas de clases. Los diagramas name = Susanita Sevilla numberOfSeats + destination : String numberOfSeats Integer model = Smart tripCoach + : + Integer origin = Madrid * model = Sm tripCoach + destination : String + numberOfSeats :: ::Integer p1 Person * * p1 : Person ** MadBar RegularTrip * MadBar : RegularTrip tripCoach + destination : String destination + numberOfSeats Integer = Zaragoza * * model = New Beetle Btle2 : Coach de objetos se utilizan, principalmente, para el análisis y validación de los modelos availableSeats = 8 que describen SevMad1 : RegularTrip destination = Madrid numberOfSeats =de2clase. p3 : Person Barcelona name name = Miguelito numberOfS = Susanita origin ==Madrid los diagramas name Susanita origin = Madrid model = New Beetle numberOfSeats = 6 = 810 Un diagrama de objetos está compuesto por: availableSeats origin = Sevilla name = Miguelito destination = Barcelona Btle1 ::: Coach Coach Smrt numberOfSeats =6 destination = Barcelona Btle2 Coach destination = =Madrid p3 availableSeats 10 Objetos. Son instancias de las clases. Pueden tener valores asignados sus p2: :Person Person Btle1 :== Coach model = New Beetle model Smart availableSeats = 10 Person p1 : Person p1 : Person New Beetle atributos (tanto propios como “heredados”). MadBar : RegularTrip PrivateTrip RegularTrip Person availableSeats = 8 regularTrips PrivateTrip RegularTrip Btle1 PrivateTrip RegularTrip Person PrivateTrip RegularTrip Person name = Miguelito p2 : Person passengers name = Manolito numberOfSeats = 5 model = New Beetle regularTrips numberOfSeats = 2 PrivateTrip RegularTrip Person passengers regularTrips 6+lasname SevMad2 : PrivateTrip name == Susanita Susanita name availableSeats Integer String Enlaces (“links”). Son instancias de asociaciones entre clases. origin availableSeats : Person Integer :: String p2= :::Madrid SevMad2 : RegularTrip PrivateTrip regularTrips passengers +++availableSeats availableSeats + name : String Integer : String SevMad1 : model = N name = Manolito + + numberOfSeats = 5 Btle3 : Coach * touristGroup * Btle3 : Coach ** availableSeats : Integer + name : String * touristGroup destination = Barcelona Ejemplo 2. La figura 2.4 muestra *el diagrama de objetos que modela un estado SevMad1 :Sevilla RegularTrip origin =Manolito Sevilla origin = Sevilla * name == touristGroup numberOfS origin model = New Beetle model = New concreto de la empresa de vehículos descrita en la Beetle figura 2.3, en el que availableSeats = 10 Btle2 ::Coach Coach destination = Madrid origin = Sevilla Btle1 : SevMad2 : PrivateTrip SevMad1 RegularTrip destination = Madrid destination = Madrid p3 : Person numberOfSeats = 5de una flota de=cinco Btle3 : Coach Btle2 : Coach la empresa dispone actualmente numberOfSeats 5 vehículos, aunque model = New Beetle destination = Madrid p2 : Person p3 : Person p2 : Person availableSeats = 8 model = New Beetle origin = Sevilla cuatroorigin de ellos ya comprometidos. ==están Sevilla name = Miguelito model = New Beetle model New Beetle availableSeats = 8 numberOfSeats = 56 Btle2 name=== Manolito Miguelito name Manolito numberOfSeats = name destination = Madrid destination = Madrid la ruta Madrid-Barcelona tiene actualmente un pasajero, y la ruta Sevillap3 : Person numberOfSeats = 6 numberOfSeats = 5 Figura 2.3: Diagrama de clases Coach_Company Figura2.3: 2.3:SevMad1 Diagrama : RegularTrip Madrid tiene dos pasajeros. model = N Figura 2.3: Figura Diagrama de clases Coach_Company availableSeats =8 name = Miguelito Figura 2.3: origin Diagrama de clases Coach_Company = Sevilla numberOfS SevMad2 : PrivateTrip Figura 2.4: Diagrama de objetos Coach_Company_Sample Btle2 : Coach Btle3 : Coach SevMad2 : PrivateTrip destination = Madrid p3 Person Btle3 Coach :: Person 2.3 OCL: Un: lenguaje de restricciones y consultas Wednesday, Septemberp3 28, 11 origin = Sevilla p2 : Person name = Susanita name = Manolito OCL: Lenguaje de restricciones y consultas a objetos (OMG - 2000) Wednesday, September 28, 11 OCL: Lenguaje de restricciones y consultas a objetos (OMG - 2000) • El viaje MadBar de Madrid a Barcelona Wednesday, September 28, 11 OCL: Lenguaje de restricciones y consultas a objetos (OMG - 2000) • El viaje MadBar de Madrid a Barcelona Madbar Wednesday, September 28, 11 OCL: Lenguaje de restricciones y consultas a objetos (OMG - 2000) • El viaje MadBar de Madrid a Barcelona Madbar • Todos los viajes Wednesday, September 28, 11 OCL: Lenguaje de restricciones y consultas a objetos (OMG - 2000) • El viaje MadBar de Madrid a Barcelona Madbar • Todos los viajes Trip.allInstances() Wednesday, September 28, 11 OCL: Lenguaje de restricciones y consultas a objetos (OMG - 2000) • El viaje MadBar de Madrid a Barcelona Madbar • Todos los viajes Trip.allInstances() • La suma de los asientos que hay en Pcso y Smrt Wednesday, September 28, 11 OCL: Lenguaje de restricciones y consultas a objetos (OMG - 2000) • El viaje MadBar de Madrid a Barcelona Madbar • Todos los viajes Trip.allInstances() • La suma de los asientos que hay en Pcso y Smrt Pcso.numberOfSeats + Smrt.numberOfSeats Wednesday, September 28, 11 OCL: Lenguaje de restricciones y consultas a objetos (OMG - 2000) • El viaje MadBar de Madrid a Barcelona Madbar • Todos los viajes Trip.allInstances() • La suma de los asientos que hay en Pcso y Smrt Pcso.numberOfSeats + Smrt.numberOfSeats • Los viajes que tienen como origen Madrid Wednesday, September 28, 11 OCL: Lenguaje de restricciones y consultas a objetos (OMG - 2000) • El viaje MadBar de Madrid a Barcelona Madbar • Todos los viajes Trip.allInstances() • La suma de los asientos que hay en Pcso y Smrt Pcso.numberOfSeats + Smrt.numberOfSeats • Los viajes que tienen como origen Madrid Trip.allInstances()->select(t|t.origin=‘Madrid’) Wednesday, September 28, 11 Base de datos • SQL: lenguaje de consulta estructurado • MySQL: gestor de base de datos relacional que soporta SQL y lenguaje procedural Wednesday, September 28, 11 Base de datos • SQL: lenguaje de consulta estructurado • MySQL: gestor de base de datos relacional que soporta SQL y lenguaje procedural • tablas • tablas estáticas y derivadas Wednesday, September 28, 11 Base de datos • SQL: lenguaje de consulta estructurado • MySQL: gestor de base de datos relacional que soporta SQL y lenguaje procedural • tablas • tablas estáticas y derivadas create table nameTbl(val Int); Wednesday, September 28, 11 Base de datos • SQL: lenguaje de consulta estructurado • MySQL: gestor de base de datos relacional que soporta SQL y lenguaje procedural • tablas • tablas estáticas y derivadas create table nameTbl(val Int); select * from nameTbl; Wednesday, September 28, 11 Base de datos • SQL: lenguaje de consulta estructurado • MySQL: gestor de base de datos relacional que soporta SQL y lenguaje procedural • tablas • tablas estáticas y derivadas create table nameTbl(val Int); select * from nameTbl; Wednesday, September 28, 11 Base de datos • SQL: lenguaje de consulta estructurado • MySQL: gestor de base de datos relacional que soporta SQL y lenguaje procedural • tablas • sentencias tablas estáticas y derivadas • sentencias create table nameTbl(val Int); select * from nameTbl; Wednesday, September 28, 11 Base de datos • SQL: lenguaje de consulta estructurado • MySQL: gestor de base de datos relacional que soporta SQL y lenguaje procedural • tablas • sentencias tablas estáticas y derivadas • sentencias select fromnameTbl(val nameTbl; create * table Int); select * from nameTbl; Wednesday, September 28, 11 Base de datos • SQL: lenguaje de consulta estructurado • MySQL: gestor de base de datos relacional que soporta SQL y lenguaje procedural • tablas • sentencias tablas estáticas y derivadas • sentencias select fromnameTbl(val nameTbl; create * table Int); select into insert * from nameTbl(val) nameTbl; (select pk from Trip); Wednesday, September 28, 11 Base de datos • SQL: lenguaje de consulta estructurado • MySQL: gestor de base de datos relacional que soporta SQL y lenguaje procedural • tablas • sentencias tablas estáticas y derivadas • sentencias select fromnameTbl(val nameTbl; create * table Int); select into insert * from nameTbl(val) nameTbl; (select pk from Trip); Wednesday, September 28, 11 Base de datos • SQL: lenguaje de consulta estructurado • MySQL: gestor de base de datos relacional que soporta SQL y lenguaje procedural • tablas • sentencias • consultas tablas estáticas y derivadas • sentencias consultas select fromnameTbl(val nameTbl; create * table Int); select into insert * from nameTbl(val) nameTbl; (select pk from Trip); Wednesday, September 28, 11 Base de datos • SQL: lenguaje de consulta estructurado • MySQL: gestor de base de datos relacional que soporta SQL y lenguaje procedural • tablas • sentencias • consultas tablas estáticas y derivadas • sentencias consultas select nameTbl; create table Int); select * * from fromnameTbl(val nameTbl select into insert * from nameTbl(val) nameTbl; (select pk from Trip); Wednesday, September 28, 11 Base de datos • SQL: lenguaje de consulta estructurado • MySQL: gestor de base de datos relacional que soporta SQL y lenguaje procedural • tablas • sentencias • consultas tablas estáticas y derivadas • sentencias consultas select nameTbl; create table Int); select * * from fromnameTbl(val nameTbl insert into select * from nameTbl(val) nameTbl; (select pk from Trip); select * from (select * from nameTbl) as t Wednesday, September 28, 11 Base de datos • SQL: lenguaje de consulta estructurado • MySQL: gestor de base de datos relacional que soporta SQL y lenguaje procedural • tablas • sentencias • consultas tablas estáticas y derivadas • sentencias consultas select nameTbl; create table Int); select * * from fromnameTbl(val nameTbl insert into select * from nameTbl(val) nameTbl; (select pk from Trip); select * from (select * from nameTbl) as t Wednesday, September 28, 11 Base de datos • SQL: lenguaje de consulta estructurado • MySQL: gestor de base de datos relacional que soporta SQL y lenguaje procedural • tablas • sentencias • consultas • procedimientos almacenados - cursores - condicionales procedimientos almacenados bucles tablas estáticas y derivadas sentencias • • consultas select nameTbl; create table Int); select * * from fromnameTbl(val nameTbl insert into select * from nameTbl(val) nameTbl; (select pk from Trip); select * from (select * from nameTbl) as t Wednesday, September 28, 11 Base de datos • SQL: lenguaje de consulta estructurado • MySQL: gestor de base de datos relacional que soporta SQL y lenguaje procedural • tablas • sentencias • consultas • procedimientos almacenados - cursores - condicionales procedimientos almacenados bucles tablas estáticas y derivadas sentencias • • consultas declare procedure nameProc select * from nameTbl; create table nameTbl(val Int); select * from nameTbl begin select insert * from into nameTbl(val) nameTbl; (select pk from Trip); ... select * end; from (select * from nameTbl) as t Wednesday, September 28, 11 Base de datos • SQL: lenguaje de consulta estructurado • MySQL: gestor de base de datos relacional que soporta SQL y lenguaje procedural • tablas • sentencias • consultas • procedimientos almacenados - cursores - condicionales procedimientos almacenados bucles tablas estáticas y derivadas sentencias • • consultas declare procedure nameProc select * from nameTbl; create table nameTbl(val Int); select * from nameTbl begin select insert * from into nameTbl(val) nameTbl; (select pk from Trip); ... select * end; from (select * from nameTbl) as t call nameProc; Wednesday, September 28, 11 MySQL4OCL: Descripción general Wednesday, September 28, 11 MySQL4OCL: Descripción general • MySQL4OCL compila cada expresión OCL exp como un procedimiento proc(exp) que típicamente invocará a los procedimientos que compilan las subexpresiones de la expresión dada. Wednesday, September 28, 11 MySQL4OCL: Descripción general • MySQL4OCL compila cada expresión OCL exp como un procedimiento proc(exp) que típicamente invocará a los procedimientos que compilan las subexpresiones de la expresión dada. • El resultado de cada procedimiento proc(exp) se almacena en una tabla table(proc(exp)). Wednesday, September 28, 11 MySQL4OCL: Descripción general • MySQL4OCL compila cada expresión OCL exp como un procedimiento proc(exp) que típicamente invocará a los procedimientos que compilan las subexpresiones de la expresión dada. • El resultado de cada procedimiento proc(exp) se almacena en una tabla table(proc(exp)). call proc(exp); select * from table(proc(exp)) Wednesday, September 28, 11 Descripción general Wednesday, September 28, 11 Descripción general Para toda expresión exp, en el contexto de un diagrama de clases dcl, MySQL4OCL utiliza los siguientes conjuntos de reglas: Wednesday, September 28, 11 Descripción general Para toda expresión exp, en el contexto de un diagrama de clases dcl, MySQL4OCL utiliza los siguientes conjuntos de reglas: • toRDB: define el modo de almacenar los diagramas de objetos del diagrama dcl. [cap. 3] Wednesday, September 28, 11 Descripción general Para toda expresión exp, en el contexto de un diagrama de clases dcl, MySQL4OCL utiliza los siguientes conjuntos de reglas: • toRDB: define el modo de almacenar los diagramas de objetos del diagrama dcl. [cap. 3] • toProc: define el modo de generar el procedimiento proc(exp). [cap. 4,5 y anexo] Wednesday, September 28, 11 Descripción general Para toda expresión exp, en el contexto de un diagrama de clases dcl, MySQL4OCL utiliza los siguientes conjuntos de reglas: • toRDB: define el modo de almacenar los diagramas de objetos del diagrama dcl. [cap. 3] • toProc: define el modo de generar el procedimiento proc(exp). [cap. 4,5 y anexo] En las aplicaciones de MySQL4OCL, las bases de datos sobre las que se ejecutan las expresiones compiladas deben satisfacer las reglas toRDB. Wednesday, September 28, 11 toRDB: De diagramas UML a tablas MySQL Wednesday, September 28, 11 toRDB: 20 2. Preliminares De diagramas UML a tablas MySQL Trip + origin : String + destination : String PrivateTrip trips * tripCoach RegularTrip + availableSeats : Integer Coach coaches + model : String + numberOfSeats : Integer * regularTrips passengers * touristGroup * Person + name : String Figura 2.3: Diagrama de clases Coach_Company Diagramas de objetos Un diagrama de objetos modela el estado de un sistema en un momento particular. Su notación es similar a la de los diagramas de clases. Los diagramas de objetos se utilizan, principalmente, para el análisis y validación de los modelos que describen los diagramas de clase. Un diagrama de objetos está compuesto por: Wednesday, September 28, 11 toRDB: 20 2. Preliminares De diagramas UML a tablas MySQL Trip + origin : String + destination : String PrivateTrip pk trips * tripCoach RegularTrip + availableSeats : Integer Coach coaches + model : String + numberOfSeats : Integer * regularTrips passengers * touristGroup * Person + name : String Trip origin destination Figura 2.3: Diagrama de clases Coach_Company Diagramas de objetos Un diagrama de objetos modela el estado de un sistema en un momento particular. Su notación es similar a la de los diagramas de clases. Los diagramas de objetos se utilizan, principalmente, para el análisis y validación de los modelos que describen los diagramas de clase. Un diagrama de objetos está compuesto por: Wednesday, September 28, 11 toRDB: 2. Preliminares Preliminares 2020 2. De diagramas UML a tablas MySQL Trip Trip trips + origin : String trips + origin : String + destination : String + destination : String * * PrivateTrip PrivateTrip Coach Coach coaches ++model model: :String String coaches numberOfSeats :: Integer Integer ++numberOfSeats ** tripCoach tripCoach RegularTrip Person RegularTrip Person regularTrips passengers passengers + name : String + availableSeats : Integer regularTrips + availableSeats : Integer * touristGroup * + name : String * pk touristGroup * Trip origin destination Figura 2.3: Diagrama de clases Coach_Company Figura 2.3: Diagrama de clases Coach_Company Diagramas de objetos Diagramas de objetos Un diagrama de objetos modela el estado de un sistema en un momento Un diagrama de objetos modela el estado de un sistema en un momento particular. Su notación es similar a la de los diagramas de clases. Los diagramas particular. es similar a la de los el diagramas clases. Los diagramas de objetosSu se notación utilizan, principalmente, para análisis y de validación de los modelos deque objetos se utilizan, principalmente, describen los diagramas de clase.para el análisis y validación de los modelos que describen los diagramas de clase. Un diagrama de objetos está compuesto por: Wednesday, September 28, 11 toRDB: 2. Preliminares Preliminares 2020 2. De diagramas UML a tablas MySQL Trip Trip trips + origin : String trips + origin : String + destination : String + destination : String * * PrivateTrip PrivateTrip Coach Coach coaches ++model model: :String String coaches numberOfSeats :: Integer Integer ++numberOfSeats ** tripCoach tripCoach RegularTrip Person RegularTrip Person regularTrips passengers passengers + name : String + availableSeats : Integer regularTrips + availableSeats : Integer * touristGroup * + name : String * pk touristGroup * Trip Coach origin destination pk model numberOfSeats Figura 2.3: Diagrama de clases Coach_Company Figura 2.3: Diagrama de clases Coach_Company Diagramas de objetos Diagramas de objetos Un diagrama de objetos modela el estado de un sistema en un momento Un diagrama de objetos modela el estado de un sistema en un momento particular. Su notación es similar a la de los diagramas de clases. Los diagramas particular. es similar a la de los el diagramas clases. Los diagramas de objetosSu se notación utilizan, principalmente, para análisis y de validación de los modelos deque objetos se utilizan, principalmente, describen los diagramas de clase.para el análisis y validación de los modelos que describen los diagramas de clase. Un diagrama de objetos está compuesto por: Wednesday, September 28, 11 toRDB: 2. Preliminares Preliminares 20 2.2. 2020 Preliminares De diagramas UML a tablas MySQL Trip Trip Trip trips origin String ++origin :: String trips + origin : String destination :: String String ++destination + destination : String * * PrivateTrip PrivateTrip PrivateTrip Coach Coach Coach coaches coaches + ++model model:: :String String coaches model String ++numberOfSeats numberOfSeats: ::Integer Integer * + numberOfSeats Integer ** tripCoach tripCoach tripCoach RegularTrip Person RegularTrip Person regularTrips passengers RegularTrip Person regularTrips passengers availableSeats :: Integer + +name : String passengers ++ availableSeats Integer regularTrips name : String * touristGroup * + availableSeats : Integer + name : String * touristGroup * * pk touristGroup * Trip Coach Figura 2.3: 2.3: Diagrama Diagrama de origin destination pk model numberOfSeats Figura de clases clases Coach_Company Coach_Company Figura 2.3: Diagrama de clases Coach_Company Diagramas de objetos Diagramas de objetos Diagramas de objetos Un diagrama de objetos modela el estado de un sistema en un momento Un diagrama de objetos modela el estado de un sistema en un momento particular. Su notación es similar a laeldeestado los diagramas de clases.en Losundiagramas Un diagrama de objetos modela de un sistema momento particular. Su notación es similar a la de los diagramas de clases. Los diagramas de objetos senotación utilizan, principalmente, para eldiagramas análisis y validación de losdiagramas modelos particular. Su es similar a la de los de clases. Los de objetos se utilizan, principalmente, para el análisis y validación de los modelos que describen los diagramas de clase. deque objetos se utilizan, principalmente, para el análisis y validación de los modelos describen los diagramas de clase. Un diagrama de objetosde está compuesto por: que describen los diagramas clase. Un diagrama de objetos está compuesto por: Wednesday, September 28, 11 toRDB: 2. Preliminares Preliminares 20 2.2. 2020 Preliminares De diagramas UML a tablas MySQL Trip Trip Trip trips origin String ++origin :: String trips + origin : String destination :: String String ++destination + destination : String * * PrivateTrip PrivateTrip PrivateTrip Coach Coach Coach coaches coaches + ++model model:: :String String coaches model String ++numberOfSeats numberOfSeats: ::Integer Integer * + numberOfSeats Integer ** tripCoach tripCoach tripCoach RegularTrip Person RegularTrip Person regularTrips passengers RegularTrip Person regularTrips passengers availableSeats :: Integer + +name : String passengers ++ availableSeats Integer regularTrips name : String * touristGroup * + availableSeats : Integer + name : String * touristGroup * * pk touristGroup * Trip TripCoach Coach Figura 2.3: 2.3: Diagrama Diagrama clases origin destination trips de coaches pk model numberOfSeats Figura de clases Coach_Company Coach_Company Figura 2.3: Diagrama de clases Coach_Company Diagramas de objetos Diagramas de objetos Diagramas de objetos Un diagrama de objetos modela el estado de un sistema en un momento Un diagrama de objetos modela el estado de un sistema en un momento particular. Su notación es similar a laeldeestado los diagramas de clases.en Losundiagramas Un diagrama de objetos modela de un sistema momento particular. Su notación es similar a la de los diagramas de clases. Los diagramas de objetos senotación utilizan, principalmente, para eldiagramas análisis y validación de losdiagramas modelos particular. Su es similar a la de los de clases. Los de objetos se utilizan, principalmente, para el análisis y validación de los modelos que describen los diagramas de clase. deque objetos se utilizan, principalmente, para el análisis y validación de los modelos describen los diagramas de clase. Un diagrama de objetosde está compuesto por: que describen los diagramas clase. Un diagrama de objetos está compuesto por: Wednesday, September 28, 11 toRDB: 20 2. Preliminares Preliminares Preliminares 20 2.2. 2020 Preliminares De diagramas UML a tablas MySQL Trip Trip Trip Trip trips origin String trips ++origin origin String :::String trips ++ origin : String destination:::String String ++destination destination String ++ destination : String * ** PrivateTrip PrivateTrip PrivateTrip PrivateTrip Coach Coach Coach coaches ++model coaches + model:: :String String coaches model String ++numberOfSeats numberOfSeats: ::Integer Integer Integer * + numberOfSeats Integer ** tripCoach tripCoach tripCoach RegularTrip Person RegularTrip Person RegularTrip Person regularTrips passengers RegularTrip Person passengers regularTrips availableSeats :: Integer + +name : String regularTrips passengers ++availableSeats availableSeats name :: String + Integer String * touristGroup * + availableSeats : Integer + name : String * * touristGroup * pk touristGroup * Trip TripCoach Coach Figura 2.3: 2.3: Diagrama Diagrama clases origin destination trips de coaches pk model numberOfSeats Figura 2.3: Figura de clases Coach_Company Coach_Company Figura 2.3: Diagrama de clases Coach_Company Diagramas de objetos Diagramas de de objetos Diagramas Diagramas de objetos Un diagrama de objetos modela el estado de un sistema en un momento Un diagrama diagrama de de objetos objetos modela el estado de un sistema en un momento Un momento particular. Su notación es similar a la de los diagramas de clases. Los diagramas Un diagrama de objetos modela el estado de un sistema en un momento particular. Su notación notación es similar a la de los diagramas de clases. Los diagramas particular. Su diagramas de objetos se utilizan, principalmente, para el análisis y validación de los modelos particular. Su notación es similar a la de los diagramas de clases. Los diagramas de objetos se utilizan, utilizan, principalmente, para el análisis y validación de los modelos de objetos se principalmente, modelos que describen los diagramas de clase. deque objetos se utilizan, principalmente, para el análisis y validación de los modelos describen los diagramas que describen los diagramas de clase. Un diagrama de objetos está compuesto por: que describen los diagramas de clase. Un diagrama diagrama de de objetos objetos está compuesto por: Un Wednesday, September 28, 11 toRDB: 20 2. Preliminares Preliminares Preliminares 20 2.2. 2020 Preliminares De diagramas UML a tablas MySQL Trip Trip Trip Trip trips origin String trips ++origin origin String :::String trips ++ origin : String destination:::String String ++destination destination String ++ destination : String * ** PrivateTrip PrivateTrip PrivateTrip PrivateTrip Coach Coach Coach coaches ++model coaches + model:: :String String coaches model String ++numberOfSeats numberOfSeats: ::Integer Integer Integer * + numberOfSeats Integer ** tripCoach tripCoach tripCoach RegularTrip Person RegularTrip Person RegularTrip Person regularTrips passengers RegularTrip Person passengers regularTrips availableSeats :: Integer + +name : String regularTrips passengers ++availableSeats availableSeats name :: String + Integer String * touristGroup * + availableSeats : Integer + name : String * * touristGroup * pk touristGroup * Trip TripCoach Coach Figura 2.3: 2.3: Diagrama Diagrama clases origin destination trips de coaches pk model numberOfSeats Figura 2.3: Figura de clases Coach_Company Coach_Company Figura 2.3: Diagrama de clases Coach_Company Diagramas de objetos Diagramas de de objetos Diagramas Diagramas de objetos Un diagrama deRegularTrip objetos modela el estado de un sistema en un momento PrivateTrip Un diagrama diagrama de de objetos objetos modela el estado de un sistema en un momento Un momento particular. Su notación es similar a la de los diagramas de clases. Los diagramas Unpkdiagrama de objetos modela el estado de un sistema en un momento pk availableSeats particular. Su notación es similar a la de los diagramas de clases. Los diagramas particular. Su notación diagramas de objetos se utilizan, principalmente, para el análisis y validación de los modelos particular. Su notación es similar a la de los diagramas de clases. Los diagramas de objetos se utilizan, utilizan, principalmente, para el análisis y validación de los modelos de objetos se principalmente, modelos que describen los diagramas de clase. deque objetos se utilizan, principalmente, para el análisis y validación de los modelos describen los diagramas que describen los diagramas de clase. Un diagrama de objetos está compuesto por: que describen los diagramas de clase. Un diagrama diagrama de de objetos objetos está compuesto por: Un Wednesday, September 28, 11 toRDB: De diagramas UML a tablas MySQL Wednesday, September 28, 11 OCL: Un lenguaje de restricciones y consultas 21 toRDB: De diagramas UML a tablas MySQL MadZar : Trip origin = Madrid destination = Zaragoza p1 : Person name = Susanita MadBar : RegularTrip origin = Madrid destination = Barcelona availableSeats = 10 p2 : Person name = Manolito p3 : Person name = Miguelito SevMad1 : RegularTrip origin = Sevilla destination = Madrid availableSeats = 8 SevMad2 : PrivateTrip origin = Sevilla destination = Madrid Pcso : Coach model = Picasso numberOfSeats = 6 Smrt : Coach model = Smart numberOfSeats = 2 Btle1 : Coach model = New Beetle numberOfSeats = 5 Btle2 : Coach model = New Beetle numberOfSeats = 6 Btle3 : Coach model = New Beetle numberOfSeats = 5 Figura 2.4: Diagrama de objetos Coach_Company_Sample September 28, 11amplio: actualmente, OCL es utilizado, por ejemplo, en la LWednesday, es mucho más OCL: Un lenguaje de restricciones y consultas 21 toRDB: De diagramas UML a tablas MySQL MadZar : Trip origin = Madrid destination = Zaragoza p1 : Person name = Susanita MadBar : RegularTrip origin = Madrid destination = Barcelona availableSeats = 10 p2 : Person name = Manolito p3 : Person name = Miguelito pk 1 SevMad1 : RegularTrip origin = Sevilla destination = Madrid availableSeats = 8 Trip SevMad2 : PrivateTrip origin destination origin = Sevilla Madrid Zaragoza destination = Madrid Pcso : Coach model = Picasso numberOfSeats = 6 Smrt : Coach model = Smart numberOfSeats = 2 Btle1 : Coach model = New Beetle numberOfSeats = 5 Btle2 : Coach model = New Beetle numberOfSeats = 6 Btle3 : Coach model = New Beetle numberOfSeats = 5 RegularTrip 2.4: Diagrama de objetos Coach_Company_Sample pk Figura availableSeats 1 10 September 28, 11amplio: actualmente, OCL es utilizado, por ejemplo, en la LWednesday, es mucho más OCL: Un lenguaje de MadZar : Trip restricciones y consultas origin = Madrid destination = Zaragoza model = Picasso numberOfSeats = 6 21 toRDB: De diagramas UML a tablas MySQL p1 : Person name = Susanita p2 : Person name = Manolito p1 : Person name = Susanita p3 : Person name = Miguelito p2 : Person name = Manolito p3 : Person name = Miguelito MadBar : RegularTrip : Trip originMadZar = Madrid origin = Madrid destination = Barcelona destination = Zaragoza availableSeats = 10 SevMad1 RegularTrip MadBar : :RegularTrip Sevilla origin = Madrid destination = Madrid Barcelona availableSeats = 810 SevMad2 :: RegularTrip PrivateTrip SevMad1 origin = = Sevilla Sevilla origin destination = destination = Madrid Madrid availableSeats = 8 Trip origin destination origin = Sevilla Madrid Zaragoza destination = Madrid Smrt : Coach modelPcso = Smart : Coach numberOfSeats model = Picasso= 2 numberOfSeats = 6 Btle1 : Coach model = New Beetle Smrt : Coach numberOfSeats =5 model = Smart numberOfSeats = 2 Btle2 : Coach model = New Beetle Btle1 : Coach numberOfSeats =6 model = New Beetle numberOfSeats = 5 Btle3 : Coach modelBtle2 = New Beetle : Coach numberOfSeats = 5 model = New Beetle numberOfSeats = 6 : PrivateTrip Figura 2.4: DiagramaSevMad2 de objetos Coach_Company_Sample Btle3 : Coach pk 1 model = New Beetle numberOfSeats = 5 CL es mucho más amplio: actualmente, OCL es utilizado, por ejemplo, en la finición de metamodelos de dominio específico, la transformación de modelos, RegularTrip l testing y la validación de modelos. 2.4: Diagrama de objetos Coach_Company_Sample pk Figura availableSeats OCL es un lenguaje de especificación puro: la evaluación de una expresión 1 10 CL es instantánea de modo que cuando una expresión se evalúa, simplemente vuelve unSeptember valor cambiar nada en el OCL modelo. OCL es unpor lenguaje fuerte28,sin 11amplio: LWednesday, es mucho más actualmente, es utilizado, ejemplo, en la OCL: Un lenguaje de MadZar : Trip restricciones y consultas origin = Madrid destination = Zaragoza model = Picasso numberOfSeats = 6 21 toRDB: De diagramas UML a tablas MySQL p1 : Person name = Susanita p2 : Person name = Manolito p1 : Person name = Susanita p3 : Person name = Miguelito p2 : Person name = Manolito p3 : Person name = Miguelito MadBar : RegularTrip : Trip originMadZar = Madrid origin = Madrid destination = Barcelona destination = Zaragoza availableSeats = 10 SevMad1 RegularTrip MadBar : :RegularTrip Sevilla origin = Madrid destination = Madrid Barcelona availableSeats = 810 SevMad2 :: RegularTrip PrivateTrip SevMad1 origin = = Sevilla Sevilla origin destination = destination = Madrid Madrid availableSeats = 8 Trip origin destination origin = Sevilla Madrid Zaragoza destination = Madrid Sevilla Madrid Smrt : Coach modelPcso = Smart : Coach numberOfSeats model = Picasso= 2 numberOfSeats = 6 Btle1 : Coach model = New Beetle Smrt : Coach numberOfSeats =5 model = Smart numberOfSeats = 2 Btle2 : Coach model = New Beetle Btle1 : Coach numberOfSeats =6 model = New Beetle numberOfSeats = 5 Btle3 : Coach modelBtle2 = New Beetle : Coach numberOfSeats = 5 model = New Beetle numberOfSeats = 6 : PrivateTrip Figura 2.4: DiagramaSevMad2 de objetos Coach_Company_Sample Btle3 : Coach pk 1 2 model = New Beetle numberOfSeats = 5 CL es mucho más amplio: actualmente, OCL es utilizado, por ejemplo, en la finición de metamodelos de dominio específico, la transformación de modelos, RegularTrip l testing y la validación dePrivateTrip modelos. 2.4: Diagrama depkobjetos Coach_Company_Sample pk Figura availableSeats OCL es un lenguaje de especificación puro: la evaluación de una expresión 1 10 2 CL es instantánea de modo que cuando una expresión se evalúa, simplemente vuelve unSeptember valor cambiar nada en el OCL modelo. OCL es unpor lenguaje fuerte28,sin 11amplio: LWednesday, es mucho más actualmente, es utilizado, ejemplo, en la OCL: Un lenguaje de MadZar : Trip restricciones y consultas origin = Madrid MadZar : Trip destination = Zaragoza origin = Madrid destination = Zaragoza model = Picasso Pcso : Coach numberOfSeats = 6 model = Picasso numberOfSeats = 6 Smrt : Coach modelPcso = Smart : Coach Coach Smrt : numberOfSeats model = Picasso= 2 model = Smart numberOfSeats = 6 numberOfSeats = 2 Btle1 : Coach model = New Beetle Pcso Smrt :: Coach Btle1 Coach numberOfSeats =5 model = Picasso model = Smart model New Beetle numberOfSeats numberOfSeats = 2 numberOfSeats =6 5 Btle2 : Coach model = New Beetle Btle1 :: Coach Coach Smrt numberOfSeats =6 Btle2 Coach model == =Smart New Beetle Beetle model New numberOfSeats = =2 5 numberOfSeats 6 Btle3 : Coach modelBtle2 = New Beetle : Coach Btle1 : Coach numberOfSeats =5 Btle3 : Coach model = New Beetle model = New Beetle model = New Beetle numberOfSeats =5 6 numberOfSeats = numberOfSeats = 5 21 toRDB: OCL: Un lenguaje de restricciones y consultas 21 De diagramas UML a tablas MySQL p1 : Person name = Susanita p1 : Person name = Susanita MadBar : RegularTrip : Trip originMadZar = Madrid MadBar : RegularTrip origin = Madrid destination = Barcelona origin = Madrid destination = Zaragoza availableSeats = 10 destination = Barcelona p2 : Person availableSeats = 10 name = Manolito MadZar : Trip p2 p1: :Person Person SevMad1 RegularTrip MadBar : :RegularTrip origin = Madrid name name==Manolito Susanita Sevilla origin = Madrid destination SevMad1 destination: =RegularTrip =Zaragoza Madrid p3 : Person Barcelona availableSeats origin = Sevilla = 810 name = Miguelito destination = Madrid p3 p2: :Person Person p1 : Person MadBar : RegularTrip availableSeats =8 name name==Miguelito Manolito name = Susanita origin = Madrid SevMad2 PrivateTrip SevMad1 :: RegularTrip destination = Barcelona origin = = Sevilla Sevilla origin availableSeats = 10 destination: = SevMad2 PrivateTrip destination = Madrid Madrid p3 : Person availableSeats origin = Sevilla = 8 namep2=: Person Miguelito name = Manolito destination = Madrid SevMad1 : RegularTrip Trip origin = Sevilla SevMad2 : PrivateTrip Figura 2.4: Diagrama de objetos Coach_Company_Sample Btle3 : Coach Btle2 destination = Madrid p3 : Person pk origin destination origin = Sevilla model = New Beetle model availableSeats =8 1 Madrid Zaragoza name = Miguelito destination = Madrid numberOfSeats = 6 5 numberOfSeats Figura 2.4: Diagrama de objetos Coach_Company_Sample 2 Sevilla Madrid CL es mucho más amplio: actualmente, OCL es utilizado, por ejemplo, en la SevMad2 :específico, PrivateTrip la transformación de modelos, finición de metamodelos de dominio Btle3 : Coach RegularTrip PrivateTrip origin = Sevilla OCL es utilizado, por ejemplo, en la l es testing y la validación de modelos. mucho más amplio: actualmente, model = New Beetle 2.4: Diagrama depkobjetos Coach_Company_Sample destination = Madrid pk Figura availableSeats numberOfSeats 5 ición dominio específico, transformación modelos, OCL de es metamodelos un lenguaje dedeespecificación puro: lalaevaluación de unade=expresión 1 10 2 CL es instantánea de modo que cuando una expresión se evalúa, simplemente testing y la validación de modelos. vuelve un valor cambiar nada en elpuro: modelo. OCL es unpor lenguaje fuerteSeptember 28,sin 11amplio: OCL un lenguaje de especificación la de una expresión LWednesday, es es mucho más actualmente, OCL es evaluación utilizado, ejemplo, en la OCL: Un lenguaje de MadZar : Trip restricciones y consultas origin = Madrid MadZar : Trip destination = Zaragoza origin = Madrid destination = Zaragoza model = Picasso Pcso : Coach numberOfSeats = 6 model = Picasso numberOfSeats = 6 Smrt : Coach modelPcso = Smart : Coach Coach Smrt : numberOfSeats model = Picasso= 2 model = Smart numberOfSeats = 6 numberOfSeats = 2 Btle1 : Coach model = New Beetle Pcso Smrt :: Coach Btle1 Coach numberOfSeats =5 model = Picasso model = Smart model New Beetle numberOfSeats numberOfSeats = 2 numberOfSeats =6 5 Btle2 : Coach model = New Beetle Btle1 :: Coach Coach Smrt numberOfSeats =6 Btle2 Coach model == =Smart New Beetle Beetle model New numberOfSeats = =2 5 numberOfSeats 6 Btle3 : Coach modelBtle2 = New Beetle : Coach Btle1 : Coach numberOfSeats =5 Btle3 : Coach model = New Beetle model = New Beetle model = New Beetle numberOfSeats =5 6 numberOfSeats = numberOfSeats = 5 21 toRDB: OCL: Un lenguaje de restricciones y consultas 21 De diagramas UML a tablas MySQL p1 : Person name = Susanita p1 : Person name = Susanita MadBar : RegularTrip : Trip originMadZar = Madrid MadBar : RegularTrip origin = Madrid destination = Barcelona origin = Madrid destination = Zaragoza availableSeats = 10 destination = Barcelona p2 : Person availableSeats = 10 name = Manolito MadZar : Trip p2 p1: :Person Person SevMad1 RegularTrip MadBar : :RegularTrip origin = Madrid name name==Manolito Susanita Sevilla origin = Madrid destination SevMad1 destination: =RegularTrip =Zaragoza Madrid p3 : Person Barcelona availableSeats origin = Sevilla = 810 name = Miguelito destination = Madrid p3 p2: :Person Person p1 : Person MadBar : RegularTrip availableSeats =8 name name==Miguelito Manolito name = Susanita origin = Madrid SevMad2 PrivateTrip SevMad1 :: RegularTrip destination = Barcelona origin = = Sevilla Sevilla origin availableSeats = 10 destination: = SevMad2 PrivateTrip destination = Madrid Madrid p3 : Person availableSeats origin = Sevilla = 8 namep2=: Person Miguelito name = Manolito destination = Madrid SevMad1 : RegularTrip Trip origin = Sevilla SevMad2 : PrivateTrip Figura 2.4: Diagrama de objetos Coach_Company_Sample Btle3 : Coach Btle2 destination = Madrid p3 : Person pk origin destination origin = Sevilla Coach model = New Beetle model availableSeats = 8 1 Madrid Zaragoza name = Miguelito destination = Madrid numberOfSeats 5 model pk= 6 numberOfSeats numberOfSeats Figura 2.4: Diagrama de objetos Coach_Company_Sample 2 Sevilla Madrid 1 Picasso CL es mucho más amplio: actualmente, OCL es utilizado, por ejemplo, en la 2 Smart SevMad2 :específico, PrivateTrip la transformación de modelos, finición de metamodelos de dominio Btle3 : Coach 3 New Beetle RegularTrip PrivateTrip origin = Sevilla l es testing y la validación de modelos. mucho más amplio: actualmente, OCL es utilizado, ejemplo, modelpor = New Beetle en la Figura 2.4: Diagrama de objetos Coach_Company_Sample destination availableSeats pk = Madrid numberOfSeats 5 ición dominio específico, transformación modelos, OCLpkde es metamodelos un lenguaje dedeespecificación puro: lalaevaluación de unade=expresión 1 10 2 CL es instantánea de modo que cuando una expresión se evalúa, simplemente testing y la validación de modelos. vuelve un valor cambiar nada en elpuro: modelo. OCL es unpor lenguaje fuerteSeptember 28,sin 11amplio: OCL un lenguaje de especificación la de una expresión LWednesday, es es mucho más actualmente, OCL es evaluación utilizado, ejemplo, en la 6 2 5 OCL: Un MadZar : Trip lenguaje2.3. de restricciones y consultas origin =Un Madrid OCL: lenguaje de MadZar : Trip destination = Zaragoza origin = Madrid destination = Zaragoza model = Picasso Pcso : Coach 21 numberOfSeatsy=consultas 6 restricciones model = Picasso numberOfSeats = 6 Smrt : Coach modelPcso = Smart : Coach Coach Smrt : 21 numberOfSeats model = Picasso= 2 modelMadZar = Smart numberOfSeats: Trip =6 numberOfSeats = 2 origin = Madrid Btle1 : Coach destination = Beetle Zaragoza model = New Pcso Smrt :: Coach Btle1 Coach numberOfSeats =5 model = Picasso model == Smart model New Beetle numberOfSeats 65 numberOfSeats = 2 numberOfSeats = MadBar RegularTrip Btle2 :: Coach origin = model = Madrid New Beetle Btle1 ::: Coach Coach Smrt numberOfSeats =6 destination = Barcelona Btle2 Coach model =Smart New Beetle Beetle model == availableSeats = 10 New numberOfSeats = 5 numberOfSeats = 26 Btle3 : Coach modelBtle2 = New Beetle : Coach Btle1 : Coach SevMad1 :Coach RegularTrip numberOfSeats =5 Btle3 : model = New Beetle model New Beetle origin == Sevilla model = New Beetle numberOfSeats numberOfSeats == 56 destination = Madrid numberOfSeats = 5 toRDB: OCL: Un lenguaje de restricciones y consultas De diagramas UML a tablas MySQL p1 : Person OCL: Un lenguaje name = Susanita p1 : Person name = Susanita MadBar : RegularTrip Pcso : Coach origin = Madrid MadBar : RegularTrip model = Picasso origin = Madrid destination = Barcelona origin = Madrid destination = Zaragoza availableSeats = 10 numberOfSeats = 6 destination = Barcelona p2 : Person availableSeats = 10 name = Manolito MadZar : Trip p2 p1: :Person Person Smrt : Coach SevMad1 RegularTrip MadBar : :RegularTrip origin = Madrid name name==Manolito Susanita Sevilla origin model = Smart p1=: Madrid Person destination = Zaragoza SevMad1 destination: RegularTrip = Madrid p3 : Person Barcelona numberOfSeats = 2 name = Susanita availableSeats origin = Sevilla = 810 name = Miguelito destination = Madrid p3 p2: :Person Person p1 :: Person Person p1 MadBar : RegularTrip availableSeats =8 Btle1 : Coach name name==Miguelito Manolito name == Susanita Susanita name origin p2= :Madrid Person SevMad2 PrivateTrip SevMad1 :: RegularTrip model = New Beetle destination = Barcelona origin= = =Manolito Sevilla name numberOfSeats = 5 origin Sevilla availableSeats = 10 destination: = SevMad2 PrivateTrip destination = Madrid Madrid p3 : Person p2=:: Person Person availableSeats origin = Sevilla = 8 namep2 Miguelito Btle2 : Coach name == Manolito Manolito name destination = Madrid p3 : Person SevMad1 : RegularTrip model = New Beetle availableSeats = 8 name = Miguelito Trip origin = Sevilla numberOfSeats = 6 SevMad2 : PrivateTrip Figura 2.4: Diagrama de objetos Coach_Company_Sample Btle2 :: Coach Btle3 Coach destination = Madrid p3 :: Person Personorigin p3 pk destination origin = Sevilla Coach model == New Beetle model New Beetle availableSeats = 8 name == Miguelito Miguelito 1 Madrid Zaragoza name destination = Madrid numberOfSeats numberOfSeats pk= 65 model numberOfSeats SevMad2 : PrivateTrip Figura 2.4: Diagrama de objetos Coach_Company_Sample 2 Sevilla de restricciones consultas MadZary: Trip Madrid Btle3 : Coach 1 Picasso 6 CL es mucho más amplio: actualmente, OCL es utilizado, ejemplo, en la originpor = Sevilla model = New Beetle 2 Smart 2 destination =de Madrid SevMad2 :específico, PrivateTrip la transformación finición de metamodelos de dominio modelos, Btle3 : Coach numberOfSeats =5 3 New Beetle 5 RegularTrip PrivateTrip origin = Sevilla OCL es utilizado, por ejemplo, en la l es testing y la validación de modelos. mucho más amplio: actualmente, model = New Beetle 2.4: Diagrama depkobjetos Coach_Company_Sample destination = Madrid pk Figura availableSeats numberOfSeats 5 ición dominio específico, transformación modelos, OCL de es metamodelos un lenguaje dedeespecificación puro: lalaevaluación de unade=expresión 1 10 2 CL es instantánea de modo que cuando una expresión se evalúa, simplemente testing y la validación de modelos. vuelve un valor cambiar nada en elpuro: modelo. OCL esde unpor lenguaje fuerteFigura 2.4: Diagrama objetos Coach_Company_Sample September 28,sin 11amplio: OCL un lenguaje de especificación la de una expresión LWednesday, es es mucho más actualmente, OCL es evaluación utilizado, ejemplo, en la OCL: Un MadZar : Trip lenguaje2.3. de restricciones y consultas origin =Un Madrid OCL: lenguaje de MadZar : Trip destination = Zaragoza origin = Madrid destination = Zaragoza model = Picasso Pcso : Coach 21 numberOfSeatsy=consultas 6 restricciones model = Picasso numberOfSeats = 6 Smrt : Coach modelPcso = Smart : Coach Coach Smrt : 21 numberOfSeats model = Picasso= 2 modelMadZar = Smart numberOfSeats: Trip =6 numberOfSeats = 2 origin = Madrid Btle1 : Coach destination = Beetle Zaragoza model = New Pcso Smrt :: Coach Btle1 Coach numberOfSeats =5 model = Picasso model == Smart model New Beetle numberOfSeats 65 numberOfSeats = 2 numberOfSeats = MadBar RegularTrip Btle2 :: Coach origin = model = Madrid New Beetle Btle1 ::: Coach Coach Smrt numberOfSeats =6 destination = Barcelona Btle2 Coach model =Smart New Beetle Beetle model == availableSeats = 10 New numberOfSeats = 5 numberOfSeats = 26 Btle3 : Coach modelBtle2 = New Beetle : Coach Btle1 : Coach SevMad1 :Coach RegularTrip numberOfSeats =5 Btle3 : model = New Beetle model New Beetle origin == Sevilla model = New Beetle numberOfSeats numberOfSeats == 56 destination = Madrid numberOfSeats = 5 toRDB: OCL: Un lenguaje de restricciones y consultas De diagramas UML a tablas MySQL p1 : Person OCL: Un lenguaje name = Susanita p1 : Person name = Susanita MadBar : RegularTrip Pcso : Coach origin = Madrid MadBar : RegularTrip model = Picasso origin = Madrid destination = Barcelona origin = Madrid destination = Zaragoza availableSeats = 10 numberOfSeats = 6 destination = Barcelona p2 : Person availableSeats = 10 name = Manolito MadZar : Trip p2 p1: :Person Person Smrt : Coach SevMad1 RegularTrip MadBar : :RegularTrip origin = Madrid name name==Manolito Susanita Sevilla origin model = Smart p1=: Madrid Person destination = Zaragoza SevMad1 destination: RegularTrip = Madrid p3 : Person Barcelona numberOfSeats = 2 name = Susanita availableSeats origin = Sevilla = 810 name = Miguelito destination = Madrid p3 p2: :Person Person p1 :: Person Person p1 MadBar : RegularTrip availableSeats =8 Btle1 : Coach name name==Miguelito Manolito name == Susanita Susanita name origin p2= :Madrid Person SevMad2 PrivateTrip SevMad1 :: RegularTrip model = New Beetle destination = Barcelona origin= = =Manolito Sevilla name numberOfSeats = 5 origin Sevilla availableSeats = 10 destination: = SevMad2 PrivateTrip destination = Madrid Madrid p3 : Person p2=:: Person Person availableSeats origin = Sevilla = 8 namep2 Miguelito Btle2 : Coach name == Manolito Manolito name destination = Madrid p3 : Person SevMad1 : RegularTrip model = New Beetle availableSeats = 8 name = Miguelito Trip origin = Sevilla numberOfSeats = 6 SevMad2 : PrivateTrip TripCoach Figura 2.4: Diagrama de objetos Coach_Company_Sample Btle2 :: Coach Btle3 Coach destination = Madrid p3 :: Person Personorigin p3 pk destination origin = Sevilla trips coachesmodel Coach == New Beetle model New Beetle availableSeats = 8 name == Miguelito Miguelito 1 Madrid Zaragoza name destination = Madrid1 1 numberOfSeats numberOfSeats pk= 65 model numberOfSeats SevMad2 : PrivateTrip Figura 2.4: Diagrama de objetos Coach_Company_Sample 2 Sevilla de restricciones consultas MadZary: Trip Madrid Btle3 : Coach 2 1 Picasso 6 CL es mucho más amplio: actualmente, OCL1 es utilizado, ejemplo, en la originpor = Sevilla model = New Beetle 2 3 2 Smart 2 destination =de Madrid SevMad2 :específico, PrivateTrip la transformación finición de metamodelos de dominio modelos, Btle3 : Coach numberOfSeats =5 3 New Beetle 5 RegularTrip PrivateTrip origin = Sevilla OCL es utilizado, por ejemplo, en la l es testing y la validación de modelos. mucho más amplio: actualmente, model = New Beetle 2.4: Diagrama depkobjetos Coach_Company_Sample destination = Madrid pk Figura availableSeats numberOfSeats 5 ición dominio específico, transformación modelos, OCL de es metamodelos un lenguaje dedeespecificación puro: lalaevaluación de unade=expresión 1 10 2 CL es instantánea de modo que cuando una expresión se evalúa, simplemente testing y la validación de modelos. vuelve un valor cambiar nada en elpuro: modelo. OCL esde unpor lenguaje fuerteFigura 2.4: Diagrama objetos Coach_Company_Sample September 28,sin 11amplio: OCL un lenguaje de especificación la de una expresión LWednesday, es es mucho más actualmente, OCL es evaluación utilizado, ejemplo, en la toProc: De expresiones OCL a procedimientos almacenados Wednesday, September 28, 11 toProc: De expresiones OCL a procedimientos almacenados Sea exp la expresión: 1.+(2) Wednesday, September 28, 11 toProc: De expresiones OCL a procedimientos almacenados Sea exp la expresión: 1.+(2) create procedure sum1() begin call const1(); call const2(); create table sum1Tbl(val int); insert into sum1Tbl(val) select t0.val + t1.val from (select * from const1Tbl) as t0, (select * from const2Tbl) as t1; end; Wednesday, September 28, 11 toProc: De expresiones OCL a procedimientos almacenados Sea exp la expresión: 1.+(2) create procedure sum1() begin call const1(); call const2(); create table sum1Tbl(val int); insert into sum1Tbl(val) select t0.val + t1.val from (select * from const1Tbl) as t0, (select * from const2Tbl) as t1; end; Wednesday, September 28, 11 toProc: De expresiones OCL a procedimientos almacenados Sea exp la expresión: 1.+(2) create procedure const1() create procedure sum1() begin begin create table call const1(); const1Tbl(val int); insert into const1Tbl(val) (select 1 as val); int);end; call const2(); create table sum1Tbl(val insert into sum1Tbl(val) select t0.val + t1.val from (select * from const1Tbl) as t0, (select * from const2Tbl) as t1; end; Wednesday, September 28, 11 toProc: De expresiones OCL a procedimientos almacenados Sea exp la expresión: 1.+(2) create procedure const1() create procedure sum1() begin begin create table call const1(); const1Tbl(val int); insert into const1Tbl(val) (select 1 as val); int);end; call const2(); create table sum1Tbl(val insert into sum1Tbl(val) select t0.val + t1.val from (select * from const1Tbl) as t0, (select * from const2Tbl) as t1; end; Wednesday, September 28, 11 toProc: De expresiones OCL a procedimientos almacenados Sea exp Sea la expexpresión: la expresión: op(exp1,...,expn) 1.+(2) create procedure const1() create procedure sum1() begin begin create table call const1(); const1Tbl(val int); insert into const1Tbl(val) (select 1 as val); int);end; call const2(); create table sum1Tbl(val insert into sum1Tbl(val) select t0.val + t1.val from (select * from const1Tbl) as t0, (select * from const2Tbl) as t1; end; Wednesday, September 28, 11 toProc: De expresiones OCL a procedimientos almacenados Sea exp Sea la expexpresión: la expresión: op(exp1,...,expn) 1.+(2) create procedure const1() create procedure proc(op(exp1,...expn)) sum1() begin begin create table call const1(); const1Tbl(val int); insert into const1Tbl(val) (select 1 as val); int);end; call const2(); create table sum1Tbl(val insert into sum1Tbl(val) select t0.val + t1.val from (select * from const1Tbl) as t0, (select * from const2Tbl) as t1; end; Wednesday, September 28, 11 toProc: De expresiones OCL a procedimientos almacenados Sea exp Sea la expexpresión: la expresión: op(exp1,...,expn) 1.+(2) create procedure const1() create procedure proc(op(exp1,...,expn)) proc(op(exp1,...expn)) sum1() begin begin create table call const1(); proc(exp1); const1Tbl(val int); ... insert into const1Tbl(val) call proc(expn); const2(); (select 1 as val); create table sum1Tbl(val int);end; insert into sum1Tbl(val) select t0.val + t1.val from (select * from const1Tbl) as t0, (select * from const2Tbl) as t1; end; Wednesday, September 28, 11 toProc: De expresiones OCL a procedimientos almacenados Sea exp Sea la expexpresión: la expresión: op(exp1,...,expn) 1.+(2) create procedure const1() create procedure proc(op(exp1,...,expn)) proc(op(exp1,...expn)) sum1() begin begin create table call const1(); proc(exp1); const1Tbl(val int); ... insert into const1Tbl(val) call proc(expn); const2(); (select 1 as val); create table nameTable(columns(exp)); sum1Tbl(val int);end; insert into nameTable(columns(exp)) sum1Tbl(val) select t0.val + t1.val from (select * from const1Tbl) as t0, (select * from const2Tbl) as t1; end; Wednesday, September 28, 11 toProc: De expresiones OCL a procedimientos almacenados Sea exp Sea la expexpresión: la expresión: op(exp1,...,expn) 1.+(2) create procedure const1() create procedure proc(op(exp1,...,expn)) proc(op(exp1,...expn)) sum1() begin begin create table call const1(); proc(exp1); const1Tbl(val int); ... insert into const1Tbl(val) call proc(expn); const2(); (select 1 as val); create table nameTable(columns(exp)); sum1Tbl(val int);end; insert into nameTable(columns(exp)) sum1Tbl(val) select query(op(exp1,...,expn)); t0.val + t1.val from (select * from const1Tbl) as t0, (select * from const2Tbl) as t1; end; Wednesday, September 28, 11 toProc: De expresiones OCL a procedimientos almacenados Wednesday, September 28, 11 toProc: De expresiones OCL a procedimientos almacenados Sea exp la expresión: ‘hola’.characters() Wednesday, September 28, 11 toProc: De expresiones OCL a procedimientos almacenados Sea exp la expresión: ‘hola’.characters() create procedure characters1 begin call constH; call characters1Shp; create table characters1Tbl(pos int, val varchar...); insert into characters1Tbl(val) (select val from characters1ShpTbl))); end; Wednesday, September 28, 11 toProc: De expresiones OCL a procedimientos almacenados .,expn) Sea exp exp la la expresión: expresión: op(exp1,.. ‘hola’.characters() Sea create procedure characters1 begin call constH; call characters1Shp; create table characters1Tbl(pos int, val varchar...); insert into characters1Tbl(val) (select val from characters1ShpTbl))); end; Wednesday, September 28, 11 toProc: De expresiones OCL a procedimientos almacenados .,expn) Sea exp exp la la expresión: expresión: op(exp1,.. ‘hola’.characters() Sea create procedure proc(op(exp1,...,expn)) characters1 begin call constH; call characters1Shp; create table characters1Tbl(pos int, val varchar..); varchar...); insert into characters1Tbl(val) (select val from characters1ShpTbl))); end; Wednesday, September 28, 11 toProc: De expresiones OCL a procedimientos almacenados .,expn) Sea exp exp la la expresión: expresión: op(exp1,.. ‘hola’.characters() Sea create procedure proc(op(exp1,...,expn)) characters1 begin call constH; proc(exp1); call characters1Shp; ... create table characters1Tbl(pos int, val varchar..); call proc(expn); varchar...); insert into characters1Tbl(val) call characters1Shp; (select val characters1(pos int, val varchar...); create table from characters1ShpTbl))); insert into characters1(val) (select val from characters1ShpTbl))); end; Wednesday, September 28, 11 toProc: De expresiones OCL a procedimientos almacenados .,expn) Sea exp exp la la expresión: expresión: op(exp1,.. ‘hola’.characters() Sea create procedure proc(op(exp1,...,expn)) characters1 begin call proc(exp1); constH; call characters1Shp; ... create call proc(expn); table characters1Tbl(pos int, val varchar..); varchar...); insert call proc#(op(exp1,...,expn)); into characters1Tbl(val) characters1Shp; create (select table val characters1(pos int, val varchar...); insert from characters1ShpTbl))); into characters1(val) (select val from characters1ShpTbl))); end; Wednesday, September 28, 11 toProc: De expresiones OCL a procedimientos almacenados .,expn) Sea exp exp la la expresión: expresión: op(exp1,.. ‘hola’.characters() Sea create procedure proc(op(exp1,...,expn)) characters1 begin call proc(exp1); constH; call characters1Shp; ... create call proc(expn); table characters1Tbl(pos int, val varchar..); varchar...); insert call proc#(op(exp1,...,expn)); into characters1Tbl(val) characters1Shp; create (select table val nameTable(columns(proc(exp))); characters1(pos int, val varchar...); insert from characters1ShpTbl))); into nameTable(columns(proc(exp))) characters1(val) (select val from characters1ShpTbl))); end; Wednesday, September 28, 11 toProc: De expresiones OCL a procedimientos almacenados .,expn) Sea exp exp la la expresión: expresión: op(exp1,.. ‘hola’.characters() Sea create procedure proc(op(exp1,...,expn)) characters1 begin constH; call proc(exp1); call characters1Shp; ... create table characters1Tbl(pos int, val varchar..); call proc(expn); varchar...); insert into characters1Tbl(val) call characters1Shp; proc#(op(exp1,...,expn)); (select val nameTable(columns(proc(exp))); characters1(pos int, val varchar...); create table from characters1ShpTbl))); characters1(val) insert into nameTable(columns(proc(exp))) (select val characters1ShpTbl))); from table(proc#(op(exp1,...,expn)))))); end; Wednesday, September 28, 11 toProc: De expresiones OCL a procedimientos almacenados Wednesday, September 28, 11 toProc: De expresiones OCL a procedimientos almacenados Sea exp la expresión Trip.allInstances().origin->exists(o|o=‘Madrid’) Wednesday, September 28, 11 toProc: De expresiones OCL a procedimientos almacenados Sea exp la expresión Trip.allInstances().origin->exists(o|o=‘Madrid’) create procedure existsIt begin call origin; call existsItShp; create table existsItTbl(val Boolean); insert into existsItTbl(val) (select * from existsItShpTbl); end; Wednesday, September 28, 11 toProc: De expresiones OCL a procedimientos almacenados Sea exp la expresión Sea exp la expresión: fuente->iter(o|cuerpo) Trip.allInstances().origin->exists(o|o=‘Madrid’) create procedure existsIt begin call origin; call existsItShp; create table existsItTbl(val Boolean); insert into existsItTbl(val) (select * from existsItShpTbl); end; Wednesday, September 28, 11 toProc: De expresiones OCL a procedimientos almacenados Sea exp la expresión Sea exp la expresión: fuente->iter(o|cuerpo) Trip.allInstances().origin->exists(o|o=‘Madrid’) create procedure proc(iter(fuente,cuerpo)) existsIt begin call origin; call existsItShp; create table existsItTbl(val Boolean); insert into existsItTbl(val) (select * from existsItShpTbl); end; Wednesday, September 28, 11 toProc: De expresiones OCL a procedimientos almacenados Sea exp la expresión Sea exp la expresión: fuente->iter(o|cuerpo) Trip.allInstances().origin->exists(o|o=‘Madrid’) create procedure proc(iter(fuente,cuerpo)) existsIt begin call proc(fuente); origin; call existsItShp; create table existsItTbl(val Boolean); insert into existsItTbl(val) (select * from existsItShpTbl); end; Wednesday, September 28, 11 toProc: De expresiones OCL a procedimientos almacenados Sea exp la expresión Sea exp la expresión: fuente->iter(o|cuerpo) Trip.allInstances().origin->exists(o|o=‘Madrid’) create procedure proc(iter(fuente,cuerpo)) existsIt begin call proc(fuente); origin; call proc#(iter(fuente,cuerpo)); existsItShp; create table existsItTbl(val Boolean); insert into existsItTbl(val) (select * from existsItShpTbl); end; Wednesday, September 28, 11 toProc: De expresiones OCL a procedimientos almacenados Sea exp la expresión Sea exp la expresión: fuente->iter(o|cuerpo) Trip.allInstances().origin->exists(o|o=‘Madrid’) create procedure proc(iter(fuente,cuerpo)) existsIt begin call proc(fuente); origin; call proc#(iter(fuente,cuerpo)); existsItShp; create table nameTable(columns(exp)); existsItTbl(val Boolean); insert into nameTable(columns(exp)) existsItTbl(val) (select * from existsItShpTbl); end; Wednesday, September 28, 11 toProc: De expresiones OCL a procedimientos almacenados Sea exp la expresión Sea exp la expresión: fuente->iter(o|cuerpo) Trip.allInstances().origin->exists(o|o=‘Madrid’) create procedure proc(iter(fuente,cuerpo)) existsIt begin call proc(fuente); origin; call proc#(iter(fuente,cuerpo)); existsItShp; create table nameTable(columns(exp)); existsItTbl(val Boolean); insert into nameTable(columns(exp)) existsItTbl(val) (select * from table(proc#(iter(fuente,cuerpo)))); existsItShpTbl); end; Wednesday, September 28, 11 toProc: Procedimientos almacenados para iteradores Wednesday, September 28, 11 toProc: Procedimientos almacenados para iteradores Sea exp la expresión: iter(fuente,cuerpo) Wednesday, September 28, 11 toProc: Procedimientos almacenados para iteradores Sea exp la expresión: iter(fuente,cuerpo) create procedure proc#(iter(fuente,cuerpo)) begin declare crs cursor for (select val from table(proc(fuente))); declare var, done ...; create table nameTable(columns(exp)); open crs; repeat fetch crs into var; call proc(cuerpo); insert into nameTable(columns(exp)) ...; until done end repeat; close crs; end; Wednesday, September 28, 11 toProc: Procedimientos almacenados para iteradores Sea exp la expresión: iter(fuente,cuerpo) create procedure proc#(iter(fuente,cuerpo)) begin declare crs cursor for (select val from table(proc(fuente))); declare var, done ...; create table nameTable(columns(exp)); open crs; repeat fetch crs into var; call proc(cuerpo); insert into nameTable(columns(exp)) ...; until done end repeat; close crs; end; Wednesday, September 28, 11 MySQL4OCL: Arquitectura 58 6. Implementación MySQL4OCL compiler queries ocl EOS parser diagrama de clases MySQL4OCL codgen queries sql MySQL4OCL tabgen tables Figura 6.1: Arquitectura de la implementación de MySQL4OCL. Wednesday, September 28, 11 Optimizaciones Wednesday, September 28, 11 Optimizaciones La creación de tablas tiene un coste significativo. Wednesday, September 28, 11 Optimizaciones La creación de tablas tiene un coste significativo. Creamos un algoritmo bottom up que elimina las llamadas a procedimientos (o las reemplaza por consultas), evitando la creación de tablas auxiliares siempre que esto es posible: o sea, cuando el cuerpo del procedimiento: Wednesday, September 28, 11 Optimizaciones La creación de tablas tiene un coste significativo. Creamos un algoritmo bottom up que elimina las llamadas a procedimientos (o las reemplaza por consultas), evitando la creación de tablas auxiliares siempre que esto es posible: o sea, cuando el cuerpo del procedimiento: - no incluye ninguna llamada a procedimiento, sino que él mismo es una consulta, o - incluye llamadas a procedimientos, pero éstas pueden realizarse “fuera” del mismo. Wednesday, September 28, 11 Ejemplo Wednesday, September 28, 11 Ejemplo exp = ‘hola’.characters()->size() Wednesday, September 28, 11 Ejemplo exp = ‘hola’.characters()->size() create procedure size1() begin call proc(characters1); create table size1Tbl(val int); insert into size1Tbl(val) select count(*) from (select * from characteres1Tbl) as t; end; Wednesday, September 28, 11 Ejemplo exp = ‘hola’.characters()->size() create procedure size1() begin call proc(characters1); create table size1Tbl(val int); insert into size1Tbl(val) select count(*) from (select * from characteres1Tbl) as t; end; create procedure characters1() begin call proc(constH); call proc#(characters1Shp); create table characters1Tbl(val varchar(50)); insert into characters1Tbl(val) (select * from characters1ShpTbl); end; Wednesday, September 28, 11 Ejemplo exp = ‘hola’.characters()->size() create procedure size1() begin call proc(characters1); create table size1Tbl(val int); insert into size1Tbl(val) select count(*) from (select * from characteres1Tbl) as t; end; create procedure characters1() begin call proc(constH); call proc#(characters1Shp); create table characters1Tbl(val varchar(50)); insert into characters1Tbl(val) (select * from characters1ShpTbl); end; Wednesday, September 28, 11 create procedure characters1Shp() begin declare ... create table characters1ShpTbl(pos int, val varchar(250)); ... while ... do insert into characters1ShpTbl(val) select substring(val,i,1) as val from (select * from constHTbl) as t; end while; end; Ejemplo exp = ‘hola’.characters()->size() create procedure size1() begin call proc(characters1); create table size1Tbl(val int); insert into size1Tbl(val) select count(*) from (select * from characteres1Tbl) as t; end; create procedure characters1() begin call proc(constH); call proc#(characters1Shp); create table characters1Tbl(val varchar(50)); insert into characters1Tbl(val) (select * from characters1ShpTbl); end; Wednesday, September 28, 11 create procedure characters1Shp() begin declare ... create table characters1ShpTbl(pos int, val varchar(250)); ... while ... do insert into characters1ShpTbl(val) select substring(val,i,1) as val from (select * from constHTbl) as t; end while; end; create procedure constH() begin create table constHTbl(val int); insert into constHTbl(val) (select ‘hola’ as val); end; Ejemplo exp = ‘hola’.characters()->size() create procedure size1() begin call proc(characters1); create table size1Tbl(val int); insert into size1Tbl(val) select count(*) from (select * from characteres1Tbl) as t; end; create procedure characters1() begin call proc(constH); call proc#(characters1Shp); create table characters1Tbl(val varchar(50)); insert into characters1Tbl(val) (select * from characters1ShpTbl); end; Wednesday, September 28, 11 create procedure characters1Shp() begin declare ... create table characters1ShpTbl(pos int, val varchar(250)); ... while ... do insert into characters1ShpTbl(val) select substring(val,i,1) as val from (select ‘hola’ * from as constHTbl) val) as t; as t; end while; end; create procedure constH() begin create table constHTbl(val int); insert into constHTbl(val) (select ‘hola’ as val); end; Ejemplo exp = ‘hola’.characters()->size() create procedure size1() begin call proc(characters1); create table size1Tbl(val int); insert into size1Tbl(val) select count(*) from (select * from characteres1Tbl) as t; end; create procedure characters1() begin call proc(constH); call proc#(characters1Shp); create table characters1Tbl(val varchar(50)); insert into characters1Tbl(val) (select * from characters1ShpTbl); end; Wednesday, September 28, 11 create procedure characters1Shp() begin declare ... create table characters1ShpTbl(pos int, val varchar(250)); ... while ... do insert into characters1ShpTbl(val) select substring(val,i,1) as val from (select ‘hola’ * from as constHTbl) val) as t; as t; end while; end; create procedure constH() begin create table constHTbl(val int); insert into constHTbl(val) (select ‘hola’ as val); end; Ejemplo exp = ‘hola’.characters()->size() create procedure size1() begin call proc(characters1); create table size1Tbl(val int); insert into size1Tbl(val) select count(*) from (select * from characteres1Tbl) as t; end; create procedure characters1() begin call proc(constH); call proc#(characters1Shp); create table characters1Tbl(val varchar(50)); insert into characters1Tbl(val) (select * from characters1ShpTbl); end; Wednesday, September 28, 11 create procedure characters1Shp() begin declare ... create table characters1ShpTbl(pos int, val varchar(250)); ... while ... do insert into characters1ShpTbl(val) select substring(val,i,1) as val from (select ‘hola’ * from as constHTbl) val) as t; as t; end while; end; create procedure constH() begin create table constHTbl(val int); insert into constHTbl(val) (select ‘hola’ as val); end; Ejemplo exp = ‘hola’.characters()->size() create procedure size1() begin call proc(characters1); create table size1Tbl(val int); insert into size1Tbl(val) select count(*) from (select * from characteres1Tbl) as t; end; create procedure characters1() begin call proc(constH); call proc#(characters1Shp); create table characters1Tbl(val varchar(50)); insert into characters1Tbl(val) (select * from characters1ShpTbl); end; Wednesday, September 28, 11 create procedure characters1Shp() begin declare ... create table characters1ShpTbl(pos int, val varchar(250)); ... while ... do insert into characters1ShpTbl(val) select substring(val,i,1) as val from (select ‘hola’ * from as constHTbl) val) as t; as t; end while; end; create procedure constH() begin create table constHTbl(val int); insert into constHTbl(val) (select ‘hola’ as val); end; Ejemplo exp = ‘hola’.characters()->size() create procedure size1() begin call proc#(characters1Shp); proc(characters1); create table size1Tbl(val int); insert into size1Tbl(val) select count(*) from (select * from characteres1ShpTbl) characteres1Tbl) as as t; t; end; create procedure characters1() begin call proc(constH); call proc#(characters1Shp); create table characters1Tbl(val varchar(50)); insert into characters1Tbl(val) (select * from characters1ShpTbl); end; Wednesday, September 28, 11 create procedure characters1Shp() begin declare ... create table characters1ShpTbl(pos int, val varchar(250)); ... while ... do insert into characters1ShpTbl(val) select substring(val,i,1) as val from (select ‘hola’ * from as constHTbl) val) as t; as t; end while; end; create procedure constH() begin create table constHTbl(val int); insert into constHTbl(val) (select ‘hola’ as val); end; Ejemplo exp = ‘hola’.characters()->size() create procedure size1() begin call proc#(characters1Shp); proc(characters1); create table size1Tbl(val int); insert into size1Tbl(val) select count(*) from (select * from characteres1ShpTbl) characteres1Tbl) as as t; t; end; create procedure characters1() begin call proc(constH); call proc#(characters1Shp); create table characters1Tbl(val varchar(50)); insert into characters1Tbl(val) (select * from characters1ShpTbl); end; Wednesday, September 28, 11 create procedure characters1Shp() begin declare ... create table characters1ShpTbl(pos int, val varchar(250)); ... while ... do insert into characters1ShpTbl(val) select substring(val,i,1) as val from (select ‘hola’ * from as constHTbl) val) as t; as t; end while; end; create procedure constH() begin create table constHTbl(val int); insert into constHTbl(val) (select ‘hola’ as val); end; Ejemplo exp = ‘hola’.characters()->size() create procedure size1() begin call proc#(characters1Shp); proc(characters1); create table size1Tbl(val int); insert into size1Tbl(val) select count(*) from (select * from characteres1ShpTbl) characteres1Tbl) as as t; t; end; create procedure characters1() begin call proc(constH); call proc#(characters1Shp); create table characters1Tbl(val varchar(50)); insert into characters1Tbl(val) (select * from characters1ShpTbl); end; Wednesday, September 28, 11 create procedure characters1Shp() begin declare ... create table characters1ShpTbl(pos int, val varchar(250)); ... while ... do insert into characters1ShpTbl(val) select substring(val,i,1) as val from (select ‘hola’ * from as constHTbl) val) as t; as t; end while; end; create procedure constH() begin create table constHTbl(val int); insert into constHTbl(val) (select ‘hola’ as val); end; MySQL4OCL en ActionGUI Wednesday, September 28, 11 MySQL4OCL en ActionGUI • MySQL4OCL está integrado en la herramienta ActionGUI de desarrollo de aplicaciones web basadas en modelos. Wednesday, September 28, 11 MySQL4OCL en ActionGUI • MySQL4OCL está integrado en la herramienta ActionGUI de desarrollo de aplicaciones web basadas en modelos. • ActionGUI se ha utilizado para el desarrollo de un sistema de voluntariado para un hospital Wednesday, September 28, 11 Sistema de voluntariado en hospital Wednesday, September 28, 11 Sistema de voluntariado en hospital Modelo de datos: 22 clases y 34 asociaciones Wednesday, September 28, 11 Sistema de voluntariado en hospital Modelo de datos: 22 clases y 34 asociaciones Modelo de seguridad: 46 restricciones de acceso (en OCL) Wednesday, September 28, 11 Sistema de voluntariado en hospital Modelo de datos: 22 clases y 34 asociaciones Modelo de seguridad: 46 restricciones de acceso (en OCL) Un voluntario puede leer la información de un compromiso (self) si es suyo y el voluntario está activo self.tieneCompromiso.comoUsuario = caller and self.tieneCompromiso.estado = 1 Wednesday, September 28, 11 Sistema de voluntariado en hospital Modelo de datos: 22 clases y 34 asociaciones Modelo de seguridad: 46 restricciones de acceso (en OCL) Un voluntario puede leer la información de un compromiso (self) si es suyo y el voluntario está activo self.tieneCompromiso.comoUsuario = caller and self.tieneCompromiso.estado = 1 Modelo de GUI: • 92 ventanas, 263 botones, 657 etiquetas, 161 campos de datos, 108 tablas. • 2697 expresiones OCL (condiciones y argumentos de acciones, valores para mostrar). Wednesday, September 28, 11 Sistema de voluntariado en hospital Modelo de datos: 22 clases y 34 asociaciones Modelo de seguridad: 46 restricciones de acceso (en OCL) Un voluntario puede leer la información de un compromiso (self) si es suyo y el voluntario está activo self.tieneCompromiso.comoUsuario = caller and self.tieneCompromiso.estado = 1 Modelo de GUI: • 92 ventanas, 263 botones, 657 etiquetas, 161 campos de datos, 108 tablas. • 2697 expresiones OCL (condiciones y argumentos de acciones, valores para mostrar). Sesiones de cursos que comienzan en una fecha específica [cursos.row].sesiones->select(s|s.fechaInicio.date() = [agendaGrupo.fecha].date()) Wednesday, September 28, 11 Sistema de voluntariado en hospital Modelo de datos: 22 clases y 34 asociaciones Modelo de seguridad: 46 restricciones de acceso (en OCL) Un voluntario puede leer la información de un compromiso (self) si es suyo y el voluntario está activo self.tieneCompromiso.comoUsuario = caller and self.tieneCompromiso.estado = 1 Modelo de GUI: • 92 ventanas, 263 botones, 657 etiquetas, 161 campos de datos, 108 tablas. • 2697 expresiones OCL (condiciones y argumentos de acciones, valores para mostrar). Sesiones de cursos que comienzan en una fecha específica [cursos.row].sesiones->select(s|s.fechaInicio.date() = [agendaGrupo.fecha].date()) • MySQL4OCL generó Wednesday, September 28, 11 Sistema de voluntariado en hospital Modelo de datos: 22 clases y 34 asociaciones Modelo de seguridad: 46 restricciones de acceso (en OCL) Un voluntario puede leer la información de un compromiso (self) si es suyo y el voluntario está activo self.tieneCompromiso.comoUsuario = caller and self.tieneCompromiso.estado = 1 Modelo de GUI: • 92 ventanas, 263 botones, 657 etiquetas, 161 campos de datos, 108 tablas. • 2697 expresiones OCL (condiciones y argumentos de acciones, valores para mostrar). Sesiones de cursos que comienzan en una fecha específica [cursos.row].sesiones->select(s|s.fechaInicio.date() = [agendaGrupo.fecha].date()) • MySQL4OCL generó 4434 procedimientos almacenados (46647 líneas de código MySQL). Wednesday, September 28, 11 Conclusiones Wednesday, September 28, 11 Conclusiones • Presentamos un compilador de OCL a MySQL que permite la evaluación de expresiones OCL en base de datos. superando la limitación actual de los evaluadores OCL sobre escenarios grandes Wednesday, September 28, 11 Conclusiones • Presentamos un compilador de OCL a MySQL que permite la evaluación de expresiones OCL en base de datos. superando la limitación actual de los evaluadores OCL sobre escenarios grandes define de manera recursiva sobre las expresiones • Se superando las limitaciones de las propuestas anteriores basadas en patrones. (OCL2SQL de DresdenOCL) Wednesday, September 28, 11 Conclusiones • Presentamos un compilador de OCL a MySQL que permite la evaluación de expresiones OCL en base de datos. superando la limitación actual de los evaluadores OCL sobre escenarios grandes define de manera recursiva sobre las expresiones • Se superando las limitaciones de las propuestas anteriores basadas en patrones. (OCL2SQL de DresdenOCL) • Las construcciones utilizadas son soportadas por otros gestores de base de datos. Wednesday, September 28, 11 Trabajo futuro Wednesday, September 28, 11 Trabajo futuro • Demostrar formalmente la corrección de nuestro compilador y del algoritmo de optimización. Wednesday, September 28, 11 Trabajo futuro • Demostrar formalmente la corrección de nuestro • compilador y del algoritmo de optimización. Extender el compilador MySQL4OCL para dar soporte a operaciones sobre colección de colecciones, tuplas y funciones definidas por el usuario. Wednesday, September 28, 11 Trabajo futuro • Demostrar formalmente la corrección de nuestro • • compilador y del algoritmo de optimización. Extender el compilador MySQL4OCL para dar soporte a operaciones sobre colección de colecciones, tuplas y funciones definidas por el usuario. Optimizar el código generado con un análisis de precompilación y uno de post-compilación. Wednesday, September 28, 11 Trabajo futuro • Demostrar formalmente la corrección de nuestro • • • compilador y del algoritmo de optimización. Extender el compilador MySQL4OCL para dar soporte a operaciones sobre colección de colecciones, tuplas y funciones definidas por el usuario. Optimizar el código generado con un análisis de precompilación y uno de post-compilación. Integrar el compilador con una política de seguridad de forma que la consulta/procedimiento resultado tenga en cuenta esta política. Wednesday, September 28, 11 Preguntas? Wednesday, September 28, 11 Publicaciones • Marina Egea, Carolina Dania, Manuel Clavel: MySQL4OCL: A Stored Procedure-Based MySQL Code Generator for OCL. Workshop OCL. ECEASST 36: (2010) • Miguel Angel García de Dios, Carolina Dania, Michael Schläpfer, David A. Basin, Manuel Clavel, Marina Egea: SSG: A Model-Based Development Environment for Smart, Security-Aware GUIs. ICSE (2) 2010: 311-312 • David A. Basin, Manuel Clavel, Marina Egea, Miguel Angel García de Dios, Carolina Dania, Gonzalo Ortiz, Javier Valdazo: Model-Driven Development of Security-Aware GUIs for Data-Centric Applications. FOSAD 2011: 101-124 • Disponible en: http://www.bm1software.com/mysql-ocl/ Wednesday, September 28, 11