【问题标题】:How to depict in a UML class diagram that a method accept multiple types?如何在 UML 类图中描述一个方法接受多种类型?
【发布时间】:2018-10-15 20:11:31
【问题描述】:

我正在开发一个 PHP 项目,并且正在编写它的 UML 文档。 我需要指定一个方法接受多种数据类型,但我不知道该怎么做。

例如: 我想在 UML 类图中表示一个名为“A”的 PHP 类:

<?php 

    class A{ 
        private $_data;  

        public function __construct() { 
            $this->_data = array(); 
        } 

        public function add( $key , $value){ 
            $this->_data[$key] = $value; 
        }                        
    } 

    $oA = new A(); 
    $oA->add( 1, 'John Doe' ); // key is an int and value is a string 
    $oA->add( "Fruits" , array("Apple", "Banana", "Kiwi") ); // string, array 
    $oA->add( "pi", 3.1415 ); 
    //and so on...       
?>

注意 add() 函数可以接收不同类型数据的键和值。所以,我不能在我的 UML 类图中指定诸如“key:integer”或“value:string[]”之类的东西,因为它们的数据类型可以根据调用方法时传递的数据类型而改变。

有没有办法用 UML 表示法来描述这个事实?

我可以指定如下内容吗:

+ add( key:mixed , value:mixed)

?

提前致谢!

【问题讨论】:

    标签: php uml


    【解决方案1】:

    【讨论】:

    • 从技术上讲,String 和 Number 不是 PHP 中的类。我应该在这些类中添加像 > 这样的刻板印象吗?
    • @EmilianoSangoi 在我看来,这取决于所需的详细程度(谁将阅读文档以及为什么)。您可以使用/建模与语言无关的高级概念或下拉到低级细节,如phpDocumentor > Types > Primitives。为什么图表的读者需要了解&lt;&lt;datatype&gt;&gt;?对应的database数据类型不是更有用吗?
    【解决方案2】:

    这是解释语言的一个普遍问题,我想这里没有现成的东西。一种可能的方法是将参数声明为(抽象)类Varying(或您想调用的任何名称)。这可能只是您模型中的一个约定,您在全局位置描述这种类型意味着该方法接受不同的参数。所以你的add 会显示为

    + add(Varying)
    

    您可以(理论上)为此类参数引入一种形式上正确的方法。但这不值得付出努力(除非你会在大学的一些 UML 课程中这样做)。

    编辑 或者,可以使用标记值让模型阅读器了解此类结构。根据工具的不同,这些标记值可以控制可见表示以及代码生成。

    【讨论】:

    • 是否可以使用“标记值”?例如“{isMixed=true}”或类似的东西?谢谢。
    • 当然。这始终是让您的模型意识到这些事情的一种方法。如前所述:没有这样做的标准。如果您碰巧使用 Enterprise Architect,则标记值允许在代码生成时对此做出反应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    相关资源
    最近更新 更多