跳转到内容

软件工程/UML/示例简介

来自维基教科书,开放世界中的开放书籍

实验 1a: StarUML (30 分钟)

[编辑 | 编辑源代码]

我们需要学习一个 UML 建模工具。StarUML[1]是一个免费的 UML 建模工具,功能非常强大,它允许进行正向和逆向工程。它支持 Java、C++ 和 C#。一个小小的缺点是它不再受支持,因此它仅限于 Java 1.4 和 C# 2.0,这非常不幸。

启动 StarUML,在启动时选择“空项目”。然后在模型资源管理器中通过右键单击“无标题”来添加一个新模型。之后,您可以通过右键单击模型来创建各种 UML 图表。

可以在以下 StarUML 教程中找到更多详细信息。 [2]


实验 1b: objectiF (30 分钟)

[编辑 | 编辑源代码]

另一个 UML 建模工具,个人使用免费,是 objectiF。[3]要学习如何使用 objectiF,请查看他们的教程。[4]

实验 2: 餐馆示例 (30 分钟)

[编辑 | 编辑源代码]

使用课堂上的餐馆示例,使用 StarUML 或您喜欢的 UML 建模工具创建我们在课堂上创建的所有不同的 UML 图表。

完成类图后,尝试“生成代码”功能。在 StarUML 中,您右键单击类图,然后选择“生成代码”。查看生成的类并将其与您的模型进行比较。

重要说明:餐馆示例实际上不是一个很好的示例,因为它可能会让你觉得角色变成了对象。它们不会。角色永远不会变成对象,角色始终在系统外部,因此下面的俄罗斯方块示例要好得多。


实验 3: 俄罗斯方块 (60 分钟)

[编辑 | 编辑源代码]

我们大多数人都知道俄罗斯方块游戏。[5] [6](然而,我有一些学生不知道,所以如果你不知道,请先了解它并玩一会儿,然后继续这个实验)。如果你还记得课堂上的内容,在发明 UML 时,三位先驱者从一个名为面向对象分析和面向对象设计的东西开始。所以我们来做吧。

面向对象分析和设计

[编辑 | 编辑源代码]

我们想编写俄罗斯方块游戏。但在我们开始之前,我们需要分析一下游戏。我们首先需要识别“对象”,其次我们必须找出它们是如何相互关联和交流的。因此,对于这个实验,请执行以下操作

  • 每组 5 到 6 名学生组成一个小组
  • 观察游戏,尝试识别对象,例如,掉落的砖块就是对象
  • 让每个学生代表一个对象,例如一块砖
  • 那个学生/砖块有哪些属性?(颜色、形状等)
  • 可以有多少块砖?它们是如何相互作用的?
  • 玩游戏的人也是一个对象还是一个角色?
  • 玩家如何与砖块交互?
  • 砖块的移动有哪些限制?你将如何实施它们?
  • 你将如何计算游戏的得分?

游戏时间

[编辑 | 编辑源代码]

一旦你确定了所有对象,就开始玩真正的游戏。对于这个游戏,一个学生是“角色”,一个学生会写分钟(协议),其他学生将是对象(例如砖块)。现在开始游戏:角色和不同的对象通过相互交谈进行交互。写分钟的学生将写下谁对谁说了什么,即对象与角色之间以及对象之间所说的所有内容。

至少玩一两轮。你的模拟有效吗?你遗漏了什么吗?也许你需要添加另一个对象,比如计时器。

现在我们需要建立游戏和 UML 之间的联系。

  • 用例图:这非常简单,你将角色识别为玩家,并写下玩家可以执行的所有用例。你应该检查的一个问题是计时器是否是角色。用例图告诉你你的系统如何与其环境交互。绘制俄罗斯方块的用例图。
  • 活动图:从你的游戏中,你会发现有一些重复,并且在游戏的不同阶段必须做出一些决定。这可以用活动图很好地表示。为游戏绘制一个高级活动图。

接下来我们来谈谈我们的分钟(协议):它包含了我们绘制序列图和最终得到协作图所需的所有信息。

  • 序列图:看一下你的分钟(协议)。首先,识别对象并将它们水平放置。然后逐行浏览你的分钟。对于你的分钟中的每一行,在你的序列图中绘制相应的行。正如你所看到的,序列图与分钟是一一对应的。
  • 协作图:从序列图很容易创建协作图。做吧。
  • 类图(关联):从协作图中,你可以推断出类和类需要的函数。至于属性,有些你已经确定了(例如砖块的颜色和形状),其他的你需要思考一下。绘制类图,并为每个类尝试猜测什么属性是该类正常工作所必需的。
  • 类图(继承):如果你对面向对象语言有更多经验,你可以尝试识别超类,即尝试使用继承来考虑对象的共同特征。

如果你正确地完成了这个实验,你将学到很多东西。首先,你已经看到,通过模拟,可以识别对象、对象之间的连接、隐藏的要求以及你假设中的缺陷。其次,使用仔细编写的模拟协议足以创建序列图、协作图和类图。所以创建这些图没有魔法,只是玩游戏而已。虽然你可能认为这只是一个有趣或愚蠢的游戏,但我建议你:在你开始的每个新项目中都玩这个游戏。

参考文献

[编辑 | 编辑源代码]
  1. http://staruml.sourceforge.net/en/ StarUML - 开源 UML/MDA 平台
  2. http://cnx.org/content/m15092/latest/ StarUML 教程
  3. http://www.microtool.de/objectif/en/index.asp objectiF - 使用 UML 进行模型驱动软件开发的工具
  4. http://www.microtool.de/mT/pdf/objectiF/01/Tutorials/JavaTutorial.pdf 使用 UML 开发 Java 应用程序
  5. http://en.wikipedia.org/wiki/Tetris 俄罗斯方块
  6. http://www.percederberg.net/games/tetris/index.html Java 俄罗斯方块


  1. 说出两位 UML 发明者的名字。
  2. 现在谁管理 UML 标准?
  3. 为“打砖块”游戏绘制一个用例图。
  4. 看一下下面的活动图。用你自己的话说描述一下信息流。 # 在课堂上,我们介绍了餐馆的例子,拉尔夫是想要吃晚饭的顾客。他的服务员是莱纳斯,厨师是拉里,收银员是史蒂夫。拉尔夫点了一份汉堡和啤酒。请画一个序列图,显示从点餐到拉尔夫拿到他的啤酒和汉堡的步骤。
  5. 考虑下面的类图。请编写实现此类图的 Java 类。 # 你应该为一台自动取款机编写代码。绘制一个用例图。
  6. 将下面的序列图转换为类图。
  7. 结构图和行为图有什么区别?
华夏公益教科书