UML类图详解_关联关系_一对多
对于一对多的示例,可以想象一个账户可以多次申购。在申购的时候没有固定上限,下限为0,那么就可以使用容器类(container class)来搞,最常见的就是vector了。

下面我们来看一个“一对多”的例子
Account.h
#include <cstdlib>
#include <vector>
#include "Bid.h"
using namespace std; class Account
{
public:
void setBid(Bid*);
int calcAmount();
private:
vector<Bid*> bidObj;
};
声明一个存放申购交易对于指针的vector对象。然后类Account中的函数setBid设计了一个公有操作,让外界用来传入申购交易对象的指针,以便让账户对象将申购交易对象指针存入vector对象中。
Account.cpp
#include "Account.h" void Account::setBid(Bid *theBid)
{
bidObj.push_back(theBid);
} int Account::calcAmount()
{
int size,theAmount=;
size=bidObj.size();
for(int i=;i<size;i++)
theAmount=theAmount+bidObj[i]->getAmount();
return theAmount;
}
Bid.h
class Bid
{
public:
void setAmount(int);
int getAmount();
private:
int amount;
};
Bid.cpp
#include "Bid.h" void Bid::setAmount(int theAmount)
{
amount=theAmount;
} int Bid::getAmount()
{
return amount;
}
main.cpp
#include <cstdlib>
#include <iostream>
#include "Bid.h"
#include "Account.h"
using namespace std; int main(int argc, char *argv[])
{
Bid *myBid;
Account myAccount;
int theAmount;
int choice; do
{
cout << "请输入申购金额: ";
cin >> theAmount;
myBid=new Bid;
myBid->setAmount(theAmount);
myAccount.setBid(myBid);
cout << "1(继续), 2(结算) ...";
cin >> choice;
cout << endl;
} while(choice==); cout << "总投资金额为: "
<< myAccount.calcAmount() << endl << endl; system("PAUSE");
return EXIT_SUCCESS;
}
下面我们来画一下UML图,并且用UML自动生成C++代码来做一个比较
画法一:

生成代码对比
Account.h

没有达到预期,多生成了成员变量,如果在类图里面写明了某个指针变量的话,那么在关联关系的端点处就不能再标示这个成员变量了,否则就会重复生成
见UML类图详解_关联关系_多对一中的画法二,也是因为这个导致了没有达到预期
Bid.h

达到预期
画法二:

生成代码对比
Account.h

达到预期
Bid.h

达到预期
画法三:

生成代码对比
Account.h

没有达到预期
Bid.h

达到预期
综上所述,在实际画图的时候采用画法二才能保证正确,一旦类图里面包含了一次成员那么在关联端点再声明一次的话就会重复,另外如果不在类图里面包含一次成员而在关联端点处声明一次的话生成的代码比较傻,很多情况下无法满足我们的要求。所以我们就是把成员都在类图里面包含进去,关联端点处就是声明一下多重性,而不要再声明成员就可以了。
UML类图详解_关联关系_一对多的更多相关文章
- UML类图详解_关联关系_多对一
首先先来明确一个概念,即多重性.什么是多重性呢?多重性是指两个对象之间的链接数目,表示法是“下限...上限”,最小数据为零(0),最大数目为没有设限(*),如果仅标示一个数目级上下限相同. 实际在UM ...
- UML类图详解_泛化关系
泛化其实就是继承关系,还是比较简单的,那么我们就把之前有些问题的博客UML类图重新来实现一次. 依旧是这个图 下面我们来看一个例子 Account.h #include <cstdlib> ...
- UML类图详解
下面是类图的实例: (注:飞翔接口那里应为空心三角形) UML中类图实例 接口:空心圆+直线(唐老鸭类实现了‘讲人话’):依赖:虚线+箭头(动物和空气的关系):关联:实线+箭头(企鹅需要知道气候才迁移 ...
- UML 类图详解
转载来源:http://blog.csdn.net/shift_wwx/article/details/79205187 可以参考:http://www.uml.org.cn/oobject/2012 ...
- UML类图详解和示例
ps:博客园markdown不能自动生成列表,更好的阅读体验可访问我的个人博客http://www.isspark.com/archives/UMLDescription UML类图概述 什么是UML ...
- UML类图详解_组合关系
组合关系和聚合关系有一个最大的不同,组合关系中的整体直接掌握部件的生灭,聚合关系中的整体并不具有生灭部件的权力.一旦组合中的整体不存在时,其组合部件也不能单独存在,必须同时消灭.另外,外界也不能直接与 ...
- UML类图详解_关联关系_多对多
在关联关系中,很多情况下我们的多重性并不是多对一或者一对多的,而是多对多的. 不过因为我们要考虑里面的导航性,如果直接搞的话就是需要去维护两群对象之间多对多的互指链接,这就十分繁杂且易错.那么我们怎么 ...
- UML类图详解_聚合关系
结合UML关系,以看台和基金来介绍聚合关系 aggregation,是一种特殊的关联关系,既有关联关系的特质,还独有“整体 —— 部分(whole —— part)”的特质. 也就是说,用之前的关联关 ...
- UML简单介绍—类图详解
类图详解 阅读本文前请先阅读:UML简单介绍—类图这么看就懂了 1.泛化关系 一个动物类: /** * 动物类 */ public class Animal { public String name; ...
随机推荐
- cocoapods更新
使用sudo gem install cocoapods更新提示: ERROR: While executing gem ... (Errno::EPERM) Operation not permit ...
- 【json】前台ajax序列化的多个属性拼接在一起的字符串,转化为JSONObject对象
1.首先看一下前台序列化了哪些东西: 部分js代码 //查询按钮 $(".questButton").click(function(){ $.ajax({url:"/qu ...
- Node.js 调用 restful webservice
如何构建一个restful web service参考原来的文章 http://www.cnblogs.com/ericnie/p/5212748.html 直接用原来的项目编译好像有问题,此处耗费1 ...
- WebLogic Cluster Sevlet的配置
虽然生产环境中不建议使用,但因为客户需要考试可能用到,所以又做了一遍 1. 配置受管Server,ProxyServer,过程略 2.构建Proxy Application 建立一个ProxyApp的 ...
- iOS:iOS 的 APP 如何适应 iPhone 5s/6/6Plus 三种屏幕的尺寸?
原文:http://www.niaogebiji.com/article-4379-1.html?utm_source=tuicool 初代iPhone 2007年,初代iPhone发布,屏幕的宽高是 ...
- GPU Instance
http://forum.china.unity3d.com/thread-17131-1-1.html https://docs.unity3d.com/Manual/GPUInstancing.h ...
- Python实现局域网内屏幕广播的技术要点分析(转载)
转载:https://mp.weixin.qq.com/s?timestamp=1498531736&src=3&ver=1&signature=Eq6DPvkuGJi*G5s ...
- Unity3D之高级渲染-Shader Forge增强版
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家.特邀编辑.畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...
- objc语言的运行时处理
在Objective-C中,消息是通过objc_msgSend()这个runtime方法及相近的方法来实现的.这个方法需要一个target,selector,还有一些参数.理论上来说,编译器只是把消息 ...
- MyBatis批量添加、修改和删除
1.批量添加元素session.insert(String string,Object o) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ...