<
From version < 69.2 >
edited by Alexander Schulz-Rosengarten
on 2023/07/11 10:37
To version < 73.1 >
edited by Richard Kreissig
on 2023/09/14 09:16
>
Change comment: There is no comment for this version

Summary

Details

Page properties
Author
... ... @@ -1,1 +1,1 @@
1 -XWiki.als
1 +XWiki.stu230980
Content
... ... @@ -1,6 +4,3 @@
1 -{{layout}}
2 -{{layout-section ac:type="single"}}
3 -{{layout-cell}}
4 4  This is a light-weight tutorial for developing transformations/additions for SCCharts in KIELER. It will use Eclipse, EMF, and Xtend and therefore, finishing the corresponding tutorials could prove useful. However, they are not a strict requirement for this tutorial.
5 5  
6 6  {{warning title="Outdated!"}}
... ... @@ -7,7 +7,6 @@
7 7  The KiCo part "Model-to-Model Transformations with KiCo" is outdated. We will update this tutorials in the near future.
8 8  {{/warning}}
9 9  
10 -\\
11 11  
12 12  
13 13  
... ... @@ -20,13 +20,9 @@
20 20  == Required Software ==
21 21  
22 22  As you're going to develop for KIELER SCCharts, we recommend to use the Oomph setup as described in [[doc:KIELER.Getting Eclipse]] (Oomph Setup). However, you could also install all componentes by yourself. Please consult the other tutorials if you want to do that. You would need to install the Modeling Tools and the Xtext SDK.
23 -{{/layout-cell}}
24 -{{/layout-section}}
25 25  
26 -{{layout-section ac:type="three_equal"}}
27 -{{layout-cell}}
28 -\\
29 29  
21 +
30 30  Additionally, install the** EcoreViz** from the **Ecore Model Visualization** category from the **OpenKieler** update site: [[http:~~/~~/rtsys.informatik.uni-kiel.de/~~~~kieler/updatesite/nightly-openkieler/>>url:http://rtsys.informatik.uni-kiel.de/~~kieler/updatesite/nightly-openkieler/||rel="nofollow" shape="rect"]]. For this, choose //Install New Software...// in the //Help// tab.
31 31  
32 32  Due to the ongoing migration you have to install a workaround for EcoreViz to function. You have to install the KLighD diagram view directly from [[http:~~/~~/rtsys.informatik.uni-kiel.de/~~~~kieler/updatesite/release_pragmatics_2016-02/>>url:http://rtsys.informatik.uni-kiel.de/~~kieler/updatesite/release_pragmatics_2016-02/||shape="rect"]]. Select the features
... ... @@ -35,25 +35,14 @@
35 35  * KIELER Lightweight Diagrams Generic Diagram View.
36 36  
37 37  (This step should be obsolete in the near future.)
38 -{{/layout-cell}}
39 39  
40 -{{layout-cell}}
41 -\\
42 42  
43 43  [[image:attach:InstallEcoreViz.png]]
44 44  
45 -\\
46 -{{/layout-cell}}
47 47  
48 -{{layout-cell}}
49 -\\
50 50  
51 51  [[image:attach:InstallKLighDFeatures.png]]
52 -{{/layout-cell}}
53 -{{/layout-section}}
54 54  
55 -{{layout-section ac:type="single"}}
56 -{{layout-cell}}
57 57  == Recommended Tutorials ==
58 58  
59 59  We recommend that you have completed the following tutorials before diving into this one (or at least sweep over them). However, this is not a strict requirement.
... ... @@ -70,7 +70,7 @@
70 70  
71 71  When developing within the KIELER semantics team, you will most likely be confronted with Xtext and [[doc:KIELER.Lightweight Diagrams (KLighD)]]. The following tutorials may be helpful but not required for this tutorial.
72 72  
73 -1. [[doc:KIELER.Tutorials.Xtext and Xtend.Xtext 2 - Creating a Grammar from Scratch.WebHome]]
54 +1. [[doc:KIELER.Development.Tutorials.Xtext and Xtend.Xtext 2 - Creating a Grammar from Scratch.WebHome]]
74 74  1. [[doc:KIELER.Development.Tutorials.Diagrams and Layout.Lightweight Diagrams (KLighD).WebHome]]
75 75  
76 76  == Finding Documentation ==
... ... @@ -81,21 +81,16 @@
81 81  
82 82  Additionally, the following list will give a short overview over the most important publications:
83 83  
84 -* (% style="color: rgb(0,0,0);" %)**Main paper:**
85 -Reinhard von Hanxleden and Björn Duderstadt and Christian Motika and Steven Smyth and Michael Mendler and Joaquín Aguado and Stephen Mercer and Owen O’Brien. SCCharts: Sequentially Constructive Statecharts for Safety-Critical Applications. In (% class="cmti-10" %)Proc. ACM SIGPLAN Conference on Programming Language Design(%%) (% class="cmti-10" %)and Implementation (PLDI’14)(%%), Edinburgh, UK, June 2014. ACM. [[pdf>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/downloads/papers/pldi14.pdf||shape="rect"]](% style="color: rgb(0,0,0);" %), (%%)[[talk>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/downloads/talks/pldi14-talk.pdf||shape="rect"]](% style="color: rgb(0,0,0);" %), (%%)[[bib>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/cgi-bin/bibcgi.cgi?key=vonHanxledenDM+14||shape="rect"]]
65 +* (% style="color:#000000" %)**Main paper:**(%%)
66 +(% style="color:#000000" %)Reinhard von Hanxleden and Björn Duderstadt and Christian Motika and Steven Smyth and Michael Mendler and Joaquín Aguado and Stephen Mercer and Owen O’Brien. SCCharts: Sequentially Constructive Statecharts for Safety-Critical Applications. In (% class="cmti-10" %)Proc. ACM SIGPLAN Conference on Programming Language Design(%%) (% class="cmti-10" %)and Implementation (PLDI’14)(%%), Edinburgh, UK, June 2014. ACM. [[pdf>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/downloads/papers/pldi14.pdf||shape="rect"]](% style="color:#000000" %), (%%)[[talk>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/downloads/talks/pldi14-talk.pdf||shape="rect"]](% style="color:#000000" %), (%%)[[bib>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/cgi-bin/bibcgi.cgi?key=vonHanxledenDM+14||shape="rect"]]
86 86  * **SLIC Compilation:**
87 -(% style="color: rgb(0,0,0);" %)Christian Motika and Steven Smyth and Reinhard von Hanxleden. Compiling SCCharts—A Case-Study on Interactive Model-Based Compilation. In (% class="cmti-10" %)Proceedings of(%%) (% class="cmti-10" %)the 6th International Symposium on Leveraging Applications of Formal(%%) (% class="cmti-10" %)Methods, Verification and Validation (ISoLA 2014)(%%), volume 8802 of (% class="cmti-10" %)LNCS(%%), page 443–462, Corfu, Greece, October 2014. The [[original publication>>url:http://dx.doi.org/10.1007/978-3-662-45234-9||shape="rect"]](% style="color: rgb(0,0,0);" %) is available at (%%)[[http:~~/~~/link.springer.com>>url:http://link.springer.com/||shape="rect"]](% style="color: rgb(0,0,0);" %). (%%)[[pdf>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/downloads/papers/isola14.pdf||shape="rect"]](% style="color: rgb(0,0,0);" %), (%%)[[bib>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/cgi-bin/bibcgi.cgi?key=MotikaSvH14||shape="rect"]]
68 +(% style="color:#000000" %)Christian Motika and Steven Smyth and Reinhard von Hanxleden. Compiling SCCharts—A Case-Study on Interactive Model-Based Compilation. In (% class="cmti-10" %)Proceedings of(%%) (% class="cmti-10" %)the 6th International Symposium on Leveraging Applications of Formal(%%) (% class="cmti-10" %)Methods, Verification and Validation (ISoLA 2014)(%%), volume 8802 of (% class="cmti-10" %)LNCS(%%), page 443–462, Corfu, Greece, October 2014. The [[original publication>>url:http://dx.doi.org/10.1007/978-3-662-45234-9||shape="rect"]](% style="color:#000000" %) is available at (%%)[[http:~~/~~/link.springer.com>>url:http://link.springer.com/||shape="rect"]](% style="color:#000000" %). (%%)[[pdf>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/downloads/papers/isola14.pdf||shape="rect"]](% style="color:#000000" %), (%%)[[bib>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/cgi-bin/bibcgi.cgi?key=MotikaSvH14||shape="rect"]]
88 88  * **Theoretical Foundations:**
89 -(% style="color: rgb(0,0,0);" %)Reinhard von Hanxleden and Michael Mendler and Joaquín Aguado and Björn Duderstadt and Insa Fuhrmann and Christian Motika and Stephen Mercer and Owen O’Brien and Partha Roop. Sequentially Constructive Concurrency—A Conservative Extension of the Synchronous Model of Computation. (% class="cmti-10" %)ACM Transactions on Embedded Computing(%%) (% class="cmti-10" %)Systems, Special Issue on Applications of Concurrency to System Design(%%), 13(4s):144:1–144:26, July 2014. [[pdf>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/downloads/papers/tecs14.pdf||shape="rect"]](% style="color: rgb(0,0,0);" %), (%%)[[bib>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/cgi-bin/bibcgi.cgi?key=vonHanxledenMA+14||shape="rect"]]
70 +(% style="color:#000000" %)Reinhard von Hanxleden and Michael Mendler and Joaquín Aguado and Björn Duderstadt and Insa Fuhrmann and Christian Motika and Stephen Mercer and Owen O’Brien and Partha Roop. Sequentially Constructive Concurrency—A Conservative Extension of the Synchronous Model of Computation. (% class="cmti-10" %)ACM Transactions on Embedded Computing(%%) (% class="cmti-10" %)Systems, Special Issue on Applications of Concurrency to System Design(%%), 13(4s):144:1–144:26, July 2014. [[pdf>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/downloads/papers/tecs14.pdf||shape="rect"]](% style="color:#000000" %), (%%)[[bib>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/cgi-bin/bibcgi.cgi?key=vonHanxledenMA+14||shape="rect"]]
90 90  * **Overview and High-Level Transformations in Detail:**
91 -(% style="color: rgb(0,0,0);" %)Reinhard von Hanxleden and Björn Duderstadt and Christian Motika and Steven Smyth and Michael Mendler and Joaquín Aguado and Stephen Mercer and Owen O’Brien. SCCharts: Sequentially Constructive Statecharts for Safety-Critical Applications. Technical Report 1311, Christian-Albrechts-Universität zu Kiel, Department of Computer Science, December 2013. ISSN 2192-6247. (%%)[[pdf>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/downloads/papers/report-1311.pdf||shape="rect"]](% style="color: rgb(0,0,0);" %), (%%)[[bib>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/cgi-bin/bibcgi.cgi?key=vonHanxledenDM+13b||shape="rect"]]
72 +(% style="color:#000000" %)Reinhard von Hanxleden and Björn Duderstadt and Christian Motika and Steven Smyth and Michael Mendler and Joaquín Aguado and Stephen Mercer and Owen O’Brien. SCCharts: Sequentially Constructive Statecharts for Safety-Critical Applications. Technical Report 1311, Christian-Albrechts-Universität zu Kiel, Department of Computer Science, December 2013. ISSN 2192-6247.  (%%)[[pdf>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/downloads/papers/report-1311.pdf||shape="rect"]](% style="color:#000000" %), (%%)[[bib>>url:http://rtsys.informatik.uni-kiel.de/~~biblio/cgi-bin/bibcgi.cgi?key=vonHanxledenDM+13b||shape="rect"]]
92 92  
93 -\\
94 -{{/layout-cell}}
95 -{{/layout-section}}
96 96  
97 -{{layout-section ac:type="two_right_sidebar"}}
98 -{{layout-cell}}
99 99  = The SCCharts Metamodel =
100 100  
101 101  Navigate to the {{code language="none"}}models{{/code}} folder of the plugin {{code language="none"}}de.cau.cs.kieler.sccharts{{/code}}. Here, open the {{code language="none"}}sccharts.ecore{{/code}} and right-click on the {{code language="none"}}sccharts.ecore{{/code}} file and select //Visualize Ecore Model//. Since you also installed **EcoreViz** from the OpenKieler Suite, you should now see a graphical representation of the SCCharts metamodel. Every SCChart will be a model of this metamodel.
... ... @@ -109,10 +109,10 @@
109 109  ==== Model Task ====
110 110  
111 111  * (((
112 -(% style="line-height: 1.42857;" %)Answer the following questions
88 +(% style="line-height:1.42857" %)Answer the following questions
113 113  
114 114  1. How do you describe a superstate in the model?
115 -1. Outline the relationship between states, regions, transitions, and valued objects.\\
91 +1. Outline the relationship between states, regions, transitions, and valued objects.
116 116  1. Name the class of the root element of an SCChart.
117 117  1. What is a valued object?
118 118  1. How do you get the type of an interface variable?
... ... @@ -126,25 +126,18 @@
126 126  *1. Now, navigate to the //Super State: Strong Abort Transition //example. Write down (on paper) how the model of that SCCharts looks like.
127 127  *1. And finally a more sophisticated model: Write down the model of ABO (from [[doc:KIELER.Examples]]).
128 128  
129 -\\
130 -
131 -{{info title="KLighD Screenshots"}}
105 +{{info title="
106 +KLighD Screenshots"}}
132 132  By the way: You can //right-click// on the Diagram View surface and select //Save as image...// to create a screenshot!
133 133  {{/info}}
134 -{{/layout-cell}}
135 135  
136 -{{layout-cell}}
137 137  [[image:attach:sccharts_metamodel.png]]
138 138  
139 139  [[image:attach:sccharts_metamodel_treeEditor.png]]
140 140  
141 141  [[image:attach:KLighDSaveAsImage.png]]
142 -{{/layout-cell}}
143 -{{/layout-section}}
144 144  
145 -{{layout-section ac:type="single"}}
146 -{{layout-cell}}
147 -= Creating SCCharts Models Programmatically =
116 += Creating SCCharts Models Programmatically =
148 148  
149 149  == Creating a Test Project ==
150 150  
... ... @@ -239,27 +239,23 @@
239 239  File extensions are important! They define the parser/serializer that EMF uses. Always use the file extension that is defined for a particular model.
240 240  {{/info}}
241 241  )))
242 -{{/layout-cell}}
243 -{{/layout-section}}
244 244  
245 -{{layout-section ac:type="two_right_sidebar"}}
246 -{{layout-cell}}
247 247  ==== Model Creation Task ====
248 248  
249 249  You are now equipped with the fundamentals you need to create models programmatically. Let's try it:
250 250  
251 -* (% style="line-height: 1.42857;" %)The code fragments listed above do not suffice to create a grammatically correct model. Try to generate a model that corresponds with the serialized model listed on the right side.
252 -*1. (% style="line-height: 1.42857;" %)Run the {{code language="none"}}main(){{/code}} method by right-clicking its class and selecting //Run as// -> //Java Application//. Note that this runs your {{code language="none"}}main(){{/code}} method as a simple Java program, not a complete Eclipse application. EMF models can be used in any simple Java context, not just in Eclipse applications.
216 +* (% style="line-height:1.42857" %)The code fragments listed above do not suffice to create a grammatically correct model. Try to generate a model that corresponds with the serialized model listed on the right side.
217 +*1. (% style="line-height:1.42857" %)Run the {{code language="none"}}main(){{/code}} method by right-clicking its class and selecting //Run as// -> //Java Application//. Note that this runs your {{code language="none"}}main(){{/code}} method as a simple Java program, not a complete Eclipse application. EMF models can be used in any simple Java context, not just in Eclipse applications.
253 253  *1. Execute the main method.
254 254  *1. (((
255 -(% style="line-height: 1.42857;" %)Inspect your SCT file. (Press F5 to refresh your file view.)
220 +(% style="line-height:1.42857" %)Inspect your SCT file. (Press F5 to refresh your file view.)
256 256  
257 -{{note title="Kext Warning"}}
222 +{{info title="Kext Warning"}}
258 258  It is possible that kext generates a Null Pointer Exception when you save your model this way. This is a known issue. We're working on it. Just ignore it for now.
259 -{{/note}}
224 +{{/info}}
260 260  )))
261 261  * Now, create a new Java class and proceed as before to generate a model of ABO in the {{code language="none"}}main(){{/code}} method.
262 -* (% style="line-height: 1.42857;" %)Start your SCChart Editor Eclipse instance and load your SCT file. KLighD should now be able to visualize your ABO correctly.(%%)\\
227 +* (% style="line-height:1.42857" %)Start your SCChart Editor Eclipse instance and load your SCT file. KLighD should now be able to visualize your ABO correctly.
263 263  *1. For this, open tab //Run// and select// Run Configurations...//
264 264  *1. Create a new //Eclipse Application// and name it appropriately.
265 265  *1. As product select {{code language="none"}}de.cau.cs.kieler.core.product.product{{/code}}.
... ... @@ -266,11 +266,8 @@
266 266  *1. Click //Run// (or //Debug// if you opened// Debug Configuration...//)
267 267  *1. Create a new project and add you generated model.
268 268  
269 -\\
270 -{{/layout-cell}}
271 -
272 -{{layout-cell}}
273 -{{code language="java" title="Root.sct"}}
234 +{{code language="java" title="
235 +Root.sct"}}
274 274  scchart Root {
275 275   initial state Init
276 276   --> Init with true;
... ... @@ -278,11 +278,7 @@
278 278  {{/code}}
279 279  
280 280  [[image:attach:RunConfiguration.png]]
281 -{{/layout-cell}}
282 -{{/layout-section}}
283 283  
284 -{{layout-section ac:type="two_right_sidebar"}}
285 -{{layout-cell}}
286 286  = Model-to-Model Transformations with KiCo =
287 287  
288 288  You can use the [[Kieler Compiler>>url:http://rtsys.informatik.uni-kiel.de/confluence/display/KIELER/Kieler+Compiler||shape="rect"]] (KiCo) to handle all the model input/output tasks and concentrate on the actual transformation. If you executed the **Model Creation Task correctly**, you should now have a complete running SCT Editor instance that looks like the one on the right. You should see the //KIELER Compiler Selection// n the lower right part of the working space. Here you can select specific transformations that will be applied to the actual model. Simply select a transformation to test it.
... ... @@ -290,15 +290,9 @@
290 290  == Creating a new Transformation ==
291 291  
292 292  Now, you're going to write your own transformation with **Xtend** *drumroll*, a programming language that looks very similar to Java, but which adds some very convenient features. Xtend code compiles to Java and and was developed using Xtext. In fact, once you gain experience working with Xtend you will probably appreciate the power of Xtext even more. Xtend is particularly useful to browse & modify EMF models. You get the point... we like it. :)
293 -{{/layout-cell}}
294 294  
295 -{{layout-cell}}
296 296  [[image:attach:KielerSCTEditor.png]]
297 -{{/layout-cell}}
298 -{{/layout-section}}
299 299  
300 -{{layout-section ac:type="two_right_sidebar"}}
301 -{{layout-cell}}
302 302  ==== Transformation Creation Task ====
303 303  
304 304  * Create your first transformation...
... ... @@ -343,15 +343,7 @@
343 343  You should really think about some constants here. You can also look at the sccharts transformation and features constants in the sccharts plugin.
344 344  {{/info}}
345 345  )))
346 -{{/layout-cell}}
347 347  
348 -{{layout-cell}}
349 -\\
350 -{{/layout-cell}}
351 -{{/layout-section}}
352 -
353 -{{layout-section ac:type="two_right_sidebar"}}
354 -{{layout-cell}}
355 355  * KiCo must know about the new feature and also about your new transformation. 
356 356  *1. Add a new Xtend class with Feature as superclass. Add all unimplemented methods. Also set** sccharts.doubleStates** as Id.
357 357  *1. Go to the Extension tab inside your plugin configuration. 
... ... @@ -365,15 +365,9 @@
365 365  *111. preferred: (leave it blank)
366 366  *1. {{note title="Plugin Tasks"}}In general it is bad to mix non-ui plugins/tasks with ui plugin/tasks because (in the context of KiCo) even if you're not working with an active UI your transformations should work (e.g. a command line compiler). To keep this tutorial simple, you can add this dependency to your plugin nevertheless. However, you shouldn't do this in real products. Always keep the UI separated.{{/note}}If you start your KIELER instance now, you should get a new compilation chain which has only one transformation: yours, which doesn't do anything.
367 367  * If you want to rename your feature in the Compiler Selection (without changing its Id), override the {{code language="none"}}getName{{/code}} method and return a new name. Rename your feature appropriately.
368 -{{/layout-cell}}
369 369  
370 -{{layout-cell}}
371 371  [[image:attach:KielerSCTEditorOwnTransformation.png]]
372 -{{/layout-cell}}
373 -{{/layout-section}}
374 374  
375 -{{layout-section ac:type="two_right_sidebar"}}
376 -{{layout-cell}}
377 377  * Now, fill your transformation with life:
378 378  *1. Inside your transformation class, add a new method with the following signature: {{code language="none"}}def State transform(State rootState, KielerCompilerContext context){{/code}}. This transformation will be executed if the feature is selected in the Compiler Selection.
379 379  *1. (((
... ... @@ -408,15 +408,11 @@
408 408  Extensions are also just classes. You can add your own to improve the structure of your own projects. In KIELER all extensions end with "Extensions"; except SCChartsExtension for legacy reasons. This will be renamed in after the next snapshot to SCChartsExtensions. So, if you're going to add new extensions to the project, please name them accordingly.
409 409  {{/note}}
410 410  )))
411 -{{/layout-cell}}
412 412  
413 -{{layout-cell}}
414 414  [[image:attach:KielerSCTEditorOwnTransformationOlolo.png]]
415 -{{/layout-cell}}
416 -{{/layout-section}}
417 417  
418 -{{layout-section ac:type="two_right_sidebar"}}
419 -{{layout-cell}}
352 +
353 +
420 420  * Extend your transformation so that it is applied on all states (except the root state). Try your new transformation with ABO. The result should look like the example on the right.
421 421  
422 422  == The existing Compilation Chain ==
... ... @@ -427,22 +427,11 @@
427 427  
428 428  //We will add more content to this subsection in the future...//
429 429  
430 -\\
431 -{{/layout-cell}}
432 432  
433 -{{layout-cell}}
434 434  [[image:attach:ABODoubleStates.png]]
435 435  
436 -\\
437 437  
438 -\\
439 439  
440 -\\
441 -{{/layout-cell}}
442 -{{/layout-section}}
443 -
444 -{{layout-section ac:type="single"}}
445 -{{layout-cell}}
446 446  = Model-to-Model Transformations between Metamodels =
447 447  
448 448  Transformations from one model to another may be performed within the same metamodel or from metamodel to a different metamodel. Both methods are used in KIELER and in principle they do not really differ in implementation. Nevertheless, if working within the same metamodel you should keep in mind that you're potentially changing the actual model instead of changing another instance (after copying). When transforming to another metamodel, you're always generating a new model. So there is no in-place transformation. Both is possible. Just make sure that you know what you're doing.
... ... @@ -488,23 +488,13 @@
488 488  [[image:attach:abo_scg_HandleA.png]]
489 489  )))
490 490  )))
491 -{{/layout-cell}}
492 -{{/layout-section}}
493 493  
494 -{{layout-section ac:type="two_equal"}}
495 -{{layout-cell}}
496 496  The next figure depicts the direct mapping from normalized SCCharts to their corresponding SCG.
497 497  
498 498  Inspect the metamodel of the SCGs in plugin de.cau.cs.kieler.scg. SCGs are used for analyses and optimization and include a lot of additional elements. However, for this tutorial it should be sufficient to look at the SCGraph class, its nodes attribute, the important node classes and the controlflow class. Important nodes for this SCG are entry, exit, assignment, conditional,
499 -{{/layout-cell}}
500 500  
501 -{{layout-cell}}
502 502  [[image:attach:sccharts-scg.png]]
503 -{{/layout-cell}}
504 -{{/layout-section}}
505 505  
506 -{{layout-section ac:type="two_right_sidebar"}}
507 -{{layout-cell}}
508 508  ==== Transformation Creation Task 2 ====
509 509  
510 510  Write a transformation that transforms your normalized version of ABO's HandleA into its corresponding SCG.
... ... @@ -517,15 +517,6 @@
517 517  *1. Optimize the given SCG and compare the result with the previous one.
518 518  *1. Make sure that the two SCGs are still semantically identical.
519 519  
520 -\\
521 521  
522 522  Congratulations! You finished the SCCharts Development Tutorial. Ask your supervisor for further instructions!
523 523  
524 -\\
525 -{{/layout-cell}}
526 -
527 -{{layout-cell}}
528 -\\
529 -{{/layout-cell}}
530 -{{/layout-section}}
531 -{{/layout}}