02 2019 档案

摘要:概率算法 随机性(randomness)是偶然性的一种形式,是某一事件集合中的各个事件所表现出来的不确定性。产生某一随机性事件集合的过程,是一个不定因子不断产生的重复过程,但它可能遵循某个概率分布。 随机序列(random sequence),更确切的,应该叫做随机变量序列,也就是随机变量形成的序列 阅读全文
posted @ 2019-02-15 17:43 gd_沐辰 阅读(1435) 评论(0) 推荐(0) 编辑
摘要:分支限界法 基本思想 分支搜索法也是一种在问题解空间上进行尝试搜索算法。所谓“分支”是采用广度优先的策略,依次生成E-结点所有分支,也就是所有的儿子结点。和回溯法一样,在生成的节点中,抛弃那些不满足约束条件(或者说不可能导出最优可行解)的结点,其余节点加入活节点表。然后从表中选择一个节点作为下一个E 阅读全文
posted @ 2019-02-15 17:37 gd_沐辰 阅读(2037) 评论(0) 推荐(0) 编辑
摘要:图的搜索算法小结 1.深度优先搜索与广度优先搜索算法有何区别 通常深度优先搜索法不全部保留结点,扩展完的结点从数据存储结构栈中弹出删去,这样,一般在数据栈中存储的结点数就是解空间树的深度,因此它占用空间较少。所以,当搜索树的结点较多,用其它方法易产生内存溢出时,深度优先搜索不失为一种有效的求解方法。 阅读全文
posted @ 2019-02-15 17:37 gd_沐辰 阅读(1315) 评论(0) 推荐(0) 编辑
摘要:回 溯 法 回溯算法实际是一个类似枚举的搜索尝试方法,它的主题思想是在搜索尝试中找问题的解,当不满足求解条件就”回溯”返回,尝试别的路径。回溯算法是尝试搜索算法中最为基本的一种算法,其采用了一种“走不通就掉头”的思想,作为其控制结构。 【例1】八皇后问题模型建立 要在8*8的国际象棋棋盘中放八个皇后 阅读全文
posted @ 2019-02-15 17:23 gd_沐辰 阅读(1778) 评论(0) 推荐(0) 编辑
摘要:深度优先搜索 深度优先遍历首先访问出发点v,并将其标记为已访问过;然后依次从v出发搜索v的每个邻接点w。若w未曾访问过,则以w为新的出发点继续进行深度优先遍历,直至图中所有和源点v有路径相通的顶点均已被访问为止。 若此时图中仍有未访问的顶点,则另选一个尚未访问的顶点作为新的源点重复上述过程,直至图中 阅读全文
posted @ 2019-02-15 17:20 gd_沐辰 阅读(1740) 评论(0) 推荐(0) 编辑
摘要:广度优先搜索 1.算法的基本思路 算法设计的基本步骤为: 1)确定图的存储方式; 2)图的遍历过程中的操作,其中包括为输出问题解而进行的存储操作; 3)输出问题的结论。 2.算法框架 从广度优先搜索定义可以看出活结点的扩展是按先来先处理的原则进行的,所以在算法中要用“队”来存储每个E-结点扩展出的活 阅读全文
posted @ 2019-02-15 17:13 gd_沐辰 阅读(642) 评论(0) 推荐(0) 编辑
摘要:图是一种限止最少的数据结构,因此更接近现实,实际问题中很多数据关系都可以抽象成图,相关问题则可利用图的基本算法进行求解,很早就有专门研究图的是一门数学学科“图论”;其中的计算问题包括图的搜索、路径问题、连通性问题、可平面性检验、着色问题、网络优化等。图论中的著名算法有:求最小生成树的Kruskal算 阅读全文
posted @ 2019-02-15 17:11 gd_沐辰 阅读(709) 评论(0) 推荐(0) 编辑
摘要:算法策略间的比较 算法策略和算法是有区别的,它们是算法设计中的两个方面,算法策略是面向问题的,算法是面向实现的;但二者又是不可分的,首先是通过算法策略才找出解决问题的算法,其次对于用不同算法求解的问题算法策略是自然不同的。 “贪婪算法” 这些策略求解的是最简单的一类问题,或者说是对问题要求最严格的算 阅读全文
posted @ 2019-02-15 17:09 gd_沐辰 阅读(2056) 评论(0) 推荐(0) 编辑
摘要:动态规划 动态规划是用来解决多阶段决策过程最优化的一种数量方法。其特点在于,可以把困难的多阶段决策问题变换成一系列互相联系较容易的单阶段问题,解决了这一系列较容易的单阶段问题,也就解决了这个困难的多阶段决策问题。 多阶段决策问题: 是动态决策问题的一种特殊形式; 在多阶段决策过程中,系统的动态过程可 阅读全文
posted @ 2019-02-15 17:08 gd_沐辰 阅读(4535) 评论(0) 推荐(1) 编辑
摘要:动态规划 在动态规划算法策略中,体现在它的决策不是线性的而是全面考虑不同的情况分别进行决策, 并通过多阶段决策来最终解决问题。在各个阶段采取决策后, 会不断决策出新的数据,直到找到最优解.每次决策依赖于当前状态, 又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,故有“动态”的含义。所 阅读全文
posted @ 2019-02-15 16:59 gd_沐辰 阅读(935) 评论(0) 推荐(0) 编辑
摘要:贪婪算法 贪婪法又叫登山法, 它的根本思想是逐步到达山顶,即逐步获得最优解。贪婪算法没有固定的算法框架,算法设计的关键是贪婪策略的选择。一定要注意,选择的贪婪策略要具有无后向性。某状态以后的过程和不会影响以前的状态,只与当前状态或以前的状态有关,称这种特性为无后效性。 可绝对贪婪问题 【例1】键盘输 阅读全文
posted @ 2019-02-15 16:52 gd_沐辰 阅读(1858) 评论(0) 推荐(1) 编辑
摘要:分治算法 1.算法设计思想 分治法求解问题的过程是,将整个问题分解成若干个小问题后分而治之。如果分解得到的子问题相对来说还太大,则可反复使用分治策略将这些子问题分成更小的同类型子问题,直至产生出方便求解的子问题,必要时逐步合并这些子问题的解,从而得到问题的解。 分治法的基本步骤在每一层递归上都有三个 阅读全文
posted @ 2019-02-15 01:26 gd_沐辰 阅读(2080) 评论(0) 推荐(0) 编辑
摘要:蛮力法 蛮力法是基于计算机运算速度快这一特性,在解决问题时采取的一种“懒惰”的策略。这种策略不经过(或者说是经过很少的)思考,把问题的所有情况或所有过程交给计算机去一一尝试,从中找出问题的解。蛮力策略的应用很广,具体表现形式各异,数据结构课程中学习的:选择排序、冒泡排序、插入排序、顺序查找、朴素的字 阅读全文
posted @ 2019-02-15 01:14 gd_沐辰 阅读(2773) 评论(0) 推荐(0) 编辑
摘要:迭代算法 迭代法(Iteration)也称“辗转法”,是一种不断用变量的旧值递推出新值的解决问题的方法。迭代算法一般用于数值计算。迭代法应该是我们早已熟悉的算法策略,程序设计语言课程中所学的累加、累乘都是迭代算法策略的基础应用。 利用迭代算法策略求解问题,设计工作主要有三步: 1)确定迭代模型 2) 阅读全文
posted @ 2019-02-15 01:09 gd_沐辰 阅读(1501) 评论(0) 推荐(0) 编辑
摘要:很简单的例子: 已知有五个数,求前四个数与第五个数分 别相乘后的最大当数。给出两个算法分别如下: 以上两个算法基于的数学模型是不同的,一个算法先积再求最大值,另一个算法先求最大值再求积,求从上表可以看出,后一个算法的效率明显要高于前一个算法。 数学建模就是把现实世界中的实际问题加以提炼,抽象为数学模 阅读全文
posted @ 2019-02-15 01:02 gd_沐辰 阅读(1608) 评论(0) 推荐(0) 编辑
摘要:【例1】一次考试,共考了五门课。统计五十个学生中至 少有三门课成绩高于90分的人数。 问题分析:若一个学生五门课的成绩分别记为:a1,a2,a3,a4,a5,则要表示有三门课成绩高于90分,有C35=10组关系逻辑表达式,每组三个关系表达式。无论书写还是运行效率都极低。但通过算法运算就能很简便地解决 阅读全文
posted @ 2019-02-15 00:56 gd_沐辰 阅读(1155) 评论(0) 推荐(0) 编辑
摘要:常用的几种数据结构 数据的逻辑结构常分为四大类: (1)集合结构 (2)线性结构 (3)树形结构 (4)图结构(网结构) 存储结构可以分为:连续存储和链式存储。连续存储又可以分为:静态存储和动态存储 连续存储和链式存储比较 顺序存储的优点: (1) 方法简单,各种高级语言中都提供数组结构,容易实现。 阅读全文
posted @ 2019-02-15 00:49 gd_沐辰 阅读(1616) 评论(1) 推荐(0) 编辑
摘要:循环设计中要注意算法的效率: 循环体的特点是:“以不变应万变”。 所谓“不变”是指循环体内运算的表现形式是不变的,而每次具体的执行内容却是不尽相同的。在循环体内用不变的运算表现形式去描述各种相似的重复运算。 【例1】求1/1!-1/3!+1/5!-1/7!+…+(-1)n+1/(2n-1)! 分析: 阅读全文
posted @ 2019-02-15 00:36 gd_沐辰 阅读(810) 评论(0) 推荐(0) 编辑
摘要:时间复杂度估算 因为: 算法=控制结构+原操作(固有数据类型的操作) 所以: 算法的执行时间= 原操作的执行次数*原操作 语句的频度指的是该语句重复执行的次数。 一个算法转换为算法后所耗费的时间,除了与所用的计算软、硬件环境有关外,主要取决于算法中指令重复执行的次数,即语句的频度相关。 一个算法中所 阅读全文
posted @ 2019-02-15 00:30 gd_沐辰 阅读(631) 评论(0) 推荐(0) 编辑
摘要:用计算机解决一个现实中的问题步骤: 1. 问题分析 2. 数学模型建立 3. 算法设计与选择 4.算法表示 5.算法分析 6.算法实现 7.程序调试 8.结果整理文档编制 1. 问题分析 准确、完整地理解和描述问题是解决问题的第一步。要做到这一点,必须注意以下一些问题:在未经加工的原始表达中,所用的 阅读全文
posted @ 2019-02-15 00:26 gd_沐辰 阅读(617) 评论(0) 推荐(0) 编辑
摘要:数据库操作 基本命令 数据库/表增删 create database 数据库名 drop database 数据库名 create table 表名 (字段) drop table 表名 基本命令 修改表 alter table 表名 drop column 列名 alter table 表名 ad 阅读全文
posted @ 2019-02-13 19:44 gd_沐辰 阅读(162) 评论(0) 推荐(0) 编辑
摘要:在Ubuntu下安装Mysql. ubuntu上安装mysql非常简单只需要几条命令就可以完成。 1. sudo apt-get install mysql-server 2. apt-get isntall mysql-client 3. sudo apt-get install libmysql 阅读全文
posted @ 2019-02-13 19:43 gd_沐辰 阅读(255) 评论(0) 推荐(0) 编辑
摘要:多路复用并发模型 -- epoll 监控事件 events EPOLLIN fd可读 EPOLLOUT fd可写 EPOLLPRI fd紧急数据可读 EPOLLERR fd发生错误 EPOLLHUP fd 被挂起 EPOLLONESHOT fd 只监控 1 次,监控完后自动删除 EPOLLLT ep 阅读全文
posted @ 2019-02-13 19:41 gd_沐辰 阅读(487) 评论(0) 推荐(0) 编辑
摘要:多路复用并发模型 -- poll #include<poll.h> int poll(struct pollfd *fds, unsigned int nfds, int timeout); struct pollfd { int fd; //轮询的文件描述符 short events; //等待的 阅读全文
posted @ 2019-02-13 19:40 gd_沐辰 阅读(824) 评论(0) 推荐(0) 编辑
摘要:多路复用并发模型 -- select #include<sys/select.h> #include<sys/time.h> int select(int maxfd, fd_set *readset, fd_set *writeset, fd_set *exceptset, struct time 阅读全文
posted @ 2019-02-13 19:38 gd_沐辰 阅读(494) 评论(0) 推荐(1) 编辑
摘要:使用原始的Socket模式,会发生阻塞问题,只能收一条消息再发一条消息。无法做到发送多次消息。 在服务器端创建多线程,每当accept()接受到一个客户端时,启动一条线程单独去处理。 代码: 阅读全文
posted @ 2019-02-13 19:37 gd_沐辰 阅读(270) 评论(0) 推荐(0) 编辑
摘要:描述:启动该程序后,自动检测U盘是否存在,若存在,将U盘中所有的文件拷贝到电脑的指定目录下。 注:本篇博文仅支持技术讨论,不用于数据的盗取之类的黑科技。 本程序基于Win32开发,主要是利用Win32的消息函数。也可是MFC等含有消息循环的体系。 思路: 1.WM_DEVICECHANGE,检查当前 阅读全文
posted @ 2019-02-09 23:58 gd_沐辰 阅读(904) 评论(0) 推荐(1) 编辑
摘要:理论知识: 当类中声明虚函数时,编译器会在类中生成一个虚函数表 虚函数表是一个存储类成员函数指针的数据结构 虚函数表是由编译器自动生成与维护的 virtual成员函数会被编译器放入虚函数表中 当存在虚函数时,每个对象中都有一个指向虚函数表的指针(C++编译器给父类对象、子类对象提前布局vptr指针; 阅读全文
posted @ 2019-02-09 22:42 gd_沐辰 阅读(262) 评论(0) 推荐(0) 编辑
摘要:C++中对象的复制就如同“克隆”,用一个已有的对象快速地复制出多个完全相同的对象。一般而言,以下三种情况都会使用到对象的复制: (1)建立一个新对象,并用另一个同类的已有对象对新对象进行初始化,例如: (2)当函数的参数为类的对象时,这时调用此函数时使用的是值传递,也会产生对象的复制,例如: (3) 阅读全文
posted @ 2019-02-09 22:19 gd_沐辰 阅读(335) 评论(0) 推荐(0) 编辑
摘要:概念 Iterator模式也叫迭代模式,是行为模式之一,它把对容器中包含的内部对象的访问委让给外部类,使用Iterator(遍历)按顺序进行遍历访问的设计模式。 在应用Iterator模式之前,首先应该明白Iterator模式用来解决什么问题。或者说,如果不使用Iterator模式,会存在什么问题。 阅读全文
posted @ 2019-02-09 22:01 gd_沐辰 阅读(304) 评论(0) 推荐(0) 编辑
摘要:概念 角色和职责 Context 解释器上下文环境类。用来存储解释器的上下文环境,比如需要解释的文法等。 AbstractExpression 解释器抽象类。 ConcreteExpression 解释器具体实现类。 适用于: 解释器根据中介结果实现对应的运算。 案例 //加号、减号解释器,根据上下 阅读全文
posted @ 2019-02-09 21:57 gd_沐辰 阅读(275) 评论(0) 推荐(0) 编辑
摘要:概念 State模式也叫状态模式,是行为设计模式的一种。State模式允许通过改变对象的内部状态而改变对象的行为,这个对象表现得就好像修改了它的类一样。 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转译到表现不同状态的一系列类当中,可以把复杂的判断逻辑简化 阅读全文
posted @ 2019-02-09 21:48 gd_沐辰 阅读(277) 评论(0) 推荐(0) 编辑
摘要:概念 Visitor模式也叫访问者模式,是行为模式之一,它分离对象的数据和行为,使用Visitor模式,可以不修改已有类的情况下,增加新的操作角色和职责。 角色和职责 抽象访问者(Visitor)角色:声明了一个或者多个访问操作,形成所有的具体元素角色必须实现的接口。 具体访问者(ConcreteV 阅读全文
posted @ 2019-02-09 21:35 gd_沐辰 阅读(233) 评论(0) 推荐(0) 编辑
摘要:概念 Memento模式也叫备忘录模式,是行为模式之一,它的作用是保存对象的内部状态,并在需要的时候(undo/rollback)恢复对象以前的状态。 应用场景 如果一个对象需要保存状态并可通过undo或rollback等操作恢复到以前的状态时,可以使用Memento模式。 1)一个类需要保存它的对 阅读全文
posted @ 2019-02-09 21:31 gd_沐辰 阅读(152) 评论(0) 推荐(0) 编辑
摘要:概念 Observer模式是行为模式之一,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。 Observer模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步。 角色和职责 Subject(被观察者) 被观察的对象。当需要被观察的状态 阅读全文
posted @ 2019-02-09 21:18 gd_沐辰 阅读(193) 评论(0) 推荐(0) 编辑
摘要:概念 Mediator模式也叫中介者模式,是由GoF提出的23种软件设计模式的一种。Mediator模式是行为模式之一,在Mediator模式中,类之间的交互行为被统一放在Mediator的对象中,对象通过Mediator对象同其他对象交互,Mediator对象起着控制器的作用。 角色和职责 GOO 阅读全文
posted @ 2019-02-09 21:16 gd_沐辰 阅读(177) 评论(0) 推荐(0) 编辑
摘要:概念 Strategy模式也叫策略模式是行为模式之一,它对一系列的算法加以封装,为所有算法定义一个抽象的算法接口,并通过继承该抽象算法接口对所有的算法加以封装和实现,具体的算法选择交由客户端决定(策略)。Strategy模式主要用来平滑地处理算法的切换 。 角色和职责 Strategy: 策略(算法 阅读全文
posted @ 2019-02-09 21:10 gd_沐辰 阅读(216) 评论(0) 推荐(0) 编辑
摘要:概念 Chain of Responsibility(CoR)模式也叫职责链模式或者职责连锁模式,是行为模式之一,该模式构造一系列分别担当不同的职责的类的对象来共同完成一个任务,这些类的对象之间像链条一样紧密相连,所以被称作职责链模式。 例1:比如客户Client要完成一个任务,这个任务包括a,b, 阅读全文
posted @ 2019-02-09 21:07 gd_沐辰 阅读(263) 评论(0) 推荐(0) 编辑
摘要:概念 Command模式也叫命令模式 ,是行为设计模式的一种。Command模式通过被称为Command的类封装了对目标对象的调用行为以及调用参数。 在面向对象的程序设计中,一个对象调用另一个对象,一般情况下的调用过程是:创建目标对象实例;设置调用参数;调用目标对象的方法。 但在有些情况下有必要使用 阅读全文
posted @ 2019-02-09 21:04 gd_沐辰 阅读(307) 评论(0) 推荐(0) 编辑
摘要:概念 Template Method模式也叫模板方法模式,是行为模式之一,它把具有特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为。 应用场景 Template Method模式一般应用在具有以下条件的应用中: - 具有统一的操作步骤或操作过程 - 具 阅读全文
posted @ 2019-02-09 21:01 gd_沐辰 阅读(248) 评论(0) 推荐(0) 编辑
摘要:概念 Flyweight模式也叫享元模式,是构造型模式之一,它通过与其他类似对象共享数据来减小内存占用。 角色和职责 抽象享元角色: 所有具体享元类的父类,规定一些需要实现的公共接口。 具体享元角色: 抽象享元角色的具体实现类,并实现了抽象享元角色规定的方法。 享元工厂角色: 负责创建和管理享元角色 阅读全文
posted @ 2019-02-09 20:58 gd_沐辰 阅读(283) 评论(0) 推荐(0) 编辑
摘要:概念 Facade模式也叫外观模式,是由GoF提出的23种设计模式中的一种。Facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面。这个一致的简单的界面被称作facade。 角色和职责 Façade 为调用方, 定义简单的调用接口。 Clients 调用者。通过Fa 阅读全文
posted @ 2019-02-09 20:55 gd_沐辰 阅读(192) 评论(0) 推荐(0) 编辑
摘要:概念 Bridge 模式又叫做桥接模式,是构造型的设计模式之一。Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的 阅读全文
posted @ 2019-02-09 20:51 gd_沐辰 阅读(187) 评论(0) 推荐(0) 编辑
摘要:概念 Composite模式也叫组合模式,是构造型的设计模式之一。通过递归手段来构造树形的对象结构,并可以通过一个对象来访问整个对象树。 角色和职责 Component (树形结构的节点抽象) - 为所有的对象定义统一的接口(公共属性,行为等的定义) - 提供管理子节点对象的接口方法 - [可选]提 阅读全文
posted @ 2019-02-09 20:47 gd_沐辰 阅读(237) 评论(0) 推荐(0) 编辑
摘要:概念 Adapter模式也叫适配器模式,是构造型模式之一,通过Adapter模式可以改变已有类(或外部类)的接口形式。 角色和职责 适用于: 是将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 案例 //输入220V电压,输出的是18V电压 阅读全文
posted @ 2019-02-09 20:40 gd_沐辰 阅读(205) 评论(0) 推荐(0) 编辑
摘要:概念 装饰( Decorator )模式又叫做包装模式。通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替换方案。 装饰模式就是把要添加的附加功能分别放在单独的类中,并让这个类包含它要装饰的对象,当需要执行时,客户端就可以有选择地、按顺序地使用装饰功能包装对象。 类图角色和职责 适用于: 阅读全文
posted @ 2019-02-09 20:34 gd_沐辰 阅读(203) 评论(0) 推荐(0) 编辑
摘要:概念 Proxy模式又叫做代理模式,是构造型的设计模式之一,它可以为其他对象提供一种代理(Proxy)以控制对这个对象的访问。 所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类,客户端必须通过代理与被代理的目标类交互,而代理一般在交互的过程中(交互前后),进行某些特别的处理。 类图角色和 阅读全文
posted @ 2019-02-09 20:26 gd_沐辰 阅读(248) 评论(0) 推荐(0) 编辑
摘要:概念 Prototype模式是一种对象创建型模式,它采取复制原型对象的方法来创建对象的实例。使用Prototype模式创建的实例,具有与原型一样的数据。 1)由原型对象自身创建目标对象。也就是说,对象创建这一动作发自原型对象本身。 2)目标对象是原型对象的一个克隆。也就是说,通过Prototype模 阅读全文
posted @ 2019-02-09 20:09 gd_沐辰 阅读(197) 评论(0) 推荐(0) 编辑
摘要:概念 Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种。Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。 对象的创建:Builder模式是为对象的创建 阅读全文
posted @ 2019-02-09 20:07 gd_沐辰 阅读(292) 评论(0) 推荐(0) 编辑
摘要:工厂模式 概念 工厂方法模式同样属于类的创建型模式又被称为多态工厂模式 。 工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。 核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以 阅读全文
posted @ 2019-02-09 18:31 gd_沐辰 阅读(290) 评论(0) 推荐(0) 编辑
摘要:什么是简单工厂模式? 简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 模式中包含的角色及其职责 1.工厂(Creator)角色 简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所 阅读全文
posted @ 2019-02-09 18:20 gd_沐辰 阅读(240) 评论(0) 推荐(0) 编辑
摘要://1"懒汉"模式虽然有优点,但是每次调用GetInstance()静态方法时,必须判断 // NULL == m_instance,使程序相对开销增大。 //2多线程中会导致多个实例的产生,从而导致运行代码不正确以及内存的泄露。 //3提供释放资源的函数 讨论: 这是因为C++中构造函数并不是线程 阅读全文
posted @ 2019-02-09 18:10 gd_沐辰 阅读(397) 评论(0) 推荐(0) 编辑
摘要:概念 单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象。 GoF对单例模式的定义是:保证一个类、只有一个实例存在,同时提供能对该实例加以访问的全局访问方法。 为什么使用单例模式? 在应用系统开发中,我们常常有以下需求 阅读全文
posted @ 2019-02-09 18:00 gd_沐辰 阅读(256) 评论(0) 推荐(0) 编辑
摘要:最终目的:高内聚,低耦合 1) 开放封闭原则 (OCP,Open For Extension, Closed For Modification Principle) 类的改动是通过增加代码进行的,而不是修改源代码。 2) 单一职责原则 (SRP,Single Responsibility Princ 阅读全文
posted @ 2019-02-09 00:21 gd_沐辰 阅读(286) 评论(0) 推荐(0) 编辑
摘要:模式:在一定环境下,用固定套路解决问题。 设计模式(Design pattern) 是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代 码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化 阅读全文
posted @ 2019-02-09 00:18 gd_沐辰 阅读(424) 评论(0) 推荐(0) 编辑
摘要:如何在统一软件开发过程中使用UML? 起始阶段常用UML图 在起始阶段,通常有用例图、类图、活动图、顺序图等UML图的参与。 获取用户需求之后首先要将这些需求转化为系统的顶层用例图。 在确定了用例之后,需要为重要用例添加事件流描述。有了事件流描述之后就可以为一些用例中使用到的系统功能来指定分析类。 阅读全文
posted @ 2019-02-08 21:14 gd_沐辰 阅读(849) 评论(0) 推荐(0) 编辑
摘要:基本概念:是一种展示运行时进行处理的节点和在节点上存在的制品的配置的图。 部署图它阐述了在实际应用中软件和它的运行环境的关系,并且描述了软件部署在硬件上的具体方式。 部署图中的主要元素包括节点与节点之间的关联关系。此外,部署图中也可以使用注解和约束。 部署图的组成元素:节点、部署图中的关系。 节点 阅读全文
posted @ 2019-02-08 21:13 gd_沐辰 阅读(13627) 评论(0) 推荐(0) 编辑
摘要:基本概念:组件图即是用来描述组件与组件之间关系的一种UML图。组件图在宏观层面上显示了构成系统某一个特定方面的实现结构。 组件图中主要包含三种元素,即组件、接口和关系。 组件图通过这些元素描述了系统的各个组件及之间的依赖关系,还有组件的接口及调用关系。此外,组件图还可以使用包来进行组织,使用注解与约 阅读全文
posted @ 2019-02-08 21:11 gd_沐辰 阅读(48096) 评论(0) 推荐(11) 编辑
摘要:基本概念:是UML中一种重要的用于表达系统动态特性的图 活动图的作用是描述一系列具体动态过程的执行逻辑,展现活动和活动之间转移的控制流,并且它采用一种着重逻辑过程的方式来叙述。 在对软件密集系统建模的时候,有时需要详细地模拟系统在运作时的业务流程。面对这种需要,我们可以分析对象间发生的活动和触发条件 阅读全文
posted @ 2019-02-08 21:07 gd_沐辰 阅读(25175) 评论(0) 推荐(1) 编辑
摘要:状态机图 基本概念: 状态机图,UML 1.x规范中称状态图,是一个展示状态机的图。 状态机图基本上就是一个状态机中元素的投影,这也就意味着状态机图包括状态机的所有特征。状态机图显示了一个对象如何根据当前状态对不同事件做出反应的动态行为。 状态机图主要由状态和转换两种元素组成。 状态机 状态机是一种 阅读全文
posted @ 2019-02-08 21:02 gd_沐辰 阅读(38851) 评论(0) 推荐(2) 编辑
摘要:顺序图的概念: 顺序图是按时间顺序显示对象交互的图。它显示了参与交互的对象和所交换信息的先后顺序,用来表示用例中的行为,并将这些行为建模成信息交换。 顺序图是一种交互图,强调消息的时间顺序,亦称时序图 顺序图主要包括四个元素:对象、生命线、激活和消息。 在UML中,顺序图将交互关系表示为一张二维图。 阅读全文
posted @ 2019-02-08 20:54 gd_沐辰 阅读(8265) 评论(0) 推荐(0) 编辑
摘要:通信图的概念:通信图(协作图)是表现对象交互关系的图,它展现了多个对象在协同工作达成共同目标的过程中互相通信的情况,通过对象和对象之间的链、发送的消息来显示参与交互的对象。 首先通信图一样是一种交互图,它描述的是对象和对象之间的关系,即一个类操作的实现。简而言之就是,对象和对象之间的调用关系,体现的 阅读全文
posted @ 2019-02-08 20:50 gd_沐辰 阅读(22490) 评论(0) 推荐(1) 编辑
摘要:包图的基本概念: 包图是用来描述模型中的包和所包含元素的组织方式的图,是维护和控制系统总体结构的重要内容。 包图能够组织许多UML中的元素,不过其最常用的用途是用来组织用例图和类图。 包图中包含包元素以及包之间的关系。与其他图类似,包图中可以创建注解和约束。 包的概念: 包是用于把模型组织成层次结构 阅读全文
posted @ 2019-02-08 20:47 gd_沐辰 阅读(9469) 评论(0) 推荐(1) 编辑
摘要:对象图 对象图概述:对象图显示了某一时刻的一组对象及它们之间的关系。 对象图可以看做是类图的实例,用来表达各个对象在某一时刻的状态。 对象图中的建模元素主要有对象和链,对象是类的实例,链是类之间的关联关系的实例。 对象图的组成元素——对象 对象是类的实例,是一个封装了状态和行为的具有良好边界和标识符 阅读全文
posted @ 2019-02-08 20:45 gd_沐辰 阅读(21621) 评论(0) 推荐(0) 编辑
摘要:类图的定义:是显示一组类、接口、协作以及它们之间关系的图。 类图主要包含7种元素:、类、接口、协作、依赖关系、泛化关系、实现关系、关联关系。 类图:包、子系统,用来把模型元素聚集成更大的组块。 类图:约束、注解 类 1.类是一组拥有相同的属性、操作、方法、关系和行为的对象地描述符。 2.类定义了一组 阅读全文
posted @ 2019-02-08 20:40 gd_沐辰 阅读(3650) 评论(0) 推荐(1) 编辑
摘要:用例图 用例图是用来描述系统功能的技术,表示一个系统中用例与参与者及其关系的图,主要用于需求分析阶段。 用例图的基本组成元素:参与者、用例、元素之间的关系。 用例图使用范围:需求分析 1.捕获需求。描述功能需求、行为需求(系统要完成什么任务) 2.分析需求。明确类和对象,建立之间的关系 用例图的基本 阅读全文
posted @ 2019-02-08 20:29 gd_沐辰 阅读(63335) 评论(1) 推荐(13) 编辑
摘要:什么是UML? 统一建模语言(UML)是一种通用的可视化建模语言,可以用来描述、可视化、构造和文档化软件密集型系统的各种工件。 UML是独立于过程的,它适用于各种软件开发方法、软件生命周期的各个阶段、各种应用领域以及各种开发工具。 注:UML不是一种程序设计语言,其描述的模型可以和各种编程语言相联系 阅读全文
posted @ 2019-02-08 20:25 gd_沐辰 阅读(1392) 评论(0) 推荐(0) 编辑