首先,请参阅以下Java代码:
Drawable.java
package examples.simple.model;
public interface Drawable {
public void draw();
}
Shape.java
package examples.simple.model;
public abstract class Shape implements Drawable {
private Point center;
public Point getCenter() {
return center;
}
public void setCenter(Point center) {
this.center = center;
}
}
Rectangle.java
package examples.simple.model;
public class Rectangle extends Shape {
public void draw() {
System.out.println("Drawing a rectangle....");
}
}
Circle.java
package examples.simple.model;
public class Circle extends Shape {
public void draw() {
System.out.println("Drawing a circle....");
}
}
Line.java
package examples.simple.model;
public class Line implements Drawable{
public void draw() {
System.out.println("Drawing a line");
}
}
Plotter.java
package examples.simple.client;
import java.util.ArrayList;
import java.util.List;
import examples.simple.model.Circle;
import examples.simple.model.Drawable;
import examples.simple.model.Rectangle;
import examples.simple.model.Shape;
import examples.simple.model.Line;
class Plotter {
public static void main(String[] args) {
List<Drawable> drawables = new ArrayList<Drawable>();
Shape s = new Circle();
drawables.add(s);
s = new Rectangle();
drawables.add(s);
Line l = new Line();
drawables.add(l);
for (Drawable drawable : drawables) {
drawable.draw();
}
}
}
代码是多态性的经典例子。这些代码的类图是
当我尝试使用UML序列图对这些类进行建模以显示多态性时,仅使用一个序列图,我需要使用四条注释来表示多态性。
那么,如何在没有评论的情况下在单个图表中可视化多态调用?是否有其他符号或可视化(没有UML序列或通信图)来显示多态性?在此示例中,如何在drawable.draw()
?
Plotter.main()
答案 0 :(得分:2)
序列图在展示交互方面非常强大,它们不太适合描绘模型的结构属性。
类图可能就是您所需要的。下图是显示多态性(即getArea
方法)的类图示例。
答案 1 :(得分:2)
使用Factory Method Design Pattern – Sequence Diagrams中提出的想法,多态调用由保护条件控制的多重场景建模。因此,对于每个多态方案,动态绑定(多态调用)表示为&#34;方案框&#34;。因此,这是一个显示多态调用的单一模型(序列图)。
从字面上看,作者的帖子评论了你的建模策略:
&#34;事实证明,我实际上是对操作流程进行建模 建模多态,后期绑定和所有这些东西的工作原理。一世 猜测在这种情况下,序列图不仅无关紧要, 但实际上令人困惑。但我必须尝试。&#34;
总而言之,显示多态调用是一项非常重要的任务,我认为清晰可视化多态实际上对软件工程师来说是一个开放的挑战。
答案 2 :(得分:0)