如何在UML序列图中描述C#yield return?
比如说,如何在UML序列图中描述C#yield return?,c#,uml,yield,C#,Uml,Yield,比如说, using System; using System.Collections; namespace ConsoleApplication { class A : IEnumerable { B b; public A() { b = new B(); } public IEnumerator GetEnumerator() {
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] | | |
| | | | |
| | | | |
| | | | |
| | | | |
+--------------------------------------------------------------------+
| | |
| | |
+------------+ +------------+ +------------+
|计划A | B|
+-----+------+ +------+-----+ +------+-----+
| | |
| | |
| | |
| | |
+-----+--------------------------------------------------------------+
|循环| |[0]| ||
+-----+ | | | |
| | | | |
| | | | |
| | | | |
+--------------------------------------------------------------------+
| | [1] | | |
| | | | |
| | | | |
| | | | |
| | | | |
+--------------------------------------------------------------------+
| | [2] | | |
| | | | |
| | | | |
| | | | |
| | | | |
+--------------------------------------------------------------------+
| | [3] | | |
| | | | |
| | | | |
| | | | |
| | | | |
+--------------------------------------------------------------------+
| | [4] | | |
| | | | |
| | | | |
| | | | |
| | | | |
+--------------------------------------------------------------------+
| | |
| | |
编辑:
我正在分析Unity3D插件的源代码。IEnumerator和yield用于实现协同程序模型。协同程序用作线程的替代方案。因此,在序列图中显示协同路由的逻辑部分是合理的。对于序列图,您可以定义循环(while loop),只要涉及到yield关键字的执行,请参考下面的链接
我认为此链接将帮助您理解为什么收益率可以表示为循环。我个人不这么认为。序列图更适合于对象之间交互的一系列步骤。如果这些步骤只是同一动作的重复,在一系列值中迭代,那么对我来说似乎没有什么用处。@PeterDuniho也许最好澄清一下,我正在阅读一些用Unity3D编写的代码。IEnumerator和yield用于实现协同程序模型。协同程序用作线程的替代方案。因此,说这些步骤只是我将与@PeterDuniho一起执行的相同操作的重复是不恰当的。在大多数情况下,以图形方式描述代码没有任何附加值。SDs应用于通信概述。代码更好地描述算法。尽量减少SDs中区域的使用@ThomasKilian SDs应用于通信概述。是的,我的意思是向其他人解释源代码,展示类的交互很重要。类的交互不是程序逻辑。以图形方式绘制for循环。这不是一个概述,而是一个算法的描述。