[总结] 软件架构 01
一、定义
软件架构是有关软件整体结构和组件的抽象描述与结构性规划。
二、形式
1.自组织,自架构,自下而上
2.宏观架构,自上而下
三、类(对象)的关系
1.继承(泛化)(Generalization)
一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在 Java 中用 extends 关键字。
它指定了子类如何特化父类的所有特征和行为。
例如:猫头鹰是鸟的一种,即有鸟的特性也有猫头鹰的共性
箭头指向: 带三角箭头的实线,箭头指向父类
2.实现(Realization)
指的是一个 class 类实现 interface 接口(可以是多个)的功能,实现是类与接口之间最常见的关系。
箭头指向: 带三角箭头的实线,箭头指向接口或抽象类
3.组合(Composition)
整体与部分的关系,但部分不能离开整体而单独存在
如公司和部门是整体和部分的关系,没有公司就不存在部门。组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。
代码体现: 成员变量
箭头指向: 带实心菱形的实线,菱形指向整体
例如: 一个学校由多个班级组成,班级离开学校也就不存在、而学校离开班级也不成立。像这种不可分离的关系就需要用组合。
4.聚合(Aggregation)
聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即 has-a 的关系。
聚合整体与部分的关系,且部分可以离开整体而单独存在。如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
代码体现:成员变量
箭头指向: 带空心菱形的实心线,菱形指向整体。
5.关联(Association)
一种拥有的关系,它使一个类知道另一个类的属性和方法。
他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系。
比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类 B 以类属性的形式出现在关联类 A 中,也可能是关联类 A 引用了一个类型为被关联类 B 的全局变量。
代码体现:成员变量
箭头指向: 带普通箭头的实心线,指向被拥有者。
例如:在 Bird 类中有一个 IFly 类型的 fly 属性,需要提供 IFly 的接口实现。Bird 对象会利用 IFly 接口的实现完成 fly 方法。
6.依赖(Dependency)
即一个类的实现需要另一个类的协助具有偶然性的、临时性的、非常弱的。
代码表现: 局部变量、方法的参数或者对静态方法的调用。
箭头指向: 带箭头的虚线,指向被使用者。
例如: Bird 类中有一个 setFly 方法,它需要使用者用到 IFly 接口来实现,那么这种关系就是依赖关系。
强弱顺序
继承关系(泛化) = 实现 > 组合 > 聚合 > 关联 > 依赖
四、软件架构的静态图描述
1.架构由架构元素和元素间的关系所组成,他们是整体与部分的关系,但部分不能离开整体而单独存在,其实也就是上述中的“组合”的关系。
2.架构元素与服务器是聚合关系,与模块和类是组合关系
3.元素间的关系是由 静态关系[组合、聚合、依赖、继承(泛化)]和动态关系 组合而成
4.架构与架构文档是关联关系,架构文档是架构的拥有者,也就是架构关联一些架构文档。
5.架构视图关联一些关注点
6.系统和架构是组合关系,系统关联一些相关方。相关方由老板,甲方爸爸,工程师等组合而成。
相关方关联他们的关注点
五、架构师到底是干啥的?
1.架构师是 C 位,它是一个角色,而不是一个职位。
2.要去解决别人解决不了的问题,要根据不同的相关方编写不同视图的架构文档来进行沟通。
3.要有性能优化与分析故障的能力,快速学习与模块拆解的能力,沟通与领导的能力。
六、架构师如何做架构?
1.4+1 视图模型
IBM 提出的 4+1 视图模型,他所传达的理念是非常重要的,根据不同的相关方(场景),采用不同的视图来达到各方理解的一致性,为项目的顺利运行提供坚实的理论基础。它也是目前业界常用的 UML 的理论基础之一。
2.什么是模型?
模型是一个系统的完整的抽象。人们对某个领域特定问题的求解,即解决方案,对他们的理解和认识都蕴含在模型中。 通常,开发一个计算机系统是为了解决某个领域的特定问题,而问题的求解过程,就是从领域问题到计算机系统的映射。
领域问题 —分析、抽取—> 概念模型 —提取—> 系统需求 —分析、设计—>解决方案
3.通用建模语言 UML
概念:以图形方式描述软件的概念
用途: 用来描述,某个问题领域,构思中的软件设计,描述已经完成的软件实现
分类:
静态图 通过描述类、对象和数据架构以及他们之间的关系,
来描述软件要素中不变 的逻辑结构
包括:用例,对象,类图,组件图,包图,部署图
动态图 通过描绘执行流程或者实体状态变化的方式,来展示软件实体在软件过重的
变化过程
包括:协作图,序列图,活动图,状态图
在软件开发中的应用场景:
1.需求分析阶段 ( 用例图,活动图(描述关键业务流程),状态图(业务对象状态变迁),时序图(描述当前的系统和外部系统的调用关系) )
2.概要设计阶段 ( 部署图,时序图(服务器或子系统之间的时序图,组件级的时序图),
活动图(子系统级的活动图), 组件图[画了组件图后通常配合时序图来说明])
3.详细设计阶段 (类图,类的时序图,方法的活动图)
七、UML 实例分析
1. 用例图
范围: 需求分析
组成: 角色,边界,元素(元素数量 10-20 为宜),关系(使用 use 和扩展 extend)
作用:描述边界内的系统谁来用,有啥功能(用例=功能),功能间的关系
2. 时序图(序列图)
范围: 需求,概要,详细均可
组成: 对象,生命线,激活,消息
作用: 描述各对象的交互关系
以概要设计阶段为例:
3. 活动图
范围: 概要,详细均可
组成: 1.实心圆(开始), 2.圆角矩形(流程处理节点),
3.分叉(分支) 一入流多出流
4.聚合(汇和)多入流一出流
作用: 描述对象之间的动态调用关系, 如何发消息,描述的是整个处理流程如何完成的
带泳道的例子:
4. 状态图
范围: 需求,详细
组成:
1.状态
开始,结束,内部活动,内部转换
2.转换
状态之间在某种事件或条件的驱动下的切换的过程。
转换分为外部转换、内部转换、完成转换、复合转换等
3.判定
表示一个事件依据不同的监护条件有不同的影响。在实际建模的过程中,如果遇到需要使用判定的情况,通常用监护条件来覆盖每种可能,使得一个事件的发生能保证触发一个转换。
4.同步
说明并发工作流的分支与汇合
5.事件
事件可以分成几种,主要包括:信号事件、调用事件、改变事件和时间事件等。
1. 信号事件(Signal Event)信号是作为两个对象之间的通信媒介的命名的实体,它以对象之间显式通信为目的。
2. 调用事件(Call Event)调用事件指的是一个对象对调用(Call)的接收,这个对象利用状态的转换而不是利用固定的处理过程实现操作。
3. 改变事件(Change Event)指的是依赖与特定属性值的布尔表达式所表示的条件满足时,事件发生改变。
4. 时间事件(Time Event)时间事件(Time Event)表示时间表达式被满足的事件,它代表时间的流逝。
作用: 描述对象具有的各种状态、状态之间的转换过程以及触发状态转换的各种事件和条件
以就餐卡状态为例
5. 组件图
范围: 概要
组成: 组件(构件),接口和关系(关联、依赖、实现和泛化)
作用: 描述系统中有哪些构件,构件之间的关联、依赖、实现和泛化关系
6. 部署图
范围: 概要
组成:
1.节点(Node), 物理元素,在运行时存在,代表一个可计算的资源,通常占用一些内存,可以是硬件也可以是运行其上的软件系统,比如 64 主机、Windows server 2008 操作系统、防火墙等
2.节点直接的关系关联和依赖
作用: 如何在硬件上映射的以及网络的拓扑结构
评论