I'm working on a PHP project and I'm doing its UML documentation. I need to specify that a method accept multiple data types and I can't figure out how to do it.
For instance: I want to represent a PHP class called 'A' in a UML class diagram:
<?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...
?>
Note that add() function can receive keys and values of different kind of data. So, I can't specify in my UML class diagram something like “key:integer” or “value : string[]” because their data type can change depending on what kind of data is passed when the method is called.
Is there a way to depict this fact in UML notation?
Can I specify something like:
+ add( key:mixed , value:mixed)
?
Thanks in advance!
This is a general problem with interpreting languages and I guess there is nothing off-the-shelf you can get here. One possible way would be to declare the parameter being of the (abstract) class Varying
(or whatever you'd like to call it). That could simply be a convention in your model where you describe at a global place that such a type means that the method accepts varying parameters. So your add
would appear as
+ add(Varying)
You could (theoretically) introduce a formally correct way for such parameters. But that's not worth the effort (except you'll do that in some UML class at university).
Edit Alternatively it is possible to use tagged values to make model readers aware of such constructs. Depending on the tool those tagged values can control visible representation as well as code generation.