UML——从类图到C++

简易软件开发流程

实践中,use case and description、class diagram与sequence diagram三者搭配,几乎是UML项目的基本类型,所以在分工或外包的设计文档中,通常少不了这三款UML图。常见的开发程序是并行建构use case、description与class diagram,接着才构建sequence diagram以及按图编码,如下图所示。

UML——从类图到C++

一个软件系统,对外提供各种服务(use case描述)。外部行为由于环境、市场、政策等等因素具有动态行为以及不可预测性。无论系统对外服务多么不确定性,运作方式差异多么大,他所依赖的系统内部结构都是稳定的。一个系统只有一个内部结构,class diagram正是描述系统内部这种未定的静态结构。软件开发过程中,class diagram不是一蹴而就的,需要与use case、sequence diagram多次迭代更新后才能逐步稳定下来。

上图涉及的三种UML图功能如下:

use case:表示系统对外提供的服务

sequence diagram:表示软件内部对象交互的情况。

class diagram:用来呈现系统内部的静态结构,而这样的静态结构通常可以直接对应代码,因此,从程序员的角度来看,类图是最值得关注的UML图。

association

在OO的认识论中,世界的本质是由对象组成的,平时看上去相互无关的独立对象在不同驱动力和规则的作用下体现出不同的运动过程,然后这些过程便展现出了我们这个生动的世界。在软件设计中,我们往往采用领域术语做类,识别类的具体手段有软件专家Sally Shlaer和Stephen J.Mellor提出的对象种类理论,以及软件专家Peter Coad提出的transaction patterns。本文的重点不是如何设计类,而是如何刻画类与类之间的关系。

UML——从类图到C++

类与类之间的关系,有过C++等面向对象语言基础的人很容易理解。上图对应的inheritance、access level、virtual class在C++中都有语法支撑,大多数C++程序员很容易理解这些概念。

对象之间的关系则要丰富的多。C++中我们使用类来描述某种事物的共同特性,使用对象来描述具体事务的共同特性的实际值,有的甚至还有个性的实际值。对象很少独立存在,通常会与其他种类的对量产生关系,达到1+1>2的效果。本文重点讲述对象与对象之间的关系,不过虽说是对象之间的关系,但是体现在class diagram上还是在类与类之间建立联系,用来表达两个类所产生对象之间的关系。

static relationship

static relationship包括association、aggregation、composition。这三种关系在C++类定义代码里面可以直接体现出来,才C++中attributes、static relationship的实现方法相同,都当作静态的数据来处理,因此static relationship也会想attributes一样收到access level的限制,进而影响到子类继承后的使用情况。static relationship中最常见的又是association,只要两个对相见需要协作,都能和association扯上勾

Original: https://www.cnblogs.com/kelamoyujuzhen/p/10186241.html
Author: 克拉默与矩阵
Title: UML——从类图到C++

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/536223/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • C++内存管理

    [ 导语] 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内…

    C++ 2023年5月29日
    048
  • C和C++混合编程中的extern “C” {}

    在用C++的项目源码中,经常会不可避免的会看到下面的代码: 它到底有什么用呢,你知道吗?而且这样的问题经常会出现在面试or笔试中。下面我就从以下几个方面来介绍它: 1、#ifdef…

    C++ 2023年5月29日
    056
  • C++ 虚继承

    转自:http://www.cppblog.com/chemz/archive/2007/06/12/26135.html 虚继承和虚基类的定义是非常的简单的,同时也是非常容易判断…

    C++ 2023年5月29日
    070
  • CLion之C++框架篇-安装工具,基础框架的搭建(一)

    背景 日常学习C++,也就是看看书、在vim里写写代码。在日常项目开发中,也是边看书(一是系统性理解、二是找找有什么更好的代码编写方式)边写代码,会顺带看看别人的代码怎么写的? 日…

    C++ 2023年5月29日
    060
  • C/C++ 中带空格字符串输入的一些小trick

    今天在重温 C++ 的时候发现自己存在的一些问题,特此记录下来。 我们可以看一下下面这段代码: #include #include #include #include using …

    C++ 2023年5月29日
    052
  • C++ lamda、function、bind使用

    参考资料: lambda 表达式的简单语法如下:[capture] (parameters) -> return value { body } 其中[capture]可以选择…

    C++ 2023年5月29日
    042
  • c++自定义排序_lambda表达式

    class Solution { void quickSort(vector& strs, int l, int r) { if (l >= r) return; i…

    C++ 2023年5月29日
    046
  • C++选择文件打开方式的函数

    最近让同事给UE4一个功能,识别出 .ts、.json文件,然后双击这些文件可以直接打开。 默认双击 .json 时,调用 Windows 自带的记事本打开文件,不习惯,想着能否像…

    C++ 2023年5月29日
    062
  • C++ 模板类相关问题

    1.模板类中的函数定义与实现必须全部写在头文件中 C++中每一个对象所占用的空间大小,是在编译的时候就确定的,在模板类没有真正的被使用之前,编译器是无法知道,模板类中使用模板类型的…

    C++ 2023年5月29日
    049
  • 邻接表有向图(二)之 C++详解

    邻接表有向图是指通过邻接表表示的有向图。 上面的图G2包含了”A,B,C,D,E,F,G”共7个顶点,而且包含了” 上图右边的矩阵是G2在内存中…

    C++ 2023年5月29日
    067
  • [UE4]虚幻引擎的C++环境安装

    一、一般使用VS2017开发 二、需要勾选”使用C++的游戏开发” posted on2019-03-08 17:02 一粒沙 阅读(2513 ) 评论()…

    C++ 2023年5月29日
    049
  • C++ 求时差

    C++ 求时差的三种方法 【1】标准C库方式 示例代码 【2】C++库方式 C++11之后才引入 示例代码: 【3】windows API方式 示例代码: 为什么第14行,我们把G…

    C++ 2023年5月29日
    075
  • Floyd算法(二)之 C++详解

    和Dijkstra算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授…

    C++ 2023年5月29日
    081
  • js c++ 多值返回 返回多个值 c++ tuple

    使用C# 7.0推出的值元组和解构功能。 static (int, int) Calc(int a, int b) { return (a + b, a – b); } stati…

    C++ 2023年5月29日
    064
  • 汉诺塔的c++实现

    void hanNuoTa(int n,int a,int b,int c) { if (n == 0) return; hanNuoTa(n – 1, a, c, b); cou…

    C++ 2023年5月29日
    060
  • c++ 智能指针的向下转换 向下塑型 cast

    class A { public: void test() { std::cout << "test" << std::endl; } …

    C++ 2023年5月29日
    068
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球