0
点赞
收藏
分享

微信扫一扫

EA&UML日拱一卒-关联(关联类)


正如可以使用属性描述类的对象一样,也可以用属性来描述关联。UML用关联类来表示这样的信息。关联类(association class)是一种关联,也是一个类。

-----------UML面向对象建模与设计

也不知道你是懂了呢还是懂了呢?还先从一个简单的例子开始说起吧。

有一个温度控制系统,通过传感器测量温度。传感器的输出是1v到5v,对应的温度为0到100摄氏度。

控制器每0.1秒获取一次温度值,然后根据实际温度和期望的温度的偏差来决定输出值,计算的周期为1秒,输出值的范围为0%到100%。这个输出值发送给一台加热器来控制温度。

加热器的控制端在输入1v时的输出功率为0KW,输入5v是输出功率为10KW。

这个系统应该如何建模呢?先来第一步,识别类和关联。


EA&UML日拱一卒-关联(关联类)_关联类

接下来将全部信息都反映到模型上。


EA&UML日拱一卒-关联(关联类)_关联_02

不要被满篇的属性吓倒,耐心地,慢慢地读下去,你会理解的。

传感器Sensor

传感器Sensor的功能其实就是将现实世界中的0度(m_tempLow)到100度(m_tempHigh)的温度经过线性变换转换成1v(m_outputLow)到5v(m_outputHigh)的电压信号。


控制器Controller

控 制器每0.1秒(m_sampleCycle)获取一次Sensor的电压输出,将这个电压值从范围 [m_sensorOutoutLow,m_sensorOutputHigh]线性变换到[m_tempLow,m_tempHight]之间,然后由 控制器根据实际温度的和期望温度偏差来决定输出值,计算的周期为1秒(m_controlCycle),输出值的范围为0% (m_controllerOutoutLow)到100%(m_controllerOutoutHigh)。这个输出值再经过线性变换变成一个 [m_heaterInputLow,m_heaterInputHigh]之间的值,发送给加热器来控制温度。

加热器Heater

加热器的控制端接受到1v(m_intputLow)到5v(m_intputHigh)之间的电压值以后经过线性变换转换成0KW(m_outoutLow)到10KW(m_outputHigh)之间的功率。

谢谢你坚持读到这里。回头来审视一下模型,有没有发现什么问题?

是的,Controller类太大,功能也太多了。


这个问题的解决方案就是本文的话题:关联类。当关联足够复杂,复杂到必须需要利用属性来描述细节,利用操作来定义动作的时候就该关联类出场了。

在本例中取得温度值(GetTemperature),输出(SetOutput)两个关联,要进行线性变换,各自需要四个属性(实际上还应该有操作),都可以定义为关联类。就像下面这样。


EA&UML日拱一卒-关联(关联类)_EA_03

前面废了那么多口舌,到主角的时候反而简单了。

关联类的内容就是补充描述关联的那些信息。

这种事情不落地,弄不好一辈子学不会。

如果阅读本文能给您带来些许收获,欢迎分享给更多的朋友!

阅读更多新文章,请扫描下面二维码,关注公众号【面向对象思考】


EA&UML日拱一卒-关联(关联类)_线性变换_04

举报

相关推荐

0 条评论