UML图示例

news/2024/7/10 23:54:07 标签: UML, Blog

全面认识类图元素

http://uml.chinaitlab.com/UML/17681.html

1.generalization

2.实现realization.

二、依赖,关联,聚合和组合

1.实例化(依赖)
A将B作为局部变量进行使用.
程序1
void A::foo()
{
    B b;
    b.SomeMethod();
}

2.关联
A与B存在一定的关系. 这里只考虑单向导航. 关联在代码中有多种表现形式.
第一种, 作为参数:
程序2
void A::foo(B& b) // (B* b) or (B b)
{
    b.SomeMethod();
}

第二种, 作为成员变量:
程序3
class A
{
public:
    A(B& b)
    {
        b_ = b;
    }

    void foo()
    {
        b_.SomeMethod();
    }
private:
    B& b_; // B* b_
};

3.聚合
聚合是一种特殊的关联, 聚合更明确指出聚合的主体具有整体-部分关系. 代码的表现形式见程序3.

4.组合
组合是一种特殊的聚合, 组合中的某个主体控制着另外一个主体的生命周期,而且他们还存在整体-部分关系.
程序4
class A
{
public:
    A()
    {
        b_ = new B;
    }

    ~A()
    {
        delete b_;
        b_ = NULL;
    }

    void foo()
    {
        b_->SomeMethod();
    }
private:
    B* b_;
};


UML中聚合和组合的关系

聚合:指的是整体与部分的关系。通常在定义一个整体类后,再去分析这个整体类的组成结构。从而找出一些组成类,该整体类和组成类之间就形成了聚合关系。例如一个航母编队包括海空母舰、驱护舰艇、舰载飞机及核动力攻击潜艇等。需求描述中“包含”、“组成”、“分为…部分”等词常意味着聚合关系。

组合:也表示类之间整体和部分的关系,但是组合关系中部分和整体具有统一的生存期。一旦整体对象不存在,部分对象也将不存在。部分对象与整体对象之间具有共生死的关系。

聚合和组合的区别在于:聚合关系是“has-a”关系,组合关系是“contains-a”关系;聚合关系表示整体与部分的关系比较弱,而组合比较强;聚合关系中代表部分事物的对象与代表聚合事物的对象的生存期无关,一旦删除了聚合对象不一定就删除了代表部分事物的对象。组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象。

我们用浅显的例子来说明聚合和组合的区别。“国破家亡”,国灭了,家自然也没有了,“国”和“家”显然也是组合关系。而相反的,计算机和它的外设之间就是聚合关系,因为它们之间的关系相对松散,计算机没了,外设还可以独立存在,还可以接在别的计算机上。在聚合关系中,部分可以独立于聚合而存在,部分的所有权也可以由几个聚合来共享,比如打印机就可以在办公室内被广大同事共用

关联和聚合的区别主要在语义上,关联的两个对象之间一般是平等的,例如你是我的朋友,聚合则一般不是平等的,例如一个公司包含了很多员工,其实现上是差不多的。聚合和组合的区别则在语义和实现上都有差别,组合的两个对象之间其生命期有很大的关联,被组合的对象是在组合对象创建的同时或者创建之后创建,在组合对象销毁之前销毁。一般来说被组合对象不能脱离组合对象独立存在,而且也只能属于一个组合对象,例如一个文档的版本,必须依赖于文档的存在,也只能属于一个文档。聚合则不一样,被聚合的对象可以属于多个聚合对象,例如一个员工可能可以属于多个公司。
我想举个通俗的例子。
你和你的心脏之间是composition关系(心脏只属于你自己)
你和你买的书之间是aggregation关系(书可能是别人的)
你和你的朋友之间是association关系
http://hi.baidu.com/%BD%BA%CB%AE502/blog/item/94573c6c187096f34216942a.html

http://www.niftyadmin.cn/n/1313578.html

相关文章

Zend Studio 8 如何修改为UTF-8编码

修改方式为: 第一步: windows->preference->General->workplace,将右边的“textfile encoding”修改为utf8格式 第二步: windows->preference->General->Editors->TextEditors->Spelling右边面板的Encoding里面将编码…

Tomcat4 源代码分析 (1, 2) How Tomcat Works 笔记

在第二章中,作者给出了一个简单的web server的实现。麻雀虽小,五脏俱全。 从中我们可以学习到 server 处理客户端请求的一个主体思路。 项目由下面的类组成: |-- Constants.java // 里面仅仅定义了web root的路径 |-- HttpServer2.java // 核…

maven打包报错:Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.5:test

勾上这个就行了转载于:https://www.cnblogs.com/hongming-blogs/p/8301431.html

php 使用 curl 发送 post 数据

作为第三方开发商,经常会需要调用平台接口,远程调用,就要用到curl,其实质就是叫调用的方法与用到的参数以http post的方式发送至平台服务器。 简单的例子: $url http://; //调用接口的平台服务地址 $post_string …

Video Resource

HSBC中小企业金融在线课堂 http://www.hsbc.com.cn/1/2/emasterclass?WT.mc_idHBCN_ofhc04819009 Word2007商业文档使用教学 http://6.cn/watch/11045274.html 2010励志短片(献给正在迷途的你) http://www.tudou.com/programs/view/F_ciW2FB18U/ 恐怖…

自己学习深度学习时,有哪些途径寻找数据集?

可以参考下面两个网址: https://www.zhihu.com/question/53655758 https://www.zhihu.com/question/53655758/answer/156701855 我来说说我自己的获取数据集的方法: 比如:识别 机械齿轮。 1、将齿轮放在白纸上,用手机录下这个齿轮…

Zend Studio快捷键大全

本文省略“通用快捷键”描述,诸如:ctrlN新建,ctrlO打开,ctrlC复制,ctrlV,ctrlX……等等几乎所有软件都通用的一组快捷键,而着重介绍zde独有的快捷键,了解并灵活运用这些快捷键以后&a…

MySQL错误代码

130 :文件格式不正确,可以尝试一下使用 repair.php 来修复,如果再不能的话就只好恢复相关的数据了(还不是很清楚错误的状况)145 :文件无法打开,使用 repair.php 修复1005:创建表失败…