Composition vs. Aggregation

Composition和Aggregation都是”包含”的关系 (part of, made up of) ,不同的是生命周期。对于Composition, Owner负责创建和释放。 而Aggregation, Owner不负责创建和释放,而是从外面传过来的。UML表示如下:

代码例子如下:

class AggregationC
{ }; class CompositionC
{ }; class OwnerC
{
public:
OwnerC(AggregationC* iAggreation):mAggreation(iAggreation) {mComposition = new CompositionC();}
~OwnerC() {delete mComposition; mComposition = nullptr;}
private:
AggregationC* mAggreation;
CompositionC* mComposition;
};

在面向对象中,用的最多的是class inheritance 和object composition. 要区分的是has a 和 is a。 具体情况要具体分析。有经验的都知道能用composition就用composition。原因很简单,面向对象最主要的是封装,用我自己的话说就是把整个系统打散,然后组装。这就是为什么常说“inheritance breaks encapsulation”。具体面向对象的设计时,你首先考虑的微观,而不是整个系统是怎么运行的。

Delegation

Delegation 是用composition来代替inheritance用于降低对象之间的耦合。例子:有一个娃娃玩具,能播放不同类型的声音。这时候用delegation就能降低耦合和为将来改动做准备。

是不是像strategy pattern. 其实就是。

几个OOD概念的更多相关文章

  1. java web学习总结(十一) -------------------基本概念使用Cookie进行会话管理

    一.会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾 ...

  2. 转:如何向妻子解释OOD

    如何向妻子解释OOD 前言 此文译自CodeProject上<How I explained OOD to my wife>一文,该文章在Top Articles上排名第3,读了之后觉得非 ...

  3. 面向对象的OOA、OOD、OOP

    OOA Object-Oriented Analysis:面向对象分析方法 是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题.OOA与结构化分析有较大的区别.OOA所强调的 ...

  4. atitit.提升软件开发的效率and 质量的那些强大概念and方法总结

    atitit.提升软件开发的效率and 质量的那些强大概念and方法总结 1. 主流编程中三个最糟糕的问题 1 1.1. 从理解问题后到实现的时间很长 1 1.2. 理解和维护代码  2 1.3. 学 ...

  5. OOA/OOD/OOP(了解)

    Object-Oriented Analysis:面向对象分析方法 是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题.OOA与结构化分析有较大的区别.OOA所强调的是在系统 ...

  6. OOA、OOD、OOP

      复习 OOA.OOD.OOP OOA Object-Oriented Analysis:面向对象分析方法 是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题.OOA与结构 ...

  7. C# 面向对象之概念理解

    什么是对象? <韦氏大词典>中对对象定义: (1)某种可为人所感知的物质. (2)思维.感受或动作所作用的物质或精神体. ----说白了万物皆对象 熟悉的对象描述: 对象就是客观世界中的物 ...

  8. [转载]面向对象设计(OOD)思想(C#)

    有了思想才能飞翔,缺乏灵活就象少了轮子的汽车,难以飞奔.为了更好的理解设计思想,结合一个尽可能简洁的实例来说明OOD.设计模式及重构.通过下面的代码,详细地阐述面向对象设计思想. 一.传统过程化设计思 ...

  9. OOAD基本概念

    学习目标: 1.理解与掌握面向对象的概念与方法. 2.使用UML. 3.完成面向对象的分析与设计工作. 4.了解OO的设计原则及一些典型的设计模式 什么是面向对象? 面向对象(Object-Orien ...

随机推荐

  1. Find the Missing Number II

    Giving a string with number from 1-n in random order, but miss 1 number.Find that number. Notice n & ...

  2. activemq spring 集成与测试

    1.下载安装activemq 2.pom依赖配置 3.spring配置 4.生产消息,消费消息(同步消费),监听消息(异步消费) 4.测试 5.参考博客 http://www.cnblogs.com/ ...

  3. maven 打包前 Junit 测试

    1. 在需要打包前测试的项目中添加依赖 <dependency> <groupId>junit</groupId> <artifactId>junit& ...

  4. 手机号的 AES/CBC/PKCS7Padding 加解密

    前言:接口中上次的手机号码和密码是传入的加密的,模拟自动化的时候也需要先对数据进行加密 1.各种语言实现 网上已经各种语言实现好的AES加密,可以点击查看:http://outofmemory.cn/ ...

  5. finfo_file

      本文实例讲述了PHP使用finfo_file()函数检测上传图片类型的实现方法.分享给大家供大家参考,具体如下: 在输入输出中,文件的交互必不可少,比如文件的上传什么的.这里我们来解决一个小问题, ...

  6. 团队-团队编程项目爬取豆瓣电影top250-代码设计规范

    1.类名使用首字母大写(骆驼命名法) 2.函数名应该为小写 3.用下划线开头定义私有的属性或方法 4.命名要使用有意义的,英文单词或词组 5.行尾不加分号 6.4个空格缩进代码 7.操作运算符注意优先 ...

  7. 1--Python 入门--Python基础数据类型

    一.Python基础语法 初次使用Python,首先要明确三点: Python的标识符(例如变量名.函数名等),可用字母.数字和下划线构成,不能以数字开头,且区分大小写. Python对于缩进敏感.在 ...

  8. 微软Power BI 每月功能更新系列——3月Power BI 新功能学习

    本月对Power BI Desktop 来讲是非常令人兴奋的一个月!!!以下是3月份最新的功能,下面马上带领大家看看本月的更新内容. 报表功能 报告页面工具提示(预览)  通过报告页面工具提示功能,可 ...

  9. django配置Ueditor富文本编辑器

    1.https://github.com/twz915/DjangoUeditor3下载包,进入包文件夹,找到DjangoUeditor包拷贝到项目下,和xadmin同级目录 2.找到项目的setti ...

  10. 对jQuery ajax的认识

    1.ajax() 方法通过 HTTP 请求加载远程数据. 2.该方法是 jQuery 底层 AJAX 实现.简单易用的高层实现见 $.get, $.post 等.$.ajax() 返回其创建的 XML ...