Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/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
Design patterns 如何处理设计问题,如;设计自动售货机“;_Design Patterns_Architecture_Oop - Fatal编程技术网

Design patterns 如何处理设计问题,如;设计自动售货机“;

Design patterns 如何处理设计问题,如;设计自动售货机“;,design-patterns,architecture,oop,Design Patterns,Architecture,Oop,我想知道我应该遵循哪些步骤来解决问题,比如设计一台自动售货机,并提出一些设计文档(比如用例、序列图、类图)。是否有任何来源/链接,我可以阅读其中谈到如何一步一步走 谢谢。我不确定是否有任何公认的步骤,但最简单的方法就是尽可能地分解每一步 从主要行动开始(投入资金、按选择、接受饮料) 继续将每个操作分解为更小的操作和响应,直到它变得几乎微不足道。所以,为了投入资金,你必须知道投入了多少,投入的总额,要显示的金额,等等 想想你的行为不再有效的任何场景(你推一个选择,机器是空的),以及你将如何处理它。

我想知道我应该遵循哪些步骤来解决问题,比如设计一台自动售货机,并提出一些设计文档(比如用例、序列图、类图)。是否有任何来源/链接,我可以阅读其中谈到如何一步一步走


谢谢。

我不确定是否有任何公认的步骤,但最简单的方法就是尽可能地分解每一步

  • 从主要行动开始(投入资金、按选择、接受饮料)
  • 继续将每个操作分解为更小的操作和响应,直到它变得几乎微不足道。所以,为了投入资金,你必须知道投入了多少,投入的总额,要显示的金额,等等
  • 想想你的行为不再有效的任何场景(你推一个选择,机器是空的),以及你将如何处理它。(退还他们的钱,提示他们做出其他选择等)
  • 将动作和响应分配给参与者和系统。谁把钱投进去,谁来记录总收入

  • 然后,您可以根据您所提出的内容来创建序列图和类图。

    嗯,自动售货机基本上是一台机器

    我将决定什么是有效的输入(硬币和钞票?),什么是输出

    用户走向机器时可能产生的结果是什么。可能会出现什么问题?(钱太多,钱太少)怎么处理?(分配更改、分配退款)


    最后,写出处理用例所需的内容。你的名词很可能是类。你的动词很可能是属于这些类的方法。

    概括地说,想想自动售货机中涉及哪些对象:

    • 自动售货机
      -可能是一个抽象类
    • DrinkMachine
      SnackMachine
      ,以及扩展类
      VendingMachine
    • VendingProduct
      -抽象类
    • 饮料
      ,其他类别扩展
      销售产品
    • 可口可乐
      ,其他类别扩展
      饮料
    • &c、 &c
    但我相信你可以很容易地找到答案。机器的螺母和螺栓将在某种实用程序类中进行,并具有接受纸币和硬币、计算零钱等方法

    进一步阅读:

    • 这是一篇关于开始OOP设计的好文章,作者是Allen Holub
    • 是使用OOP设计咖啡自动售货机的开始
    首先定义“供应商机器”:

    供应商机器是指


    普雷斯托!这就是你的要求。

    这些想法可能会有帮助:

    从接口的角度定义输入、输出、预期条件和错误条件

    决定它需要看起来有多好

    需要运行多长时间(使用寿命)

    多久需要重新进货一次?

    我想你已经看过了

    不要先考虑代码(类和c)。考虑用例和功能需求。自动售货机应该提供什么功能?希望用户如何与之交互?维修人员呢?在执行此操作时,尽量不要将实现细节与高级需求混淆

    然后,根据该类项目的类型,考虑非功能性需求。最重要的属性是什么:速度、可靠性、易维护性、对新情况的适应性、安全性等等。。。?还有其他的可能性。这些不是二元的,是/否的答案,更多地考虑范围、最低标准和最佳目标。注意,“最佳”取决于相关利益相关者的观点。易用性和安全性经常存在冲突,因此您必须找出哪个更重要

    在这之后,您可以回到您的用例,并查看它们是如何受到您的非功能性需求的影响的。这就是与客户进行谈判的地方,在这种情况下,客户很可能就是你。为了达到其他目标,您是否必须牺牲功能?对于每个功能,风险和回报是什么?提供高价值的易于实现的功能非常重要。难以实现的(由于限制)功能只增加了很小的价值,应该明确地排在最后。其他两种组合需要仔细考虑

    然后你就可以开始设计机器了


    您可以使用大量不同的图表来帮助您可视化问题,或者向其他人解释您提出的解决方案

    要从头开始设计所有软件,并不是只有一种正确的方法


    可能有几十种不同的方法,从非常小的前期设计(如in)到在中编写的大型前期设计。可能有更多的中间方法有其位置,因此这取决于您想要使用的开发方法,因为有些方法可能需要更多的前期设计,比如瀑布式方法,而不是更灵活的方法,在这种方法中,需求可以定期更改,这不会导致很多问题,或者至少这是问题所在理论。

    来解决这些问题

  • 确定需求、功能和用例

  • 将这些需求分解为琐碎的和基本的任务

  • 从系统角度识别用户可能面临的挑战和问题。所有无效的scnearios。还包括性能、安全性、可靠性等要求
  • 确定前面列出的所有挑战和问题的解决方案
  • 将所有名词标记为类,将动词和动作标记为方法。还可以根据类之间以及与外部参与者的交互方式确定类的公共接口