C++基础——用C++实例理解UML类图
2017-12-14 11:23
274 查看
目的:学习下UML类图的创建和认识
转载于:http://blog.csdn.net/lanchunhui/article/details/49557083
类展示
基本概念及术语
可见性visibility
参数的方向parameter
direction
类成员变量或者函数的类型
类关系
关系的多重性multiplicity
类关系
assocationkonws
a
dependency
Aggregation
Composition
继承泛化
类模板
References
本文包括以下内容:
类间存在哪几种常见关系?
它们之间的区别和联系是什么?
如何在代码中反映类间的关系?
如何理解 IN/OUT mode型的参数?
2
3
4
5
6
7
8
9
10
11
‘+’ public
‘-’ private
‘#’ protected
‘in’:用于输入的参数,get the value
‘out’:用于输出的参数, set the value
‘inout’:既可作为输入又可作为输出, get the value and set the value
这种参数形式常见于,这样一种情况,传递的是一个指针变量(如果传递的是一个既非指针,也非引用的变量,就纯做输入(in)了),既然是指针变量,便可提领指针,修改其指向的内容,既具备提供输入,又具有修改原值 的双重属性。
举例如下:
对一个接口作如下documentation:
Prototype: ULONG GetActivationState( ULONG * pActivationState );
Parameters
2
3
4
客户端代码
2
既然提供的是变量的地址,便可轻易地get the value 和 set the value。 所以根据
2
3
4
5
6
7
8
9
10
11
12
静态成员,下划线表示
纯虚函数,斜体
Assocation (knows a)
Dependency (uses a)
Composition (has a)
Aggregation (has a)
Inheritance (is a)
Class template
‘0..1’, 无实例,或者1个实例
‘1’,只有一个实例
‘0..*’,
‘1..*’
一个对象知道另一个对象的存在,该对象持有另一个对象的指针或者引用。
2
3
4
5
6
7
8
9
当类Y与类X彼此独立,而类Y是类X成员函数的一个参数,或者X中成员函数的一个局部变量。
2
3
4
5
6
7
8
9
10
聚类发生的场景是:一个类是另一个类的集合或者容器,但被包含的类与容器本身并不具备相同的生命期,也就是容器销毁时,其包含的内容未必。关联(association)与聚合(aggregation)的不同之处在于,关联关系不存在一个明确的容器包含另外一个类。比如汽车和轮胎的关系,就是一种聚合关系,汽车包含着轮胎的集合,汽车的销毁,轮胎仍然可以存在。
2
3
4
5
6
7
组合(composition)是聚合(Aggregation)的增强版。组合和聚合的根本不同在于类与其所持有元素的是否具有相同的生命期,要求必须相同是一种组合关系。
2
3
4
5
6
7
8
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
类间的继承关系表达的是一种derived class B is a base class A。
类模板意味着泛型类。
2
3
4
5
6
[1] UML Class Diagram Explained With C++ samples
[2] IN/OUT Parameters and how to work with them
in C++
转载于:http://blog.csdn.net/lanchunhui/article/details/49557083
类展示
基本概念及术语
可见性visibility
参数的方向parameter
direction
类成员变量或者函数的类型
类关系
关系的多重性multiplicity
类关系
assocationkonws
a
dependency
Aggregation
Composition
继承泛化
类模板
References
本文包括以下内容:
类间存在哪几种常见关系?
它们之间的区别和联系是什么?
如何在代码中反映类间的关系?
如何理解 IN/OUT mode型的参数?
类展示
class Circle { private: double radius_; Point center_; public: void setRadius(double _radius); void setCenter(Point _center); double getArea() const; double getCircumfrence() const; }1
2
3
4
5
6
7
8
9
10
11
基本概念及术语
可见性(visibility)
‘+’ public‘-’ private
‘#’ protected
参数的方向(parameter direction)
‘in’:用于输入的参数,get the value‘out’:用于输出的参数, set the value
‘inout’:既可作为输入又可作为输出, get the value and set the value
这种参数形式常见于,这样一种情况,传递的是一个指针变量(如果传递的是一个既非指针,也非引用的变量,就纯做输入(in)了),既然是指针变量,便可提领指针,修改其指向的内容,既具备提供输入,又具有修改原值 的双重属性。
举例如下:
对一个接口作如下documentation:
Prototype: ULONG GetActivationState( ULONG * pActivationState );
Parameters
Type: ULONG* Variable: pActivationState Mode: IN/OUT1
2
3
4
客户端代码
ULONG activationState = 1; ULONG result = GetActivationState(&activationState);1
2
既然提供的是变量的地址,便可轻易地get the value 和 set the value。 所以根据
GetActivationState(ULONG*)参数的IN/OUT状态,推测其中的代码如下:
ULONG GetActivationState() { if (*activationState == 1) // 可读属性,in { // TODO // 对变量值进行修改,例如,改为0 *activationState = 0; // 可写属性,out } return *activationState; }1
2
3
4
5
6
7
8
9
10
11
12
类成员(变量或者函数)的类型
静态成员,下划线表示纯虚函数,斜体
类关系
Assocation (knows a)Dependency (uses a)
Composition (has a)
Aggregation (has a)
Inheritance (is a)
Class template
关系的多重性(multiplicity)
‘0..1’, 无实例,或者1个实例‘1’,只有一个实例
‘0..*’,
‘1..*’
类关系
assocation(konws a)
一个对象知道另一个对象的存在,该对象持有另一个对象的指针或者引用。 class X { public: X(Y* _ptrY):ptrY_(_ptrY) {} void setY(Y *y) { ptrY_ = y;} void f() { ptrY_->foo();} private/public: Y* ptrY_; // X类持有Y的一个指针,可据此调用Y中的成员方法 }1
2
3
4
5
6
7
8
9
dependency
当类Y与类X彼此独立,而类Y是类X成员函数的一个参数,或者X中成员函数的一个局部变量。 class X { ... void f1(Y y) { ...; y.foo(); } void f2(Y& y) { ...; y.foo(); } void f3(Y* y) { ...; y->foo(); } void f4() { ...; Y y; y.foo(); } void f5() { Y::staticFoo();} ... }1
2
3
4
5
6
7
8
9
10
Aggregation
聚类发生的场景是:一个类是另一个类的集合或者容器,但被包含的类与容器本身并不具备相同的生命期,也就是容器销毁时,其包含的内容未必。关联(association)与聚合(aggregation)的不同之处在于,关联关系不存在一个明确的容器包含另外一个类。比如汽车和轮胎的关系,就是一种聚合关系,汽车包含着轮胎的集合,汽车的销毁,轮胎仍然可以存在。class Window { public: //... private: vectr<Shape*> ptrShapes; }1
2
3
4
5
6
7
Composition
组合(composition)是聚合(Aggregation)的增强版。组合和聚合的根本不同在于类与其所持有元素的是否具有相同的生命期,要求必须相同是一种组合关系。class Circle { private: ... Point center_; ... }1
2
3
4
5
6
7
8
class X { ... Y y; // composition, 相同的生命期, // 如何是引用或者指针类型,则是关联类型,是一种弱联系 Y b[10]; // 0...10, composition } class X { X() { a = new Y[10]; } ~X() { delete[] a;} ... Y *a; // 0...10, composition,X对象析构时,必须对a进行释放 }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
继承(泛化)
类间的继承关系表达的是一种derived class B is a base class A。
类模板
类模板意味着泛型类。 template<class T> class X {...}; X<Y> a;1
2
3
4
5
6
References
[1] UML Class Diagram Explained With C++ samples[2] IN/OUT Parameters and how to work with them
in C++
相关文章推荐
- C++基础——用C++实例理解UML类图
- C++基础——用C++实例理解UML类图
- Android-NDK开发之基础--Android JNI实例代码(一)-- 在JNI中执行Java方法--C/C++调用Java
- [Unity基础]对Rotation的一些理解与实例(一)
- C++基础知识实例解析(一)
- 深入理解(实例) -- c++ 右值引用 左值引用
- STL + c++ + 模板 + 重要思维 + 基础算法+ 经典算法 + 经典实例 + 编程总结+ 心得+ 入门必会 + 知识点汇总。
- Java基础(高级)——多线程的理解和Synchronized实例,以及线程间通信,wait,notify等方法
- C++大学基础教程_11_8_实例研究:Array类
- [Unity基础]对Rotation的一些理解与实例(二)
- opencv基础实例(C++)
- C++调用Python基础功能实例详解
- LinuxC/C++编程基础(7) boost::mutex的简单实例
- c++转码基础(2):gbk编码文件转换成无bom的utf-8文件实例
- C语言学习100例实例程序--我练习的C++版(每天一题夯实基础)
- LinuxC/C++编程基础(23) 使用thrift/rpc开发简单实例(续1)
- C++基础实例(2)
- C++基础实例-类(6)
- 编程语言基础:用“收集器”理解各种语言(C++、Java、Python)中的可变参数!
- C/C++基础面试-Sizof的全面理解