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

实际在UML中是可以隐藏上图中申购交易的细节

导航性(navigation):关联关系的细节信息通常放置于两关联端,像是关联端标示箭头,代表该关联端具有可导航性。

下面我们来看一个“多对一”的例子

Fund.h

 class Fund
{
public:
void setPrice(float);
float getPrice();
void setFee(float);
float getFee();
private:
float price;
float fee;
};

Fund.cpp

 #include "Fund.h"

 void Fund::setPrice(float thePrice)
{
price=thePrice;
} float Fund::getPrice()
{
return price;
} void Fund::setFee(float theFee)
{
fee=theFee;
} float Fund::getFee()
{
return fee;
}

Bid.h

 #include "Fund.h"

 class Bid
{
public:
float calcUnit();
float calcFee();
void setFund(Fund*);
void setAmount(int);
int getAmount();
private:
int amount;
Fund *fundObj;
};

声明一个基金对象指针,此即为多重性为1的实现方法之一。然后类Bid中的函数setFund设计了一个公有操作,让外界可以传入基金对象的指针,也就建立起申购交易对象指向基金对象的链接了。

Bid.cpp

 #include "Bid.h"

 float Bid::calcUnit()
{
float thePrice, theUnit;
thePrice=fundObj->getPrice();
theUnit=amount/thePrice;
return theUnit;
} float Bid::calcFee()
{
float theFundFee, theFee;
theFundFee=fundObj->getFee();
theFee=amount*theFundFee;
return theFee;
} void Bid::setFund(Fund *theFund)
{
fundObj=theFund;
} void Bid::setAmount(int theAmount)
{
amount=theAmount;
} int Bid::getAmount()
{
return amount;
}

main.cpp

 #include <cstdlib>
#include <iostream>
#include "Fund.h"
#include "Bid.h"
using namespace std; int main(int argc, char *argv[])
{
Fund myFund;
float thePrice, theFee;
Bid myBid;
int theAmount; cout << "请输入大华大华基金净值: ";
cin >> thePrice;
myFund.setPrice(thePrice);
cout << "请输入大华大华基金手续费: ";
cin >> theFee;
myFund.setFee(theFee); cout << "请输入申购金额: ";
cin >> theAmount;
myBid.setAmount(theAmount);
myBid.setFund(&myFund); cout << "您申购的单位及手续费为: "
<< "(" << myBid.calcUnit() << ")"
<< "(" << myBid.calcFee() << ")" << endl << endl; system("PAUSE");
return EXIT_SUCCESS;
}

通过调用myBid.setFund(&myFund)将基金对象的指针传给申购交易对象,于是就建立起申购交易对象指向基金对象的链接。

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

画法一:

生成代码对比

Bid.h

达到预期

Fund.h

达到预期

画法二:

生成代码对比

Bid.h

没有达到预期,重复生成了成员变量

Fund.h

达到预期

画法三:

生成代码对比

Bid.h

达到预期

Fund.h

达到预期

综上所述,在实际画图的时候采用画法一或者画法三都可以,个人还是觉得画法一好一些   (update 2017-10-29)其实应该是使用画法一,这样可以避免错误,具体错误的例子可以见UML类图详解_关联关系_一对多,一旦有了比较复杂的类型,那么生成的代码就不靠谱了。一旦类图里面包含了一次成员那么在关联端点再声明一次的话就会重复,另外如果不在类图里面包含一次成员而在关联端点处声明一次的话生成的代码比较傻,很多情况下无法满足我们的要求。所以我们就是把成员都在类图里面包含进去,关联端点处就是声明一下多重性,而不要再声明成员就可以了。

UML类图详解_关联关系_多对一的更多相关文章

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

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

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

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

  3. UML类图详解

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

  4. UML 类图详解

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

  5. UML类图详解和示例

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

  6. UML类图详解_组合关系

    组合关系和聚合关系有一个最大的不同,组合关系中的整体直接掌握部件的生灭,聚合关系中的整体并不具有生灭部件的权力.一旦组合中的整体不存在时,其组合部件也不能单独存在,必须同时消灭.另外,外界也不能直接与 ...

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

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

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

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

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

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

随机推荐

  1. 【数论】【最大公约数】【枚举约数】CODEVS 1012 最大公约数和最小公倍数问题 2001年NOIP全国联赛普及组

    对于一对数(p,q),若它们的gcd为x0,lcm为y0, 则:p*q/x0=y0,即q=x0*y0/p, 由于p.q是正整数,所以p.q都必须是x0*y0的约数. 所以O(sqrt(x0*y0))地 ...

  2. 前端基础-JavaScript的基本概述和语法

    1.JavaScript概述 2.JavaScript引入方式 3.JavaScript语言规范 4.JavaScript语言基础 5.JavaScript数据类型 6.JavaScript运算符 7 ...

  3. 1.5(学习笔记)Cookie

    一.Cookie简介 Cookie是网站发送的一小段数据,在用户访问浏览网站时通过浏览器存储在用户的计算机上. 主要用于记录一些用户状态信息,例如记录用户的账号,当前所在地等,根据这些信息网站 可以提 ...

  4. 【R笔记】给R加个编译器——notepad++

    R的日记-给R加个编译器 转载▼ R是一款强大免费且开源的统计分析软件,这是R的长处,可也是其“缺陷”的根源:不似商业软件那样user-friendly.记得初学R时,给我留下最深印象的不是其功能的强 ...

  5. 十面阿里 Java 程序员,最终拿下阿里 P6 offer!

    转子:https://mp.weixin.qq.com/s/RkMxPbm8E99-rTZKmvBy6Q 今天介绍小编的一个朋友,他现今有四年开发经验了,前前后后为了进阿里面试十次(阿里旗下—蚂蚁金服 ...

  6. SqlMapConfig.xml详细介绍

    1,连接数据库 <!--配置环境,默认的环境id为oracle --> <environments default="oracle"> <!-- 配置 ...

  7. 学习Microsoft SQL Server 2008技术内幕:T-SQL语法基础--第4章

    第4章 子查询 4.2.1 Exist 谓语: use TSQLFundamentals2008 select * from Sales.Customers as C where c.country= ...

  8. Looking deeper into SQL Server using Minidumps

    https://blogs.msdn.microsoft.com/sqlcat/2009/09/11/looking-deeper-into-sql-server-using-minidumps/ A ...

  9. ueditor-angular(百度编辑器angular版)中,关于插入图片后不操作,图片无法正常提交的问题;

    由于项目后台管理页面中需要使用编辑器,所以选择了百度编辑器这个常用的东西: 本人是小白,第一次使用百度编辑器,具体的配置是由后台的兄弟完成的,还给了demo,所以在项目开发中也一直都没发现什么问题: ...

  10. android出现段错误时的查找定位的方法

    android出现段错误时的查找方法,例如出现log: - ::): Fatal signal (SIGSEGV) at ), thread (SurfaceFlinger) - ::): *** * ...