如何画架构视图,如何写出设计文档
讲课老师 – 首席架构师李智慧
架构视图有很多种,不同的人给不同的架构视图。
架构师不能只用一种视图解决所有问题。
软件开发的本质是什么?如何进行软件架构设计?
备注:4+1架构模型,4+1架构视图 在工业上不常用,了解即可。
软件架构 = {元素, 形式, 关系/约束}
单一的视图无法完整的表达架构,因此需要具备完整的视图集。
如何使用UML进行软件架构设计与建模?
重点:表达什么样的设计意图?给什么人看?
使用什么UML图,达成什么样的设计意图?
在这里插入代码片
模型是一个系统的完整的抽象。人们对某个领域特定问题的求解及解决方案,对他们的理解和认识都蕴含在模型中。
通常,开发一个计算机系统是为了解决某个领域特定问题,问题的求解过程,就是从领域问题倒计算机系统的映射。
在还没工程师之前,架构师要有系统的抽象,对现实业务的抽象。
需要考虑有哪些模型,哪些模块,哪些类,怎么交互的?
领域问题: 开发的时候,要理解业务。
概念模型:要有抽象能力,想象最终产品的样子。
系统需求:前瞻性地抽象出系统需求。
解决方案:提前列出关键问题的解决方案。
建造传统模型的目的
建造软件模型的目的
何时画图?
何处画图?
什么是UML?
可用来描述:
静态图 - 通过描述类、对象和数据结构以及它们之间存在的关系,来描述软件要素中不变的逻辑结构。
动态图 - 通过描述执行流程或者实体状态变化的方式,来展示软件实体在执行过程中的变化过程。
可以在图中使用的概念统称为模型元素。模型元素在图中用其相应的视图元素(符号)表示,下图给出了常用的元素符号:类、对象、结点、包和组件等。
模型元素和模型元素之间的连接关系也是模型元素,常见的关系有接口实现(Interface Realization)、继承泛化(Generalization)、依赖(Dependency)、关联(Association)、聚合(Aggregation)和组合(Composition)。这些关系的图示符合如图所示。
弱关系:接口实现、依赖、聚合。
强关系:类继承、关联、组合。
用例建模技术,用于描述系统的功能需求。在宏观上给出模型的总体轮廓。通过对典型泳衣的分析,使开发者能够有效地了解用户的需求。
用例模型描述的是外部执行者(Actor)所理解的系统功能。它描述了待开发系统的功能需求。
它驱动了需求分析之后各阶段的开发工作,不仅在开发过程中保证了系统所有功能的实现,而且被用于验证和检测所开发的系统,从而影响到开发工作的各个阶段和 UML 的各个模型。
用例模型由若干个用例图构成,用例图中主要描述执行者和用例之间的关系。在 UML中,构成用例图的主要元素是用例和执行者及其它们之间的联系。
创建用例模型的工作包括:定义系统、确定执行者和用例、描述用例、定义用例间的关系、确认模型。
执行者是指用户在系统中所扮演的角色。执行者在用例图中是用类似人的图形来表示,但执行者可以是人,也可以是一个外界系统。
注意:用例总是由执行者启动的。
如何确定执行者:
图中还要另外两种类型的连接,即《使用》和《扩展》关系,是两种不同形式的泛化关系。
《Use》表示一个用例使用另一个用例。
《Extend》通过向被扩展的用例添加动作来扩展用例。
系统的主要功能是:项目管理,资源管理和系统管理。项目管理包括项目的增加、删除、更新。资源管理包括对资源和技能的添加、删除和更新。系统管理包括系统的启动和关闭,数据的存储和备份等功能。
任何建模语言都以静态建模机制为基础,标准建模语言 UML 也不例外。所谓静态建模是指对象之间通过属性互相联系,而这些关系不随时间而转移。
类和对象的建模,是 UML 建模的基础。 UML 的静态建模机制包括:
面向对象的开发方法的基本任务是建立对象模型,是软件系统开发的基础。UML 中的类图(Class Diagram)与对象图(Object Diagram)表达了对象模型的静态结构,能够有效地建立专业领域的计算机系统对象模型。
属性的定义: visibility attribute-name :type = initial-value {property-string}
可见性 属性名: 类型=缺省值{约束特性}
其中:可见性(visibility)表示该属性对类外的元素是否可见。
分为:
对数据的具体处理方法的描述则放在操作部分,操作说明了该类能做些什么工作。操作通常为函数,它是类的一个组成部分,只能作用于该类的对象说。
操作定义:
visibility operating-name(parameter-list): return-type {property-string}
可见性 操作名(参数表); 返回类型{约束特性}
一个最古老的软件方法问题是:怎样讲大系统拆分成小系统。解决该问题的思路之一是将许多类集合成一个更高层次的单位,形成一个高内聚、低耦合的类的集合。UML 中这种分组机制叫包(Package)。引入包是为了降低系统的复杂性。
动态模型主要描述系统的动态行为和控制结构。动态行为包括系统中对象生存期内可能的状态以及事件发生时状态的转移,对象之间动态合作关系,显示对象之间的交互过程以及交互顺序,同时描述了满足用例要求所进行的活动以及活动间的约束关系。
在动态模型中,对象间的交互是通过对象间消息的传递来完成的。对象通过相互间的通信(消息传递)进行合作,并在其生命周期中根据通信的结果不断改变自身的状态。
动态模型主要描述系统的动态行为和控制结构。
包括四类图:状态图、活动图、时序图、合作图。
时序图(Sequence Diagram)用来描述对象之间动态的交互行为,着重体现对象间消息传递的时间顺序。
时序图存在两个轴
时序图中的对象用一个带有垂直虚线的矩形框表示,并标有对象名和类名。垂直虚线是对象的生命线,用于表示在某段时间内对象是存在的。
对象间的通信通过再对象的生命线之间消息来表示,消息的箭头类型指明消息的类型。
有两种使用顺序图的方式:一般格式和实例格式。
实例格式详细描述一次可能的交互。没有任何条件和分支或循环,它仅仅显示选定情节(场景)的交互。
而一般格式则描述所有的情节。因此,包括了分支,条件和循环。
活动图(Activity Diagram)的应用非常广泛,它既可用来描述操作(类的方法)的行为,也可以描述用例和对象内部的工作过程,并可用于表示并行过程。
活动图描述了系统中各种活动的执行的顺序。刻画一个方法中所要进行的各项活动的执行流程。
活动图中一个活动结束后将进入下一个活动(在状态图中状态的变迁可能需要事件的触发)。
构成活动图的模型元素有:活动件、转移、对象、信号、泳道等。
状态图(State Diagram)用来描述一个特定对象的所有可能的状态及其引起状态转移的事件。一个状态图包括一系列的状态以及状态之间的转移。
状态
所有对象都具有状态,状态是对象执行了一系列活动的结果。当某个事件发生后,对象的状态将发生变化。状态图中定义的状态有:
合作图(Collaboration Diagram),也称为协作图,用于描述相互合作的对象间的交互关系和链接(Link)关系。虽然时序图和合作图都用来描述对象间的交互关系,但侧重点不一样。时序图着重体现交互的时间顺序,合作图则着重体现交互对象间的静态链接关系
实现模型描述了系统实现时的一些特性,又称为物理体系结构建模。包括源代码的静态结构和运行时刻的实现结构。
实现模型包括:
组件(Component):系统中遵从一组接口且提供其实现的物理的、可替换的部分。对系统的物理方面建模时,它是一个重要的构造块。
组件可以看作包与类对应的物理代码模块,逻辑上与包,类对应,实际上是一个文件,可以有下列几种类型的构件:
组件之间的依赖关系是指结构之间在编译,连接或执行时的依赖关系。用虚线箭头表示组件图符:
部署图用来描述系统硬件的物理拓扑结构以及在此机构上执行的软件,即系统运行时刻的结构。部署图可以显示计算机结点的拓扑结构和通信路径,结点上执行的组件,特别对于分布式系统,部署图可以清楚的描述系统中硬件设备的配置,通信以及在各硬件设备上各种软构建和对象的配置。因此,部署图是描述任何基于计算机的应用系统的物理配置或逻辑配置的有力工具,部署图的元素有结点和连接。
部署图的结点代表某种计算机,通常是某种硬件。同时结点还包括在其上运行的软组件,软件组件代表可执行的物理代码模块。如一个可执行程序。结点的图符是一个立方体。
保险系统的部署图
部署图个结点之间进行交互的通信路径称为连接,连接表示系统中的结点存在着联系,用结点之间的连线表示连接,在连接的连线上标注通信类型。
UML 精粹 - Martin Fowler
UML Distilled - Martin Fowler
注意:以上信息如有侵权,请联系作者删除,谢谢。