2013-02-21 228 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一個新的實例。