Sesión 4 Generación de código (MOFScript)

Slides:



Advertisements
Presentaciones similares
FUNDAMENTALS OF THE JAVA PROGRAMMING LANGUAGE
Advertisements

Metodología de programación paralela
Visual Basic for Applications 3 de Mayo de Archivo en Excel Son 600 nombres Separar las columnas Separar los nombres en varias columnas ¿Cómo hacerlo?
Windows Presentation Foundation
Flujos de trabajo en SharePoint 2010 Pablo Peris
CONSTRUYENDO UNA PÁGINA WEB CON HTML. Introducción Construir una página web de sólo contenido es relativamente fácil La forma de abordarlo es sistémica.
Frases útiles. Necesitas tu agenda Firmo la agenda.
Single Table Inheritance
2003 HYPACK MAX Training Seminar1 Sample Case la Entrada manual de Datos de la Línea de la costa El Metodo de MANUAL –DIG Objectos –Boya (Roja)
Conceptos Básicos del lenguaje de programación COBOL
VISUAL. 1.Hacer nuevo proyecto 2.Crear un nuevo paquete 3.Hacer una clase visual 1.Dar el nombre 2.Seleccionar el estilo AWT 3.Seleccionar Frame.
Programando con Hilos POSIX* Intel Software College.
Programación con OpenMP* Intel Software College. Copyright © 2006, Intel Corporation. All rights reserved. Intel and the Intel logo are trademarks or.
Pasos a seguir para Utilizar las listas predefinidas por el I.N.E..... Generar sus propias listas.... Exportar la información a diferentes formatos....
Lenguajes de Programación Soluciones a pruebas de nivel
Microsoft Office Power Point, es una herramienta que nos proporciona Microsoft, para editar presentaciones graficas, de tal forma que se nos feliciten.
GUI en Java GUI = Interfaz gráfica de usuario
Instrumentación Industrial
Base de datos y Microsoft Access
Entrada y salida Fundamentos de programación/Programación I
ERASMO AGUILAR SIG FARQ UNI
Programando GUI y Eventos
Algoritmo y Estructura de Datos I I Facultad de Ingeniería y Arquitectura Ing. Juan José Montero Román. Sesión 13 - Programación.
Visual basic Curso de Habilitación Laboral IV. ¿Qué es Visual Basic Visual Basic es uno de los tantos lenguajes de programación que podemos encontrar.
Un constructor es un método que inicia un objeto inmediatamente después de su creación. De esta forma nos evitamos el tener que iniciar las variables.
Avances de Microsoft PowerPoint y Office
Keyboard Shortcuts Cut, Copy & Paste Instead of using the mouse, try a keyboard shortcut the next time you need to… (press & hold first key, then press.
Ud.8 Aplicaciones ofimáticas Índice del libro Índice del libro.
TALLER BÁSICO DE VISUAL BASIC Por: Juan Alfredo Garduño Arias.
Autodesk INVENTOR 2010.
RECURSOS ESTÁTICOS. Recursos estáticos Activamos edición para poder añadir recursos Nombre corto Entramos en el curso.
CENTRO DE BACHILLERATO TECNOLOGICO INDUSTRIAL Y DE SERVIVCIOS No 3
CONSTRUCCIÓN Y ARQUITECTURA DEL SOFTWARE
Procedimientos Almacenados y Disparadores
Programación Concurrente en Java
USB3=10xUSB2. 5Gbps
PL/SQL Francisco Moreno Universidad Nacional. Funciones Si un procedimiento tiene solo un parámetro de salida, se puede remplazar por una función y esta.
Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde1 Packages –Unidad de compilación que permite la especificación.
Defina una clase TempMinMaxEst que encapsule la representación de las temperaturas mínimas y máximas registradas en una estación meteorológica y brinde.
SOA conference. Qué es WCF Fundamentos de la Arquitectura WCF Adaptadores BizTalk WCF Novedades en BizTalk Demo.
1 Entrada/Salida en Java Jaime Ramírez, Ángel Lucas González DLSIIS. Facultad de Informática Universidad Politécnica de Madrid.
Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde1 Overloading de subprogramas procedure Put(Item: in integer;
Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde1 Subprogramas –Encabezamiento –Declaraciones –Cuerpo –Encabezamiento.
Seminario de Lenguajes A – Opción Ada
Editing Slides With Polaris Office, you can create new .ppt and .pptx presentations or edit your presentation with ease.
1.Tecnología Java Instaladores necesarios Jdk->Para Desarrollo
Java Parte II Taller de Sistemas de Programas Enero-Marzo 99 Prof. : Sandra Zabala, Marilenis Olivera Ivette C. Martínez, Pedro García, Alejandra Blanco.
 1. Why should a person learn Spanish? Give at least 3 reasons in your explanation.  2. What Spanish experiences have you had? (None is not an option.
Primer Programa en JAVA
10/ How to set up the PSNC educational program Cómo establecer el programa educacional de EPNC By Por Dave Batty PSNC #10.
Lenguajes de Programación Tema 4. Paradigma Orientado a Objetos Java 1.5 Pedro García López
TEMA 1. Diseño de interfaces gráficas
Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph.
Programación “Conducida por eventos” Event-driven programming Agustín J. González ELO330.
Middleware Java 2 Enterprise Edition
RMI JAVA Implementación.
Estructuras de Datos y Algoritmos TDA LISTA. Metáfora del TDA (repaso) Conjunto de operaciones forman una pared forman una interfase entre los programas.
Aplicaciones GUI en Java
If anidados y Switch Prof. Lillian Bras.
Técnicas avanzadas de programación Interfaces
Colecciones.
Input – Scanner y Cajas de diálogo
Archivos y Búsqueda Secuencial
Programación orientada a objetos
gvSIG: Avanzando Juntos
Exception Object Throwable Error Exception Runtime Exception.
How to Log in to RosettaStone and Install the Speech Component
Introducción a Limites Cálculo
This is a sample text. Enter Your text Here Title Goes here This is a sample text. You can replace this text. Enter your text here.
TABLET INFORMATION SUBMIT A Presentation Template.
Transcripción de la presentación:

Sesión 4 Generación de código (MOFScript) Proyecto AutoGSA Sesión 4 Generación de código (MOFScript)

Desarrollo de la sesión Generación de código MOFScript Ejemplo Generar el código DOT para una máquina de estados Pasos Definir el metamodelo origen Definir la transformación MOFScript Ejecutar / Corregir la transformación Presentación del entorno Desarrollo del guión

Generación de código Última fase del proceso DSDM Lenguajes de transformación modelo a código MOFScript, Xpand, JET, Velocity, XSLT,… MOF2Text M2C Modelos Código M2M

Lenguaje de plantillas Permite expresar plantillas El texto de salida con los “huecos” en los que se debe insertar las partes variables En los “huecos” se escribe el código que accede al modelo y calcula las partes variables. Mecanismos básicos Primitivas de acceso a los elementos del modelo origen Iteradores para recorrer los elementos del modelo Invocación de plantillas

Lenguaje de plantillas. Ejemplo JButton NoviceButton = new JButton("Novice"); NoviceButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { frame.setJMenuBar(MenuManager.INSTANCE.getProfileNovice() ); frame.pack(); } }); mainPane.add(NoviceButton); JButton AdvancedButton = new JButton("Advanced"); AdvancedButton.addActionListener(new ActionListener() { frame.setJMenuBar(MenuManager.INSTANCE.getProfileAdvanced() ); mainPane.add(AdvancedButton); frame.setVisible(true);

Lenguaje de plantillas. Ejemplo JButton NoviceButton = new JButton("Novice"); NoviceButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { frame.setJMenuBar(MenuManager.INSTANCE.getProfileNovice() ); frame.pack(); } }); mainPane.add(NoviceButton); JButton AdvancedButton = new JButton("Advanced"); AdvancedButton.addActionListener(new ActionListener() { frame.setJMenuBar(MenuManager.INSTANCE.getProfileAdvanced() ); mainPane.add(AdvancedButton); frame.setVisible(true);

Lenguaje de plantillas. Ejemplo Repetir tantas veces como botones queramos añadir { JButton Button = new JButton(" "); NoviceButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { frame.setJMenuBar(MenuManager.INSTANCE.get () ); frame.pack(); } }); mainPane.add( Button); frame.setVisible(true);

Lenguaje de plantillas. Ejemplo MOFScript Window.buttons->forEach(b : Button) { ' JButton ' b.varName 'Button = new JButton("' b.text '"); NoviceButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { frame.setJMenuBar(MenuManager.INSTANCE.get' b.callMethod '() ); frame.pack(); } }); mainPane.add(' b.varName ' Button); ' frame.setVisible(true);

Generación de código El concepto de lenguaje de plantillas conforma Motor de plantillas Plantilla Modelo Código conforma Metamodelo

Desarrollo de la sesión Generación de código MOFScript Ejemplo Generar el código DOT para una máquina de estados Pasos Definir el metamodelo origen Definir la transformación MOFScript Ejecutar / Corregir la transformación Presentación del entorno Desarrollo del guión

MOFScript Lenguaje M2C basado en reglas Transformaciones organizadas en módulos Un módulo está compuesto por reglas Un módulo puede extender a otro módulo (herencia / importación) texttransformation myDef (in metamodel:"http://modelum.es/mm") { metamodel.Metaclass::main() { 'The name of this metaclass is ' self.name ' here you can add your code' } module::myRule1(name : String) { tab(1) 'This is a rule with a parameter, its value is ' name newline(1) myRule2() : String { tab(1) 'This rule returns a value' newline(1) result = 'name'

MOFScript Formas de generar código Uso del carácter de escape (text-explicit) Útil cuando se va a generar gran cantidad de código sin cambios Uso de sentencias de generación de código (code-explicit) Útil cuando el código a generar es pequeño o muy parametrizado module::myRule1(name : String) { ' This is a rule with a parameter, its value is ' name ' ' } module::myRule1(name : String) { tab(1) print("This is a rule with a parameter, its value is" + name) newline(1) } module::myRule1(name : String) { tab(1) 'This is a rule with a parameter, its value is' name newline(1) }

MOFScript Contexto, argumentos y devolución de valores en las reglas Reglas entry-point (main) texttransformation myDef (in metamodel:"http://modelum.es/mm") { metamodel.Metaclass::main() { 'The name of this metaclass is ' self.name ' here you can add your code' } module::myRule1(name : String) { tab(1) 'This is a rule with a parameter, its value is ' name newline(1) myRule2() : String { tab(1) 'This rule returns a value' newline(1) result = 'name'

MOFScript Polimorfismo y ligadura dinámica Reglas con el mismo identificador para diferentes contextos Resolución de reglas en tiempo de ejecución metamodel.MetaclassA::rule() { 'Code for MetaclassA' } metamodel.MetaclassB::rule() { 'Code for MetaclassB' metamodel.MetaclassC::rule() { 'Code for MetaclassC' SuperMetaclass MetaclassA MetaclassC MetaclassB metamodel.Metaclass::main() { self.content->forEach(s) { s.rule(); } content Metaclass SuperMetaclass

MOFScript Acceso al modelo desde las reglas Machine::rule1() { var name : String = self.name var transitions : List = self.transitions } Transition::rule2() { var target : State = self.target var transitions : List = target.outgoing 29/03/2017

MOFScript Iteradores para recorrer los elementos del modelo Sentencia forEach Sentencia select var complexStates : List self.states->forEach(st : State | st.outgoing.size > 2) { complexStates.add(st) } var complexStates : List = self.states->select(st : State | st.outgoing.size > 2) complextates->forEach(st) { . . . } 29/03/2017

MOFScript Sentencias útiles Para colecciones de elementos size() : Devuelve el número de elementos de la colección add(e : Object) : Añade un elemento de la colección remove(e : Object) : elimina un elemento de la colección Para cadenas de texto replace(replaceWhat : String, withWhat : String) equals(str: String) toLower() toUpper() Gestión de ficheros file(str : String) Impresión print(str : String) println(str : String) stdout: Descriptor de la salida estándar (stdout.println()) 29/03/2017

Desarrollo de la sesión Generación de código MOFScript Ejemplo Generar el código DOT para una máquina de estados Pasos Definir el metamodelo origen Definir la transformación MOFScript Ejecutar / Corregir la transformación Presentación del entorno Desarrollo del guión

Definir el metamodelo origen Metamodelo de máquinas de estados

Lenguaje DOT Es un lenguaje para la definición de grafos Permite generar la representación gráfica de un grafo Formato JPG, PS, PDF, etc. Una definición DOT está compuesta por: Tipo de grafo Definición de arcos entre dos nodos Tipo de nodo o de arco (opcional) digraph ej1 { a -> b; a -> c; c -> d; b -> d; }

Lenguaje DOT Personalizando DOT para representar máquinas de estados digraph Modernization { Start -> ExtractingModels; ExtractingModels -> MDD [label="C2M"]; MDD -> MDD [label="M2M"]; MDD -> SystemGeneration [label="M2C"]; SystemGeneration -> End; Start [shape=point,width=0.2,label=""]; ExtractingModels [label="Extracting Models",shape=ellipse]; MDD [shape=ellipse]; SystemGeneration [label="System Generation",shape=ellipse]; End [shape=doublecircle,label="",width=0.2, fillcolor=black,style=filled]; }

Correspondencias metamodelo – DOT Machine Esqueleto de la definición DOT digraph Nombre { // contenido…} Transition Definición de arco DOT N1 -> N2 [label=“etiqueta”] InitialState Definición de nodo DOT personalizado Start[shape=point,width=0.2,label=""]; NormalState Normal_State[label="Normal State",shape=ellipse]; EndState End[shape=doublecircle,label="",width=0.2, fillcolor=black,style=filled];

Definir la transformación MOFScript Un grafo para cada máquina de estados El esqueleto de la definición DOT se creará para cada metaclase Machine. Una regla para generar el código de las transiciones Indicará el estado origen y el estado destino Una regla para generar el código de los estados Personalizará la representación de cada estado Especificar reglas para los tres tipos de estados texttransformation StateMachine2DotTransformation (in stateMM:"http://www.modelum.es/dsdm/stateMachine") { // Reglas… }

Definir la transformación MOFScript Creación de una regla main. Uso del carácter de escape Uso de iteradores para recorrer estados y transiciones Ejemplo de código DOT a generar: digraph Nombre { // contenido… } Regla MOFScript: stateMM.Machine::main() { file(outputFile) 'digraph ' self.name ' { // Transitions // There are ' self.transitions.size() ' transitions ' self.transitions->forEach(t) { t.mapTransition() } ' // States // There are ' self.states.size() ' states ' self.states->forEach(st) { st.mapState(); } ' }' }

Definir la transformación MOFScript Reglas para la creación del código de las transiciones Ejemplo de código DOT a generar : N1 -> N2 [label=“etiqueta”] Regla MOFScript: Reglas para la creación del código de los nodos Estado inicial Start[shape=point,width=0.2,label=""]; stateMM.Transition::mapTransition() { tab(1) self.source.getName() ' -> ' self.target.getName() ' [label="' self.name '"];' newline(1) } stateMM.InitialState::mapState() { tab(1) self.getName() '[shape=point,width=0.2,label=""];' newline(1) }

Definir la transformación MOFScript Estado Final Ejemplo de código DOT a generar: End[shape=doublecircle,label="",width=0.2,fillcolor=black, style=filled]; Regla MOFScript: Estado normal Normal_State[label="Normal State",shape=ellipse]; stateMM.FinalState::mapState() { tab(1) self.getName() '[shape=doublecircle,label="",' 'width=0.2,fillcolor=black,style=filled];' newline(1) } stateMM.NormalState::mapState() { tab(1) self.getName() '[label="' self.name '",shape=ellipse];' newline(1) }

Definir la transformación MOFScript Reglas auxiliares para los nombres de los estados stateMM.InitialState::getName() : String { result = 'Start' } stateMM.FinalState::getName() : String { result = 'End' stateMM.NormalState::getName() : String { result = self.name.replace(" ", "_")

Ejecución de la transformación digraph Modernization { // Transitions // There are 5 transitions in the state machine Start -> Extracting_Models [label=""]; Extracting_Models -> MDD [label="C2M"]; MDD -> MDD [label="M2M"]; MDD -> System_Generation [label="M2C"]; System_Generation -> End [label=""]; // States // There are 5 states in the state machine Start[shape=point,width=0.2,label=""]; Extracting_Models[label="Extracting Models",shape=ellipse]; MDD[label="MDD",shape=ellipse]; System_Generation[label="System Generation",shape=ellipse]; End[shape=doublecircle,pheripheries=2,label="",width=0.2, fillcolor=black,style=filled]; } Código DOT Motor MOFScript Definición MOFScript

Desarrollo de la sesión Generación de código MOFScript Ejemplo Generar el código DOT para una máquina de estados Pasos Definir el metamodelo origen Definir la transformación MOFScript Ejecutar / Corregir la transformación Presentación del entorno Desarrollo del guión

Presentación del entorno El plugin para eclipse se puede descargar de http://www.eclipse.org/gmt/mofscript/download/

Presentación del entorno Hoja de preferencias

Presentación del entorno Preferencias individuales de cada fichero MOFScript

Desarrollo de la sesión Generación de código MOFScript Ejemplo Generar el código DOT para una máquina de estados Pasos Definir el metamodelo origen Definir la transformación MOFScript Ejecutar / Corregir la transformación Presentación del entorno Desarrollo del guión

Sesión guiada Metamodelo de arquitectura

Sesión guiada Arquitectura Java Swing // Creacion de menus JMenu fileMenu = new JMenu("File"); fileMenu.add(new JMenuItem("New")); fileMenu.add(new JMenuItem("Close")); // Creacion de barra de menu JMenuBar menuBar = new JMenuBar(); menuBar.add(fileMenu); // Creacion de ventana e inclusion de barra de menu JFrame app = new JFrame("App"); app.setJMenuBar(menuBar);

Sesión guiada Generación del código para una aplicación Java Swing Incorporación de una barra de menú dependiente del perfil Generación de dos clases Java Application: Mostrará la ventana y botones para cambiar de perfil MenuManager: Creará los menús asociados a cada perfil

Sesión guiada Clase Application JButton ProfileAButton = new JButton("ProfileA"); NoviceButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { frame.setJMenuBar(MenuManager.INSTANCE.getProfileProfileA() ); frame.pack(); } }); mainPane.add(ProfileAButton); public class Application { public static void main(String[] args) throws IOException { javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { Application theInstance = new Application(); ((Application) theInstance).createAndShowGUI(); } }); public void createAndShowGUI() { // Create and set up the window. final JFrame frame = new JFrame("Application"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel mainPane = new JPanel(); BoxLayout layout = new BoxLayout(mainPane, BoxLayout.Y_AXIS); mainPane.setLayout(layout); frame.setContentPane(mainPane); mainPane.add(AdvancedButton); // Show the window. frame.pack(); frame.setVisible(true);

Sesión guiada Clase MenuManager // Seccion 1. Definición de paquete // Seccion 2. Imports class MenuManager { // Sección 3a. Variables de instancia (elementos del menú) public final static MenuManager INSTANCE = new MenuManager(); // Sección 3b. Constructor private MenuManager() { createSingleMenus(); attachListeners(); } public void createSingleMenus() { // Sección 3c. Construcción de las variables de instancia public void attachListeners() { // Sección 3d. Establecimiento de las acciones de menu // Sección 3e. Constructores de la barra de menú de cada perfil

Sesión no guiada Generar los ficheros de recursos para la internacionalización Modificar la definición MOFScript para internacionalizarla Uso del proyecto menuprofile.lib Utilizar la clase singleton llamada Internacionalization Método getMessage(String key) file=File new=New close=Close file=Archivo new=Nuevo close=Cerrar menu_es_ES.properties menu_en_US.properties