我何时在UML中使用自我消息和递归消息?

时间:2013-04-08 18:48:12

标签: uml

我遇到了以下帖子,但很难理解它 - self message(non recursive) vs self recursive message

我还在http://www.zicomi.com/messageRecursion.jsp遇到了一个例子,希望现实世界的场景有所帮助,但这使我更加困惑。当订单传递给厨房和厨师时,为什么还需要递归消息。我认为你所需要的只是一个自我信息,即主厨完成订单然后将其传递给服务员。

1 个答案:

答案 0 :(得分:2)

厨师的例子在其展示和描述的内容中可以说是“错误的”。

简单地说,向 self 发送消息只是意味着接下来要调用的方法恰好位于同一类对象中。例如。对SavingsAccount.withdraw(anAmount)的调用可以调用SavingsAccount.getBalance()来确定是否有足够的资金来继续提款。

递归调用是对 self 的调用的特殊情况,因为它是相同的方法(具有不同的状态,因此它最终可以返回递归调用)。有些问题适合这种解决方案。一个例子是阶乘(见Factorial)。要做一个没有递归的阶乘是不可能的(至少在所有情况下,但最简单的,因为需要内联代码的量)。如果您查看阶乘代码示例,您将看到每次调用一次( factorial(n-1))并在 n 达到零时停止。如果没有递归,尝试内联一个值为1,000,000的值是不可行的。