Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop UML与算法_Oop_Uml_Use Case - Fatal编程技术网

Oop UML与算法

Oop UML与算法,oop,uml,use-case,Oop,Uml,Use Case,对于在应用程序的某些部分中可能使用的算法,我有点困惑 假设我想创建一个用例,它描述用户如何输入一组值,我的应用程序返回这些值的平均值(当然这是一个非常简单的例子,但用这种方式解释更容易) 现在,我应该在哪里陈述计算数字平均值背后的算法 如果我不计算数字的平均值,而是改变游戏的配置,进入下一个级别,在给定一组条件的情况下将用户添加到数据库中,等等,会怎么样 我觉得我需要以某种方式将我对这个领域的知识形式化,否则我可能会忘记它,甚至更糟,假设我知道一些只有写下来才能理解的事情,我不知道 在另一个主题

对于在应用程序的某些部分中可能使用的算法,我有点困惑

假设我想创建一个
用例
,它描述
用户
如何输入一组值,我的应用程序返回这些值的平均值(当然这是一个非常简单的例子,但用这种方式解释更容易)

现在,我应该在哪里陈述计算数字平均值背后的算法

如果我不计算数字的平均值,而是改变游戏的配置,进入下一个级别,在给定一组条件的情况下将用户添加到数据库中,等等,会怎么样

我觉得我需要以某种方式将我对这个领域的知识形式化,否则我可能会忘记它,甚至更糟,假设我知道一些只有写下来才能理解的事情,我不知道

在另一个主题中,有人谈到了业务规则。从我所读到的内容来看,它们似乎是放在类图上的小注释。也许我错了?如果这就是它们,我发现它们太麻烦了,无法用于更复杂的算法


谢谢

如果你真的想坚持使用用例,你可以从系统的功能角度而不是从最终用户的角度来编写。也许是这样的:

  • 系统启动并将其总计和计数变量归零
  • 系统接收一个数字
  • 它将数字添加到总数中并递增计数
  • 重复步骤2和3,直到系统被告知停止
  • 当被告知停止时,系统将总数除以计数并返回结果
  • 读一读阿拉斯泰尔·科克伯恩斯的优秀著作。它解释了用例的不同级别。您的初始示例将被视为用户目标(或蓝色)用例,而上面的步骤将是子功能(或Indigo)用例的一部分(非常简单,甚至可能被归类为黑色用例,并刚刚合并到其父级中)

    正如其他人肯定会说的那样,有时候用例并不是描述算法的最佳方式,你应该回到好的旧流程图、状态图、序列图或其他什么。这些工具是为您的利益而存在的——当某个特定的方法对您不起作用时,不要受其约束

    编辑

    @吞噬极乐世界:为了回应你的评论,我在下面添加了一些注释:

    在标识域对象时,有时需要考虑未写入的对象。这完全取决于它是如何写的。因此,在您给出的示例中,可能“系统”是一个“计算器”,用于将数字相加的变量是一个“累加器”,可能有一个“队列”接收数字。可能是数字本身是一个“数字”类型的对象,如果该类型可以具有不同的行为,如范围验证或输入语法检查。是否有一个“显示”对象需要考虑?

    这取决于你在你所处理的有界语境中所考虑的内容。也许,从用户的角度来看,有一个上下文只涉及“计算器”,但从系统的角度来看,还有另一个上下文涉及较低级别的上下文,即“累加器”、“ALU”、“位”、“字”、“寄存器”、“时钟”、“锁存器”等。在用例继承权中,您越是深入询问“如何?”语言的技术性越强。您需要确定哪些是域对象,哪些只是实现对象,这在很大程度上取决于您试图描述和构建的对象的类型(以及在很大程度上,您的受众是谁——无处不在的langauge等等!)。相反,您可以通过询问正在执行的函数的“为什么?”来升级堆栈

    子功能用例的主要参与者通常与调用它的高级用例的参与者相同。但是对于一些“技术”用例,主要参与者将是系统组件/子系统。例如,系统消息记录用例可能将调用子系统作为主要参与者,即有意愿/需要启动操作的实体,而不是执行导致该子系统需要记录某些内容的任务的参与者

    在这个例子中,算法非常简单,我可能只是将它嵌入到主要用例中。但是,如果它被用于多个其他更高级别的用例中,我会将其设置为独立的,以便从其他文档中包含它。只是一种功能分解方法


    这方面没有硬性规定。这是一种工作方式,你会随着时间的推移而改变。正如其他人所说,确保您熟悉其他形式的图表,以便能够为工作选择正确的工具。请记住,尽管一张图片可能值千言万语,但有时你实际上也需要这些文字,所以不要仅仅依赖图表。

    你误用了用例:用例是一个静态视图:)


    对于动态视图,您应该使用活动图或对象图/序列图。

    我遇到了一个系统建模复杂问题,与我在模型中添加约束所解决的算法无关。我不知道这是否有帮助,但在我看来,你可以使用与我相同的技巧。我的意思是在图中添加模型信息,并使用多个图来拥有多个用例视图

    这个多图表视图和用例保持它自己的属性真的很酷,因为一旦我的用例保存在模型中,它就可以用于另一个图表中,从而描述在特定图表中不可能实现的内容。 非常强大的概念,使用元模型作为xmi数据库,使用UML编辑器作为模型的查看器,而不是模型本身。我现在可以做以前不可能做的事情,而且它的威力更大。它也更复杂,因为您应该查看图表级别,但也应该查看元模型级别,但一旦我得到u
    1. The User tells the System he wants to calculate the average of a set of numbers.
    2. The System asks the User for a number.
    3. The User tells the System a number.
    Repeat steps 2-3 until the User tells the System there are no more numbers left.
    4. The System returns the average of all those numbers.