我发现在UML中模拟多态和实例很困难。
例如,如果我有一个名为“Bird”的抽象,父类或基类,我想你可以说“duck”是多态的一种形式,但它也可以是一个实例。
也许,我在开始和结束的地方都很困惑。有这些视觉例子吗?
答案 0 :(得分:2)
继承与实例的问题取决于功能。如果您的数据模型在鸭子和其他类型的鸟类之间存在任何差异,那么您需要一个继承自Duck
的{{1}}类。否则,你只是将你的鸭子视为Bird
的一个实例。
当您在不同的Bird
实现中调用相同的方法时,多态性才会发挥作用。
对于UML建模,这里有几点可以帮助你。
这本书是许多软件工程课程必读的内容,并且多年来一直很好用。
http://www.amazon.com/UML-Distilled-Standard-Modeling-Language/dp/0321193687
此博客可以很好地显示不同的用例和相应的OOP模型。 http://usna86-techbits.blogspot.com/2012/11/uml-class-diagram-relationships.html
答案 1 :(得分:2)
这很简单。
如果一个具体的类Cage引用了抽象类Bird,并且具体类Woodpecker和Canary是从最后一个派生的,那么这就是多态性。你必须选择那只鸟真正坐在笼子里,因为抽象类没有实例。接口也一样。
答案 2 :(得分:1)
首先,我认为您的问题是如何建模多态性。为了说明,请参阅以下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表示多态调用实际上是一个挑战。