统一建模语言(UML)是一种直观化、明确化、构建和文档化软件系统产物的通用可视化建模语言。它捕捉了被构建系统的有关决策和理解用来理解、设计、浏览、配置、维护以及控制系统的信息。可以与所有的开发方法、生命阶段、应用领域和媒介一同使用。它意图统一过去建模技术的经验,将当前软件最佳实践合并至标准的方法,包括语义概念、标记符号和指南、具有静态、动态环境上的和组织性的部分,它可以被具有代码产生和报表生成的交互式可视建模工具所支持。UML规范没有定义标准过程,但可用于迭代的开发过程并支持现有的大多数面向对象的开发过程。UML捕捉系统静态结构和动态行为的信息。还包括用包来分解模型的组织性结构 它允许软件团队将系统分解为可工作的单元对包之间的依赖进行理解和在复杂的开发环境中管理模型单元的版本。UML不是编程语言。
在UML开发的背后有许多目标,第一个且最重要的目标:UML是所有建模人员可以使用的通用建模语言。最后一个UML目标是在能对众多系统建模的同时,尽可能的简洁。
UML概念和模型可以被划分为以下的范围:
UML视图:UML的各种概念和结构并不存在明显的界线,但为了方便,我们将它们划分至多个视图。视图是表达系统单个方面的UML建模结构的简单子集。视图在最高层次可以划分为三个领域结,构性分类,动态行为和模型管理。结构性分类描述了系统中的事物和事物间的关系。动态行为描述了系统时间上的行为。模型管理描述了用层次式的单元对模型自身的组织。UML还包括欲提供有限但实用扩展能力的若干结构。
静态视图:静态视图对应用领域的概念建模 以及将内建的概念作为应用实现的一部分。该视图不 描述时间相关的行为 因而是静态的。
用例视图:用例视图对外部用户称为活动者,所感知的系统功能进行建模。用例是用活动者和系统之间的交互来表达、条理分明的功能单元。用例视图的目的是列举活动者和用例,显示活动者在每个用例中的参与情况。
交互视图:交互视图描述了实现系统行为角色之间的消息交换序列。
顺序图:顺序图表示了随时间安排的一系列消息。
交互图:协作对交互中存在意义的对象和链建模。对象和链仅在提供的上下文中存在意义。
状态机视图:状态机对类的对象的可能生命历史建模。状态机包含由迁移连接的状态,每个状态对对 象生命期中的一段时间建模,该时间内对象满足一定的条件。当事件发生时,它可能导致迁移的激发,使对象改变至新状态,当迁移激发时,附属于迁移的动作可能被执行,状态机显示为状态图。
活动视图:活动视图是用于显示执行某个计算过程中的运算活动的状态机的一种变形,活动状态表现了一项活动工作流的步骤或操作的执行,活动图描述了顺序和并发活动分组,活动视图表达为活动图。
物理视图:前面的视图从逻辑角度对应用中的概念建模,模型由一系列包含模型元素(如类 状态机 用例)的包构成,包可以包含其它包,因此模型指派了一个根包,间接包含了模型的所有内容,包是操纵包内容,以及访问控制和配置控制的单元。每个模型元素被包或其它元素所拥有。
模型管理视图:模型管理视图对模型本身的组织建模。
扩展结构:包含了三种扩展结构:约束,版型,标签值,约束是用某种正式语言或自然语言表达的语义关系的文字陈述。版型是基于已有的模型元素。由建模人员修订的新模型元素。标签值是一条可以附加给任何模型元素的命名信息。
概述:静态视图是UML的基础,模型静态视图的元素是应用中具有意义的概念,包括现实世界概念、抽象概念、实现概念、运算概念、系统中发现的所有概念。静态视图捕获对象结构。静态视图将行为实体描述为离散的模型元素,但它不具有动态行为的细节。静态视图中的关键元素是分类和它们之间的关系。为了便于理解和重用性,大型模型必须划分成较小的单元。对象是建模人员理解和构建系统的分离的单元。分类之间的关系是关联,概括以及各种依赖,包括实现和使用。
分类:分类是模型中的离散概念,它具有标识,状态,行为和关系。分类的种类包括类,接口和数据类型。其它类型为行为概念,环境事物或实现结构的具体化。这些分类包括用例,活动者,构件结点和子系统。
关系:分类中的关系指关联,概括,流和各种依赖,包括实现和使用。
关联:关联描述了系统中对象和其它实例之间离散的连接。
概括:概括是一般化何具体化描述之间的分类关系。
继承:每种可概括的元素都具有一系列可继承的属性。
多重继承:如果分类具有一个以上的双亲,则每个双亲均被继承。
分类和多重分类,在最简单的公式化中 一个对象只具有一个直接类。
静态和动态分类:在最简单的公式化中,对象在创建后可能无法改变自己的类。
实现:实现关系将一个模型元素,连接至另一个提供了行为说明而无结构或实现的模型元素。
依赖:依赖指明了两个或两个以上模型元素之间语义的关系。
约束:UML为图形建模提供了一系列概念和关系,然而某些情况使用文字表达更加可行,约束是表现为给定语言中字符串的布尔表达式。自然语言,集合理论化语言,约束语言或各种编程语言均可以用于表达约束。
实例:实例是具有标识的运行实体,它可以与其它运行实体区分,它在任何时刻具有值,值会随时间根据操作发生变化。
对象图:快照图是某个时间点系统的映象,由于它包含了对象的映象,它被称为对象图。
概述:用例视图从外部用户的角度捕获系统,子系统或类的行为。它将系统功能划分为对活动者具有意义的事务,这些功能片被称为用例。
活动者:活动者是与系统,子系统或类交互的外部人员,进程或事务的理想化。
用例:用例是系统单元提供的外部可感知的功能单元,表达成系统单元和与之相交互的一个或多个活动者的消息序列。
定义:应该有且仅有一个原因引起类的变更。
优点:
定义:子类可以扩展父类的功能,但不能改变父类原有的功能。
优点:
缺点:
定义:是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。依赖倒置原则可以减少类间的耦合性,提高系统的稳定性,降低并行开发引起的风险,提高代码的可读性和可维护性。
依赖倒置原则的使用建议:
接口隔离原则强调:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。
总结:接口隔离原则的思想在于建立单一接口,尽可能地去细化接口,接口中的方法尽可能少但是凡事都要有个度,如果接口设计过小,则会造成接口数量过多,使设计复杂化。所以一定要适度。
迪米特法则又叫做最少知道原则,就是说一个对象应当对其它对象有尽可能少的了解,不要和陌生人说话。强调只和朋友说话,不和陌生人说话。这里的朋友指的是:出现在成员变量,方法输入,输出参数中的类称为成员朋友类,而出现在方法体内部的类不属于朋友类。迪米特法则初衷在于降低类之间的耦合。由于每个类尽量减少对其它类的依赖,因此。很容易使得系统的功能模块独立,相互之间不存在(或很少有)依赖关系
定义:开闭原则是指一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。也就是说一个软件实体应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化。
优点:
总结:OCP 可以具有良好的可扩展性,可维护性。不可能让一个系统的所有模块都满足 OCP 原则,我们能做到的是尽可能地不要修改已经写好的代码,已有的功能,而是去扩展它。
原文:https://www.cnblogs.com/-rendong/p/14346552.html