UML(No.17)

时序图:时序图用于描述对象之间的传递消息的时间顺序,即用例中的行为顺序.

对象:时序图中对象使用矩形表示,并且对象名称下有下划线.将对象置于时序图的顶部说明在交互开始时对象就已经存在了.如果对象的位置不在顶部,表示对象是在交互的过程中被创建的.

生命线:生命线是一条垂直的虚线.表示时序图中的对象在一段生命周期内存在.每个对象底部中心的位置都带有生命线.

消息:两个对象之间的单路通信.从发送方指向接收方.在时序图中很少使用返回消息.

激活:时序图可以描述对象的激活和钝化.激活表示该对象被占用以完成某个任务.钝化指对象处于空闲状态,等待消息.在UML中,对象激活时将对象的生命线拓宽为矩形来表示的.矩形称为计划条或控制期.对象就是在激活条的顶部被激活的.对象在完成自己的工作后被钝化.

对象的创建和销毁:在时序图中,对象的默认位置是在图的顶部.这说明对象在交互开始之前就已经存在了.如果对象是在交互过程中创建的,那么就应该将对象放到中间部分.如果要撤销一个对象,在其生命线终止点处放置“X”符号.

例如:(孙中山浪漫史)

活动图:本质上就是流程图,它用于描述系统的活动,判定点和分支等;

动作状态:原子的,不可中断的动作,并在此动作完成之后向另一个动作转变.

分支与合并:分支在软件系统中很常见.一般用于表示对象类所具有的条件行为.用一个布尔型表达式的真假来判定动作的流向.条件行为用分支和合并表达。分支包括一个入转换和两个带条件的出转换,出转换的条件应该是互斥的,须保证只有一条出转换能够被触发.合并包含两个带条件的入转换和一个出转换.

分叉与汇合:分叉用来描述并发线程,每个分叉可以有一个输入转换和两个或多个输出转换.每个转换都可以是独立的控制流.汇合代表两个或多个并发控制流同步发生,当所有的控制流都达到汇合点后,控制才能继续往下进行.每个汇合可以有两个或多个输入转换和一个输出转换.

泳道:泳道将活动图中的活动划分为若干组,并将每一组指定给负责这组活动的业务组织.泳道区分负责活动的对象,明确地表示哪些活动是由哪些对象进行的.每个活动指定明确地属于一个泳道.

例如:(公司订单)

协作图:也叫合作图,是一种交互图。时序图主要侧重于对象间消息传递在时间上的先后关系,而协作图表达对象间的交互过程及对象间的关联关系。

例如:(孙中山浪漫史)

<think>好的,我需要帮助用户设计一个名为MyPoint的类,并指导他们使用UML工具(如Visio或StarUML)绘制相应的UML图。首先,我需要确定MyPoint类的具体要求和功能。根据用户的描述,这个类应该包含x和y坐标,无参构造函数、带参构造函数、getter方法,以及不同形式的距离计算方法。 首先,类的属性是x和y坐标,这两个应该是私有的,所以需要生成对应的getter方法。构造函数部分,无参构造函数可能默认将x和y设为0,带参构造函数则接受两个参数来初始化坐标。距离计算方法可能有几种形式:计算到另一个MyPoint对象的距离,计算到指定坐标的距离,或者计算到原的距离。这些方法需要明确参数和返回类型,比如使用double类型。 接下来是绘制UML图的步骤。用户提到了使用Visio或StarUML,所以需要分别说明这两种工具的操作方法。对于StarUML,用户需要创建新项目,添加类图,然后创建类,添加属性和方法。每个方法的可见性(public、private)和参数都需要正确标注。例如,distanceTo(MyPoint p)这样的方法需要标明参数类型。 可能遇到的问题包括如何正确设置方法的参数和返回类型,如何区分构造函数和方法,以及如何表示静态方法(如果有的话)。例如,计算到原的距离可能是一个静态方法,但用户的需求中没有明确提到,需要根据常规设计来判断。 然后,用户可能需要相关的扩展问题,比如如何生成代码,如何添加其他方法,或者如何比较不同UML工具。因此,在回答后需要生成几个相关问题,帮助用户进一步探索。 需要确保UML图的每个部分都符合标准,例如类名在顶部,属性在中间,方法在底部,正确使用符号(+表示public,-表示private)。同,在StarUML中可能需要调整工具的具体步骤,比如右键添加属性或操作,设置正确的数据类型。 最后,检查是否有遗漏的部分,比如是否所有方法都已涵盖,参数是否正确,是否需要考虑方法的重载(比如不同参数的距离计算)。确保用户能够根据指导步骤完成类的设计和UML图的绘制。</think>### MyPoint类设计与UML图绘制步骤 #### 1. 类设计规范 - **属性**:私有属性$x$和$y$(类型为`double`) - **构造函数**: - 无参构造函数:初始化$x=0$, $y=0$ - 带参构造函数:接收$x$和$y$参数初始化 - **方法**: - `getX()`和`getY()`:返回对应坐标值 - `distance(MyPoint p)`:计算到另一个的欧氏距离 - `distance(double x, double y)`:计算到指定坐标的欧氏距离 - `distanceFromOrigin()`:计算到原$(0,0)$的距离 数学公式表示: $$ \text{distance} = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2} $$ #### 2. 使用StarUML绘制步骤(以v5.0为例) 1. **新建项目**:`File > New Project > Model Explorer` 2. **添加类图**:右键`Model > Add Diagram > Class Diagram` 3. **创建类**: - 拖拽`Class`工具到画布,命名为`MyPoint` - 添加属性:`-x: double`,`-y: double` 4. **添加方法**: - `+MyPoint()`(无参构造) - `+MyPoint(x: double, y: double)` - `+getX(): double` - `+getY(): double` - `+distance(p: MyPoint): double` - `+distance(x: double, y: double): double` - `+distanceFromOrigin(): double` ![MyPoint UML示意图](data:image/svg+xml;base64,PHN2Zy...) (注:实际操作中会生成具体图形界面) #### 3. 使用Visio绘制步骤(2021版) 1. **新建UML图**:`文件 > 新建 > 软件和数据库 > UML模型图` 2. **添加类形状**: - 从`UML静态结构`模具拖拽`类`形状 - 双击添加名称`MyPoint` 3. **定义属性方法**: - 在`类属性`对话框中分三栏填写: ``` 特性栏:x: double 特性栏:y: double 操作栏:+MyPoint() 操作栏:+MyPoint(x: double, y: double) ...(其他方法同上) ``` #### 4. 代码实现参考(Java) ```java public class MyPoint { private double x; private double y; public MyPoint() { this(0, 0); } public MyPoint(double x, double y) { this.x = x; this.y = y; } public double getX() { return x; } public double getY() { return y; } public double distance(MyPoint p) { return Math.sqrt(Math.pow(p.x - this.x, 2) + Math.pow(p.y - this.y, 2)); } public double distance(double x, double y) { return Math.sqrt(Math.pow(x - this.x, 2) + Math.pow(y - this.y, 2)); } public double distanceFromOrigin() { return distance(0, 0); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值