目录
一、面向对象需求分析
1.1 面向对象的基本概念
1.2 什么是面向对象的需求分析
2.3 什么是UML图
2.4 UML视图
2.4 UML图与UML视图的关系
2.5 UML图与面向对象需求分析的关系
二、需求分析相关的UML图形与视图:1+4视图
2.1 用例模型与用例图:用户与系统的交互,功能性需求
2.2 类图与对象图
2.3 顺序图:对象之间的行为交互
2.4 通信协作图
2.5 活动图 =》 并行流程图
2.6 状态图
一、面向对象需求分析
1.1 面向对象的基本概念
- 实体类 VS 计算机的内存、寄存器(数据)
- 控制类 VS 计算机的计算单元ALU(程序)
- 边界类 VS 计算机的输入输出单元(IO接口)
狭义上讲,面向对象是一种编程思想和方法,广义上讲,面向对象一种软件开发与实现的编程思想和方法:它将现实世界中的事物抽象为对象,通过对象之间的交互来实现程序的设计和开发。
面向对象的基本概念包括以下几个方面:
-
类(Class):类是对具有相同属性和行为的一组对象的抽象描述。类定义了对象的属性和方法。
-
对象(Object):对象是类的实例,表示具体的实体。每个对象都有自己独立的状态(属性的值)和行为(方法的实现)。
-
封装(Encapsulation):封装是将数据和操作(方法)封装在一个对象中,对外部用户隐藏对象的实现细节。通过封装可以实现信息隐藏和保护数据的安全性。
-
继承(Inheritance):继承是指一个类从另一个类派生出来,新的类继承了原有类的属性和方法,并可以在此基础上添加新的属性和方法。继承可以实现代码的重用和扩展。
-
多态(Polymorphism):多态是指同一种操作或方法可以在不同的对象上产生不同的行为。通过多态可以提高代码的灵活性和可扩展性。
通过使用这些基本概念,面向对象的编程可以更加灵活、可维护和可扩展,提高代码的可读性和复用性。
1.2 什么是面向对象的需求分析
面向对象的需求分析是指在需求分析阶段(而不是软件开发阶段)中使用面向对象的方法来识别和建模问题领域(不是计算机领域)中的对象、属性、方法和关系,从而识别出目标系统需要解决的问题以及解决问题的方式。
在面向对象的需求分析中,主要涉及以下几个方面:
-
对象建模:通过识别问题领域中的实体,将其定义为对象,并确定对象之间的关系和属性,以及对数据进行操作的方法。
-
用例建模:通过描述使用者和系统之间的交互行为及其流程,进一步明确系统需要解决的问题以及解决问题的方式。
-
建立类图:通过将上面步骤中识别出的对象、属性和方法等内容,组织成类和对象之间的关系,形成类图来表示系统的结构和模型。
-
领域建模:通过识别问题领域中的概念和规则,建立领域知识模型,以帮助开发人员更好地理解问题领域。
使用面向对象的方法进行需求分析,使得系统的需求和领域更加清晰明了,有助于避免需求漏洞和理解上的偏差,也能提高软件设计和开发的效率。
2.3 什么是UML图
描述对象以及对象之间的关系,有多种方法,如文本方式描述,也是图形化方式描述。
UML图(Unified Modeling Language diagram)是一种用于描述软件系统或其他系统的图形化语言。它是一种标准化的建模语言,可以使软件开发人员、架构师和系统分析师在设计和开发软件系统时更加清晰地表示和交流其设计和功能。
UML图包括多种不同类型的图表,例如类图、用例图、时序图、活动图等等。它们分别用于表示系统中的不同方面,如对象类的结构和关系、系统用户和功能、计时和协作关系等等。
因此,UML图是软件开发领域中重要的工具之一,它可以帮助团队成员更好地理解和沟通软件系统的设计和实现。
在面向对象的需求分析过程中,可以使用UML(统一建模语言)图是一种常见的方式来帮助描述、分析和传达系统的需求。
以下是几种常用的 UML 图形,在需求分析中经常用到:
-
用例图(Use Case Diagram):用例图主要用于描述系统的功能需求和用户与系统之间的交互。它展示了系统的不同角色(参与者)和与系统交互的各种用例(功能场景),以及它们之间的关系。用例图帮助识别和定义用户需求,理解系统的主要功能和用户使用情景。
-
类图(Class Diagram):类图主要用于描述系统的静态结构和对象之间的关系。它展示了系统中的类、属性、方法以及它们之间的关联、继承等关系。类图帮助识别和定义系统的数据模型,明确对象的行为和属性。
-
活动图(Activity Diagram):活动图主要用于描述系统的业务流程、操作流程和控制流。它展示了系统中的活动、决策、并行处理等,以及它们之间的关系。活动图帮助澄清和定义系统的操作流程和用户交互。
-
状态图(State Diagram):状态图主要用于描述系统的状态和状态之间的转换。它展示了系统的不同状态、状态之间的转换条件,以及状态转换时的行为。状态图帮助识别和定义系统的状态模型和状态转换逻辑。
-
顺序图(Sequence Diagram):顺序图主要用于描述系统中对象之间的交互和消息传递顺序。它展示了一系列对象之间的时序关系,以及它们之间的消息发送和响应。顺序图帮助理解系统中不同对象之间的协作和通信。
-
协作图(Collaboration Diagram):协作图(也称为通信图)主要用于描述系统中对象之间的协作关系和消息传递。它展示了对象之间的交互、消息传递和协作关系。协作图帮助识别和定义系统中不同对象之间的通信模式和交互情况。
使用这些 UML 图不仅有助于分析和表达系统需求,还可以在需求讨论、验证和文档编写过程中提供清晰的视觉表示。需要根据具体的需求和场景选择合适的 UML 图来支持需求分析工作。
2.4 UML视图
UML视图是在软件系统建模中使用的一种方式,用于描述系统在不同层次和角度上的视角。
UML视图帮助开发人员和设计师理解和表示系统的各个方面。
以下是一些常见的UML视图:4+1视图
用例视图(Use Case View):用于描述系统的功能和用户角色之间的交互,展示系统在响应各个用例时的行为。
-
静态视图(Static View):包括类图、对象图和包图等,用于描述系统中的类、对象和它们之间的关系,展示系统的静态结构。
-
动态视图(Dynamic View):包括时序图、活动图和状态机图等,用于描述系统中对象之间的交互和行为,展示系统的动态行为和状态转换。
-
实现视图(Implementation View):提供关于系统软件和硬件组成的信息,包括组件图、部署图和包图等,展示系统的实现细节和组织结构。
-
部署视图(Deployment View):用于描述系统在物理环境中的部署和分布,包括节点图和部署图等,展示系统的物理架构和资源配置。
这些UML视图相互补充,共同构成了对系统全面而细致的描述。通过使用这些视图,开发人员可以更好地理解系统的不同方面,并与团队成员共享和交流设计和实现细节。
备注:
UML为什么是4+1视图,而不是5个视图?
这是因为,用例视图是所有其他视图的输入,用例视图与其他视图并非并列关系,而其他4种视图,实际上是并列关系,相互独立,他们从不同的视角描述和阐述目标系统,而用例视图是为其他4种视图共享!!!
2.4 UML图与UML视图的关系
视图是不是图,视图是指观察目标系统的一个维度和角度,如机械结构的视图:俯视图、主视图、仰视图、左视图、右视图,后视图等,然而,每个视图都不包括无数张实际的图组成。
UML图是在UML建模中使用的一种图形化表示,它用于描述各种软件系统的方面。UML视图是一种表示UML模型各个方面的方式,它可以看作是UML图的一个组成部分。换句话说,UML视图是根据系统开发过程中的需要,使用一种或多种UML图来抽象和表示系统的不同方面。
UML视图通常包含若干个UML图,每个图用于表示系统在某个特定层次或视角下的元素和关系。根据需要,UML视图可以包括不同类型的UML图,如用例图、类图、时序图、组件图、部署图等。不同的UML图描述系统的不同方面,从而构成了一个完整的UML视图,帮助开发人员更好地理解和表示系统的各个方面。
因此,可以说,UML视图和UML图是相关的,UML图是UML视图的组成部分。在系统建模和开发过程中,UML视图根据需要以不同的形式出现,并且各个UML图的组织方式和连贯性都是UML视图的一部分。通过使用UML视图和UML图,开发人员可以更好地管理和理解复杂软件系统的各个方面,并且可以与团队成员更好地共享和交流设计和实现细节。
2.5 UML图与面向对象需求分析的关系
UML图是面向对象需求分析的一种工具和技术。UML(Unified Modeling Language)提供了一套丰富的图形化表示方法,用于描述软件系统的结构、行为和交互。
面向对象需求分析是一种方法论,旨在通过识别和分析系统的需求,以面向对象的思维方式来设计和构建软件系统。
在面向对象需求分析的过程中,UML图被广泛应用于捕捉、表示和沟通系统需求。通过使用不同类型的UML图,如用例图、类图、时序图、状态图等,分析人员可以更好地理解系统的功能、角色、结构和行为。
以下是UML图与面向对象需求分析之间的关系:
-
用例图:用例图帮助识别和表示系统的功能需求,通过描述系统的用户角色、用例和它们之间的关系,展示用户与系统之间的交互行为。
-
类图:类图描述系统中的对象类、属性和方法,以及它们之间的关系。通过分析类图,可以识别出系统的核心对象和它们的行为,帮助定义和理解系统的静态结构。
-
时序图:时序图描述系统中对象之间的交互流程和消息传递顺序。通过时序图,可以分析系统中的交互行为,捕捉系统的动态行为和事件流程。
-
状态图:状态图描述系统中对象的状态转换和行为规则。通过状态图,可以分析系统中对象的生命周期和状态变化过程,从而理解系统的行为规则和状态转换逻辑。
综上所述,UML图提供了一种可视化和规范化的方法,用于在面向对象需求分析过程中捕捉、表示和沟通系统的需求。它们帮助分析人员更好地理解系统的不同方面,并与团队成员共享和交流设计和实现细节。
二、需求分析相关的UML图形与视图:1+4视图
2.1 用例模型与用例图:用户与系统的交互,功能性需求
用例模型是一种需求分析方法,用于描述系统的功能需求和用户与系统之间的交互。
而用例图是用例模型的一种图形化表示方式,用于可视化、交流和共享用例模型的信息。
用例模型包括以下几个主要元素:
-
用例(Use Case):用例代表了系统的一项具体功能或业务场景,描述了用户和系统之间的交互过程。每个用例表示一个完整的功能,它描述了系统在特定情景下的行为和响应。
-
参与者(Actor):参与者代表与系统进行交互的外部实体,可以是人、其他系统或设备。参与者在用例中扮演特定的角色,触发或参与到系统的某项功能中。参与者与用例之间通过交互实现功能。
-
关联关系(Association):用例与参与者之间通过关联关系连接,表示参与者与用例之间的关系。一个参与者可以关联多个用例,一个用例也可以被多个参与者关联。
-
包含关系(Include):包含关系表示一个用例包含或引用另一个用例的行为。包含关系用于描述通用的行为和流程,避免在多个用例中重复定义相同的步骤。
-
扩展关系(Extend):扩展关系表示一个用例在某种情况下可以扩展另一个用例的行为。扩展关系用于描述可选的和可变的功能,可以根据特定条件进行扩展或修改。
用例图是用例模型的图形化表示,通过用例图可以清晰地展示系统的各个用例以及参与者之间的关系。用例图中的参与者通常以图标形式表示,用例以椭圆形式表示,参与者与用例之间通过实线箭头连接。用例图还可以用于描述用例之间的包含关系和扩展关系,通过虚线箭头表示。
用例图图形化地表达了系统功能和用户需求的关系,可以帮助团队更好地理解和讨论需求,促进系统设计和开发的沟通和协作。它可以提供一个高层次的系统视图,帮助识别和定义主要的用例和参与者,并构建全面的使用场景。
电话注册继承于课程注册,具有课程注册所有的属性特征,同时增加了电话相关的新的特征。
网络注册继承于课程注册,具有课程注册所有的属性特征,同时增加了网络相关的新的特征。
包含(Composition)、扩展(Aggregation)和继承(Inheritance)是面向对象编程中常见的三种类之间的关系。
包含关系(外合关系、组合关系)是指类 A 中包含了类 B 的对象,并且这些对象在类 A 的生命周期中创建和销毁。例如,一个车类中可能包含了轮子类的对象,而车的生命周期中也包含了轮子的生命周期,因此这是一种包含关系。B是A的一部分,且被A独占,不能被其他对象或类共享。
扩展关系(外合关系、聚合关系)是指类 A 中包含了类 B 的对象,但是这些对象可以被共享和重复使用,并且在类 A 的生命周期中不会被销毁。例如,一个汽车租赁公司的车库中包含了几辆相同型号的汽车,这些汽车被共享和重复使用,因此这是一种扩展关系。
继承关系(内生关系、血缘关系)是指类 A 从类 B 中继承属性和方法,并且可以对这些属性和方法进行扩展和重写。例如,一个狗类可以继承自动物类的属性和方法,并且可以对这些属性和方法进行扩展和重写,因此这是一种继承关系。
总的来说,继承关系最强耦合关系,包含关系也是强耦合的、拥有关系,扩展关系是弱耦合的、合作关系,继承关系则是一种 IS-A 的关系,可以不断扩展类的功能和特性。开发者需要根据具体的场景,选择合适的关系来设计类之间的联系。
2.2 类图与对象图
类图描述了不同类之间的结构关系、协作关系。
对象是类的实例化,对象图描述了不同对象之间的关系,一个实例化后的对象,可能已经包含了多个不同的类。
类图和对象图都是UML(统一建模语言)中的图形表示方式。
类图是一种用于描述类之间的静态结构关系的图形语言。它通常由类名、属性、方法等元素组成,在类图中可以表示类之间的关系,例如继承、实现、聚合、组合等关系。
而对象图则是一种用于表示类与对象间动态关系的图形语言,它是类图在运行时的表现形式,也称“实例图”。对象图展示了一个或多个对象及其之间的关系,可以显示对象的属性和方法,是描述对象和它们之间交互的有效方式之一。对象图可以用于表示系统的状态和操作序列,对于软件开发与测试具有重要意义。
总的来说,类图关注的是抽象模型,而对象图关注的是实例对象。类图描述的是类及其之间的关系,而对象图则描述了类的实例之间的关系。简而言之,类图是静态的,对象图是动态的。
类是数据类型,对象是实例,是变量!!!
2.3 顺序图:对象之间的行为交互
顺序图(Sequence Diagram)是UML(统一建模语言)中的一种行为模型图,它用于描述对象之间的动态交互过程。它通过建立对象之间消息传递的时间顺序,显示了系统中对象之间的协作关系和消息传递过程。
顺序图通常由垂直的参与者线,水平的消息箭头和激活条(表示对象收到消息时处于激活状态的时间段)组成。参与者表示系统中的对象、线性、进程等实体,消息箭头表示不同对象之间的消息传递,激活条则表示对象接收或处理消息的时间段。
顺序图可用于描述系统的时序行为、异步行为、并发行为、对象设计等重要的方面。它是软件开发中常用的一种模型图,能帮助开发人员更好地理解系统的运行过程,分析系统的交互细节和问题,并且可以在系统设计阶段发现设计缺陷,提高代码的质量和可维护性。
2.4 通信协作图
通信协作图(Communication Diagram),也被称为协作图(Collaboration Diagram)是UML(统一建模语言)中的一种行为模型图,它用于描述对象之间的协作关系和消息传递过程。
通信协作图可以展示多个对象之间的交互关系,更注重对象之间的消息传递。 它采用图形化的方式来描述对象之间的消息交互,在图中,通过消息连接不同的对象,显示系统中的对象之间协同工作的方式。
通信协作图中,对象通常用矩形或者椭圆来表示,对象之间的消息传递由带箭头的实线来表示。箭头指向接受消息的对象。 将消息标在箭头上,消息标识了消息的种类、名称、参数等信息。
通信协作图与顺序图具有相同的目的,但通信协作图更加注重展示对象之间的交互、协作和通信以及它们之间的关系,更适合于展示对象之间的高层次的信息交换过程。通信协作图可以帮助开发人员更加直观清晰地描述软件系统的交互关系,从而分析系统的行为和设计。
2.5 活动图 =》 并行流程图
活动图(Activity Diagram)和流程图(Flowchart)是常用的图形工具,用于描述和分析系统中的流程和活动。
活动图是UML(统一建模语言)中的一种行为模型图,用于描述系统中的活动、流程和控制流。它主要关注系统中的活动和动作之间的顺序、并发、分支和合并等关系。活动图使用节点(表示活动或动作)、传输线(表示控制流)和分支合并节点(表示选择和合并)来表示系统中的活动流程。它可以帮助开发人员更好地理解和设计系统的业务流程,分析系统中的并发和分支情况,并优化业务流程。
流程图是一种通用的图形工具,用于描述一个过程或算法中的步骤和流程。它可以用于分析和描述各种业务和系统流程,包括软件开发流程、项目管理流程、决策流程等。流程图使用不同的符号和线条表示不同的操作和流程,如开始和结束节点、处理节点、决策节点和连接线等。它可以用于可视化和传达一个过程或算法的各个步骤和逻辑。
虽然活动图和流程图都用于描述系统中的活动和流程,但两者的应用场景和着重点不同。活动图更加关注业务流程和系统交互,而流程图更加通用,适用于各种流程和算法的描述和分析。同时,活动图是UML的一部分,更加符合面向对象的建模方法,而流程图则更加通用且灵活。
2.6 状态图
在计算机科学和软件工程中,状态(State)指的是一个系统、对象或者组件在特定时间点所处的条件或情况。状态是描述系统或对象的属性、变量、状态值等的集合,反映了系统的当前属性和行为。
状态机(State Machine)是一种数学模型,用于描述一个系统或对象在不同状态之间的转换和行为。它由一组状态、转移条件和动作组成。状态机根据当前状态和接收到的输入,通过定义的转移条件决定转移到下一个状态,并执行相应的动作。状态机可以描述系统的状态流转、事件触发和行为响应。
状态机可以分为两种主要类型:有限状态机(Finite State Machine,FSM)和层次状态机(Hierarchical State Machine)。有限状态机是最基本的形式,它具有固定的状态数和状态转移条件。层次状态机则更加复杂,可以以树形结构组织状态,包括嵌套状态和并行状态,具有更强的表达能力。
状态机和状态图(State Diagram)密切相关,状态图是一种图形化工具,用于可视化和描述状态和状态转移。状态图通过节点表示不同状态,通过边表示状态之间的转移条件和动作。状态图可以帮助开发人员更好地理解和设计系统的状态机,并更加形象地展示状态的转换和行为。
状态图(State Diagram),也被称为状态机图,是UML(统一建模语言)中的一种行为模型图,它用于描述对象的状态变化和对状态变化的响应。
状态图主要用于描述系统中的状态以及状态之间的转换。在状态图中,状态通常由圆角矩形或者圆形来表示,转换由箭头标识,箭头上标注了转移发生的条件。
状态图可以帮助开发人员更好地理解和分析系统中的状态以及状态转移,从而推断系统的行为。状态图适用于描述对象在不同时间点处于不同状态的行为,用于描述系统中的实体和他们对外部事件的响应。应用场景非常广泛,如电子系统、控制系统、嵌入式系统、网络系统等。
总之,状态图是UML中的一个重要工具,能够帮助开发人员更好的理解,规划和优化软件系统的状态,从而提高软件系统的设计和开发效率。