SlideShare una empresa de Scribd logo
1 de 28
Descargar para leer sin conexión
Famix Next-Generation
Julien Deplanque
julien.deplanque@inria.fr
Introduction
Objectives
Understand Famix Next Generation (NG)
Get familiar with the DSL
Resources
https://github.com/SquareBracketAssociates/Booklet-
FamixNG (in progress)
How it works
Describe your meta-model using the DSL
Generator
Class
Trait
Trait
Class
Class
Class
Differences with previous version
(Old) Famix Famix NG
Implement MM as Pharo classes. Implement MM using the
DSL
Huge usage of inheritance. Huge usage of traits.
Single MM. Multiple MM.
Verifications on the MM once
created.
Verifications on the MM
from its specification
written using the DSL.
Take a step back
Presentation
Slide
Slide
Take a step back
Slide
Slide
Uniform Resource Identifier
(URI)
A simple meta-model for presentations
Uri
+ uri: String
Presentation
Slide
0..*
0..*
0..*
presentation
slides
referencedBy
referencing
FamixNG-ified meta-model for presentations
Uri
+ uri: String
Presentation
Slide
0..*
0..*
1
presentation
slides
UriReference
0..*
1
source
outgoingReferences
target
incomingReferences
The DSL - Entities
Selector Meaning
#newClassNamed:comment: Creates a new class for the MM
#newTraitNamed:comment: Creates a new stateful trait for the MM
Question: How to choose?
Classes must be used for entities that will be instantiated.
Traits can not be instantiated.
Can only inherit from one class.
Can “inherit” from multiple traits.
Example
presentation := builder newClassNamed: #Presentation.
slide := builder newClassNamed: #Slide.
uri := builder newClassNamed: #Uri.
uriReference := builder newClassNamed: #UriReference.
The DSL - Inheritance
Selector Short version Meaning
generalization: --|> Inheritance relation
Remark: Can be written the other way around (<|- -).
Example (1)
Uri
+ uri: String
Presentation
Slide
0..*
0..*
1
presentation
slides
UriReference
0..*
1
source
outgoingReferences
target
incomingReferences
NamedEntity
+ name: String
Association
Entity
presentation --|> namedEntity.
slide --|> namedEntity. uriReference --|> association.
uri --|> entity.
Example (2)
Uri
+ uri: String
Presentation
Slide
0..*
0..*
1
presentation
slides
UriReference
0..*
1
source
outgoingReferences
target
incomingReferences
NamedEntity
+ name: String
Association
Entity
TWithReferences TReference
TReferenceable
0..*
1target
incomingReferences
0..*
1 outgoingReferences
source
slide --|> #TWithReferences.
uriReference --|> #TReference.
uri --|> #TReferenceable
The DSL - Relations
Selector Short version Meaning
oneBelongsTo: -<> Composition with 1 child
manyBelongTo: *-<> Composition with 0..* children
containsOne: <>- Composition with 1 child
containsMany: <>-* Composition with 0..* children
oneToOne: - Association 0..1 to 0..1
oneToMany: -* Association 0..1 to 0..*
manyToOne: *- Association 0..* to 0..1
manyToMany: *-* Association 0..* to 0..*
Remark: As in the old Famix, Famix NG relations ensure
that if one side of the relation is modified, the other side
is updated accordingly.
Example
Uri
+ uri: String
Presentation
Slide
0..*
0..*
1
presentation
slides
UriReference
0..*
1
source
outgoingReferences
target
incomingReferences
(presentation property: #slides)
    <>-* (slide property: #presentation)
The DSL - Properties
Selector Meaning
#property:type: Creates a property for the class/trait.
Example
Uri
+ uri: String
Presentation
Slide
0..*
0..*
1
presentation
slides
UriReference
0..*
1
source
outgoingReferences
target
incomingReferences
uri property: #uri type: #String.
Summary (part 1)
defineClasses
super defineClasses.
presentation := builder newClassNamed: #Presentation.
slide := builder newClassNamed: #Slide.
uri := builder newClassNamed: #Uri.
uriReference := builder newClassNamed: #UriReference.
defineHierarchy
super defineHierarchy.
presentation --|> namedEntity.
slide --|> namedEntity.
slide --|> #TWithReferences.
uriReference --|> association.
uriReference --|> #TReference.
uri --|> entity.
uri --|> #TReferenceable.
Summary (part 2)
defineRelations
super defineRelations.
(presentation property: #slides)
<>-* (slide property: #presentation)
defineProperties
super defineProperties.
uri property: #uri type: #String
Basic infrastructure traits catalog
Famix-Traits package provides a set of traits implementing
generic concepts reusable accross meta-models.
FamixTReference, FamixTReferenceable and
FamixTWithReferences
FamixTAccess, FamixTAccessible and
FamixTWithAccesses
FamixTClass and FamixTWithClasses
. . .
To use one of these traits in your meta-model builder, reference
it via a symbol (without Famix prefix).
"Here you make Uri class use FamixTReferenceable"
uri --|> #TReferenceable.
In practice: Step 1
Create a subclass of one of
FamixMetamodelGenerator
FamixBasicInfrastructureGenerator
FamixFileBasedLanguageGenerator
In practice: Step 2
Implement class-side methods #packageName (name of the package
in which the MM will be generated) and prefix (prefix for your
generated classes)
In practice: Step 3
Override the following instance-side methods depending on what
part of the MM you describe:
#defineClasses for classes definitions
#defineHierarchy for classes inheritance definitions
#defineRelations for classes relations definitions
#defineProperties to define classes properties
#defineTraits for traits definitions
In practice (summary)
1. Create a subclass of one of
FamixMetamodelGenerator
FamixBasicInfrastructureGenerator
FamixFileBasedLanguageGenerator
2. Implement class-side methods #packageName (name of the
package in which the MM will be generated) and prefix
(prefix for your generated classes)
3. Override the following instance-side methods depending on
what part of the MM you describe:
#defineClasses for classes definitions
#defineHierarchy for classes inheritance definitions
#defineRelations for classes relations definitions
#defineProperties to define classes properties
#defineTraits for traits definitions
Tutorial time: Presentation
Load a fresh Moose 7 image from the CI and implement the
previous meta-model.
Metacello new
repository:
'github://juliendelplanque/FamixNG-Slides/src';
baseline: 'FamixNGSlides';
load: 'Tutorial'.
Hint: the meta-model
Uri
+ uri: String
Presentation
Slide
0..*
0..*
1
presentation
slides
UriReference
0..*
1
source
outgoingReferences
target
incomingReferences
Tutorial time: Fortran
https://github.com/juliendelplanque/FamixNGFortran
Metacello new repository:
'github://juliendelplanque/FamixNGFortran/src';
baseline: 'FamixNGFortran'; load: 'Tutorial'.
Tutorial time: Fortran

Más contenido relacionado

La actualidad más candente

Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesOziel Moreira Neto
 
Apache CloudStack Architecture by Alex Huang
Apache CloudStack Architecture by Alex HuangApache CloudStack Architecture by Alex Huang
Apache CloudStack Architecture by Alex Huangbuildacloud
 
Deploy PyTorch models in Production on AWS with TorchServe
Deploy PyTorch models in Production on AWS with TorchServeDeploy PyTorch models in Production on AWS with TorchServe
Deploy PyTorch models in Production on AWS with TorchServeSuman Debnath
 
Análise de Algoritmos - Recursividade
Análise de Algoritmos - RecursividadeAnálise de Algoritmos - Recursividade
Análise de Algoritmos - RecursividadeDelacyr Ferreira
 
Data power Performance Tuning
Data power Performance TuningData power Performance Tuning
Data power Performance TuningKINGSHUK MAJUMDER
 
Operating Systems 1 (6/12) - Processes
Operating Systems 1 (6/12) - ProcessesOperating Systems 1 (6/12) - Processes
Operating Systems 1 (6/12) - ProcessesPeter Tröger
 
Sincronização de um sistema distribuído
Sincronização de um sistema distribuídoSincronização de um sistema distribuído
Sincronização de um sistema distribuídoTiago R. Sampaio
 
CNIT 127 Ch 8: Windows overflows (Part 1)
CNIT 127 Ch 8: Windows overflows (Part 1)CNIT 127 Ch 8: Windows overflows (Part 1)
CNIT 127 Ch 8: Windows overflows (Part 1)Sam Bowne
 
Sistemas Distribuídos - Aula 10 - Exclusão mútua e Acesso à Região Crítica
Sistemas Distribuídos - Aula 10 - Exclusão mútua e Acesso à Região CríticaSistemas Distribuídos - Aula 10 - Exclusão mútua e Acesso à Região Crítica
Sistemas Distribuídos - Aula 10 - Exclusão mútua e Acesso à Região CríticaArthur Emanuel
 
Applying Design Patterns in Practice
Applying Design Patterns in PracticeApplying Design Patterns in Practice
Applying Design Patterns in PracticeGanesh Samarthyam
 
Conceitos Básicos de Objetos Distribuidos
Conceitos Básicos de Objetos DistribuidosConceitos Básicos de Objetos Distribuidos
Conceitos Básicos de Objetos DistribuidosDaniel Arndt Alves
 
Longformer: The Long-Document Transformer
Longformer: The Long-Document Transformer Longformer: The Long-Document Transformer
Longformer: The Long-Document Transformer taeseon ryu
 
Cloud Native PostgreSQL
Cloud Native PostgreSQLCloud Native PostgreSQL
Cloud Native PostgreSQLEDB
 
How Netflix Tunes EC2 Instances for Performance
How Netflix Tunes EC2 Instances for PerformanceHow Netflix Tunes EC2 Instances for Performance
How Netflix Tunes EC2 Instances for PerformanceBrendan Gregg
 

La actualidad más candente (20)

Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 
Apache CloudStack Architecture by Alex Huang
Apache CloudStack Architecture by Alex HuangApache CloudStack Architecture by Alex Huang
Apache CloudStack Architecture by Alex Huang
 
Docker
DockerDocker
Docker
 
Deploy PyTorch models in Production on AWS with TorchServe
Deploy PyTorch models in Production on AWS with TorchServeDeploy PyTorch models in Production on AWS with TorchServe
Deploy PyTorch models in Production on AWS with TorchServe
 
Conceitos iniciais de Active Directory
Conceitos iniciais de Active DirectoryConceitos iniciais de Active Directory
Conceitos iniciais de Active Directory
 
Shell scripting
Shell scriptingShell scripting
Shell scripting
 
Redes - ISO/OSI
Redes - ISO/OSIRedes - ISO/OSI
Redes - ISO/OSI
 
Análise de Algoritmos - Recursividade
Análise de Algoritmos - RecursividadeAnálise de Algoritmos - Recursividade
Análise de Algoritmos - Recursividade
 
TDD com Python
TDD com PythonTDD com Python
TDD com Python
 
Data power Performance Tuning
Data power Performance TuningData power Performance Tuning
Data power Performance Tuning
 
Operating Systems 1 (6/12) - Processes
Operating Systems 1 (6/12) - ProcessesOperating Systems 1 (6/12) - Processes
Operating Systems 1 (6/12) - Processes
 
Sincronização de um sistema distribuído
Sincronização de um sistema distribuídoSincronização de um sistema distribuído
Sincronização de um sistema distribuído
 
PowerShell-1
PowerShell-1PowerShell-1
PowerShell-1
 
CNIT 127 Ch 8: Windows overflows (Part 1)
CNIT 127 Ch 8: Windows overflows (Part 1)CNIT 127 Ch 8: Windows overflows (Part 1)
CNIT 127 Ch 8: Windows overflows (Part 1)
 
Sistemas Distribuídos - Aula 10 - Exclusão mútua e Acesso à Região Crítica
Sistemas Distribuídos - Aula 10 - Exclusão mútua e Acesso à Região CríticaSistemas Distribuídos - Aula 10 - Exclusão mútua e Acesso à Região Crítica
Sistemas Distribuídos - Aula 10 - Exclusão mútua e Acesso à Região Crítica
 
Applying Design Patterns in Practice
Applying Design Patterns in PracticeApplying Design Patterns in Practice
Applying Design Patterns in Practice
 
Conceitos Básicos de Objetos Distribuidos
Conceitos Básicos de Objetos DistribuidosConceitos Básicos de Objetos Distribuidos
Conceitos Básicos de Objetos Distribuidos
 
Longformer: The Long-Document Transformer
Longformer: The Long-Document Transformer Longformer: The Long-Document Transformer
Longformer: The Long-Document Transformer
 
Cloud Native PostgreSQL
Cloud Native PostgreSQLCloud Native PostgreSQL
Cloud Native PostgreSQL
 
How Netflix Tunes EC2 Instances for Performance
How Netflix Tunes EC2 Instances for PerformanceHow Netflix Tunes EC2 Instances for Performance
How Netflix Tunes EC2 Instances for Performance
 

Similar a Famix Next-Generation

Terraform modules restructured
Terraform modules restructuredTerraform modules restructured
Terraform modules restructuredAmi Mahloof
 
Terraform Modules Restructured
Terraform Modules RestructuredTerraform Modules Restructured
Terraform Modules RestructuredDoiT International
 
Being Dangerous with Twig
Being Dangerous with TwigBeing Dangerous with Twig
Being Dangerous with TwigRyan Weaver
 
Construction Techniques For Domain Specific Languages
Construction Techniques For Domain Specific LanguagesConstruction Techniques For Domain Specific Languages
Construction Techniques For Domain Specific LanguagesThoughtWorks
 
Symfony finally swiped right on envvars
Symfony finally swiped right on envvarsSymfony finally swiped right on envvars
Symfony finally swiped right on envvarsSam Marley-Jarrett
 
20100730 phpstudy
20100730 phpstudy20100730 phpstudy
20100730 phpstudyYusuke Ando
 
IBM Publish Subscribe in a Network
IBM Publish Subscribe in a NetworkIBM Publish Subscribe in a Network
IBM Publish Subscribe in a NetworkIBM Systems UKI
 
Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!Massimo Bonanni
 
The Naked Bundle - Symfony Live London 2014
The Naked Bundle - Symfony Live London 2014The Naked Bundle - Symfony Live London 2014
The Naked Bundle - Symfony Live London 2014Matthias Noback
 
Framework Design Guidelines For Brussels Users Group
Framework Design Guidelines For Brussels Users GroupFramework Design Guidelines For Brussels Users Group
Framework Design Guidelines For Brussels Users Groupbrada
 
Breaking down data silos with the open data protocol
Breaking down data silos with the open data protocolBreaking down data silos with the open data protocol
Breaking down data silos with the open data protocolWoodruff Solutions LLC
 
Moldable meta-models for Moose
Moldable meta-models for MooseMoldable meta-models for Moose
Moldable meta-models for MooseESUG
 
Being Dangerous with Twig (Symfony Live Paris)
Being Dangerous with Twig (Symfony Live Paris)Being Dangerous with Twig (Symfony Live Paris)
Being Dangerous with Twig (Symfony Live Paris)Ryan Weaver
 
The Naked Bundle - Symfony Usergroup Belgium
The Naked Bundle - Symfony Usergroup BelgiumThe Naked Bundle - Symfony Usergroup Belgium
The Naked Bundle - Symfony Usergroup BelgiumMatthias Noback
 
Static and Dynamic polymorphism in C++
Static and Dynamic polymorphism in C++Static and Dynamic polymorphism in C++
Static and Dynamic polymorphism in C++Anil Bapat
 
Static and dynamic polymorphism
Static and dynamic polymorphismStatic and dynamic polymorphism
Static and dynamic polymorphismsanjay joshi
 
Static and dynamic polymorphism
Static and dynamic polymorphismStatic and dynamic polymorphism
Static and dynamic polymorphismumesh patil
 
modern module development - Ken Barber 2012 Edinburgh Puppet Camp
modern module development - Ken Barber 2012 Edinburgh Puppet Campmodern module development - Ken Barber 2012 Edinburgh Puppet Camp
modern module development - Ken Barber 2012 Edinburgh Puppet CampPuppet
 

Similar a Famix Next-Generation (20)

Terraform modules restructured
Terraform modules restructuredTerraform modules restructured
Terraform modules restructured
 
Terraform Modules Restructured
Terraform Modules RestructuredTerraform Modules Restructured
Terraform Modules Restructured
 
Scalax
ScalaxScalax
Scalax
 
Being Dangerous with Twig
Being Dangerous with TwigBeing Dangerous with Twig
Being Dangerous with Twig
 
Construction Techniques For Domain Specific Languages
Construction Techniques For Domain Specific LanguagesConstruction Techniques For Domain Specific Languages
Construction Techniques For Domain Specific Languages
 
Symfony finally swiped right on envvars
Symfony finally swiped right on envvarsSymfony finally swiped right on envvars
Symfony finally swiped right on envvars
 
20100730 phpstudy
20100730 phpstudy20100730 phpstudy
20100730 phpstudy
 
IBM Publish Subscribe in a Network
IBM Publish Subscribe in a NetworkIBM Publish Subscribe in a Network
IBM Publish Subscribe in a Network
 
Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!
 
Modularity problems
Modularity  problemsModularity  problems
Modularity problems
 
The Naked Bundle - Symfony Live London 2014
The Naked Bundle - Symfony Live London 2014The Naked Bundle - Symfony Live London 2014
The Naked Bundle - Symfony Live London 2014
 
Framework Design Guidelines For Brussels Users Group
Framework Design Guidelines For Brussels Users GroupFramework Design Guidelines For Brussels Users Group
Framework Design Guidelines For Brussels Users Group
 
Breaking down data silos with the open data protocol
Breaking down data silos with the open data protocolBreaking down data silos with the open data protocol
Breaking down data silos with the open data protocol
 
Moldable meta-models for Moose
Moldable meta-models for MooseMoldable meta-models for Moose
Moldable meta-models for Moose
 
Being Dangerous with Twig (Symfony Live Paris)
Being Dangerous with Twig (Symfony Live Paris)Being Dangerous with Twig (Symfony Live Paris)
Being Dangerous with Twig (Symfony Live Paris)
 
The Naked Bundle - Symfony Usergroup Belgium
The Naked Bundle - Symfony Usergroup BelgiumThe Naked Bundle - Symfony Usergroup Belgium
The Naked Bundle - Symfony Usergroup Belgium
 
Static and Dynamic polymorphism in C++
Static and Dynamic polymorphism in C++Static and Dynamic polymorphism in C++
Static and Dynamic polymorphism in C++
 
Static and dynamic polymorphism
Static and dynamic polymorphismStatic and dynamic polymorphism
Static and dynamic polymorphism
 
Static and dynamic polymorphism
Static and dynamic polymorphismStatic and dynamic polymorphism
Static and dynamic polymorphism
 
modern module development - Ken Barber 2012 Edinburgh Puppet Camp
modern module development - Ken Barber 2012 Edinburgh Puppet Campmodern module development - Ken Barber 2012 Edinburgh Puppet Camp
modern module development - Ken Barber 2012 Edinburgh Puppet Camp
 

Último

Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfExploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfkalichargn70th171
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsSafe Software
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf31events.com
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commercemanigoyal112
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...confluent
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Mater
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...Technogeeks
 

Último (20)

Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfExploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
 
2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
Odoo Development Company in India | Devintelle Consulting Service
Odoo Development Company in India | Devintelle Consulting ServiceOdoo Development Company in India | Devintelle Consulting Service
Odoo Development Company in India | Devintelle Consulting Service
 
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort ServiceHot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commerce
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...
 

Famix Next-Generation

  • 2. Introduction Objectives Understand Famix Next Generation (NG) Get familiar with the DSL Resources https://github.com/SquareBracketAssociates/Booklet- FamixNG (in progress)
  • 3. How it works Describe your meta-model using the DSL Generator Class Trait Trait Class Class Class
  • 4. Differences with previous version (Old) Famix Famix NG Implement MM as Pharo classes. Implement MM using the DSL Huge usage of inheritance. Huge usage of traits. Single MM. Multiple MM. Verifications on the MM once created. Verifications on the MM from its specification written using the DSL.
  • 5. Take a step back Presentation Slide Slide
  • 6. Take a step back Slide Slide Uniform Resource Identifier (URI)
  • 7. A simple meta-model for presentations Uri + uri: String Presentation Slide 0..* 0..* 0..* presentation slides referencedBy referencing
  • 8. FamixNG-ified meta-model for presentations Uri + uri: String Presentation Slide 0..* 0..* 1 presentation slides UriReference 0..* 1 source outgoingReferences target incomingReferences
  • 9. The DSL - Entities Selector Meaning #newClassNamed:comment: Creates a new class for the MM #newTraitNamed:comment: Creates a new stateful trait for the MM Question: How to choose? Classes must be used for entities that will be instantiated. Traits can not be instantiated. Can only inherit from one class. Can “inherit” from multiple traits.
  • 10. Example presentation := builder newClassNamed: #Presentation. slide := builder newClassNamed: #Slide. uri := builder newClassNamed: #Uri. uriReference := builder newClassNamed: #UriReference.
  • 11. The DSL - Inheritance Selector Short version Meaning generalization: --|> Inheritance relation Remark: Can be written the other way around (<|- -).
  • 12. Example (1) Uri + uri: String Presentation Slide 0..* 0..* 1 presentation slides UriReference 0..* 1 source outgoingReferences target incomingReferences NamedEntity + name: String Association Entity presentation --|> namedEntity. slide --|> namedEntity. uriReference --|> association. uri --|> entity.
  • 13. Example (2) Uri + uri: String Presentation Slide 0..* 0..* 1 presentation slides UriReference 0..* 1 source outgoingReferences target incomingReferences NamedEntity + name: String Association Entity TWithReferences TReference TReferenceable 0..* 1target incomingReferences 0..* 1 outgoingReferences source slide --|> #TWithReferences. uriReference --|> #TReference. uri --|> #TReferenceable
  • 14. The DSL - Relations Selector Short version Meaning oneBelongsTo: -<> Composition with 1 child manyBelongTo: *-<> Composition with 0..* children containsOne: <>- Composition with 1 child containsMany: <>-* Composition with 0..* children oneToOne: - Association 0..1 to 0..1 oneToMany: -* Association 0..1 to 0..* manyToOne: *- Association 0..* to 0..1 manyToMany: *-* Association 0..* to 0..* Remark: As in the old Famix, Famix NG relations ensure that if one side of the relation is modified, the other side is updated accordingly.
  • 16. The DSL - Properties Selector Meaning #property:type: Creates a property for the class/trait.
  • 18. Summary (part 1) defineClasses super defineClasses. presentation := builder newClassNamed: #Presentation. slide := builder newClassNamed: #Slide. uri := builder newClassNamed: #Uri. uriReference := builder newClassNamed: #UriReference. defineHierarchy super defineHierarchy. presentation --|> namedEntity. slide --|> namedEntity. slide --|> #TWithReferences. uriReference --|> association. uriReference --|> #TReference. uri --|> entity. uri --|> #TReferenceable.
  • 19. Summary (part 2) defineRelations super defineRelations. (presentation property: #slides) <>-* (slide property: #presentation) defineProperties super defineProperties. uri property: #uri type: #String
  • 20. Basic infrastructure traits catalog Famix-Traits package provides a set of traits implementing generic concepts reusable accross meta-models. FamixTReference, FamixTReferenceable and FamixTWithReferences FamixTAccess, FamixTAccessible and FamixTWithAccesses FamixTClass and FamixTWithClasses . . . To use one of these traits in your meta-model builder, reference it via a symbol (without Famix prefix). "Here you make Uri class use FamixTReferenceable" uri --|> #TReferenceable.
  • 21. In practice: Step 1 Create a subclass of one of FamixMetamodelGenerator FamixBasicInfrastructureGenerator FamixFileBasedLanguageGenerator
  • 22. In practice: Step 2 Implement class-side methods #packageName (name of the package in which the MM will be generated) and prefix (prefix for your generated classes)
  • 23. In practice: Step 3 Override the following instance-side methods depending on what part of the MM you describe: #defineClasses for classes definitions #defineHierarchy for classes inheritance definitions #defineRelations for classes relations definitions #defineProperties to define classes properties #defineTraits for traits definitions
  • 24. In practice (summary) 1. Create a subclass of one of FamixMetamodelGenerator FamixBasicInfrastructureGenerator FamixFileBasedLanguageGenerator 2. Implement class-side methods #packageName (name of the package in which the MM will be generated) and prefix (prefix for your generated classes) 3. Override the following instance-side methods depending on what part of the MM you describe: #defineClasses for classes definitions #defineHierarchy for classes inheritance definitions #defineRelations for classes relations definitions #defineProperties to define classes properties #defineTraits for traits definitions
  • 25. Tutorial time: Presentation Load a fresh Moose 7 image from the CI and implement the previous meta-model. Metacello new repository: 'github://juliendelplanque/FamixNG-Slides/src'; baseline: 'FamixNGSlides'; load: 'Tutorial'.
  • 26. Hint: the meta-model Uri + uri: String Presentation Slide 0..* 0..* 1 presentation slides UriReference 0..* 1 source outgoingReferences target incomingReferences
  • 27. Tutorial time: Fortran https://github.com/juliendelplanque/FamixNGFortran Metacello new repository: 'github://juliendelplanque/FamixNGFortran/src'; baseline: 'FamixNGFortran'; load: 'Tutorial'.