gpt4 book ai didi

polymorphism - 如何在单个图中可视化多态调用?

转载 作者:行者123 更新时间:2023-12-01 22:19:01 25 4
gpt4 key购买 nike

首先,请看这些 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;
}
}

矩形.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();
}
}
}

这些代码是多态性的经典示例。这些代码的类图是

enter image description here

当我尝试使用 UML 序列图对这些类建模以显示多态性时,仅使用一个序列图,我需要使用四个注释来表示多态性。

enter image description here

那么,如何在没有注释的情况下在单个图表中可视化多态调用?是否有其他符号或可视化(没有 UML 序列或通信图)来显示多态性?在这个例子中,如何在 Plotter.main() 中显示调用 drawable.draw()

最佳答案

使用 Factory Method Design Pattern – Sequence Diagrams 中提出的想法,多态调用由保护条件控制的多个场景建模。因此,对于每一个多态场景,动态绑定(bind)(多态调用)被表示为一个“场景框”。因此,这是一个显示多态调用的单一模型(序列图)。

Sequence Diagram to represent polymorphic scenarios

从字面上看,作者的帖子评论了你的建模策略:

"It turns out that to model the flow of operations I am actually modeling how polymorphism, late binding and all that stuff works. I guess that in this case, a sequence diagram is not only irrelevant, but actually confusing. But I had to try."

总而言之,显示多态调用是一项非常重要的任务,我认为清楚地可视化多态实际上对软件工程师来说是一个公开的挑战。

关于polymorphism - 如何在单个图中可视化多态调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25099461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com