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