SlideShare una empresa de Scribd logo
1 de 74
On the Use of an Internal DSL
 for Enriching EMF Models
      Filip Křikava                         Philippe Collet

                  Université Nice Sophia Antipolis
                      I3S - CNRS UMR 7271
                               France




 2012 Workshop on OCL and Textual Modeling (OCL 2012), MODELS’12
            September, 30th, 2012 - Innsbruck/AUSTRIA
The Journey




              2
The Journey
           - applying MDE into Self-Adaptive Software
             Systems

Meta-modeling with EMF




                                                        2
The Journey
           - applying MDE into Self-Adaptive Software
             Systems

Meta-modeling with EMF

           - limited expressiveness of structural constraints

Enriching EMF with OCL




                                                          2
The Journey
                                 - applying MDE into Self-Adaptive Software
                                   Systems

                      Meta-modeling with EMF

                                 - limited expressiveness of structural constraints

    constraints       Enriching EMF with OCL

operation contracts

implementation of
 operation bodies

implementation of
 derived features




                                                                                2
The Journey
                                   - applying MDE into Self-Adaptive Software
                                    Systems

                      Meta-modeling with EMF

                                  - limited expressiveness of structural constraints

    constraints       Enriching EMF with OCL

operation contracts               - encountered number of shortcomings
                                  - since our work is based on Scala
implementation of
 operation bodies
                      Enriching EMF with Scala
implementation of
 derived features




                                                                                 2
The Journey
                                   - applying MDE into Self-Adaptive Software
                                      Systems

                      Meta-modeling with EMF

                                  - limited expressiveness of structural constraints

    constraints       Enriching EMF with OCL

operation contracts               - encountered number of shortcomings
                                  - since our work is based on Scala
implementation of
 operation bodies
                      Enriching EMF with Scala
implementation of                 -   internal DSL in Scala to enrich EMF
 derived features                 -   similar OCL features
                                  -   full advantage of the host language
                                  -   state-of-the-art tool support



                              +
                                                                                 2
Outline




• Some Shortcomings of OCL
• Internal DSL Approach
• Implementation
• Conclusion



                             3
Some Shortcomings of OCL




• Based solely on our experience
 • different usage of OCL - different pros/cons
 • concerned by practicality rather than formality
 • not a complete study nor first one (well known issues)




                                                           4
Some Shortcomings of OCL
                      Expressions

                                Constraints Capturing
   OCL Expressions                                                                  Tool Support
                                    Constructs
                                • Poor support for user
                                  feedback
• Complex expressions are       • No support for warning /                     • Scalability and stability
  hard to write and               critiques                                      problems with larger
  maintain                                                                       models
                                • No support for
• Limited extensibility and       dependent constraints                        • Limited developer
  reuse                                                                          feedback
                                • Limited flexibility in
• Side-effect free                context definition                            • Insufficient debugging
  expressions                                                                    capability
                                • No support for repairing
• Inconsistency/Confusing         inconsistencies
  issues                        • No support for invariant
                                  reuse across different
                                  models

                              D. Kolovos, et al. On the Evolution of OCL for
                              Capturing Structural Constraints, In Rigorous
                              Methods for Software Construction and
                              Analysis, 2009.                                                                5
Internal DSL Approach - Overview


• The shortcomings are related to scalability
  • OCL language
  • performance, stability and features of OCL tools


  • when used in the large (many invariants, complex
    expressions)
  • similar problems are in other external DSLs (EOL/EVL)

                                                        6
Internal DSL Approach - Overview


• External DSL like OCL raises the level of abstraction:




                                                           7
Internal DSL Approach - Overview


• External DSL like OCL raises the level of abstraction:
 parent.types
  ->select(name <> '')
  ->forAll(e | e <> self implies e.name <> self.name)




                                                           7
Internal DSL Approach - Overview


• External DSL like OCL raises the level of abstraction:
 parent.types
  ->select(name <> '')
  ->forAll(e | e <> self implies e.name <> self.name)


• The same could be expressed in plain Java, but ... no




                                                           7
Internal DSL Approach - Overview


• External DSL like OCL raises the level of abstraction:
 parent.types
  ->select(name <> '')
  ->forAll(e | e <> self implies e.name <> self.name)


• The same could be expressed in plain Java, but ... no
• Having a language that has a more powerful and
  flexible constructs and state-of-the-art tool support




                                                           7
Internal DSL Approach - Overview


• External DSL like OCL raises the level of abstraction:
 parent.types
  ->select(name <> '')
  ->forAll(e | e <> self implies e.name <> self.name)


• The same could be expressed in plain Java, but ... no
• Having a language that has a more powerful and
  flexible constructs and state-of-the-art tool support
 self.parent.types
  .filter(name != '')
  .forall(e => e != self implies e.name != self.name)

                                                           7
Internal DSL Approach - Why Scala?




• Modern general purpose language
• Runs on top of JVM
• Well designed for building internal DSLs
• Statically typed using type inference
• Well supported by major tool vendor
                                             8
Internal DSL Approach - Basics
• Enriching constructs represented as Scala object
  methods




                                                     9
Internal DSL Approach - Basics
• Enriching constructs represented as Scala object
  methods                                       Customer
                      - printedName : String [1..1]

                      - getTransactions(until: Date, from: Date) : Transactions [0..*]




                                                                                         9
Internal DSL Approach - Basics
• Enriching constructs represented as Scala object
  methods                                              Customer
                             - printedName : String [1..1]

• Derived property:          - getTransactions(until: Date, from: Date) : Transactions [0..*]



 def getPrintedName (self: Customer): String =
  self.owner.title + " " + self.owner.name




                                                                                                9
Internal DSL Approach - Basics
• Enriching constructs represented as Scala object
  methods                                              Customer
                             - printedName : String [1..1]

• Derived property:          - getTransactions(until: Date, from: Date) : Transactions [0..*]



 def getPrintedName (self: Customer): String =
  self.owner.title + " " + self.owner.name




                                                                                                9
Internal DSL Approach - Basics
• Enriching constructs represented as Scala object
  methods                                              Customer
                             - printedName : String [1..1]

• Derived property:          - getTransactions(until: Date, from: Date) : Transactions [0..*]



 def getPrintedName (self: Customer): String =
  self.owner.title + " " + self.owner.name




                                                                                                9
Internal DSL Approach - Basics
• Enriching constructs represented as Scala object
  methods                                              Customer
                             - printedName : String [1..1]

• Derived property:          - getTransactions(until: Date, from: Date) : Transactions [0..*]



 def getPrintedName (self: Customer): String =
  self.owner.title + " " + self.owner.name




                                                                                                9
Internal DSL Approach - Basics
• Enriching constructs represented as Scala object
   methods                                              Customer
                              - printedName : String [1..1]

• Derived property:           - getTransactions(until: Date, from: Date) : Transactions [0..*]



 def getPrintedName (self: Customer): String =
  self.owner.title + " " + self.owner.name

• Operation body:
 def invokeGetTransactions(self: Customer,
  until: Date, from: Date): Set[Transaction] =
   self.transactions filter ( t =>
    t.date.isAfter(from) && t.date.isBefore(until) )

                                                                                             10
Internal DSL Approach - Basics
• Enriching constructs represented as Scala object
   methods                                              Customer
                              - printedName : String [1..1]

• Derived property:           - getTransactions(until: Date, from: Date) : Transactions [0..*]



 def getPrintedName (self: Customer): String =
  self.owner.title + " " + self.owner.name

• Operation body:
 def invokeGetTransactions(self: Customer,
  until: Date, from: Date): Set[Transaction] =
   self.transactions filter ( t =>
    t.date.isAfter(from) && t.date.isBefore(until) )

                                                                                             10
Internal DSL Approach - Basics
• Enriching constructs represented as Scala object
   methods                                              Customer
                              - printedName : String [1..1]

• Derived property:           - getTransactions(until: Date, from: Date) : Transactions [0..*]



 def getPrintedName (self: Customer): String =
  self.owner.title + " " + self.owner.name

• Operation body:
 def invokeGetTransactions(self: Customer,
  until: Date, from: Date): Set[Transaction] =
   self.transactions filter ( t =>
    t.date.isAfter(from) && t.date.isBefore(until) )

                                                                                             10
Internal DSL Approach - Basics
• Enriching constructs represented as Scala object
   methods                                              Customer
                              - printedName : String [1..1]

• Derived property:           - getTransactions(until: Date, from: Date) : Transactions [0..*]



 def getPrintedName (self: Customer): String =
  self.owner.title + " " + self.owner.name

• Operation body:
 def invokeGetTransactions(self: Customer,
  until: Date, from: Date): Set[Transaction] =
   self.transactions filter ( t =>
    t.date.isAfter(from) && t.date.isBefore(until) )

                                                                                             10
Internal DSL Approach - Basics
• Enriching constructs represented as Scala object
   methods                                              Customer
                              - printedName : String [1..1]

• Derived property:           - getTransactions(until: Date, from: Date) : Transactions [0..*]



 def getPrintedName (self: Customer): String =
  self.owner.title + " " + self.owner.name

• Operation body:
 def invokeGetTransactions(self: Customer,
  until: Date, from: Date): Set[Transaction] =
   self.transactions filter ( t =>
    t.date.isAfter(from) && t.date.isBefore(until) )

                                                                                             10
Internal DSL Approach - Basics

• Constraints




                                        11
Internal DSL Approach - Basics

• Constraints
def validateOfAge(self: Customer): Boolean = self.age >= 18




                                                              11
Internal DSL Approach - Basics

• Constraints
def validateOfAge(self: Customer): Boolean = self.age >= 18




                                                              11
Internal DSL Approach - Basics

• Constraints
def validateOfAge(self: Customer): Boolean = self.age >= 18




                                                              11
Internal DSL Approach - Basics

• Constraints
def validateOfAge(self: Customer): Boolean = self.age >= 18




                                                              11
Internal DSL Approach - Basics

 • Constraints
def validateOfAge(self: Customer): Boolean = self.age >= 18


def validateOfAge(self: Customer): Option[String] =
 if (self.age >= 18) {
  None
 else {
     Some("The person %s is under age" format self.name)
 }




                                                              11
Internal DSL Approach - Basics

 • Constraints
def validateOfAge(self: Customer): Boolean = self.age >= 18


def validateOfAge(self: Customer): Option[String] =
 if (self.age >= 18) {
  None
 else {
     Some("The person %s is under age" format self.name)
 }




                                                              11
Internal DSL Approach - Basics
• Constraints
 • a constraint that check whether a UML class contains
    getInstance   method




                                                      12
Internal DSL Approach - Basics
• Constraints
  • a constraint that check whether a UML class contains
     getInstance   method

 def validateDefinesGetInstance(self: UMLClazz) = {




       }
                                                       13
Internal DSL Approach - Basics
• Constraints
  • a constraint that check whether a UML class contains
     getInstance   method

 def validateDefinesGetInstance(self: UMLClazz) = {
  self.features.find(_.name == "getInstance") match {




      }}
                                                       14
Internal DSL Approach - Basics
• Constraints
  • a constraint that check whether a UML class contains
     getInstance   method

 def validateDefinesGetInstance(self: UMLClazz) = {
  self.features.find(_.name == "getInstance") match {
   case Some(_) => Success




      }}
                                                       15
Internal DSL Approach - Basics
• Constraints
  • a constraint that check whether a UML class contains
     getInstance   method

 def validateDefinesGetInstance(self: UMLClazz) = {
  self.features.find(_.name == "getInstance") match {
   case Some(_) => Success
   case None => Error("Missing getInstance"




    )}}
                                                       16
Internal DSL Approach - Basics
• Constraints
  • a constraint that check whether a UML class contains
     getInstance   method

 def validateDefinesGetInstance(self: UMLClazz) = {
  self.features.find(_.name == "getInstance") match {
   case Some(_) => Success
   case None => Error("Missing getInstance",
    QuickFix("Add a getInstance operation", {




      }
    ))}}
                                                       17
Internal DSL Approach - Basics
• Constraints
  • a constraint that check whether a UML class contains
     getInstance       method

 def validateDefinesGetInstance(self: UMLClazz) = {
  self.features.find(_.name == "getInstance") match {
   case Some(_) => Success
   case None => Error("Missing getInstance",
    QuickFix("Add a getInstance operation", {
      clazz: UMLClazz =>
          clazz.features += create[UMLFeature] { op =>
              op.setName("getInstance")
              // ...
          }
      }
    ))}}
                                                         18
Internal DSL Approach - Basics



• Constraints dependency
def validateDefinesGetInstance(self: UMLClazz)


@satisfies(“DefinesGetInstance”)
def validateDefinesGetIsStatic(self: UMLClazz)

• Using proxy to ensure each invariant is called at most
  once for a specific instance
• Referencing by strings is not very practical
  • Looking into Scala 2.10 macros
                                                           19
Internal DSL Approach - Basics



• Constraints dependency
def validateDefinesGetInstance(self: UMLClazz)


@satisfies(“DefinesGetInstance”)
def validateDefinesGetIsStatic(self: UMLClazz)

• Using proxy to ensure each invariant is called at most
  once for a specific instance
• Referencing by strings is not very practical
  • Looking into Scala 2.10 macros
                                                           19
Internal DSL Approach - Extensibility

• Scala is extensible language
• For example, there is no implies operation in Scala

 self.parent.types
  .forall(e => e != self implies e.name != self.name)




                                                        20
Internal DSL Approach - Extensibility

• Scala is extensible language
• For example, there is no implies operation in Scala

 self.parent.types
  .forall(e => e != self implies e.name != self.name)


• Possibility to extend existing types
 class ExtBoolean(a: Boolean) {
     def implies(b: => Boolean) = !a || b
 }
 implicit def extBoolean(a: Boolean) = new ExtBoolean(a)


                                                           20
Internal DSL Approach - Extensibility

• Scala is extensible language
• For example, there is no implies operation in Scala

 self.parent.types
  .forall(e => e != self implies e.name != self.name)


• Possibility to extend existing types
 class ExtBoolean(a: Boolean) {
     def implies(b: => Boolean) = !a || b
 }
 implicit def extBoolean(a: Boolean) = new ExtBoolean(a)


• This way we can add missing OCL operations (closure)     20
Internal DSL Approach - Reusability


• Breaking expression into smaller pieces
• Organizing them as functions in objects and libraries
• Shared across project




                                                          21
Internal DSL Approach - Reusability


• Breaking expression into smaller pieces
• Organizing them as functions in objects and libraries
• Shared across project
• Push further using structural typing - reused across
  models

def validateNonEmptyName(self: { def name: String } ) =
  !self.name.isEmpty




                                                          21
Internal DSL Approach - Undefined
                  and Invalid Values


                             interface Person {
        Person
                                 public String getFirstName();
- firstName : String [0..1]
- lastName : String [1..1]
                                 public String getLastName();
                             }


• Using the NonEmptyName constraint might lead to NPE

    !self.firstName.isEmpty




                                                                 22
Internal DSL Approach - Undefined
                  and Invalid Values


                                  interface Person {
        Person
                                      public String getFirstName();
- firstName : String [0..1]
- lastName : String [1..1]
                                      public String getLastName();
                                  }


• Using the NonEmptyName constraint might lead to NPE

    !self.firstName.isEmpty


    self.firstName != null implies !self.firstName.isEmpty


                                                                      22
Internal DSL Approach - Undefined
                  and Invalid Values


                                  interface Person {
        Person
                                      public String getFirstName();
- firstName : String [0..1]
- lastName : String [1..1]
                                      public String getLastName();
                                  }


• Using the NonEmptyName constraint might lead to NPE

    !self.firstName.isEmpty


    self.firstName != null implies !self.firstName.isEmpty


                                                                      22
Internal DSL Approach - Undefined
                  and Invalid Values

                                               interface Person {
        Person                                     public scala.Option<String>
- firstName : String [0..1]                          getFirstName();
- lastName : String [1..1]                         public String getLastName();
                                               }


                                      Option<T>
                                - get() : T
                                - isDefined : Boolean
                                … … ...




                             Some                      None




                                                                                  23
Internal DSL Approach - Undefined
                  and Invalid Values

                                               interface Person {
        Person                                     public scala.Option<String>
- firstName : String [0..1]                          getFirstName();
- lastName : String [1..1]                         public String getLastName();
                                               }


                                      Option<T>
                                - get() : T
                                - isDefined : Boolean
                                … … ...




                             Some                      None




                                                                                  23
Internal DSL Approach - Type Casts

• OCL
if self.oclIsKindOf(Customer) then
    self.oclAsType(Customer).someAction()
else
 // something else
endif


• Scala
self match {
 case c: Customer => c.someAction()
    case _ => // something else
}



                                            24
Internal DSL Approach - Drawbacks



• Expressions can contain arbitrary code
 • difficult to ensure side-effect free expressions
   • possibility to use external checker like IGJ
     • @ReadOnly parameter annotation

• Loss of formal reasoning and analysis
• No constructs related to postconditions


                                                     25
Implementation - Sigma Framework
    •    Simple API for enriching EMF models using
         Java class methods - delegate computation
    •    Small layer on top of EMF and EValidator
    •    Target language agnostic (Xtend, Kotlin, ...)

                                        •   Ecore
                    EMF
                                        •   EValidator
                 Sigma Core

                 Sigma Scala




                               Codegen Dynamic           • generate direct calls
 EMF Delegates                    Templates
                                                         • reduce the runtime
                                                           overhead caused by
                                                           reflection
                                                         • simplifies
                                                           debugging,
                                                           code orientation
                                                                                26
Conclusion



• Improve the EMF integration and solid tools to
  the community
• Specify the deviations from OCL and its
  consequences
• Specify the trade-offs between standardized
  OCL and flexibility of the DSL approach
• Looking beyond traditional usage of OCL


                                                   27
The Journey further on



                  ... ... ...




                    +

 Model to Text Model to Model Model Testing
transformation transformation




                                              28
Thank you!
         http://nyx.unice.fr/projects/sigma
                                                           Filip Křikava
                                               filip.krikava@i3s.unice.fr




The work reported in this paper is partly funded by the ANR SALTY project
under contract ANR-09-SEGI-012.

                                                                            29
Related Work


• There is a plenty of work addressing OCL
  shortcomings - popular research subject


• OCLLib, OCLUnit, OCLDoc, ...
• Epsilon project
• JS4EMF
• Xcore
• “C# 3.0 makes OCL redundant”
                                             30
Some Shortcomings of OCL
          Expressions

• Side-effect free expressions
 • by default, expressions are side-effect
   • no assignment semantics
   • all data-types are immutable
 • useful for constraints
 • impossible to implement state changing operations
 • no support for generic class type parameters
   • while having generic collections

                                                       31
Some Shortcomings of OCL
          Expressions

• Some inconsistency, confusions
 • ‘.’ and ‘->’ operators
 • implicit oclAsSet
 • implicit collection flattening in collect
 • logical operation with undefined values
 • different OCL meta-models
 • no support for generic class type parameters
   • while having generic collections

                                                  32
Internal DSL Approach - Principles


• EMF codegen translates model concepts into Java
  • model classifier -> Java class
  • structural / behavioral feature -> method




                                                    33
Internal DSL Approach - Principles


• EMF codegen translates model concepts into Java
  • model classifier -> Java class
  • structural / behavioral feature -> method
• Scala allow to omit parenthesis in zero arg methods
 self.getMembership.getParticipant.getDateOfBirth




                                                        33
Internal DSL Approach - Principles


• EMF codegen translates model concepts into Java
  • model classifier -> Java class
  • structural / behavioral feature -> method
• Scala allow to omit parenthesis in zero arg methods
 self.getMembership.getParticipant.getDateOfBirth


• Remove get noise using codegen dynamic templates
 self.membership.participant.dateOfBirth




                                                        33
Internal DSL Approach - Principles


• EMF codegen translates model concepts into Java
  • model classifier -> Java class
  • structural / behavioral feature -> method
• Scala allow to omit parenthesis in zero arg methods
 self.getMembership.getParticipant.getDateOfBirth


• Remove get noise using codegen dynamic templates
 self.membership.participant.dateOfBirth

• Scala supports lambda expressions
• Large number of collection operations
                                                        33
Some Shortcomings of OCL
                  Expressions

• Complex expressions are hard to write and maintain
 • linearity of the OCL expression

• Limited extensibility and reuse
 • difficult to add new operations (i.e. support for regular expressions)

• Side-effect free expressions
 • by default side-effect free expressions; no instantiation

• Inconsistency/Confusing issues
 • implicit flattening, logic with undefined values, missing generics class
    type parameters, etc.
                                                                            34
Some Shortcomings of Tool Support


• Impressive number of academic OCL tools
 • lack of commercial tools
• Eclipse OCL project
 • Set of OCL editors (e.g. OCLInEcore)
 • Based on EMF delegates
• Scalability and stability problems with larger models
• Limited developer feedback
• Insufficient debugging capability
                                                          35
Some Shortcomings of OCL
              Expressions


“... Second, it is compact, yet powerful. You
can write short and to the point expressions
that do a lot.”
  -   Anders Ivner, foreword to the 2nd edition of The Object Constraint Language




                                                                                36
Some Shortcomings of OCL
              Expressions


“... Second, it is compact, yet powerful. You
can write short and to the point expressions
that do a lot.”
  -   Anders Ivner, foreword to the 2nd edition of The Object Constraint Language



 • true for short, straight-forward expressions
 • not so true for complex ones
 • hard for new users when they move from tutorial
      like expressions into real word ones
                                                                                36
The problem with OCL expressions




• OCL in form of expressions that can be chained together
 parent.types
  ->select(name <> '')
  ->forAll(e | e <> self implies e.name <> self.name)




                                                        37
The problem with OCL expressions


• The linearity of the expression chaining often leads to long
   and complex expressions
self.allContents
 ->forAll (p | (p.oclIsKindOf(ClassifierRole) implies
  p.name = '' implies self.allContents
  ->forAll (q | q.oclIsKindOf(ClassifierRole) implies
       (p.oclAsType(ClassifierRole).base =
         q.oclAsType(ClassifierRole).base imples p = q) ) )
 and
 (p.oclIsKindOf(AssociationRole) implies p.name = '' imples
    self.allContents
      ->forAll ( q | q.oclIsKindOf(AssociationRole) implies
             (p.oclAsType(AssociationRole).base =
              q.oclAsType(AssociationRole).base imples
              p = q) ) )




                                                              38
The problem with OCL expressions


• The linearity of the expression chaining often leads to long
   and complex expressions
self.allContents
 ->forAll (p | (p.oclIsKindOf(ClassifierRole) implies
  p.name = '' implies self.allContents
  ->forAll (q | q.oclIsKindOf(ClassifierRole) implies
       (p.oclAsType(ClassifierRole).base =
         q.oclAsType(ClassifierRole).base imples p = q) ) )
 and
 (p.oclIsKindOf(AssociationRole) implies p.name = '' imples
    self.allContents
      ->forAll ( q | q.oclIsKindOf(AssociationRole) implies
             (p.oclAsType(AssociationRole).base =
              q.oclAsType(AssociationRole).base imples
              p = q) ) )



• This combined with poor tool support
                                                              39

Más contenido relacionado

La actualidad más candente

F1270089476650
F1270089476650F1270089476650
F1270089476650Anil Kumar
 
[2015/2016] AADL (Architecture Analysis and Design Language)
[2015/2016] AADL (Architecture Analysis and Design Language)[2015/2016] AADL (Architecture Analysis and Design Language)
[2015/2016] AADL (Architecture Analysis and Design Language)Ivano Malavolta
 
AADL: Architecture Analysis and Design Language
AADL: Architecture Analysis and Design LanguageAADL: Architecture Analysis and Design Language
AADL: Architecture Analysis and Design LanguageIvano Malavolta
 
[2016/2017] Architectural languages
[2016/2017] Architectural languages[2016/2017] Architectural languages
[2016/2017] Architectural languagesIvano Malavolta
 
Rejunevating software reengineering processes
Rejunevating software reengineering processesRejunevating software reengineering processes
Rejunevating software reengineering processesmanishthaper
 
Serving BERT Models in Production with TorchServe
Serving BERT Models in Production with TorchServeServing BERT Models in Production with TorchServe
Serving BERT Models in Production with TorchServeNidhin Pattaniyil
 
Self Repairing Tree Topology Enabling Content Based Routing In Local Area Ne...
Self Repairing Tree Topology Enabling  Content Based Routing In Local Area Ne...Self Repairing Tree Topology Enabling  Content Based Routing In Local Area Ne...
Self Repairing Tree Topology Enabling Content Based Routing In Local Area Ne...ncct
 
Automatically Generated Simulations for Predicting Software-Defined Networkin...
Automatically Generated Simulations for Predicting Software-Defined Networkin...Automatically Generated Simulations for Predicting Software-Defined Networkin...
Automatically Generated Simulations for Predicting Software-Defined Networkin...Felipe Alencar
 
Dynamic Adaptation of Software-defined Networks for IoT Systems: A Search-bas...
Dynamic Adaptation of Software-defined Networks for IoT Systems: A Search-bas...Dynamic Adaptation of Software-defined Networks for IoT Systems: A Search-bas...
Dynamic Adaptation of Software-defined Networks for IoT Systems: A Search-bas...Lionel Briand
 
PhD Thesis Presentation
PhD Thesis PresentationPhD Thesis Presentation
PhD Thesis PresentationLola Burgueño
 
Transfer Learning for Software Performance Analysis: An Exploratory Analysis
Transfer Learning for Software Performance Analysis: An Exploratory AnalysisTransfer Learning for Software Performance Analysis: An Exploratory Analysis
Transfer Learning for Software Performance Analysis: An Exploratory AnalysisPooyan Jamshidi
 
An LSTM-Based Neural Network Architecture for Model Transformations
An LSTM-Based Neural Network Architecture for Model TransformationsAn LSTM-Based Neural Network Architecture for Model Transformations
An LSTM-Based Neural Network Architecture for Model TransformationsLola Burgueño
 
Attentional Object Detection - introductory slides.
Attentional Object Detection - introductory slides.Attentional Object Detection - introductory slides.
Attentional Object Detection - introductory slides.Sergey Karayev
 
Aldec overview 2011-10 revised
Aldec overview 2011-10 revisedAldec overview 2011-10 revised
Aldec overview 2011-10 revisedPrateek Chopra
 
AADL Overview: Brief and Pointless
AADL Overview: Brief and PointlessAADL Overview: Brief and Pointless
AADL Overview: Brief and PointlessIvan Ruchkin
 
Reverse Engineering of Software Architecture
Reverse Engineering of Software ArchitectureReverse Engineering of Software Architecture
Reverse Engineering of Software ArchitectureDharmalingam Ganesan
 
Systematic Model based Testing with Coverage Analysis
Systematic Model based Testing with Coverage AnalysisSystematic Model based Testing with Coverage Analysis
Systematic Model based Testing with Coverage AnalysisIDES Editor
 
Coverage Solutions on Emulators
Coverage Solutions on EmulatorsCoverage Solutions on Emulators
Coverage Solutions on EmulatorsDVClub
 

La actualidad más candente (20)

F1270089476650
F1270089476650F1270089476650
F1270089476650
 
[2015/2016] AADL (Architecture Analysis and Design Language)
[2015/2016] AADL (Architecture Analysis and Design Language)[2015/2016] AADL (Architecture Analysis and Design Language)
[2015/2016] AADL (Architecture Analysis and Design Language)
 
AADL: Architecture Analysis and Design Language
AADL: Architecture Analysis and Design LanguageAADL: Architecture Analysis and Design Language
AADL: Architecture Analysis and Design Language
 
[2016/2017] Architectural languages
[2016/2017] Architectural languages[2016/2017] Architectural languages
[2016/2017] Architectural languages
 
Rejunevating software reengineering processes
Rejunevating software reengineering processesRejunevating software reengineering processes
Rejunevating software reengineering processes
 
Serving BERT Models in Production with TorchServe
Serving BERT Models in Production with TorchServeServing BERT Models in Production with TorchServe
Serving BERT Models in Production with TorchServe
 
Self Repairing Tree Topology Enabling Content Based Routing In Local Area Ne...
Self Repairing Tree Topology Enabling  Content Based Routing In Local Area Ne...Self Repairing Tree Topology Enabling  Content Based Routing In Local Area Ne...
Self Repairing Tree Topology Enabling Content Based Routing In Local Area Ne...
 
Automatically Generated Simulations for Predicting Software-Defined Networkin...
Automatically Generated Simulations for Predicting Software-Defined Networkin...Automatically Generated Simulations for Predicting Software-Defined Networkin...
Automatically Generated Simulations for Predicting Software-Defined Networkin...
 
Dynamic Adaptation of Software-defined Networks for IoT Systems: A Search-bas...
Dynamic Adaptation of Software-defined Networks for IoT Systems: A Search-bas...Dynamic Adaptation of Software-defined Networks for IoT Systems: A Search-bas...
Dynamic Adaptation of Software-defined Networks for IoT Systems: A Search-bas...
 
PhD Thesis Presentation
PhD Thesis PresentationPhD Thesis Presentation
PhD Thesis Presentation
 
Transfer Learning for Software Performance Analysis: An Exploratory Analysis
Transfer Learning for Software Performance Analysis: An Exploratory AnalysisTransfer Learning for Software Performance Analysis: An Exploratory Analysis
Transfer Learning for Software Performance Analysis: An Exploratory Analysis
 
An LSTM-Based Neural Network Architecture for Model Transformations
An LSTM-Based Neural Network Architecture for Model TransformationsAn LSTM-Based Neural Network Architecture for Model Transformations
An LSTM-Based Neural Network Architecture for Model Transformations
 
Attentional Object Detection - introductory slides.
Attentional Object Detection - introductory slides.Attentional Object Detection - introductory slides.
Attentional Object Detection - introductory slides.
 
Aldec overview 2011-10 revised
Aldec overview 2011-10 revisedAldec overview 2011-10 revised
Aldec overview 2011-10 revised
 
AADL Overview: Brief and Pointless
AADL Overview: Brief and PointlessAADL Overview: Brief and Pointless
AADL Overview: Brief and Pointless
 
Reverse Engineering of Software Architecture
Reverse Engineering of Software ArchitectureReverse Engineering of Software Architecture
Reverse Engineering of Software Architecture
 
ECML-2015 Presentation
ECML-2015 PresentationECML-2015 Presentation
ECML-2015 Presentation
 
Systematic Model based Testing with Coverage Analysis
Systematic Model based Testing with Coverage AnalysisSystematic Model based Testing with Coverage Analysis
Systematic Model based Testing with Coverage Analysis
 
Coverage Solutions on Emulators
Coverage Solutions on EmulatorsCoverage Solutions on Emulators
Coverage Solutions on Emulators
 
MexADL
MexADLMexADL
MexADL
 

Destacado

Model Manipulation Using Embedded DSLs in Scala
Model Manipulation Using Embedded DSLs in ScalaModel Manipulation Using Embedded DSLs in Scala
Model Manipulation Using Embedded DSLs in ScalaFilip Krikava
 
Enriching EMF Models with Scala (quick overview)
Enriching EMF Models with Scala (quick overview)Enriching EMF Models with Scala (quick overview)
Enriching EMF Models with Scala (quick overview)Filip Krikava
 
Xtext project and PhDs in Gemany
Xtext project and PhDs in GemanyXtext project and PhDs in Gemany
Xtext project and PhDs in GemanyTech Talks @NSU
 
Domain specific languages in eclipse with Xtext (Zeus, UGent)
Domain specific languages in eclipse with Xtext (Zeus, UGent)Domain specific languages in eclipse with Xtext (Zeus, UGent)
Domain specific languages in eclipse with Xtext (Zeus, UGent)Sigasi
 
Integrating Xtext Language Server support in Visual Studio Code
Integrating Xtext Language Server support in Visual Studio CodeIntegrating Xtext Language Server support in Visual Studio Code
Integrating Xtext Language Server support in Visual Studio CodeKarsten Thoms
 
Generating Visual Studio Code Extensions for Xtext DSLs
Generating Visual Studio Code Extensions for Xtext DSLsGenerating Visual Studio Code Extensions for Xtext DSLs
Generating Visual Studio Code Extensions for Xtext DSLsKarsten Thoms
 
Domain specific languages and Scala
Domain specific languages and ScalaDomain specific languages and Scala
Domain specific languages and ScalaFilip Krikava
 
Building a Python IDE with Xtext
Building a Python IDE with XtextBuilding a Python IDE with Xtext
Building a Python IDE with XtextSebastian Zarnekow
 
Xbase - Implementing Domain-Specific Languages for Java
Xbase - Implementing Domain-Specific Languages for JavaXbase - Implementing Domain-Specific Languages for Java
Xbase - Implementing Domain-Specific Languages for Javameysholdt
 
Pragmatic DSL Design with Xtext, Xbase and Xtend 2
Pragmatic DSL Design with Xtext, Xbase and Xtend 2Pragmatic DSL Design with Xtext, Xbase and Xtend 2
Pragmatic DSL Design with Xtext, Xbase and Xtend 2Dr. Jan Köhnlein
 

Destacado (11)

PhD Thesis Defense
PhD Thesis DefensePhD Thesis Defense
PhD Thesis Defense
 
Model Manipulation Using Embedded DSLs in Scala
Model Manipulation Using Embedded DSLs in ScalaModel Manipulation Using Embedded DSLs in Scala
Model Manipulation Using Embedded DSLs in Scala
 
Enriching EMF Models with Scala (quick overview)
Enriching EMF Models with Scala (quick overview)Enriching EMF Models with Scala (quick overview)
Enriching EMF Models with Scala (quick overview)
 
Xtext project and PhDs in Gemany
Xtext project and PhDs in GemanyXtext project and PhDs in Gemany
Xtext project and PhDs in Gemany
 
Domain specific languages in eclipse with Xtext (Zeus, UGent)
Domain specific languages in eclipse with Xtext (Zeus, UGent)Domain specific languages in eclipse with Xtext (Zeus, UGent)
Domain specific languages in eclipse with Xtext (Zeus, UGent)
 
Integrating Xtext Language Server support in Visual Studio Code
Integrating Xtext Language Server support in Visual Studio CodeIntegrating Xtext Language Server support in Visual Studio Code
Integrating Xtext Language Server support in Visual Studio Code
 
Generating Visual Studio Code Extensions for Xtext DSLs
Generating Visual Studio Code Extensions for Xtext DSLsGenerating Visual Studio Code Extensions for Xtext DSLs
Generating Visual Studio Code Extensions for Xtext DSLs
 
Domain specific languages and Scala
Domain specific languages and ScalaDomain specific languages and Scala
Domain specific languages and Scala
 
Building a Python IDE with Xtext
Building a Python IDE with XtextBuilding a Python IDE with Xtext
Building a Python IDE with Xtext
 
Xbase - Implementing Domain-Specific Languages for Java
Xbase - Implementing Domain-Specific Languages for JavaXbase - Implementing Domain-Specific Languages for Java
Xbase - Implementing Domain-Specific Languages for Java
 
Pragmatic DSL Design with Xtext, Xbase and Xtend 2
Pragmatic DSL Design with Xtext, Xbase and Xtend 2Pragmatic DSL Design with Xtext, Xbase and Xtend 2
Pragmatic DSL Design with Xtext, Xbase and Xtend 2
 

Similar a On the Use of an Internal DSL for Enriching EMF Models

How to Build Composite Applications with PRISM
How to Build Composite Applications with PRISMHow to Build Composite Applications with PRISM
How to Build Composite Applications with PRISMDataLeader.io
 
Software System Scalability: Concepts and Techniques (keynote talk at ISEC 2009)
Software System Scalability: Concepts and Techniques (keynote talk at ISEC 2009)Software System Scalability: Concepts and Techniques (keynote talk at ISEC 2009)
Software System Scalability: Concepts and Techniques (keynote talk at ISEC 2009)David Rosenblum
 
Java Modularity with OSGi
Java Modularity with OSGiJava Modularity with OSGi
Java Modularity with OSGiIlya Rybak
 
Kutulu: A Domain-specific Language for Feature-driven Product Derivation
Kutulu: A Domain-specific Language for Feature-driven Product DerivationKutulu: A Domain-specific Language for Feature-driven Product Derivation
Kutulu: A Domain-specific Language for Feature-driven Product DerivationOrçun Dayıbaş
 
Software Engineering of Component-Based Systems-of-Systems: A Reference Frame...
Software Engineering of Component-Based Systems-of-Systems: A Reference Frame...Software Engineering of Component-Based Systems-of-Systems: A Reference Frame...
Software Engineering of Component-Based Systems-of-Systems: A Reference Frame...lseinturier
 
Chris Phillips SCIM Mace-Dir Internet2 Fall Member Meeting Refresh
Chris Phillips SCIM Mace-Dir Internet2 Fall Member Meeting RefreshChris Phillips SCIM Mace-Dir Internet2 Fall Member Meeting Refresh
Chris Phillips SCIM Mace-Dir Internet2 Fall Member Meeting RefreshChris Phillips
 
JAVA object oriented programming (oop).ppt
JAVA object oriented programming (oop).pptJAVA object oriented programming (oop).ppt
JAVA object oriented programming (oop).pptAliyaJav
 
Dealing with Run-Time Variability in Service Robotics: Towards a DSL for Non-...
Dealing with Run-Time Variability in Service Robotics: Towards a DSL for Non-...Dealing with Run-Time Variability in Service Robotics: Towards a DSL for Non-...
Dealing with Run-Time Variability in Service Robotics: Towards a DSL for Non-...Serge Stinckwich
 
Efficient Code Organisation
Efficient Code OrganisationEfficient Code Organisation
Efficient Code OrganisationSqueed
 
Safe and Reliable Embedded Linux Programming: How to Get There
Safe and Reliable Embedded Linux Programming: How to Get ThereSafe and Reliable Embedded Linux Programming: How to Get There
Safe and Reliable Embedded Linux Programming: How to Get ThereAdaCore
 
Using Composite Feature Models to Support Agile Software Product Line Evoluti...
Using Composite Feature Models to Support Agile Software Product Line Evoluti...Using Composite Feature Models to Support Agile Software Product Line Evoluti...
Using Composite Feature Models to Support Agile Software Product Line Evoluti...Simon Urli
 
Oracle Exalogic Elastic Cloud - Revolutionizing Data Center Consolidation
Oracle Exalogic Elastic Cloud - Revolutionizing Data Center ConsolidationOracle Exalogic Elastic Cloud - Revolutionizing Data Center Consolidation
Oracle Exalogic Elastic Cloud - Revolutionizing Data Center ConsolidationRex Wang
 
A classification framework for component models
A classification framework for component modelsA classification framework for component models
A classification framework for component modelsIvica Crnkovic
 
Principles Of Programing Languages
Principles Of Programing LanguagesPrinciples Of Programing Languages
Principles Of Programing LanguagesMatthew McCullough
 
01 persistence and domain modeling
01 persistence and domain modeling01 persistence and domain modeling
01 persistence and domain modelingthirumuru2012
 
Introduction to Aspect Oriented Programming by Donald Belcham
Introduction to Aspect Oriented Programming by Donald BelchamIntroduction to Aspect Oriented Programming by Donald Belcham
Introduction to Aspect Oriented Programming by Donald Belcham.NET Conf UY
 

Similar a On the Use of an Internal DSL for Enriching EMF Models (20)

CoreML
CoreMLCoreML
CoreML
 
How to Build Composite Applications with PRISM
How to Build Composite Applications with PRISMHow to Build Composite Applications with PRISM
How to Build Composite Applications with PRISM
 
Software System Scalability: Concepts and Techniques (keynote talk at ISEC 2009)
Software System Scalability: Concepts and Techniques (keynote talk at ISEC 2009)Software System Scalability: Concepts and Techniques (keynote talk at ISEC 2009)
Software System Scalability: Concepts and Techniques (keynote talk at ISEC 2009)
 
Java Modularity with OSGi
Java Modularity with OSGiJava Modularity with OSGi
Java Modularity with OSGi
 
Kutulu: A Domain-specific Language for Feature-driven Product Derivation
Kutulu: A Domain-specific Language for Feature-driven Product DerivationKutulu: A Domain-specific Language for Feature-driven Product Derivation
Kutulu: A Domain-specific Language for Feature-driven Product Derivation
 
Software Engineering of Component-Based Systems-of-Systems: A Reference Frame...
Software Engineering of Component-Based Systems-of-Systems: A Reference Frame...Software Engineering of Component-Based Systems-of-Systems: A Reference Frame...
Software Engineering of Component-Based Systems-of-Systems: A Reference Frame...
 
Introduction to MDA
Introduction to MDAIntroduction to MDA
Introduction to MDA
 
Chris Phillips SCIM Mace-Dir Internet2 Fall Member Meeting Refresh
Chris Phillips SCIM Mace-Dir Internet2 Fall Member Meeting RefreshChris Phillips SCIM Mace-Dir Internet2 Fall Member Meeting Refresh
Chris Phillips SCIM Mace-Dir Internet2 Fall Member Meeting Refresh
 
Metamorphic Domain-Specific Languages
Metamorphic Domain-Specific LanguagesMetamorphic Domain-Specific Languages
Metamorphic Domain-Specific Languages
 
JAVA object oriented programming (oop).ppt
JAVA object oriented programming (oop).pptJAVA object oriented programming (oop).ppt
JAVA object oriented programming (oop).ppt
 
Dealing with Run-Time Variability in Service Robotics: Towards a DSL for Non-...
Dealing with Run-Time Variability in Service Robotics: Towards a DSL for Non-...Dealing with Run-Time Variability in Service Robotics: Towards a DSL for Non-...
Dealing with Run-Time Variability in Service Robotics: Towards a DSL for Non-...
 
Efficient Code Organisation
Efficient Code OrganisationEfficient Code Organisation
Efficient Code Organisation
 
Safe and Reliable Embedded Linux Programming: How to Get There
Safe and Reliable Embedded Linux Programming: How to Get ThereSafe and Reliable Embedded Linux Programming: How to Get There
Safe and Reliable Embedded Linux Programming: How to Get There
 
Using Composite Feature Models to Support Agile Software Product Line Evoluti...
Using Composite Feature Models to Support Agile Software Product Line Evoluti...Using Composite Feature Models to Support Agile Software Product Line Evoluti...
Using Composite Feature Models to Support Agile Software Product Line Evoluti...
 
Oracle Exalogic Elastic Cloud - Revolutionizing Data Center Consolidation
Oracle Exalogic Elastic Cloud - Revolutionizing Data Center ConsolidationOracle Exalogic Elastic Cloud - Revolutionizing Data Center Consolidation
Oracle Exalogic Elastic Cloud - Revolutionizing Data Center Consolidation
 
A classification framework for component models
A classification framework for component modelsA classification framework for component models
A classification framework for component models
 
Principles Of Programing Languages
Principles Of Programing LanguagesPrinciples Of Programing Languages
Principles Of Programing Languages
 
GroovyDSLs
GroovyDSLsGroovyDSLs
GroovyDSLs
 
01 persistence and domain modeling
01 persistence and domain modeling01 persistence and domain modeling
01 persistence and domain modeling
 
Introduction to Aspect Oriented Programming by Donald Belcham
Introduction to Aspect Oriented Programming by Donald BelchamIntroduction to Aspect Oriented Programming by Donald Belcham
Introduction to Aspect Oriented Programming by Donald Belcham
 

Último

How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 

Último (20)

How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 

On the Use of an Internal DSL for Enriching EMF Models

  • 1. On the Use of an Internal DSL for Enriching EMF Models Filip Křikava Philippe Collet Université Nice Sophia Antipolis I3S - CNRS UMR 7271 France 2012 Workshop on OCL and Textual Modeling (OCL 2012), MODELS’12 September, 30th, 2012 - Innsbruck/AUSTRIA
  • 3. The Journey - applying MDE into Self-Adaptive Software Systems Meta-modeling with EMF 2
  • 4. The Journey - applying MDE into Self-Adaptive Software Systems Meta-modeling with EMF - limited expressiveness of structural constraints Enriching EMF with OCL 2
  • 5. The Journey - applying MDE into Self-Adaptive Software Systems Meta-modeling with EMF - limited expressiveness of structural constraints constraints Enriching EMF with OCL operation contracts implementation of operation bodies implementation of derived features 2
  • 6. The Journey - applying MDE into Self-Adaptive Software Systems Meta-modeling with EMF - limited expressiveness of structural constraints constraints Enriching EMF with OCL operation contracts - encountered number of shortcomings - since our work is based on Scala implementation of operation bodies Enriching EMF with Scala implementation of derived features 2
  • 7. The Journey - applying MDE into Self-Adaptive Software Systems Meta-modeling with EMF - limited expressiveness of structural constraints constraints Enriching EMF with OCL operation contracts - encountered number of shortcomings - since our work is based on Scala implementation of operation bodies Enriching EMF with Scala implementation of - internal DSL in Scala to enrich EMF derived features - similar OCL features - full advantage of the host language - state-of-the-art tool support + 2
  • 8. Outline • Some Shortcomings of OCL • Internal DSL Approach • Implementation • Conclusion 3
  • 9. Some Shortcomings of OCL • Based solely on our experience • different usage of OCL - different pros/cons • concerned by practicality rather than formality • not a complete study nor first one (well known issues) 4
  • 10. Some Shortcomings of OCL Expressions Constraints Capturing OCL Expressions Tool Support Constructs • Poor support for user feedback • Complex expressions are • No support for warning / • Scalability and stability hard to write and critiques problems with larger maintain models • No support for • Limited extensibility and dependent constraints • Limited developer reuse feedback • Limited flexibility in • Side-effect free context definition • Insufficient debugging expressions capability • No support for repairing • Inconsistency/Confusing inconsistencies issues • No support for invariant reuse across different models D. Kolovos, et al. On the Evolution of OCL for Capturing Structural Constraints, In Rigorous Methods for Software Construction and Analysis, 2009. 5
  • 11. Internal DSL Approach - Overview • The shortcomings are related to scalability • OCL language • performance, stability and features of OCL tools • when used in the large (many invariants, complex expressions) • similar problems are in other external DSLs (EOL/EVL) 6
  • 12. Internal DSL Approach - Overview • External DSL like OCL raises the level of abstraction: 7
  • 13. Internal DSL Approach - Overview • External DSL like OCL raises the level of abstraction: parent.types ->select(name <> '') ->forAll(e | e <> self implies e.name <> self.name) 7
  • 14. Internal DSL Approach - Overview • External DSL like OCL raises the level of abstraction: parent.types ->select(name <> '') ->forAll(e | e <> self implies e.name <> self.name) • The same could be expressed in plain Java, but ... no 7
  • 15. Internal DSL Approach - Overview • External DSL like OCL raises the level of abstraction: parent.types ->select(name <> '') ->forAll(e | e <> self implies e.name <> self.name) • The same could be expressed in plain Java, but ... no • Having a language that has a more powerful and flexible constructs and state-of-the-art tool support 7
  • 16. Internal DSL Approach - Overview • External DSL like OCL raises the level of abstraction: parent.types ->select(name <> '') ->forAll(e | e <> self implies e.name <> self.name) • The same could be expressed in plain Java, but ... no • Having a language that has a more powerful and flexible constructs and state-of-the-art tool support self.parent.types .filter(name != '') .forall(e => e != self implies e.name != self.name) 7
  • 17. Internal DSL Approach - Why Scala? • Modern general purpose language • Runs on top of JVM • Well designed for building internal DSLs • Statically typed using type inference • Well supported by major tool vendor 8
  • 18. Internal DSL Approach - Basics • Enriching constructs represented as Scala object methods 9
  • 19. Internal DSL Approach - Basics • Enriching constructs represented as Scala object methods Customer - printedName : String [1..1] - getTransactions(until: Date, from: Date) : Transactions [0..*] 9
  • 20. Internal DSL Approach - Basics • Enriching constructs represented as Scala object methods Customer - printedName : String [1..1] • Derived property: - getTransactions(until: Date, from: Date) : Transactions [0..*] def getPrintedName (self: Customer): String = self.owner.title + " " + self.owner.name 9
  • 21. Internal DSL Approach - Basics • Enriching constructs represented as Scala object methods Customer - printedName : String [1..1] • Derived property: - getTransactions(until: Date, from: Date) : Transactions [0..*] def getPrintedName (self: Customer): String = self.owner.title + " " + self.owner.name 9
  • 22. Internal DSL Approach - Basics • Enriching constructs represented as Scala object methods Customer - printedName : String [1..1] • Derived property: - getTransactions(until: Date, from: Date) : Transactions [0..*] def getPrintedName (self: Customer): String = self.owner.title + " " + self.owner.name 9
  • 23. Internal DSL Approach - Basics • Enriching constructs represented as Scala object methods Customer - printedName : String [1..1] • Derived property: - getTransactions(until: Date, from: Date) : Transactions [0..*] def getPrintedName (self: Customer): String = self.owner.title + " " + self.owner.name 9
  • 24. Internal DSL Approach - Basics • Enriching constructs represented as Scala object methods Customer - printedName : String [1..1] • Derived property: - getTransactions(until: Date, from: Date) : Transactions [0..*] def getPrintedName (self: Customer): String = self.owner.title + " " + self.owner.name • Operation body: def invokeGetTransactions(self: Customer, until: Date, from: Date): Set[Transaction] = self.transactions filter ( t => t.date.isAfter(from) && t.date.isBefore(until) ) 10
  • 25. Internal DSL Approach - Basics • Enriching constructs represented as Scala object methods Customer - printedName : String [1..1] • Derived property: - getTransactions(until: Date, from: Date) : Transactions [0..*] def getPrintedName (self: Customer): String = self.owner.title + " " + self.owner.name • Operation body: def invokeGetTransactions(self: Customer, until: Date, from: Date): Set[Transaction] = self.transactions filter ( t => t.date.isAfter(from) && t.date.isBefore(until) ) 10
  • 26. Internal DSL Approach - Basics • Enriching constructs represented as Scala object methods Customer - printedName : String [1..1] • Derived property: - getTransactions(until: Date, from: Date) : Transactions [0..*] def getPrintedName (self: Customer): String = self.owner.title + " " + self.owner.name • Operation body: def invokeGetTransactions(self: Customer, until: Date, from: Date): Set[Transaction] = self.transactions filter ( t => t.date.isAfter(from) && t.date.isBefore(until) ) 10
  • 27. Internal DSL Approach - Basics • Enriching constructs represented as Scala object methods Customer - printedName : String [1..1] • Derived property: - getTransactions(until: Date, from: Date) : Transactions [0..*] def getPrintedName (self: Customer): String = self.owner.title + " " + self.owner.name • Operation body: def invokeGetTransactions(self: Customer, until: Date, from: Date): Set[Transaction] = self.transactions filter ( t => t.date.isAfter(from) && t.date.isBefore(until) ) 10
  • 28. Internal DSL Approach - Basics • Enriching constructs represented as Scala object methods Customer - printedName : String [1..1] • Derived property: - getTransactions(until: Date, from: Date) : Transactions [0..*] def getPrintedName (self: Customer): String = self.owner.title + " " + self.owner.name • Operation body: def invokeGetTransactions(self: Customer, until: Date, from: Date): Set[Transaction] = self.transactions filter ( t => t.date.isAfter(from) && t.date.isBefore(until) ) 10
  • 29. Internal DSL Approach - Basics • Constraints 11
  • 30. Internal DSL Approach - Basics • Constraints def validateOfAge(self: Customer): Boolean = self.age >= 18 11
  • 31. Internal DSL Approach - Basics • Constraints def validateOfAge(self: Customer): Boolean = self.age >= 18 11
  • 32. Internal DSL Approach - Basics • Constraints def validateOfAge(self: Customer): Boolean = self.age >= 18 11
  • 33. Internal DSL Approach - Basics • Constraints def validateOfAge(self: Customer): Boolean = self.age >= 18 11
  • 34. Internal DSL Approach - Basics • Constraints def validateOfAge(self: Customer): Boolean = self.age >= 18 def validateOfAge(self: Customer): Option[String] = if (self.age >= 18) { None else { Some("The person %s is under age" format self.name) } 11
  • 35. Internal DSL Approach - Basics • Constraints def validateOfAge(self: Customer): Boolean = self.age >= 18 def validateOfAge(self: Customer): Option[String] = if (self.age >= 18) { None else { Some("The person %s is under age" format self.name) } 11
  • 36. Internal DSL Approach - Basics • Constraints • a constraint that check whether a UML class contains getInstance method 12
  • 37. Internal DSL Approach - Basics • Constraints • a constraint that check whether a UML class contains getInstance method def validateDefinesGetInstance(self: UMLClazz) = { } 13
  • 38. Internal DSL Approach - Basics • Constraints • a constraint that check whether a UML class contains getInstance method def validateDefinesGetInstance(self: UMLClazz) = { self.features.find(_.name == "getInstance") match { }} 14
  • 39. Internal DSL Approach - Basics • Constraints • a constraint that check whether a UML class contains getInstance method def validateDefinesGetInstance(self: UMLClazz) = { self.features.find(_.name == "getInstance") match { case Some(_) => Success }} 15
  • 40. Internal DSL Approach - Basics • Constraints • a constraint that check whether a UML class contains getInstance method def validateDefinesGetInstance(self: UMLClazz) = { self.features.find(_.name == "getInstance") match { case Some(_) => Success case None => Error("Missing getInstance" )}} 16
  • 41. Internal DSL Approach - Basics • Constraints • a constraint that check whether a UML class contains getInstance method def validateDefinesGetInstance(self: UMLClazz) = { self.features.find(_.name == "getInstance") match { case Some(_) => Success case None => Error("Missing getInstance", QuickFix("Add a getInstance operation", { } ))}} 17
  • 42. Internal DSL Approach - Basics • Constraints • a constraint that check whether a UML class contains getInstance method def validateDefinesGetInstance(self: UMLClazz) = { self.features.find(_.name == "getInstance") match { case Some(_) => Success case None => Error("Missing getInstance", QuickFix("Add a getInstance operation", { clazz: UMLClazz => clazz.features += create[UMLFeature] { op => op.setName("getInstance") // ... } } ))}} 18
  • 43. Internal DSL Approach - Basics • Constraints dependency def validateDefinesGetInstance(self: UMLClazz) @satisfies(“DefinesGetInstance”) def validateDefinesGetIsStatic(self: UMLClazz) • Using proxy to ensure each invariant is called at most once for a specific instance • Referencing by strings is not very practical • Looking into Scala 2.10 macros 19
  • 44. Internal DSL Approach - Basics • Constraints dependency def validateDefinesGetInstance(self: UMLClazz) @satisfies(“DefinesGetInstance”) def validateDefinesGetIsStatic(self: UMLClazz) • Using proxy to ensure each invariant is called at most once for a specific instance • Referencing by strings is not very practical • Looking into Scala 2.10 macros 19
  • 45. Internal DSL Approach - Extensibility • Scala is extensible language • For example, there is no implies operation in Scala self.parent.types .forall(e => e != self implies e.name != self.name) 20
  • 46. Internal DSL Approach - Extensibility • Scala is extensible language • For example, there is no implies operation in Scala self.parent.types .forall(e => e != self implies e.name != self.name) • Possibility to extend existing types class ExtBoolean(a: Boolean) { def implies(b: => Boolean) = !a || b } implicit def extBoolean(a: Boolean) = new ExtBoolean(a) 20
  • 47. Internal DSL Approach - Extensibility • Scala is extensible language • For example, there is no implies operation in Scala self.parent.types .forall(e => e != self implies e.name != self.name) • Possibility to extend existing types class ExtBoolean(a: Boolean) { def implies(b: => Boolean) = !a || b } implicit def extBoolean(a: Boolean) = new ExtBoolean(a) • This way we can add missing OCL operations (closure) 20
  • 48. Internal DSL Approach - Reusability • Breaking expression into smaller pieces • Organizing them as functions in objects and libraries • Shared across project 21
  • 49. Internal DSL Approach - Reusability • Breaking expression into smaller pieces • Organizing them as functions in objects and libraries • Shared across project • Push further using structural typing - reused across models def validateNonEmptyName(self: { def name: String } ) = !self.name.isEmpty 21
  • 50. Internal DSL Approach - Undefined and Invalid Values interface Person { Person public String getFirstName(); - firstName : String [0..1] - lastName : String [1..1] public String getLastName(); } • Using the NonEmptyName constraint might lead to NPE !self.firstName.isEmpty 22
  • 51. Internal DSL Approach - Undefined and Invalid Values interface Person { Person public String getFirstName(); - firstName : String [0..1] - lastName : String [1..1] public String getLastName(); } • Using the NonEmptyName constraint might lead to NPE !self.firstName.isEmpty self.firstName != null implies !self.firstName.isEmpty 22
  • 52. Internal DSL Approach - Undefined and Invalid Values interface Person { Person public String getFirstName(); - firstName : String [0..1] - lastName : String [1..1] public String getLastName(); } • Using the NonEmptyName constraint might lead to NPE !self.firstName.isEmpty self.firstName != null implies !self.firstName.isEmpty 22
  • 53. Internal DSL Approach - Undefined and Invalid Values interface Person { Person public scala.Option<String> - firstName : String [0..1] getFirstName(); - lastName : String [1..1] public String getLastName(); } Option<T> - get() : T - isDefined : Boolean … … ... Some None 23
  • 54. Internal DSL Approach - Undefined and Invalid Values interface Person { Person public scala.Option<String> - firstName : String [0..1] getFirstName(); - lastName : String [1..1] public String getLastName(); } Option<T> - get() : T - isDefined : Boolean … … ... Some None 23
  • 55. Internal DSL Approach - Type Casts • OCL if self.oclIsKindOf(Customer) then self.oclAsType(Customer).someAction() else // something else endif • Scala self match { case c: Customer => c.someAction() case _ => // something else } 24
  • 56. Internal DSL Approach - Drawbacks • Expressions can contain arbitrary code • difficult to ensure side-effect free expressions • possibility to use external checker like IGJ • @ReadOnly parameter annotation • Loss of formal reasoning and analysis • No constructs related to postconditions 25
  • 57. Implementation - Sigma Framework • Simple API for enriching EMF models using Java class methods - delegate computation • Small layer on top of EMF and EValidator • Target language agnostic (Xtend, Kotlin, ...) • Ecore EMF • EValidator Sigma Core Sigma Scala Codegen Dynamic • generate direct calls EMF Delegates Templates • reduce the runtime overhead caused by reflection • simplifies debugging, code orientation 26
  • 58. Conclusion • Improve the EMF integration and solid tools to the community • Specify the deviations from OCL and its consequences • Specify the trade-offs between standardized OCL and flexibility of the DSL approach • Looking beyond traditional usage of OCL 27
  • 59. The Journey further on ... ... ... + Model to Text Model to Model Model Testing transformation transformation 28
  • 60. Thank you! http://nyx.unice.fr/projects/sigma Filip Křikava filip.krikava@i3s.unice.fr The work reported in this paper is partly funded by the ANR SALTY project under contract ANR-09-SEGI-012. 29
  • 61. Related Work • There is a plenty of work addressing OCL shortcomings - popular research subject • OCLLib, OCLUnit, OCLDoc, ... • Epsilon project • JS4EMF • Xcore • “C# 3.0 makes OCL redundant” 30
  • 62. Some Shortcomings of OCL Expressions • Side-effect free expressions • by default, expressions are side-effect • no assignment semantics • all data-types are immutable • useful for constraints • impossible to implement state changing operations • no support for generic class type parameters • while having generic collections 31
  • 63. Some Shortcomings of OCL Expressions • Some inconsistency, confusions • ‘.’ and ‘->’ operators • implicit oclAsSet • implicit collection flattening in collect • logical operation with undefined values • different OCL meta-models • no support for generic class type parameters • while having generic collections 32
  • 64. Internal DSL Approach - Principles • EMF codegen translates model concepts into Java • model classifier -> Java class • structural / behavioral feature -> method 33
  • 65. Internal DSL Approach - Principles • EMF codegen translates model concepts into Java • model classifier -> Java class • structural / behavioral feature -> method • Scala allow to omit parenthesis in zero arg methods self.getMembership.getParticipant.getDateOfBirth 33
  • 66. Internal DSL Approach - Principles • EMF codegen translates model concepts into Java • model classifier -> Java class • structural / behavioral feature -> method • Scala allow to omit parenthesis in zero arg methods self.getMembership.getParticipant.getDateOfBirth • Remove get noise using codegen dynamic templates self.membership.participant.dateOfBirth 33
  • 67. Internal DSL Approach - Principles • EMF codegen translates model concepts into Java • model classifier -> Java class • structural / behavioral feature -> method • Scala allow to omit parenthesis in zero arg methods self.getMembership.getParticipant.getDateOfBirth • Remove get noise using codegen dynamic templates self.membership.participant.dateOfBirth • Scala supports lambda expressions • Large number of collection operations 33
  • 68. Some Shortcomings of OCL Expressions • Complex expressions are hard to write and maintain • linearity of the OCL expression • Limited extensibility and reuse • difficult to add new operations (i.e. support for regular expressions) • Side-effect free expressions • by default side-effect free expressions; no instantiation • Inconsistency/Confusing issues • implicit flattening, logic with undefined values, missing generics class type parameters, etc. 34
  • 69. Some Shortcomings of Tool Support • Impressive number of academic OCL tools • lack of commercial tools • Eclipse OCL project • Set of OCL editors (e.g. OCLInEcore) • Based on EMF delegates • Scalability and stability problems with larger models • Limited developer feedback • Insufficient debugging capability 35
  • 70. Some Shortcomings of OCL Expressions “... Second, it is compact, yet powerful. You can write short and to the point expressions that do a lot.” - Anders Ivner, foreword to the 2nd edition of The Object Constraint Language 36
  • 71. Some Shortcomings of OCL Expressions “... Second, it is compact, yet powerful. You can write short and to the point expressions that do a lot.” - Anders Ivner, foreword to the 2nd edition of The Object Constraint Language • true for short, straight-forward expressions • not so true for complex ones • hard for new users when they move from tutorial like expressions into real word ones 36
  • 72. The problem with OCL expressions • OCL in form of expressions that can be chained together parent.types ->select(name <> '') ->forAll(e | e <> self implies e.name <> self.name) 37
  • 73. The problem with OCL expressions • The linearity of the expression chaining often leads to long and complex expressions self.allContents ->forAll (p | (p.oclIsKindOf(ClassifierRole) implies p.name = '' implies self.allContents ->forAll (q | q.oclIsKindOf(ClassifierRole) implies (p.oclAsType(ClassifierRole).base = q.oclAsType(ClassifierRole).base imples p = q) ) ) and (p.oclIsKindOf(AssociationRole) implies p.name = '' imples self.allContents ->forAll ( q | q.oclIsKindOf(AssociationRole) implies (p.oclAsType(AssociationRole).base = q.oclAsType(AssociationRole).base imples p = q) ) ) 38
  • 74. The problem with OCL expressions • The linearity of the expression chaining often leads to long and complex expressions self.allContents ->forAll (p | (p.oclIsKindOf(ClassifierRole) implies p.name = '' implies self.allContents ->forAll (q | q.oclIsKindOf(ClassifierRole) implies (p.oclAsType(ClassifierRole).base = q.oclAsType(ClassifierRole).base imples p = q) ) ) and (p.oclIsKindOf(AssociationRole) implies p.name = '' imples self.allContents ->forAll ( q | q.oclIsKindOf(AssociationRole) implies (p.oclAsType(AssociationRole).base = q.oclAsType(AssociationRole).base imples p = q) ) ) • This combined with poor tool support 39

Notas del editor

  1. \n
  2. By design, it can only express a limited range of structural constraints, mainly with respect to containment and type conformance. \n\nFor more complex structural constraints usually the Object Constraint Language (OCL) is used that expresses these constraints as state invariants attached to meta-model classifiers\n\n- structural constrains in form of state invariants\n- per/post condition\n
  3. By design, it can only express a limited range of structural constraints, mainly with respect to containment and type conformance. \n\nFor more complex structural constraints usually the Object Constraint Language (OCL) is used that expresses these constraints as state invariants attached to meta-model classifiers\n\n- structural constrains in form of state invariants\n- per/post condition\n
  4. By design, it can only express a limited range of structural constraints, mainly with respect to containment and type conformance. \n\nFor more complex structural constraints usually the Object Constraint Language (OCL) is used that expresses these constraints as state invariants attached to meta-model classifiers\n\n- structural constrains in form of state invariants\n- per/post condition\n
  5. By design, it can only express a limited range of structural constraints, mainly with respect to containment and type conformance. \n\nFor more complex structural constraints usually the Object Constraint Language (OCL) is used that expresses these constraints as state invariants attached to meta-model classifiers\n\n- structural constrains in form of state invariants\n- per/post condition\n
  6. By design, it can only express a limited range of structural constraints, mainly with respect to containment and type conformance. \n\nFor more complex structural constraints usually the Object Constraint Language (OCL) is used that expresses these constraints as state invariants attached to meta-model classifiers\n\n- structural constrains in form of state invariants\n- per/post condition\n
  7. - Some shortcomings we came across while using OCL in an EMF based MDE toolchain -&gt; Motivation\n\n
  8. - Concerned by practical side of OCL rather than formal one\n\n- Most of the issues are well known -&gt; no direct applicable solution to Eclipse EMF\n\n\n
  9. - propagation of runtime exceptions, NPE - difficult to trace\n- difficult to narrow bugs in incorrect OCL expressions\n- OCL console can help, problem with complex expressions that invole derive features, ...\n- Despite the fact that many of these issues have already been identified or addressed, the lack of an overall integration is a crucial issue, which, according to us, influences the slow adoption of OCL in the industry.\n
  10. - complex expressions that goes beyond simple object navigation\n
  11. - with the lack of first-order logic collection operation the expressed concern would be quickly lost among java commands\n- result far from clean\n\n- the no really any highlight\n- emf codegen translates the model concepts into java concepts\n- optional parenthesis, lambda expressions, collection operation, ... \n
  12. - with the lack of first-order logic collection operation the expressed concern would be quickly lost among java commands\n- result far from clean\n\n- the no really any highlight\n- emf codegen translates the model concepts into java concepts\n- optional parenthesis, lambda expressions, collection operation, ... \n
  13. - with the lack of first-order logic collection operation the expressed concern would be quickly lost among java commands\n- result far from clean\n\n- the no really any highlight\n- emf codegen translates the model concepts into java concepts\n- optional parenthesis, lambda expressions, collection operation, ... \n
  14. - with the lack of first-order logic collection operation the expressed concern would be quickly lost among java commands\n- result far from clean\n\n- the no really any highlight\n- emf codegen translates the model concepts into java concepts\n- optional parenthesis, lambda expressions, collection operation, ... \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. - there is also a warning\n
  36. \n
  37. \n
  38. \n
  39. - besides the fact that we can use both java and scala libraries \n - it is a matter of adding a new dependency to the project\n\n- we could simply define a function that takes two booleans\n- the real power is that it will feel like a language feature\n\n- b will not get evaluated =&gt; advanced example\n
  40. - besides the fact that we can use both java and scala libraries \n - it is a matter of adding a new dependency to the project\n\n- we could simply define a function that takes two booleans\n- the real power is that it will feel like a language feature\n\n- b will not get evaluated =&gt; advanced example\n
  41. - besides the fact that we can use both java and scala libraries \n - it is a matter of adding a new dependency to the project\n\n- we could simply define a function that takes two booleans\n- the real power is that it will feel like a language feature\n\n- b will not get evaluated =&gt; advanced example\n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. the different semantics between OCL and Scala, \nunlimited numerals, \n\nFinally, carrying out more case studies should help us further assess the practicality of the proposed solution and explore what other advantages of a DSL approach, beyond the traditional usage of OCL, may benefit users.\n
  49. \n
  50. Soon to be fully open sourced\n
  51. 1. promising, but we believe that our approach is more pragmatic at least until all the extensions and production ready tools are implemented\n\n2. itself positioned as not a rival to OMG standards but as a prototype to experiment with novel approaches\n\n3. simply snippets of JS - our case represents model extensions as functions - first class citizens at code level\n\n4. external xtext based DSL, does not support constraints, prototype\n\n5. Do modern programming languages make OCL redundant?\n - we try to go beyond OCL-like expressions, advanced constructs, improved invariant support\n
  52. \n
  53. \n
  54. External DSL can choose syntax freely\n Internal DSL has to operate in boundaries of its host language\n Multiple model packages at the same time - classes from different packages\n
  55. External DSL can choose syntax freely\n Internal DSL has to operate in boundaries of its host language\n Multiple model packages at the same time - classes from different packages\n
  56. External DSL can choose syntax freely\n Internal DSL has to operate in boundaries of its host language\n Multiple model packages at the same time - classes from different packages\n
  57. - OCL extension is tool specific\n- selective immutability\n
  58. - it is not criticism of Eclipse OCL\n- files over 800 lines (MacBook Pro, 8GB RAM)\n\n- propagation of runtime exceptions, NPE - difficult to trace\n- difficult to narrow bugs in incorrect OCL expressions\n- OCL console can help, problem with complex expressions that invole derive features, ...\n\n- OCL is either interpreted or translated to some other language\n- Xtext includes Java&amp;#x2019;s debugging support for other languages JSR-045 \n
  59. \n
  60. ...that are difficult to understand and maintain.\n\nA constraint related to the collaboration element defined in the UML meta-model adopted from Correa et al\n\n\n
  61. ...that are difficult to understand and maintain.\n\nA constraint related to the collaboration element defined in the UML meta-model adopted from Correa et al\n\n\n
  62. ...that are difficult to understand and maintain.\n\nA constraint related to the collaboration element defined in the UML meta-model adopted from Correa et al\n\nlack of debugging support\n\n