2013-04-22 95 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

干杯!