之前自己常用如下方法建立类图
这是之前的方法,其实不应该这样,应该建立一个empty的project
选择model --> profile
选择C++ Profile和UML Standard Profile
把项目的名字改一下
右键点击,选择Add --> Model
改个名字
再改个名字,就默认出来了类的那些选项卡了
下面开始画了,我们先来看一个最最简单的类吧,如下:
Fund.h
1 class Fund
2 {
3 public:
4 Fund(float);
5 float getPrice();
6 private:
7 float price;
8 };
Fund.cpp
1 Fund::Fund(float thePrice)
2 {
3 price=thePrice;
4 }
5
6 float Fund::getPrice()
7 {
8 return price;
9 }
单击出现的price
这就算自动更新完毕了
我们的一个函数也就如此完成了
这种我们就直接输入getPrice(): float,免得一堆麻烦事情!
然后我们再来看一个类,如下:
Bid.h
1 class Bid
2 {
3 public:
4 void setFund(Fund*);
5 virtual int calcAsset()=0;
6 virtual float getUnit()=0;
7 protected:
8 Fund *fundObj;
9 };
Bid.cpp
1 void Bid::setFund(Fund *theFund)
2 {
3 fundObj=theFund;
4 }
对于抽象类,我们选中右边的IsAbstract
type只能手动填写了
指定某个函数是抽象操作
相同的东西我们不再赘述了,直接搞就得了
下面我们来建立类Bid和类Fund的关系吧
下面再搞其他的类,定义如下:
RegularBid.h
1 class RegularBid : public Bid
2 {
3 public:
4 RegularBid();
5 int calcAsset();
6 float getUnit();
7
8 private:
9 vector<BidItem*> itemObj;
10 };
再来看类BidItem:
BidItem.h
1 class BidItem
2 {
3 public:
4 BidItem(float);
5 float getUnit();
6 private:
7 float unit;
8 };
BidItem.cpp
1 BidItem::BidItem(float theUnit)
2 {
3 unit=theUnit;
4 }
5
6 float BidItem::getUnit()
7 {
8 return unit;
9 }
取消导航性,即不支持反向链接
然后再完成其他的类图
SingleBid.h
1 class SingleBid : public Bid
2 {
3 public:
4 SingleBid(float);
5 int calcAsset();
6 float getUnit();
7 private:
8 float unit;
9 };
SingleBid.cpp
1 SingleBid::SingleBid(float theUnit)
2 {
3 unit=theUnit;
4 }
5
6 int SingleBid::calcAsset()
7 {
8 return unit*fundObj->getPrice();
9 }
10
11 float SingleBid::getUnit()
12 {
13 return unit;
14 }
Account.h
1 class Account
2 {
3 public:
4 void setBid(Bid*);
5 int calcAsset();
6 private:
7 vector<Bid*> bidObj;
8 };
Account.cpp
1 void Account::setBid(Bid *theBid)
2 {
3 bidObj.push_back(theBid);
4 }
5
6 int Account::calcAsset()
7 {
8 int size,theAsset=0;
9 size=bidObj.size();
10 for(int i=0;i<size;i++)
11 theAsset=theAsset+bidObj[i]->calcAsset();
12 return theAsset;
13 }
图都画完了,然后可以导出C++文件,我们来看一下导出的文件和我们期望的文件的不同:
(1)Account.h
UML图中的表现形式和我们实际希望的代码还是有出入的……
(update 2017-10-29)该问题已解决,具体可以参见UML类图详解_关联关系_一对多,里面对未达到预期的原因做了详细解释以及规避方法
(2)Bid.h
达到预期
(3)BidItem.h
达到预期
(4)Fund.h
达到预期
(5)RegularBid.h
UML图中的表现形式和我们实际希望的代码还是有出入的……
(update 2017-10-29)该问题已解决,具体可以参见UML类图详解_组合关系,里面对未达到预期的原因做了详细解释以及规避方法
(6)SingleBid.h
达到预期
(update 2017-10-29)总结两点:
1、一旦类图里面包含了一次成员那么在XX端点再声明一次的话就会重复,另外如果不在类图里面包含一次成员而在XX端点处声明一次的话生成的代码比较傻,很多情况下无法满足我们的要求。所以我们就是把成员都在类图里面包含进去,XX端点处就是声明一下多重性,而不要再声明成员就可以了。这就可以解决上面两处生成的代码没有满足我们需求的问题。
2、本篇博客是刚接触UML时所写,图画得还是有些问题的,后来又重新研究了一下,重新汇总了一下,具体见UML类图详解_泛化关系。
原文链接: https://www.cnblogs.com/abc-begin/p/7746466.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/262040
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!