Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 可以将任何类的实例或对象视为另一个类中的属性吗?_Oop_Uml_Class Diagram_Object Oriented Analysis - Fatal编程技术网

Oop 可以将任何类的实例或对象视为另一个类中的属性吗?

Oop 可以将任何类的实例或对象视为另一个类中的属性吗?,oop,uml,class-diagram,object-oriented-analysis,Oop,Uml,Class Diagram,Object Oriented Analysis,在阅读Craig Larman的书时(应用UML和模式;…) 我注意到他在骰子游戏类中添加了骰子类的实例作为属性 可能吗?有很多相关的例子,它们否定了这一点。是的,这是可能的。OOP提供了一个容器关系,这意味着具有一个关系,其中一个类可以包含另一个类的实例 例如,可以有一个椅子类、一个桌子类和一个房间类。现在,房间可以有椅子和桌子,所以房间类将有椅子和桌子的实例。是的,这是可能的。OOP提供了一个容器关系,这意味着具有一个关系,其中一个类可以包含另一个类的实例 例如,可以有一个椅子类、一个

在阅读Craig Larman的书时(应用UML和模式;…) 我注意到他在骰子游戏类中添加了骰子类的实例作为属性




可能吗?有很多相关的例子,它们否定了这一点。

是的,这是可能的。OOP提供了一个容器关系,这意味着具有一个关系,其中一个类可以包含另一个类的实例


例如,可以有一个椅子类、一个桌子类和一个房间类。现在,房间可以有椅子和桌子,所以房间类将有椅子和桌子的实例。

是的,这是可能的。OOP提供了一个容器关系,这意味着具有一个关系,其中一个类可以包含另一个类的实例


例如,可以有一个椅子类、一个桌子类和一个房间类。现在Room可以有椅子和桌子,所以Room类将有椅子和桌子的实例。

这不仅是可能的,而且是标准案例。事实上,许多编程语言在类和基本数据类型(如
int

)之间没有太大区别。这不仅是可能的,而且是标准情况。事实上,许多编程语言在类和基本数据类型(如
int

)之间没有太大区别。这些不是
Die
的实例,只是
Die
类型的两个属性。这幅图不是很好地使用UML(Larman的耻辱)。
DiceGame
Die
之间的关联使用2重数。最有可能的意思是,他指的是
die1
die2
。但这只是猜测。更好的表示法是


具有适当的关联端名称。

这些不是
Die
的实例,只是
Die
类型的两个属性。这幅图不是很好地使用UML(Larman的耻辱)。
DiceGame
Die
之间的关联使用2重数。最有可能的意思是,他指的是
die1
die2
。但这只是猜测。更好的表示法是


具有适当的关联结束名。

简短回答:是。。。这种情况经常发生

在OO中,有一个巧妙的小技巧来确定一个类是否应该包含其他类型类的属性。“Is-a”和“Has-a”

在这种情况下,您有一个骰子游戏类。你问自己,“是一个”骰子游戏死了,还是“是一个”骰子游戏死了。如果答案是前者,则使用继承,否则将其设置为属性,如您发布的示例所示

如果您有另一个名为“GamblingRoom”的类,那么拥有一个骰子游戏“GamblingRoom”类的属性“可能是一个可行的解决方案……当然,这取决于您需要做什么

这里有一个更好的解释,在一个类似于你的问题中。。但可能比我在这里做的解释更好;)


简短回答:是的。。。这种情况经常发生

在OO中,有一个巧妙的小技巧来确定一个类是否应该包含其他类型类的属性。“Is-a”和“Has-a”

在这种情况下,您有一个骰子游戏类。你问自己,“是一个”骰子游戏死了,还是“是一个”骰子游戏死了。如果答案是前者,则使用继承,否则将其设置为属性,如您发布的示例所示

如果您有另一个名为“GamblingRoom”的类,那么拥有一个骰子游戏“GamblingRoom”类的属性“可能是一个可行的解决方案……当然,这取决于您需要做什么

这里有一个更好的解释,在一个类似于你的问题中。。但可能比我在这里做的解释更好;)


我将问题改为“对任何类的引用是否可以在另一个类中作为属性处理?”从技术上来说,答案是“是”,但不应该在UML中以这种方式建模。您应该将简单值建模为属性(在类的矩形内),但将非简单引用建模为关联。简单值仅通过其值(例如数字5)来标识,而非简单引用则指向具有标识的对象。在您的情况下,每个
Die
都应该有一个与其当前面值不同的标识。因此,您不应该对类型为
Die
的属性建模,而应该在关联末尾对属性建模

在您发布的图表中,有三个(!!)类型的属性
Die
。一个被称为
die1
,一个被称为
die2
,另一个未命名,多重数为
2
。在编程语言中,这将为您提供四个位置来存储对骰子的引用,这显然是错误的

我对其建模的方式如下:

生成代码(或手动转录)时,
dice
属性将成为
DiceGame
中的成员变量。该成员变量通常由编程语言中的集合键入,但也可以将其建模为数组。该集合或数组允许您访问两个骰子


请注意,关联是单向的。这是因为
骰子
可能不需要访问
骰子游戏
。(但是,如果您需要每个
Die
都是在自己的线程中运行的活动对象,那么您可能需要双向关联,这样每个
Die
都可以在完成滚动或其他操作时发送一个信号。)

我会将问题改为“对任何类的引用都可以被视为另一个类中的属性吗?”从技术上来说,答案是“是的”,但您不应该在UML中以这种方式建模。您应该将简单值建模为属性(在类的矩形内),但将非简单引用建模为关联。简单值仅通过其值(例如,数字5)来识别