2013-04-22 53 views
0

我是UML圖新手,正在讀一本關於它的書。在那裏,它有一個類圖如下所示:UML圖中的一對一關係

enter image description here

它說,

The implication of a one to one association is that whenever you create an 
instance of one of the classes, you must simultaneously create an instance 
of the other, and when you delete one you must delete the other. 

我的問題是,我們真的必須這樣做?我們不能將「空值」作爲其中一個值嗎?例如,我正在考慮如下這個圖的Java代碼,當我想創建一個公司項目時,我可以給null作爲參數。我錯了嗎?或者這是一段錯誤或錯誤的代碼?

public class Company{ 
     . . . 
    private BoardOfDirectors director; 
    public Company(BoardOfDirectors director){ 
      this.director=director; 

    } 
     . . . 
} 

public class BoardOfDirectors{ 
     . . . 
    private Company company; 
    public BoardOfDirectors(Company company){ 
      this.company=company; 

    } 
     . . . 
} 

謝謝。

+0

'我們不能把「null」作爲這些值中的一個嗎?' - 如果它是* required *關聯,則不行。換句話說,公司*要求*董事會(對於某些類型的公司法律結構來說,這是事實)。 – 2013-04-22 16:21:54

+0

@RobertHarvey我想我找出了我混亂的原因。是的,在java中,我們可以給null,但如果我們這樣做,我們不符合UML圖,所以即使可以做到也不應該這樣做。我對嗎? – yrazlik 2013-04-22 16:46:06

+0

這就像創建一個沒有車輪的汽車物體。你需要有一個車輪。你可以讓車輪爲空,但它不符合業務規則。羅伯特所建議的是,你不能在董事會之外創建公​​司,因此Null不會工作。我認爲人們需要看看正在創建的公司的類型。如果公司是獨資企業,那麼你就不會有董事會。只取決於現實情況,你的代碼需要模仿這種關係。在我看來,董事會是獨立的。 – 2013-04-22 23:12:34

回答

1

這一切都取決於UML背後的業務規則。而不是NULL,你可能想創建一個解釋目前沒有董事會的對象。如果稍後公司對象決定要創建董事會,這將是明智的。然後你可以將它們存儲在另一個數組中。這樣你就可以將對象存儲在另一個對象中。

我已經創建了程序,用於將對象存儲在對象內部的對象內等等。這允許使用持久代碼並且可以序列化狀態。然後你可以讓數組迭代並保持UML圖的基數。

真的,您必須接受項目的業務規則,在實體背後應用基數和建模,並嘗試模仿這種現實。從我在學校所教的內容來看,我們的工作就是模仿現實,並將其視爲現實生活,以便我們的代碼更有意義。從長遠來看,這將更容易理解和維護。雖然爲了速度的緣故,我不時違反這條規則,但這就是代碼開始形成的原因。

如果你還沒有退房http://uml.org

乾杯!