User Tools

Site Tools


v070:language

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
v070:language [2018/10/08 14:39]
djnemeth [Action code]
v070:language [2018/10/08 16:15] (current)
djnemeth [Collections]
Line 243: Line 243:
 </​code>​ </​code>​
  
-Naturally, you can also concretize type parameter ''​T''​ in the definition to obtain a non-generic collection type. Defining custom collections is not possible in //XtxtUML// yet. See section [[v070:​language#​Action code]] for usage examples.+Naturally, you can also concretize type parameter ''​T''​ in the definition to obtain a non-generic collection type. Defining custom collections is not possible in //XtxtUML// yet. See section [[v070:​language#​Collection operations]] for usage examples.
 ==== Model enums ==== ==== Model enums ====
  
Line 649: Line 649:
 A obj3 = create A(p1, ..., pn) as "​name3";​ A obj3 = create A(p1, ..., pn) as "​name3";​
 A obj4 = new A(p1, ..., pn) as "​name4";​ A obj4 = new A(p1, ..., pn) as "​name4";​
 +  // names appear in logs
 </​code>​ </​code>​
  
Line 655: Line 655:
 // JtxtUML: // JtxtUML:
 // With parameters p1, ..., pn. // With parameters p1, ..., pn.
-obj = Action.create(A.class,​ p1, ..., pn);+obj1 = Action.create(A.class,​ p1, ..., pn); 
 +A obj2 = Action.createWithName(A.class,​ "​name2",​ p1, ..., pn); 
 +  // names appear in logs
 </​code>​ </​code>​
  
Line 674: Line 676:
 <​code>​ <​code>​
 // XtxtUML: // XtxtUML:
-link(AB.a, instanceOfA,​ AB.b, instanceOfB);​ 
  
 +// Explicit version:
 link instanceOfA as AB.a, instanceOfB as AB.b via AB; link instanceOfA as AB.a, instanceOfB as AB.b via AB;
-// as is optional and can be ommited if association ends can be infered.+ 
 +// Short version:
 link instanceOfA,​ instanceOfB via AB; link instanceOfA,​ instanceOfB via AB;
 +  // '​as'​ parts are optional and can be omitted
 +  // if matching ends are inferrable.
  
 // In case of the following association definition: // In case of the following association definition:
Line 693: Line 698:
 // In case of the following association definition: // In case of the following association definition:
 class AB extends Association { class AB extends Association {
-  class a extends ​Some<A> {} +  class a extends ​End<​OneToAny<A>> {} 
-  class b extends ​Some<B> {}+  class b extends ​End<​OneToAny<B>> {}
 } }
 </​code>​ </​code>​
Line 702: Line 707:
 <​code>​ <​code>​
 // XtxtUML: // XtxtUML:
 +// Explicit version:
 unlink instanceOfA as AB.a, instanceOfB as AB.b via AB; unlink instanceOfA as AB.a, instanceOfB as AB.b via AB;
-// Or+ 
 +// Short version:
 unlink instanceOfA,​ instanceOfB via AB; unlink instanceOfA,​ instanceOfB via AB;
 +  // '​as'​ parts are optional and can be omitted
 +  // if matching ends are inferrable.
 </​code>​ </​code>​
  
Line 716: Line 725:
 <​code>​ <​code>​
 // XtxtUML: // XtxtUML:
-Collection<B> all = instanceOfA->​(AB.b);​ // the parentheses after -> are mandatory +OneToAny<B> all = instanceOfA->​(AB.b);​ // the parentheses after -> are mandatory 
-B obj = all.selectAny();+B obj = all.one();
 </​code>​ </​code>​
  
 <code java> <code java>
 // JtxtUML: // JtxtUML:
-Collection<B> all = instanceOfA.assoc(AB.b.class);​ +OneToAny<B> all = instanceOfA.assoc(AB.b.class);​ 
-B obj = all.selectAny();+B obj = all.one();
 </​code>​ </​code>​
  
-Note: even in //​XtxtUML//,​ the ''​selectAny()''​ call can be performed directly on the navigation expression:+Note: even in //​XtxtUML//,​ the ''​one()''​ call can be performed directly on the navigation expression:
  
 <​code>​ <​code>​
 // XtxtUML: // XtxtUML:
-B obj = instanceOfA->​(AB.b).selectAny();+B obj = instanceOfA->​(AB.b).one(); 
 +</​code>​ 
 + 
 +=== Collection operations === 
 + 
 +<​code>​ 
 +// XtxtUML: 
 +B b1 = create B(); 
 +B b2 = create B(); 
 + 
 +Any<​B>​ bs = collect(b1, b2); 
 +bs.one(); // b1 or b2, bs is not ordered 
 + 
 +Any<​B>​ bs2 = bs.add(create B()); 
 +bs2.size(); // 3 
 +bs.size(); // 2, txtUML collections are immutable 
 + 
 +OrderedAny<​B>​ obs = collectIn(OrderedAny,​ b1, b2); 
 +obs.one(); // b1, obs is ordered 
 + 
 +bs = obs.^as(Any);​ // '​as'​ has to be escaped 
 +  // target type is less restrictive,​ no problem 
 + 
 +UniqueAny<​B>​ ubs = collectIn(UniqueAny,​ b1, b1); 
 +ubs.size(); // 1, ubs is unique 
 +   
 +// Runtime error examples: 
 +//   - multiplicity violation 
 +//   - calling one() on empty collection 
 +//   - unordered -> ordered conversion 
 +//   - non-unique -> unique conversion 
 +</​code>​ 
 + 
 +<code java> 
 +// JtxtUML: 
 +B b1 = Action.create(B.class);​ 
 +B b2 = Action.create(B.class);​ 
 + 
 +Any<​B>​ bs = Action.collect(b1,​ b2); 
 +bs.one(); // b1 or b2, bs is not ordered 
 + 
 +Any<​B>​ bs2 = bs.add(Action.create(B.class));​ 
 +bs2.size(); // 3 
 +bs.size(); // 2, txtUML collections are immutable 
 + 
 +OrderedAny<​B>​ obs = Action.collectIn(OrderedAny.class,​ b1, b2); 
 +obs.one(); // b1, obs is ordered 
 + 
 +bs = obs.as(Any.class);​ 
 +  // target type is less restrictive,​ no problem 
 + 
 +UniqueAny<​B>​ ubs = Action.collectIn(UniqueAny.class,​ b1, b1); 
 +ubs.size(); // 1, ubs is unique 
 +   
 +// Runtime error examples: 
 +//   - multiplicity violation 
 +//   - calling one() on empty collection 
 +//   - unordered -> ordered conversion 
 +//   - non-unique -> unique conversion
 </​code>​ </​code>​
  
Line 737: Line 804:
 <​code>​ <​code>​
 // XtxtUML: // XtxtUML:
-connect aObj->​(A.P),​ bObj->​(B.Q) via CAB; +Explicit version: 
-connect aObj->​(A.P) as CAB.e, bObj->​(B.Q) via CAB; +connect ​instanceOfA->(A.P) as CAB.e, ​instanceOfB->(B.Q) as CAB.f via CAB;
-connect aObj->​(A.P),​ bObj->​(B.Q) as CAB.f via CAB; +
-connect ​aObj->(A.P) as CAB.e, ​bObj->(B.Q) as CAB.f via CAB;+
  
-//In case of the following connector+Short version: 
 +connect instanceOfA->​(A.P),​ instanceOfB->​(B.Q) via CAB; 
 +  // '​as'​ parts are optional and can be omitted 
 +  // if matching ends are inferrable. 
 + 
 +// In case of the following connector ​definition:
 connector CAB { connector CAB {
- CA.a->​A.P e; +  ​CA.a->​A.P e; 
- CB.b->​B.Q f;+  CB.b->​B.Q f;
 } }
 </​code>​ </​code>​
Line 753: Line 823:
 Action.connect(CA.e.class,​ aObj.port(A.P.class),​ Action.connect(CA.e.class,​ aObj.port(A.P.class),​
                ​CB.f.class,​ bObj.port(B.Q.class));​                ​CB.f.class,​ bObj.port(B.Q.class));​
 +
 +// In case of the following connector definition:
 +class CAB extends Connector {
 +  class e extends One<​CA.a,​ A.P>;
 +  class f extends One<​CB.b,​ B.Q>;
 +}
 </​code>​ </​code>​
  
Line 795: Line 871:
 // XtxtUML: // XtxtUML:
 log "​message";​ log "​message";​
-log-error "Error message";​+log-error "error message";​
 </​code>​ </​code>​
  
Line 801: Line 877:
 // JtxtUML: // JtxtUML:
 Action.log("​message"​);​ Action.log("​message"​);​
-Action.logError("​Error message"​);​+Action.logError("​error message"​);​
 </​code>​ </​code>​
  
v070/language.1539002360.txt.gz · Last modified: 2018/10/08 14:39 by djnemeth