组合关系和聚合关系有一个最大的不同,组合关系中的整体直接掌握部件的生灭,聚合关系中的整体并不具有生灭部件的权力。一旦组合中的整体不存在时,其组合部件也不能单独存在,必须同时消灭。另外,外界也不能直接与部件沟通,必须通过整体代为传达消息。那么在C++中实现组合关系时,不能由第三者产生部件后才将部件指标传给整体,而是应该由整体直接负责部件的生灭。

有了定期定额申购之后,每个月的约定日到达就会自动产生一笔定额交易,也就是单期交易。那么定期定额申购与单期交易非常适合使用组合关系,一旦某笔定期定额申购被删除,底下的单期交易也就不该再继续存留。

下面我们来看一个“组合关系”的例子

Fund.h

 class Fund
{
public:
Fund(float);
float getPrice();
private:
float price;
};

Fund.cpp

 #include "Fund.h"

 Fund::Fund(float thePrice)
{
price=thePrice;
} float Fund::getPrice()
{
return price;
}

RegularBid.h

 #include <cstdlib>
#include <vector>
#include "BidItem.h"
using namespace std; class RegularBid
{
public:
void createBidItem(float,Fund*);
int calcAsset();
private:
vector<BidItem*> itemObj;
};

RegularBid.cpp

 #include "RegularBid.h"

 void RegularBid::createBidItem(float theUnit,Fund *theFund)
{
BidItem *myItem=new BidItem(theUnit);
myItem->setFund(theFund);
itemObj.push_back(myItem);
} int RegularBid::calcAsset()
{
int size,theAsset=;
size=itemObj.size();
for(int i=;i<size;i++)
theAsset=theAsset+itemObj[i]->calcAsset();
return theAsset;
}

BidItem.h

 #include "Fund.h" 

 class BidItem
{
public:
BidItem(float);
void setFund(Fund*);
int calcAsset();
float getUnit();
private:
float unit;
Fund *fundObj;
};

BidItem.cpp

 #include "BidItem.h"

 BidItem::BidItem(float theUnit)
{
unit=theUnit;
} void BidItem::setFund(Fund *theFund)
{
fundObj=theFund;
} int BidItem::calcAsset()
{
return unit*fundObj->getPrice();
} float BidItem::getUnit()
{
return unit;
}

main.cpp

 #include <cstdlib>
#include <iostream>
#include "RegularBid.h"
#include "Fund.h"
using namespace std; int main(int argc, char *argv[])
{
Fund *myFund=new Fund(37.83);
RegularBid myRegularBid; myRegularBid.createBidItem(590.53,myFund);
myRegularBid.createBidItem(890.85,myFund);
myRegularBid.createBidItem(901.45,myFund); cout << "总资产为: "
<< myRegularBid.calcAsset() << endl << endl; system("PAUSE");
return EXIT_SUCCESS;
}

下面我们来画一下UML图,并且用UML自动生成C++代码来做一个比较

生成代码对比

Fund.h

达到预期

RegularBid.h

达到预期

BidItem.h

达到预期

画组合关系的时候,也是一样,一旦类图里面包含了一次成员那么在组合端点再声明一次的话就会重复,另外如果不在类图里面包含一次成员而在组合端点处声明一次的话生成的代码比较傻,很多情况下无法满足我们的要求。所以我们就是把成员都在类图里面包含进去,组合端点处就是声明一下多重性,而不要再声明成员就可以了。

UML类图详解_组合关系的更多相关文章

  1. UML类图详解_关联关系_一对多

    对于一对多的示例,可以想象一个账户可以多次申购.在申购的时候没有固定上限,下限为0,那么就可以使用容器类(container class)来搞,最常见的就是vector了. 下面我们来看一个“一对多” ...

  2. UML类图详解_关联关系_多对一

    首先先来明确一个概念,即多重性.什么是多重性呢?多重性是指两个对象之间的链接数目,表示法是“下限...上限”,最小数据为零(0),最大数目为没有设限(*),如果仅标示一个数目级上下限相同. 实际在UM ...

  3. UML类图详解_泛化关系

    泛化其实就是继承关系,还是比较简单的,那么我们就把之前有些问题的博客UML类图重新来实现一次. 依旧是这个图 下面我们来看一个例子 Account.h #include <cstdlib> ...

  4. UML类图详解_关联关系_多对多

    在关联关系中,很多情况下我们的多重性并不是多对一或者一对多的,而是多对多的. 不过因为我们要考虑里面的导航性,如果直接搞的话就是需要去维护两群对象之间多对多的互指链接,这就十分繁杂且易错.那么我们怎么 ...

  5. UML类图详解_聚合关系

    结合UML关系,以看台和基金来介绍聚合关系 aggregation,是一种特殊的关联关系,既有关联关系的特质,还独有“整体 —— 部分(whole —— part)”的特质. 也就是说,用之前的关联关 ...

  6. UML类图详解

    下面是类图的实例: (注:飞翔接口那里应为空心三角形) UML中类图实例 接口:空心圆+直线(唐老鸭类实现了‘讲人话’):依赖:虚线+箭头(动物和空气的关系):关联:实线+箭头(企鹅需要知道气候才迁移 ...

  7. UML类图详解和示例

    ps:博客园markdown不能自动生成列表,更好的阅读体验可访问我的个人博客http://www.isspark.com/archives/UMLDescription UML类图概述 什么是UML ...

  8. UML 类图详解

    转载来源:http://blog.csdn.net/shift_wwx/article/details/79205187 可以参考:http://www.uml.org.cn/oobject/2012 ...

  9. UML简单介绍—类图详解

    类图详解 阅读本文前请先阅读:UML简单介绍—类图这么看就懂了 1.泛化关系 一个动物类: /** * 动物类 */ public class Animal { public String name; ...

随机推荐

  1. [BZOJ 3152] 组合子逻辑

    Link: BZOJ 3152 传送门 Solution: 喜闻乐见,gyz出的语文题,题意要看半小时 题意:使用最少的括号将序列分割,对于每个括号中的序列,设最左边的数为$num$,序列中元素个数为 ...

  2. POJ 2082 Terrible Sets(单调栈)

    [题目链接] http://poj.org/problem?id=2082 [题目大意] 给出一些长方形下段对其后横向排列得到的图形,现在给你他们的高度, 求里面包含的最大长方形的面积 [题解] 我们 ...

  3. 8.5(java学习笔记)8.5 字节码操作(javassist)

    一.javassist javassist让我们操作字节码更加简单,它是一个类库,允许我们修改字节码.它允许java程序动态的创建.修改类. javassist提供了两个层次的API,基于源码级别的和 ...

  4. Awesome图标 | 如何在某些编辑软件中使用Font Awesome字体图标

    文章目录 Font Awesome 字体图标 在某些编辑软件中使用 Font Awesome 字体图标 Font Awesome 为您提供可缩放矢量图标,它可以被定制大小.颜色.阴影以及任何可以用 C ...

  5. MOD_EXPIRES安装和配置 提高网站速率

    MOD_EXPIRES安装和配置 提高网站速率   实施这一方法将节省你难以置信数额的带宽,极大地加快你的网站为你的网站访客.基本上,对于图片,CSS , JavaScript以及其他文件可以通过优化 ...

  6. 关于数字、数据处理的几个PHP函数汇总

    1. / 得到的结果是浮点数 2. % 求余数 3.ceil():得到大于当前数字的整数 $num=3.4; $num=ceil($num); echo $num;   的到的结果是4 $num=3. ...

  7. Asp.net Core学习文章

    杜现鹏的Asp.net Core文章 EF Core 官方教程 https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/new- ...

  8. 继承了母板页的onload的事件

    这段时间实在是太忙了, 现借国庆放假之际,把一些问题写一下, 不久前,有位网友问我继承了母版页的页面要加载body的onload事件如何加载,我以前刚开始用母板的时候也碰到过这种问题, 直接是用JAV ...

  9. telnet协议的作用详解,以及telnet端口号介绍

    转:http://www.ctowhy.com/382.html Telnet协议,工作在TCP/IP协议栈的“应用层”,telnet是一种使用命令行的远程终端管理的协议,可以远程连接到网络设备上,并 ...

  10. libCurl 简单使用

    curl easy  的使用步骤 curl_easy_init() curl_easy_setopt() curl_easy_perform() curl_easy_cleanup() ------- ...