SlideShare a Scribd company logo
1 of 28
Download to read offline
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

More Related Content

What's hot

Mise en place des réseaux LAN interconnectés par un réseau WAN
Mise en place des réseaux LAN interconnectés par un réseau WANMise en place des réseaux LAN interconnectés par un réseau WAN
Mise en place des réseaux LAN interconnectés par un réseau WANGhassen Chaieb
 
Unix Shell Scripting
Unix Shell ScriptingUnix Shell Scripting
Unix Shell ScriptingMustafa Qasim
 
How to configure inband management for huawei ma5616
How to configure inband management for huawei ma5616How to configure inband management for huawei ma5616
How to configure inband management for huawei ma5616Huanetwork
 
Yaygın Linux Komutları ve Windows Karşılıkları
Yaygın Linux Komutları ve Windows KarşılıklarıYaygın Linux Komutları ve Windows Karşılıkları
Yaygın Linux Komutları ve Windows KarşılıklarıMert Hakki Bingol
 
Unix shell scripting basics
Unix shell scripting basicsUnix shell scripting basics
Unix shell scripting basicsManav Prasad
 
Kernel Recipes 2017 - EBPF and XDP - Eric Leblond
Kernel Recipes 2017 - EBPF and XDP - Eric LeblondKernel Recipes 2017 - EBPF and XDP - Eric Leblond
Kernel Recipes 2017 - EBPF and XDP - Eric LeblondAnne Nicolas
 
IP Virtual Server(IPVS) 101
IP Virtual Server(IPVS) 101IP Virtual Server(IPVS) 101
IP Virtual Server(IPVS) 101HungWei Chiu
 
The linux networking architecture
The linux networking architectureThe linux networking architecture
The linux networking architecturehugo lu
 
Understand the iptables step by step
Understand the iptables step by stepUnderstand the iptables step by step
Understand the iptables step by stepHungWei Chiu
 
TCP/IP Ağlarda İleri Seviye Paket Analizi – Tshark
TCP/IP Ağlarda İleri Seviye Paket Analizi – TsharkTCP/IP Ağlarda İleri Seviye Paket Analizi – Tshark
TCP/IP Ağlarda İleri Seviye Paket Analizi – TsharkBGA Cyber Security
 
Cisco et-le-simulateur-packet-tracer
Cisco et-le-simulateur-packet-tracerCisco et-le-simulateur-packet-tracer
Cisco et-le-simulateur-packet-tracerMed Ali Bhs
 
Intro to Linux Shell Scripting
Intro to Linux Shell ScriptingIntro to Linux Shell Scripting
Intro to Linux Shell Scriptingvceder
 
Bash Shell Scripting
Bash Shell ScriptingBash Shell Scripting
Bash Shell ScriptingRaghu nath
 
[Defcon] Hardware backdooring is practical
[Defcon] Hardware backdooring is practical[Defcon] Hardware backdooring is practical
[Defcon] Hardware backdooring is practicalMoabi.com
 
Container Performance Analysis
Container Performance AnalysisContainer Performance Analysis
Container Performance AnalysisBrendan Gregg
 

What's hot (20)

Mise en place des réseaux LAN interconnectés par un réseau WAN
Mise en place des réseaux LAN interconnectés par un réseau WANMise en place des réseaux LAN interconnectés par un réseau WAN
Mise en place des réseaux LAN interconnectés par un réseau WAN
 
Unix Shell Scripting
Unix Shell ScriptingUnix Shell Scripting
Unix Shell Scripting
 
Shell Scripting
Shell ScriptingShell Scripting
Shell Scripting
 
How to configure inband management for huawei ma5616
How to configure inband management for huawei ma5616How to configure inband management for huawei ma5616
How to configure inband management for huawei ma5616
 
Yaygın Linux Komutları ve Windows Karşılıkları
Yaygın Linux Komutları ve Windows KarşılıklarıYaygın Linux Komutları ve Windows Karşılıkları
Yaygın Linux Komutları ve Windows Karşılıkları
 
Unix shell scripting basics
Unix shell scripting basicsUnix shell scripting basics
Unix shell scripting basics
 
Kernel Recipes 2017 - EBPF and XDP - Eric Leblond
Kernel Recipes 2017 - EBPF and XDP - Eric LeblondKernel Recipes 2017 - EBPF and XDP - Eric Leblond
Kernel Recipes 2017 - EBPF and XDP - Eric Leblond
 
Fabric Connect 設定例
Fabric Connect 設定例Fabric Connect 設定例
Fabric Connect 設定例
 
IP Virtual Server(IPVS) 101
IP Virtual Server(IPVS) 101IP Virtual Server(IPVS) 101
IP Virtual Server(IPVS) 101
 
The linux networking architecture
The linux networking architectureThe linux networking architecture
The linux networking architecture
 
Grep
GrepGrep
Grep
 
Understand the iptables step by step
Understand the iptables step by stepUnderstand the iptables step by step
Understand the iptables step by step
 
TCP/IP Ağlarda İleri Seviye Paket Analizi – Tshark
TCP/IP Ağlarda İleri Seviye Paket Analizi – TsharkTCP/IP Ağlarda İleri Seviye Paket Analizi – Tshark
TCP/IP Ağlarda İleri Seviye Paket Analizi – Tshark
 
Linux 101
Linux 101Linux 101
Linux 101
 
graylog.pptx
graylog.pptxgraylog.pptx
graylog.pptx
 
Cisco et-le-simulateur-packet-tracer
Cisco et-le-simulateur-packet-tracerCisco et-le-simulateur-packet-tracer
Cisco et-le-simulateur-packet-tracer
 
Intro to Linux Shell Scripting
Intro to Linux Shell ScriptingIntro to Linux Shell Scripting
Intro to Linux Shell Scripting
 
Bash Shell Scripting
Bash Shell ScriptingBash Shell Scripting
Bash Shell Scripting
 
[Defcon] Hardware backdooring is practical
[Defcon] Hardware backdooring is practical[Defcon] Hardware backdooring is practical
[Defcon] Hardware backdooring is practical
 
Container Performance Analysis
Container Performance AnalysisContainer Performance Analysis
Container Performance Analysis
 

Similar to 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 to 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
 

Recently uploaded

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
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identityteam-WIBU
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZABSYZ Inc
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)jennyeacort
 
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
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceBrainSell Technologies
 
1C_PNS.pdf Philippines National standard
1C_PNS.pdf Philippines National standard1C_PNS.pdf Philippines National standard
1C_PNS.pdf Philippines National standardraffietividad53
 
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
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecturerahul_net
 
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
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxRTS corp
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Rob Geurden
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odishasmiwainfosol
 
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...Akihiro Suda
 
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
 
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
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作qr0udbr0
 
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
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsChristian Birchler
 

Recently uploaded (20)

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
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZ
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
 
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
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. Salesforce
 
1C_PNS.pdf Philippines National standard
1C_PNS.pdf Philippines National standard1C_PNS.pdf Philippines National standard
1C_PNS.pdf Philippines National standard
 
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...
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecture
 
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
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
 
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
 
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
 
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
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作
 
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
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
 

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'.