2013-02-21 221 views
0

是有可能在这个 constructor in UML sequence diagram对象实例化另一个对象?

从另一个对象 看看实例化对象是否这种情况可能在编程语言如Java?

这种情况在建模语言(如UML)中可能吗?

+0

你在问是否可以从Java中的另一个对象实例化对象?考虑到每个程序都需要一个对象,我当然希望如此。 – 2013-02-21 22:31:45

+2

关于你的第二个问题,你实质上是问UML中的这个例子是否可以用UML表达。很难看出答案可能不是“是”。我认为你需要澄清这个问题。 – 2013-02-21 22:37:26

回答

0

如果我明白你在问什么,是的,你可以通过继承或组合来做到这一点。

继承:

ClassB extends ClassA { 
    public ClassB() { 
     super(); // calls ClassA constructor 
     // do more stuff 
    } 
} 

组成:

ClassX { 
    private ClassY y; 
    public ClassX() { 
     y = new ClassY(); // calls ClassY constructor 
     // do more stuff 
    } 
} 

祝你好运!

+0

我不同意第一个。在UML图中有两个对象。在VikingSteve的代码中,只有一个对象被创建。我的理解是,即使涉及两个类,为一个对象绘制两条生命线也不是很好的UML。 – 2013-02-21 22:39:58

+0

那么是的,你是对的,第二个例子会更合适:) – vikingsteve 2013-02-21 22:41:47

0

是的,这是Java的重要组成部分,以及任何面向语言的对象。

如果你有两个对象,A和B,B是A的子类,你可以实例化一个使用B:

A baseObject = new B(); 

这里的关系表示 'B' 是一个 'A':这意味着在任何你有A的地方,你可以在它的地方实例化一个B,因为B是A的一个合适的子类型。注意,如果你像这样使用它,你仍然只能使用A的接口。

使用列表时可以看到Java中的一个实际示例。 Java中的List类是从Collection派生的抽象容器类型。在这个例子中,列表是我们的'A'类型。有许多不同种类的列表,例如LinkedList和ArrayList。 LinkedList和ArrayList是List的适当子类型,在本例中为'B'类型。所以,你可以初始化列表作为其任何亚型:

List<String> stringList = new ArrayList<String>(); 

List<String> stringList = new LinkedList<String>(); 

希望这是一些帮助。

2

是的,面向对象编程的整个概念取决于对象能够创建其他对象。

在Java中,我们通过调用构造函数(如new ClassB())为我们创建一个新的ClassB对象来创建实例。如果我们想让ClassA实例化ClassB,我们只需要让ClassA调用ClassB的构造函数即可。下面是我们如何会做它在Java中

public class ClassA{ 
    public ClassA(){ 
     ClassB instance1 = new ClassB(); 
    } 
} 

在这里,我做了它,这样,当ClassA的被实例化(具有这就是所谓的构造函数),它创造的ClassB的称为INSTANCE1一个新的实例。