【发布时间】:2023-04-05 07:25:01
【问题描述】:
例如,
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 部分。
+------------+ +------------+ +------------+ |程序 | |一个 | |乙| +-----+------+ +------+-----+ +------+-----+ | | | | | | | | | | | | +-----+-------------------------------------------- ------------------+ |循环 | | [0] | | | +-----+ | | | | | | | | | | | | | | | | | | | +-------------------------------------------------- ------------------+ | | [1] | | | | | | | | | | | | | | | | | | | | | | | +-------------------------------------------------- ------------------+ | | [2] | | | | | | | | | | | | | | | | | | | | | | | +-------------------------------------------------- ------------------+ | | [3] | | | | | | | | | | | | | | | | | | | | | | | +-------------------------------------------------- ------------------+ | | [4] | | | | | | | | | | | | | | | | | | | | | | | +-------------------------------------------------- ------------------+ | | | | | |编辑: 我正在分析 Unity3D 的一个插件的源代码。 IEnumerator 和 yield 用于实现协程模型。协程用作线程的替代方案。所以在时序图中展示协程的部分逻辑是合理的。
【问题讨论】:
-
就个人而言,我不会。恕我直言,序列图更适合对象之间交互的一系列步骤。如果这些步骤只是重复相同的动作,迭代一系列值,这对我来说似乎没有什么用处。
-
@PeterDuniho 也许最好明确一点,我正在阅读一些用 Unity3D 编写的代码。 IEnumerator 和 yield 用于实现 coroutine 模型。 coroutine 被用作线程的替代方案。所以说这些步骤只是相同动作的重复是不恰当的
-
我会选择@PeterDuniho。在大多数情况下,以图形方式描述代码没有附加价值。 SD 应用于通信概述。代码更好地描述算法。将 SD 中区域的使用减少到最低限度!
-
@ThomasKilian SD 应该用于通信概述。 是的,我的意思是向其他人解释源代码,显示类的交互很重要。
-
类的交互不是程序逻辑。您以图形方式绘制一个 for 循环。这不是概述,而是对算法的描述。