我发现在UML中对多态和实例进行建模很困难。
例如,如果我有一个称为“Bird”的抽象、父或基类,我会想象“duck”是多态的一种形式,但它也可以是一个实例。
也许我混淆了开始和结束的位置。是否有这些的视觉示例呢?
我发现在UML中对多态和实例进行建模很困难。
例如,如果我有一个称为“Bird”的抽象、父或基类,我会想象“duck”是多态的一种形式,但它也可以是一个实例。
也许我混淆了开始和结束的位置。是否有这些的视觉示例呢?
http://www.amazon.com/UML-Distilled-Standard-Modeling-Language/dp/0321193687
这篇博客很好地展示了不同的用例和相应的面向对象编程模型。http://usna86-techbits.blogspot.com/2012/11/uml-class-diagram-relationships.html这很简单。
如果一个具体的类Cage引用了抽象类Bird,并且具体的类Woodpecker和Canary都继承自Bird,那么这就是多态性。你必须选择真正会坐在笼子里的鸟,因为抽象类没有实例。接口也是同理。
首先,我认为你的问题是如何建模多态性。为了说明这一点,看下面的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表示多态调用实际上是一项挑战。