Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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
UML抽象类?_Uml_Abstract Class - Fatal编程技术网

UML抽象类?

UML抽象类?,uml,abstract-class,Uml,Abstract Class,所以我目前正在自学UML,我参加了一个在线测验来帮助加强我对它的理解 其中一个问题是: 如何使用UML2类图对以下情况建模: “有多种不同的鸟类,例如黑鹂、画眉, 还有椋鸟。” 两个可用选项是: 顶部的图表是正确的(我理解原因),但是底部的图表是不正确的。为什么会这样?由于这三个bird继承自抽象类bird并符合任何抽象方法,它们不都是bird吗?UML2.5规范在第。98 分类器的isAbstract属性为true时,指定分类器是抽象的,即没有直接实例:抽象分类器的每个实例都应是其某个专门化

所以我目前正在自学UML,我参加了一个在线测验来帮助加强我对它的理解

其中一个问题是:

如何使用UML2类图对以下情况建模:

“有多种不同的鸟类,例如黑鹂、画眉, 还有椋鸟。”

两个可用选项是:


顶部的图表是正确的(我理解原因),但是底部的图表是不正确的。为什么会这样?由于这三个bird继承自抽象类bird并符合任何抽象方法,它们不都是bird吗?

UML2.5规范在第。98

分类器的isAbstract属性为true时,指定分类器是抽象的,即没有直接实例:抽象分类器的每个实例都应是其某个专门化的实例

因此,无论
Bird
是否被关键字
abstract
修饰,都会导致不能/实例化它的限制。如果你需要一个
Bird
实例,就把它放在一边。如果你想创建一个动物索引,你可能会有
抽象鸟
,它告诉你需要在鸟的描述中包含什么。但你不能单独描述它


在您的例子中,两个图表通常都是“正确的”。这取决于你没有正确解释的上下文。您可以同时使用这两种方法来满足需求,因为不存在不实例化
Bird

的需求,UML2.5规范如第页所述。98

分类器的isAbstract属性为true时,指定分类器是抽象的,即没有直接实例:抽象分类器的每个实例都应是其某个专门化的实例

因此,无论
Bird
是否被关键字
abstract
修饰,都会导致不能/实例化它的限制。如果你需要一个
Bird
实例,就把它放在一边。如果你想创建一个动物索引,你可能会有
抽象鸟
,它告诉你需要在鸟的描述中包含什么。但你不能单独描述它


在您的例子中,两个图表通常都是“正确的”。这取决于你没有正确解释的上下文。您可以同时使用这两种方法来满足需求,因为不需要您不实例化
Bird

我认为有两种可能的答案:

  • 顶部在逻辑上是不正确的,因为您无法单独创建鸟的实例。鸟类是所有鸟类的抽象分类。你只能创造画眉、椋鸟和黑鸟。我不确定鸟的例子会是什么样子,但它会是超自然的

  • 底部在语法上是不正确的,因为抽象约束应该应用在类的名称和类型之后


  • 就我个人而言,我认为我应该放弃#2 1(这是一个错误,谁在乎呢?),把重点放在#1上,如果我从事鸟类行业,这一点更为重要。

    我认为有两个可能的答案:

  • 顶部在逻辑上是不正确的,因为您无法单独创建鸟的实例。鸟类是所有鸟类的抽象分类。你只能创造画眉、椋鸟和黑鸟。我不确定鸟的例子会是什么样子,但它会是超自然的

  • 底部在语法上是不正确的,因为抽象约束应该应用在类的名称和类型之后


  • 就我个人而言,我认为我应该放弃#2一(这是一个错误,谁在乎?),把注意力集中在#1上,如果我从事鸟类行业,这一点更为重要。

    测验中的要求是: 有多种不同的鸟类,如黑鸟、画眉和椋鸟

    但它并没有说明你应该掌握哪些关于鸟类的信息。所以我的第一个假设是用户只对类型感兴趣

    UML图:

    是满足此要求的有效解决方案。 根据您对需求的看法,测验中的两个选项也是有效的解决方案。该需求给出了三个示例,这三个示例在两个解决方案中都是显式建模的。“例如”意味着可能还有其他鸟类,第一种解决方案更能描述这一事实。在第二种解决方案中,示例列表中没有“Bird”的实例

    但是这个解决方案只有在您可以有一些未显示的属性和操作的情况下才有意义——至少要跟踪bird类型——在大多数实现环境中,从类名中检索它是非常尴尬的

    就我个人而言,我不认为这是一个很好的方式来解释继承的例子,如在您的测试。继承在实现中代价高昂(例如,在大多数编程语言中,每个继承的类都有单独的源代码文件),这种代价应该会给您带来一定的好处。当要描述的事物在属性和行为上不同,并且需要不同的实现时,通常会出现这种情况。“黑鸟”和“蓝鸟”可能只是颜色不同(颜色属性是鉴别器)。IMHO在这种情况下,最好有: 比
    测验中的要求是: 有多种不同的鸟类,如黑鸟、画眉和椋鸟

    但它并没有说明你应该掌握哪些关于鸟类的信息。所以我的第一个假设是用户只对类型感兴趣

    UML图:

    是满足此要求的有效解决方案。 根据您对需求的看法,测验中的两个选项也是有效的解决方案。该需求给出了三个示例,这三个示例在两个解决方案中都是显式建模的。“例如”意味着可以