|
|
xv | |
|
|
xix | |
|
|
xxi | |
|
|
xxiii | |
Preface |
|
xxv | |
Acknowledgments |
|
xxxi | |
|
Chapter 1 What's a Model? |
|
|
1 | (18) |
|
|
2 | (2) |
|
|
4 | (1) |
|
1.3 Modeling in Engineering |
|
|
5 | (4) |
|
1.4 Illustrative Example: Cellular Automata |
|
|
9 | (5) |
|
1.4.1 Cellular Automaton Topology |
|
|
10 | (1) |
|
1.4.2 Cellular Automaton Evolution Rules |
|
|
10 | (1) |
|
1.4.3 Modeling Cellular Automata |
|
|
11 | (3) |
|
1.5 Semantic Foundations of MDE: the Meaning of Models |
|
|
14 | (3) |
|
1.5.1 Basics of Denotational Semantics |
|
|
14 | (1) |
|
1.5.2 Underspecification and Interpretation in the Real World |
|
|
15 | (1) |
|
1.5.3 Operations on Models |
|
|
16 | (1) |
|
|
17 | (2) |
|
Chapter 2 What's a Modeling Language? |
|
|
19 | (26) |
|
2.1 Why We Need Modeling Languages |
|
|
20 | (1) |
|
|
21 | (9) |
|
2.2.1 Textual Concrete Syntax |
|
|
22 | (4) |
|
2.2.2 Graphical Concrete Syntax: Box-and-Line Diagrams |
|
|
26 | (2) |
|
2.2.3 Graphical Concrete Syntax: Tabular Notations |
|
|
28 | (1) |
|
2.2.4 Graphical Concrete Syntax: Trees |
|
|
29 | (1) |
|
|
30 | (5) |
|
2.3.1 Abstract Syntax of Textual Languages |
|
|
31 | (1) |
|
2.3.2 Abstract Syntax of Graphical Languages |
|
|
32 | (1) |
|
2.3.3 Concrete and Abstract Syntax Relationship |
|
|
33 | (2) |
|
2.4 Semantics of a Modeling Language |
|
|
35 | (8) |
|
2.4.1 Denotational Semantics |
|
|
36 | (5) |
|
2.4.2 Operational Semantics |
|
|
41 | (2) |
|
|
43 | (2) |
|
Chapter 3 Metamodeling with MOF and Ecore |
|
|
45 | (22) |
|
3.1 Metamodel and Meta-Language |
|
|
46 | (3) |
|
3.2 Metamodel, Meta-Language, Language Workbench, and Meta-Metamodel |
|
|
49 | (2) |
|
3.3 Meta-Object Facility (MOF) |
|
|
51 | (3) |
|
|
54 | (4) |
|
3.5 Representations for Machine Consumption |
|
|
58 | (4) |
|
3.5.1 Textual Representations for Machine Consumption |
|
|
60 | (1) |
|
3.5.2 Database Representation |
|
|
61 | (1) |
|
3.6 Illustrative Example: Metamodels for the Cellular Automaton |
|
|
62 | (2) |
|
|
64 | (3) |
|
Chapter 4 Metamodeling with OCL |
|
|
67 | (32) |
|
4.1 The Object Constraint Language |
|
|
68 | (8) |
|
4.1.1 Invariant and Its Context |
|
|
69 | (1) |
|
|
69 | (2) |
|
|
71 | (2) |
|
4.1.4 Quantification, Collection, Selection |
|
|
73 | (1) |
|
4.1.5 Navigation along Associations |
|
|
74 | (1) |
|
|
75 | (1) |
|
4.2 Advanced Features of OCL |
|
|
76 | (4) |
|
4.2.1 Nature of OCL: First Order and Expression Language? |
|
|
76 | (1) |
|
4.2.2 Specifying Operations in OCL |
|
|
77 | (2) |
|
4.2.3 Further Concepts of OCL |
|
|
79 | (1) |
|
4.2.4 OCL Used at Different Modeling Levels |
|
|
79 | (1) |
|
|
80 | (16) |
|
4.3.1 OCL for Context Conditions |
|
|
81 | (2) |
|
4.3.1.1 Illustrative Example: Geometry Constraints |
|
|
83 | (2) |
|
4.3.1.2 Illustrative Example: Enhanced Versions of OCL |
|
|
85 | (1) |
|
4.3.1.3 Illustrative Example: Filter Constraints |
|
|
86 | (1) |
|
4.3.1.4 Illustrative Example: Language Constraints from Metamodel Composition |
|
|
86 | (3) |
|
4.3.2 OCL for the Execution Domains (Semantics) |
|
|
89 | (1) |
|
4.3.2.1 Illustrative Example: Evaluating Expressions |
|
|
89 | (2) |
|
4.3.2.2 Illustrative Example: Describing the Effect of a Regular Geometry |
|
|
91 | (2) |
|
4.3.3 Conjunct Use of MOF and OCL |
|
|
93 | (3) |
|
|
96 | (3) |
|
Chapter 5 Building Editors and Viewers |
|
|
99 | (20) |
|
|
100 | (1) |
|
5.2 Generic versus Specific Concrete Syntax |
|
|
101 | (1) |
|
5.3 Visual Representations for Human Reading |
|
|
102 | (1) |
|
|
103 | (5) |
|
|
104 | (1) |
|
5.4.2 Customization of the Tree View |
|
|
105 | (1) |
|
5.4.3 Illustrative Example: Tree Editor for CAIR |
|
|
106 | (2) |
|
5.5 Diagram View (Box and Line) |
|
|
108 | (2) |
|
5.5.1 Generic Diagram View |
|
|
109 | (1) |
|
5.5.2 Customization of the Diagram View |
|
|
109 | (1) |
|
5.5.3 Illustrative Example: Graphical Editor for Universe Models |
|
|
110 | (1) |
|
|
110 | (5) |
|
5.6.1 Generic Textual View |
|
|
113 | (1) |
|
5.6.2 Customization of the Textual View |
|
|
113 | (1) |
|
5.6.3 Illustrative Example: A Textual Editor for Cellular Automation Evolution Rules |
|
|
114 | (1) |
|
|
115 | (2) |
|
|
117 | (2) |
|
Chapter 6 Model Transformation: from Contemplative to Productive Models |
|
|
119 | (16) |
|
|
120 | (1) |
|
6.2 Overview of Model Transformations |
|
|
121 | (5) |
|
6.2.1 Model-to-Text vs. Model-to-Model |
|
|
122 | (1) |
|
6.2.2 Homogeneous vs. Heterogeneous |
|
|
122 | (1) |
|
6.2.3 Declarative vs. Imperative |
|
|
122 | (3) |
|
6.2.4 Unidirectional vs. Bidirectional |
|
|
125 | (1) |
|
|
125 | (1) |
|
6.3 Kermeta: An Executable Metamodeling Approach |
|
|
126 | (7) |
|
6.3.1 Kermeta as an Ecore Extension |
|
|
126 | (1) |
|
6.3.2 Kermeta as an Xtend Extension |
|
|
127 | (1) |
|
6.3.3 Kermeta as an OCL Extension |
|
|
127 | (1) |
|
6.3.4 Kermeta as a Metamodel Integration Platform |
|
|
128 | (1) |
|
6.3.5 Examples with Kermeta |
|
|
129 | (4) |
|
6.3.6 Scaling Up Transformations in Kermeta |
|
|
133 | (1) |
|
|
133 | (2) |
|
|
135 | (18) |
|
7.1 Ingredients for Interpretation |
|
|
136 | (2) |
|
|
136 | (1) |
|
7.1.2 Computational Steps |
|
|
137 | (1) |
|
7.2 Design Pattern Interpreter |
|
|
138 | (1) |
|
7.3 Combining the Interpreter and Visitor Design Patterns |
|
|
139 | (7) |
|
|
139 | (1) |
|
7.3.2 Illustrative Example: Interpreter for Cellular Automaton Using a Visitor |
|
|
140 | (6) |
|
7.4 Aspect Weaving with Static Introduction |
|
|
146 | (6) |
|
|
146 | (1) |
|
7.4.2 Illustrative Example: Operational Semantics for Cellular Automaton Using Static Introduction |
|
|
147 | (2) |
|
7.4.3 Adding Runtime Data Using Static Introduction |
|
|
149 | (1) |
|
7.4.4 Modeling the Interpreter Runtime Data |
|
|
150 | (2) |
|
|
152 | (1) |
|
Chapter 8 Refactoring and Refinement |
|
|
153 | (22) |
|
|
154 | (5) |
|
|
154 | (2) |
|
|
156 | (1) |
|
8.1.3 Refinements, Refactorings, and Compositions |
|
|
157 | (2) |
|
8.1.4 Testing Refactorings and Refinements |
|
|
159 | (1) |
|
8.2 Applying Model Refactoring |
|
|
159 | (7) |
|
8.2.1 Illustrative Example: CAIR-Lite Refactoring |
|
|
160 | (2) |
|
8.2.2 Illustrative Example: CAER Refactoring |
|
|
162 | (4) |
|
8.3 Applying Model Refinement |
|
|
166 | (7) |
|
8.3.1 Example and Caveats: Data Structure Refinement |
|
|
166 | (3) |
|
8.3.2 Example: Data Structure Refinement with OCL |
|
|
169 | (1) |
|
8.3.3 Example: Behavioral Refinement with OCL |
|
|
170 | (1) |
|
8.3.4 Example: Behavioral Refinement with State Machines |
|
|
171 | (2) |
|
|
173 | (2) |
|
|
175 | (36) |
|
9.1 Usefulness of Text and Code Generation |
|
|
176 | (3) |
|
9.2 Model-to-Text Transformations |
|
|
179 | (10) |
|
9.2.1 General Purpose Transformation Languages for Text Generation |
|
|
180 | (1) |
|
9.2.2 Illustrative Example: Straightforward Approach |
|
|
181 | (3) |
|
9.2.3 Template-Based Languages |
|
|
184 | (1) |
|
9.2.4 Illustrative Example: Template Approach |
|
|
185 | (3) |
|
|
188 | (1) |
|
9.2.6 Mixing All Approaches |
|
|
189 | (1) |
|
|
189 | (2) |
|
9.3.1 Illustrative Example: Code Generation |
|
|
190 | (1) |
|
9.4 Documentation Generation |
|
|
191 | (4) |
|
9.4.1 Illustrative Example: Documentation Generation for a Universe Model |
|
|
193 | (2) |
|
|
195 | (4) |
|
9.5.1 Illustrative Example: Generation of VM Model from Initialization Rules |
|
|
196 | (3) |
|
9.6 Test Generation: Model-Based Validation and Verification |
|
|
199 | (10) |
|
|
199 | (1) |
|
9.6.2 Model-Based Testing |
|
|
200 | (1) |
|
9.6.2.1 Formal Verification of Properties |
|
|
200 | (1) |
|
9.6.2.2 Intensive Simulation |
|
|
201 | (1) |
|
|
201 | (1) |
|
9.6.3 Automatic Test Generation: A Use Case-Driven Approach |
|
|
202 | (1) |
|
9.6.3.1 Principle of the Approach |
|
|
202 | (3) |
|
9.6.3.2 Simulating the Use Cases |
|
|
205 | (1) |
|
9.6.3.3 Exhaustive Simulation and Transition System |
|
|
205 | (2) |
|
9.6.3.4 Generating Test Cases from Test Objectives and Sequence Diagrams |
|
|
207 | (2) |
|
|
209 | (2) |
|
Chapter 10 "Variability Management |
|
|
211 | (22) |
|
10.1 Context of Software Product Lines |
|
|
212 | (1) |
|
10.2 Modeling Variability with Feature Diagrams |
|
|
213 | (2) |
|
10.3 Advanced Variability Modeling Methods |
|
|
215 | (1) |
|
10.4 Amalgamated Approach |
|
|
216 | (2) |
|
10.4.1 Annotate a Base Model by Means of Ad hoc Extensions |
|
|
216 | (1) |
|
10.4.2 Combine a Reusable Variability Metamodel with Different Domain Metamodels |
|
|
217 | (1) |
|
10.5 Separating the Assets and the Variability Concern |
|
|
218 | (5) |
|
10.6 Exploitation of Variability Models |
|
|
223 | (8) |
|
10.6.1 Automated Analysis of Feature Models |
|
|
223 | (2) |
|
10.6.2 Multi-Views and Compositional Approaches |
|
|
225 | (1) |
|
10.6.3 Product Derivation |
|
|
226 | (1) |
|
10.6.3.1 Derivation in Amalgamated Approaches |
|
|
226 | (2) |
|
10.6.3.2 Product Derivation in Separated Approaches: The CVL Example |
|
|
228 | (1) |
|
|
229 | (2) |
|
|
231 | (2) |
|
Chapter 11 "Scaling Up Modeling |
|
|
233 | (28) |
|
11.1 Heterogeneous Modeling |
|
|
234 | (3) |
|
11.2 Model Merging and Weaving |
|
|
237 | (15) |
|
11.2.1 Models and Aspects |
|
|
238 | (2) |
|
11.2.2 Design and Aspect Weaving |
|
|
240 | (1) |
|
11.2.3 Weaving Aspects at Model Level |
|
|
241 | (2) |
|
11.2.4 Weaving Aspects in Sequence Diagrams |
|
|
243 | (2) |
|
11.2.5 Weaving More than One Aspect: The Detection Problem |
|
|
245 | (2) |
|
11.2.6 Weaving More than One Aspect: The Composition Problem |
|
|
247 | (1) |
|
|
248 | (2) |
|
11.2.8 Building Project-Specific Aspect Weavers with Kermeta |
|
|
250 | (1) |
|
11.2.9 Merging and Weaving: Wrapup |
|
|
251 | (1) |
|
11.3 Language Reuse with Model Typing |
|
|
252 | (4) |
|
11.3.1 Limits of the Conformance Relations |
|
|
253 | (1) |
|
|
254 | (2) |
|
|
256 | (2) |
|
11.5 Software Language Engineering |
|
|
258 | (2) |
|
|
260 | (1) |
|
Chapter 12 "Wrapup: Metamodeling Process |
|
|
261 | (12) |
|
|
262 | (1) |
|
|
262 | (1) |
|
12.3 Metamodeling Process |
|
|
263 | (5) |
|
12.4 Metamodeling Process Variants |
|
|
268 | (1) |
|
12.5 Metamodeling Guidelines |
|
|
269 | (3) |
|
12.5.1 Decompose Large Transformations into Smaller Ones |
|
|
270 | (1) |
|
12.5.2 Illustrative Example: Reusing Existing Smaller Transformations |
|
|
270 | (1) |
|
12.5.3 Illustrative Example: Using a Transformation Generator |
|
|
270 | (1) |
|
12.5.4 Illustrative Example: Reducing Transformation Complexity |
|
|
271 | (1) |
|
12.6 Illustrative Example: Process Followed to Build Cellular Automaton Tooling |
|
|
272 | (1) |
|
Chapter 13 "Language Engineering: The Logo Example |
|
|
273 | (20) |
|
|
273 | (1) |
|
|
274 | (1) |
|
13.3 Weaving Static Semantics |
|
|
275 | (5) |
|
13.3.1 The Object Constraint Language |
|
|
275 | (3) |
|
13.3.2 Expressing the Logo Static Semantics in OCL |
|
|
278 | (1) |
|
13.3.3 Adding the Logo Static Semantics to Its Metamodel |
|
|
278 | (2) |
|
13.4 Weaving Dynamic Semantics to Get an Interpreter |
|
|
280 | (6) |
|
13.4.1 Logo Runtime Model |
|
|
280 | (2) |
|
13.4.2 Operational Semantics |
|
|
282 | (2) |
|
13.4.3 Getting an Interpreter |
|
|
284 | (2) |
|
13.5 Compilation as a Kind of Model Transformation |
|
|
286 | (2) |
|
13.6 Model-to-Model Transformation |
|
|
288 | (2) |
|
|
290 | (2) |
|
|
292 | (1) |
|
Chapter 14 "Model-Driven Engineering of a Role-Playing Game |
|
|
293 | (26) |
|
|
294 | (1) |
|
14.2 Metamodeling the SRD 3.5 |
|
|
295 | (12) |
|
14.2.1 Main Concepts of the SRD 3.5 |
|
|
295 | (4) |
|
14.2.2 Metamodeling the SRD Rules |
|
|
299 | (1) |
|
14.2.3 Implementing the SRD Metamodel |
|
|
300 | (1) |
|
14.2.3.1 The Core Package |
|
|
300 | (2) |
|
14.2.3.2 The Expression Package |
|
|
302 | (1) |
|
14.2.3.3 The Action Package |
|
|
303 | (1) |
|
14.2.3.4 The Bonus Package |
|
|
303 | (2) |
|
14.2.4 Example: Creating a Tiny Rule Set |
|
|
305 | (2) |
|
14.3 Weaving Dynamic Semantics to Get an Interpreter |
|
|
307 | (2) |
|
|
307 | (1) |
|
14.3.2 Mapping the Abstract Syntax to the Runtime Model |
|
|
308 | (1) |
|
14.4 Compilation of a Web-Based Editor |
|
|
309 | (4) |
|
|
309 | (1) |
|
14.4.2 Overview of JHipster |
|
|
309 | (2) |
|
14.4.3 Targeting JHipster |
|
|
311 | (2) |
|
|
313 | (4) |
|
14.5.1 Random Intensive Testing |
|
|
314 | (1) |
|
14.5.2 Exhaustive Testing |
|
|
315 | (1) |
|
|
316 | (1) |
|
|
317 | (2) |
|
Chapter 15 "Civil/Construction Engineering: The BIM Example |
|
|
319 | (22) |
|
|
320 | (3) |
|
15.2 Abstract Syntax of Buildings |
|
|
323 | (1) |
|
15.2.1 Industry Foundation Classes |
|
|
323 | (1) |
|
15.3 Model Storage: Large Models |
|
|
324 | (2) |
|
|
326 | (1) |
|
15.5 Case Study: Clash Detection |
|
|
327 | (1) |
|
15.6 Case Study: Quantity Take-Off |
|
|
328 | (13) |
|
15.6.1 Background: Description of the Domain |
|
|
328 | (1) |
|
15.6.2 Automated Estimator: Buildings and Bills |
|
|
329 | (2) |
|
15.6.2.1 The Intelligent Building Model Language |
|
|
331 | (2) |
|
15.6.2.2 The Bill of Quantities Language |
|
|
333 | (1) |
|
15.6.3 The Take-Off Rules Language and Tool Support |
|
|
334 | (1) |
|
|
335 | (2) |
|
15.6.3.2 Tool Support for Quantity Take-Off |
|
|
337 | (1) |
|
15.6.3.3 Traceability and Debugging |
|
|
338 | (3) |
References |
|
341 | (18) |
Index |
|
359 | |