Class 用1:1基数关联两个类有意义吗?

Class 用1:1基数关联两个类有意义吗?,class,uml,class-diagram,Class,Uml,Class Diagram,我目前正在学习计算机工程,我记得一个叫信息系统概论的课程的教授说,两个以1:1基数相关的课程没有意义 例如:我有Client类和Telephone类。让我们假设客户端只能有一部电话。教授说,创建电话类没有意义,电话应该是客户端类的一个属性。我完全同意他的意见 但是现在我在上软件工程课,教授(不一样)没有对这个问题发表任何评论,现在我真的很困惑 正确的方法是什么?如果您希望重复使用电话类,将其作为客户机类的一部分将不会非常有用。这将是一个很好的理由。如果您将它保留在客户机类中,这意味着它本质上是客

我目前正在学习计算机工程,我记得一个叫信息系统概论的课程的教授说,两个以1:1基数相关的课程没有意义

例如:我有
Client
类和
Telephone
类。让我们假设客户端只能有一部电话。教授说,创建
电话类
没有意义,电话应该是
客户端
类的一个属性。我完全同意他的意见

但是现在我在上软件工程课,教授(不一样)没有对这个问题发表任何评论,现在我真的很困惑


正确的方法是什么?

如果您希望重复使用
电话类,将其作为
客户机类的一部分将不会非常有用。这将是一个很好的理由。如果您将它保留在
客户机
类中,这意味着它本质上是
客户机
的一部分,即使您在其他地方使用它,我怀疑您的意思是什么

但有时,将具有1:1关系的2个实体建模为单独的类是有意义的。也许你有一个
客户机
,你也有
客户账单
。您不希望所有程序员都能访问
ClientBilling
,因此可以将其移动到自己的类中,在该类中可以单独控制

也许你的结构很庞大,通常不需要把整个东西运来运去。通过将数据分解为多个功能块,您可以将数据的大小减少到特定功能所需的大小


也许1:1的比例并不一定是数据固有的,合理的猜测是,它并不总是这样。Tour
电话
我认为这个例子属于这一类。

我认为您对信息系统教授的介绍是正确的。还有你的SE教授(假设他缺乏评论,这会使他成为一个反向者)。它们都是正确的,这取决于您的需求和您正在使用的领域。但如果没有任何其他细节,很难为您建模,我会倾向于您的CE教授所说的。记住你学到的所有有趣的小原则:接吻、擦干等等,并将它们应用到你的问题上

如果
Client
永远不可能拥有多个电话号码,并且域中没有其他实体需要电话号码,则不需要单独的
telephone
类。在现实世界中,如果您的需求不明确,请从客户那里了解更多信息

如果有人决定
Client
s可以使用多个电话号码,或者在您的域中引入了另一个需要电话号码的实体,那么这是一个相当容易完成的重构

考虑到这一点,假设您的
客户机
有一个单独的
地址
类,该类包含电话号码。可能
地址
类被另一个类重复使用,可能
发票
发货
,在这两种情况下都可以共享或应用
地址
。在本例中,您可能希望
Address
Telephone
)成为它自己的类

在您的示例中,
电话
可能有点做作。如果它有许多属性(
AreaCode
InternationalPrefix
Number
,等等),您会希望它是一个单独的类,以便重复使用,但是如果
Client
只需要一个名为
Telephone
的字符串值,用户只需键入该值作为参考,那么,成为自己的类可能就没有意义了。

我想说,1:1的关系(两端都是强制性的)是可疑的,应该仔细考虑,以确保它们是必要的。通常,它是图表灵活性和简单性之间的折衷(灵活性,因为如果您保留两个类,那么将来更改图表并使其适应新的需求将更容易,而不必维护一个类而不是两个类)