软件设计中的“质”、“门”、“道”
质可以认为是一个软件的风水,意味着软件的内在属性不仅存在于这个软件中,还存在于这个软件和其他软件乃至环境用户的交互中。
门和道家的“气”有所类似,是通过模式语言来体现出来的,“气”以“形”的形式表现出来,其中有些形反复出现,构成对一些典型问题的典型解决方案,就是模式。
道是“门”到“质”的演化过程,是逐步分化的过程,从整体到部分的过程,将模式按照一定顺序应用到系统上的过程。软件的设计必须从软件的整体属性,也就是QUAN出发,通过性能的分化,形成各个模块,各个用户界面,各个类以及各个方法。
软件是什么?软件是人类思维活动的直接延伸,将人类心理学、信仰、科学融合在一起。
模式的要素:
名字:有意义,简短而准确
问题:描述模式的用意,说明模式的目标和效果
环境或初始环境:模式的问题和模式解答出现所需要的初始条件,说明了模式的适用范围
力:对模式有影响的约束和之间的相互作用
解答:如何实现模式,确定模式的结构,模式涉及的角色和角色之间的协作
举例:说明模式怎样应用到环境上并且怎样改变环境,给出模式结束时的末态环境的
末态环境:模式应用到系统之后的状态,包括好的结果和坏的结果
推理:推理解释模式的步骤、规则,探索模式是怎样工作的,为什么可以工作,为什么这个模式是好的。
其他有关模式:描述现有系统中模式与其他模式的静态和动态的关系。
已知的应用:在已有的系统中模式出现和应用的例子。
UML 语言—软件工程的标准图标式设计语言
UML不仅仅是一种形式,而应该是系统设计和工程人员交流的依据
UML 的功能:
1 便于人员之间沟通发现逻辑错误(可视化)
2 对系统进行说明,并指导软件开发过程(说明)
3 建模工具将模型映射到语言上,发现可复用代码(建造)
4 作为设计资料提高修改系统和新人加入上手的效率(建文档)
UML
包括:
结构型图:描述静态结构,显示已有类和类之间的静态关系
类图 类、包之间的静态结构
对象图:对象的快照
构件图:描述可部署的物理模块间的静态关系
部署图:描述一个系统的拓扑结构,系统运行时的结构,软件和硬件之间的映射
行为型图:系统元素如何协作产生系统行为
使用案例图:描述一系列角色和使用案例以及它们之间的关系,对系统最基本的行为进行建模
活动图:不同过程之间的动态接触,案例图描述行为的具体化
状态图:一系列对象的内部状态以及状态的变化和转移,一个类不能有两个不同的状态图
时序图:不同对象之间信息传递的时序,一种相互作用图
合作图:描述发出、接收信息的一系列对象组织结构的相互作用图
一个UML的系统设计往往是从使用案例图开始的,而且一个设计应该是使用案例推动的。
类图:显示类、接口和它们之间的静态关系
必有元素:类、关联关系、基数
可选:关联关系方向和关系中的角色
描述类的类图:
类名(必须显示,正体表示具体类,斜体表示抽象类)
属性层(public、private、protected)
方法层(public、private、protected,方法下有下划线表示静态方法)
方法的要素:方法名,方法变量名,变量数据类型,方法数据类型
性质层:内部变量(属性)+get、set方法
可能再加上内部成员类那一层
描述接口的类图:
名字有interface、可以包括方法的声明、public、final的静态内部成员类
描述对象的类图:
显示类的实例,名字有下划线
应用场景:显示小部分系统的结构关系,特别是有递归关系的结构
类图中的关系:
一般化关系:类与类之间的继承、接口与接口之间的继承、类对接口的实现
从子类指向父类,从实现接口的类指向被实现的接口
Java体现:implements extends
关联关系:类与类之间的联结,使一个类知道另一个类的属性和方法
端点处可以有角色名和基数,不鼓励双向关联(两个箭头或没有箭头)。
Java体现:A->B A中有B的一个实例变量
关联关系可以进一步确定为聚合关系或合成关系
聚合关系:强关联关系,是整体和个体之间的关系,如汽车类和引擎类、轮胎类这个是整体和个体之间的关系。
合成关系:更强的关联关系,要求普通的聚合关系中代表整体的对象负责代表部分对象的生命周期,整体对象负责部分对象的存活,可传递给另一个对象,并由后者负责。
合成关系不能共享,代表部分的对象在每一时刻只能与一个对象发生合成关系,由后者排他负责其生命周期。
依赖关系:单向,一个类依赖于另一个类的定义
Java体现:局域变量、方法参量(方法参数需要)、对静态方法的调用
关联关系、聚合关系、合成关系之间的关系:
联系:聚合关系、合成关系是关联关系的延伸,合成关系比聚合关系更强;箭头出发类都包含箭头指向类的实例变量;
区别:关联关系两个类是在同一层次的,聚合关系中两个类处在不平等层次上,整体和部分的关系。合成关系是聚合关系更强的体现,整体对象要负责部分对象的生命周期,并且不能共享。
如果不确定关系是不是合成关系,可以定为聚合关系或关联关系;如果不确定是不是聚合关系,就定为关联关系。
时序图(序列图、活动序列图):按照时间顺序从上往下显示每个使用案例
垂直的虚线:生命线,对象存在的时间
箭头:调用
长方块:激活条,调用持续的时间
状态图(状态转换图、有限状态机):
定义一个具有有限个内部状态的机器,对象被外在的事件激发,从一个状态转移到另一个状态。
作用:让读者清楚看到什么事件会发生到对象身上,以及发生的事件对对象有什么效果
元素:起始状态(黑点)、对象状态(方框)、状态过渡(有箭头的连线)、引起状态过渡的事件/事件发生引起的操作[事件发生的保护条件,保证过渡关系发生的条件](过渡连线的标签)
状态的嵌套:父状态(超状态)、子状态
如洗衣机的运行包括洗衣、漂洗、脱水等状态
为什么要用到复合状态?隐藏子状态时降低复杂度,增加清晰度
软件设计中的“质”、“门”、“道”
质可以认为是一个软件的风水,意味着软件的内在属性不仅存在于这个软件中,还存在于这个软件和其他软件乃至环境用户的交互中。
门和道家的“气”有所类似,是通过模式语言来体现出来的,“气”以“形”的形式表现出来,其中有些形反复出现,构成对一些典型问题的典型解决方案,就是模式。
道是“门”到“质”的演化过程,是逐步分化的过程,从整体到部分的过程,将模式按照一定顺序应用到系统上的过程。软件的设计必须从软件的整体属性,也就是QUAN出发,通过性能的分化,形成各个模块,各个用户界面,各个类以及各个方法。
软件是什么?软件是人类思维活动的直接延伸,将人类心理学、信仰、科学融合在一起。
模式的要素:
名字:有意义,简短而准确
问题:描述模式的用意,说明模式的目标和效果
环境或初始环境:模式的问题和模式解答出现所需要的初始条件,说明了模式的适用范围
力:对模式有影响的约束和之间的相互作用
解答:如何实现模式,确定模式的结构,模式涉及的角色和角色之间的协作
举例:说明模式怎样应用到环境上并且怎样改变环境,给出模式结束时的末态环境的
末态环境:模式应用到系统之后的状态,包括好的结果和坏的结果
推理:推理解释模式的步骤、规则,探索模式是怎样工作的,为什么可以工作,为什么这个模式是好的。
其他有关模式:描述现有系统中模式与其他模式的静态和动态的关系。
已知的应用:在已有的系统中模式出现和应用的例子。
UML 语言—软件工程的标准图标式设计语言
UML不仅仅是一种形式,而应该是系统设计和工程人员交流的依据
UML 的功能:
1 便于人员之间沟通发现逻辑错误(可视化)
2 对系统进行说明,并指导软件开发过程(说明)
3 建模工具将模型映射到语言上,发现可复用代码(建造)
4 作为设计资料提高修改系统和新人加入上手的效率(建文档)
UML
包括:
结构型图:描述静态结构,显示已有类和类之间的静态关系
类图 类、包之间的静态结构
对象图:对象的快照
构件图:描述可部署的物理模块间的静态关系
部署图:描述一个系统的拓扑结构,系统运行时的结构,软件和硬件之间的映射
行为型图:系统元素如何协作产生系统行为
使用案例图:描述一系列角色和使用案例以及它们之间的关系,对系统最基本的行为进行建模
活动图:不同过程之间的动态接触,案例图描述行为的具体化
状态图:一系列对象的内部状态以及状态的变化和转移,一个类不能有两个不同的状态图
时序图:不同对象之间信息传递的时序,一种相互作用图
合作图:描述发出、接收信息的一系列对象组织结构的相互作用图
一个UML的系统设计往往是从使用案例图开始的,而且一个设计应该是使用案例推动的。
类图:显示类、接口和它们之间的静态关系
必有元素:类、关联关系、基数
可选:关联关系方向和关系中的角色
描述类的类图:
类名(必须显示,正体表示具体类,斜体表示抽象类)
属性层(public、private、protected)
方法层(public、private、protected,方法下有下划线表示静态方法)
方法的要素:方法名,方法变量名,变量数据类型,方法数据类型
性质层:内部变量(属性)+get、set方法
可能再加上内部成员类那一层
描述接口的类图:
名字有interface、可以包括方法的声明、public、final的静态内部成员类
描述对象的类图:
显示类的实例,名字有下划线
应用场景:显示小部分系统的结构关系,特别是有递归关系的结构
类图中的关系:
一般化关系:类与类之间的继承、接口与接口之间的继承、类对接口的实现
从子类指向父类,从实现接口的类指向被实现的接口
Java体现:implements extends
关联关系:类与类之间的联结,使一个类知道另一个类的属性和方法
端点处可以有角色名和基数,不鼓励双向关联(两个箭头或没有箭头)。
Java体现:A->B A中有B的一个实例变量
关联关系可以进一步确定为聚合关系或合成关系
聚合关系:强关联关系,是整体和个体之间的关系,如汽车类和引擎类、轮胎类这个是整体和个体之间的关系。
合成关系:更强的关联关系,要求普通的聚合关系中代表整体的对象负责代表部分对象的生命周期,整体对象负责部分对象的存活,可传递给另一个对象,并由后者负责。
合成关系不能共享,代表部分的对象在每一时刻只能与一个对象发生合成关系,由后者排他负责其生命周期。
依赖关系:单向,一个类依赖于另一个类的定义
Java体现:局域变量、方法参量(方法参数需要)、对静态方法的调用
关联关系、聚合关系、合成关系之间的关系:
联系:聚合关系、合成关系是关联关系的延伸,合成关系比聚合关系更强;箭头出发类都包含箭头指向类的实例变量;
区别:关联关系两个类是在同一层次的,聚合关系中两个类处在不平等层次上,整体和部分的关系。合成关系是聚合关系更强的体现,整体对象要负责部分对象的生命周期,并且不能共享。
如果不确定关系是不是合成关系,可以定为聚合关系或关联关系;如果不确定是不是聚合关系,就定为关联关系。
时序图(序列图、活动序列图):按照时间顺序从上往下显示每个使用案例
垂直的虚线:生命线,对象存在的时间
箭头:调用
长方块:激活条,调用持续的时间
状态图(状态转换图、有限状态机):
定义一个具有有限个内部状态的机器,对象被外在的事件激发,从一个状态转移到另一个状态。
作用:让读者清楚看到什么事件会发生到对象身上,以及发生的事件对对象有什么效果
元素:起始状态(黑点)、对象状态(方框)、状态过渡(有箭头的连线)、引起状态过渡的事件/事件发生引起的操作[事件发生的保护条件,保证过渡关系发生的条件](过渡连线的标签)
状态的嵌套:父状态(超状态)、子状态
如洗衣机的运行包括洗衣、漂洗、脱水等状态
为什么要用到复合状态?隐藏子状态时降低复杂度,增加清晰度