2015-03-13 63 views
0

例如,如何在UML序列图中描述C#收益率回报?

using System; 
using System.Collections; 

namespace ConsoleApplication 
{ 
    class A : IEnumerable 
    { 
     B b; 
     public A() 
     { 
      b = new B(); 
     } 
     public IEnumerator GetEnumerator() 
     { 
      yield return b.FunA(0); 
      yield return b.FunB(1); 
      yield return b.FunC(2); 
      yield return b.FunD(3); 
      yield return b.FunE(4); 
     } 
    } 

    class B 
    { 
     public int FunA(int x) 
     { 
      return x; 
     } 
     public int FunB(int x) 
     { 
      return x * 2; 
     } 
     public int FunC(int x) 
     { 
      return x * 3; 
     } 
     public int FunD(int x) 
     { 
      return x * 4; 
     } 
     public int FunE(int x) 
     { 
      return x * 5; 
     } 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      var a = new A(); 
      foreach(var number in a) 
      { 
       Console.WriteLine(number); 
      } 
      Console.ReadLine(); 
     } 
    } 
} 

如何描述这个节目在顺序图? 我认为它应该类似于下面的循环或alt部分。

 
       +------------+   +------------+  +------------+ 
       | Program |   |  A  |  |  B  | 
       +-----+------+   +------+-----+  +------+-----+ 
        |       |     | 
        |       |     | 
        |       |     | 
        |       |     | 
    +-----+--------------------------------------------------------------+ 
    |loop |  | [0]     |     |  | 
    +-----+  |       |     |  | 
    |    |       |     |  | 
    |    |       |     |  | 
    |    |       |     |  | 
    +--------------------------------------------------------------------+ 
    |    | [1]     |     |  | 
    |    |       |     |  | 
    |    |       |     |  | 
    |    |       |     |  | 
    |    |       |     |  | 
    +--------------------------------------------------------------------+ 
    |    | [2]     |     |  | 
    |    |       |     |  | 
    |    |       |     |  | 
    |    |       |     |  | 
    |    |       |     |  | 
    +--------------------------------------------------------------------+ 
    |    | [3]     |     |  | 
    |    |       |     |  | 
    |    |       |     |  | 
    |    |       |     |  | 
    |    |       |     |  | 
    +--------------------------------------------------------------------+ 
    |    | [4]     |     |  | 
    |    |       |     |  | 
    |    |       |     |  | 
    |    |       |     |  | 
    |    |       |     |  | 
    +--------------------------------------------------------------------+ 
        |       |     |   
        |       |     |   

编辑: 我分析Unity3D的插件的源代码。 IEnumerator和yield用于实现协同模型。协程被用作线程的替代。因此,在序列图中显示协程的逻辑部分是合理的。

+2

个人而言,我不会。序列图是IMHO更适合于对象之间交互的一系列步骤。对于我而言,这些步骤仅仅是重复同一个动作,并重复执行一系列值,这对我来说似乎并不有用。 – 2015-03-13 07:30:11

+0

@PeterDuniho也许最好说清楚,我正在阅读一些在Unity3D中编写的代码。 IEnumerator和yield用于实现_coroutine_模型。 _coroutine_用作线程的替代方案。所以说说这些步骤只是我用@PeterDuniho去做的同一个动作 – zwcloud 2015-03-13 09:22:22

+1

的重复是不合适的。在大多数情况下,用图形描述代码没有附加价值。 SD应该用于通信概述。代码描述算法要好得多。将SD中的区域使用降到最低! – 2015-03-13 11:10:11

回答

0

对于序列图,你可以定义循环(while循环),只要产量关键字的执行担心,请参考以下链接 internals of C# interators

我认为这个链接将帮助您理解为什么收益率可​​以表示作为循环。