首页 > 其他分享 >面向对象建模

面向对象建模

时间:2023-12-07 19:13:40浏览次数:26  
标签:用例 对象 系统 建模 状态机 面向对象 组件 UML

一、UML的概述
UML是一种定义良好、易于表达、功能强大、普遍适用的建模语言。 作为大众所接受的标准建模语言,UML融入了软件工程领域的新思想、新方法、新技术。
UML的作用域,不仅支持面向对象的分析与设计,而且支持从需求分析开始的软件开发的全过程。
二、UML的特点和用途
UML对系统的逻辑模型和实现模型都能清晰表示,可用于复杂软件系统建模
统一标准:UML统一了Booch、OMT、OOSE等方法中的基本概念,已成为OMG的正式标准,提供了标准的面向对象的模型元素的定义和表示。
面向对象:UML还吸取了面向对象技术领域中其它流派的长处,其中。也包括非面向对象方法的影响。UML符号表示,考虑了各种方法的图形表示,删掉了大量易引起混乱的、多余的、极少使用的符号,添加了一些新符号。
新版增加:在UML标准中,新加了模板(Stereotypes)、职责(Responsibilities)、扩展机制(Extensibility mechanisms)、线程(Threads)、过程(Processes)、分布式(Distribution)、并发(Concurrency)、模式(Patterns)、合作(Collaborations)、活动图(Activity diagram)等新概念,并清晰地区分类型(Type)、类(Class)和实例(Instance)、细化(Refinement)、接口(Interfaces)和组件(Components)等概念。
立于过程:UML作为建模语言,不依赖特定的程序设计,独立于开发过程。

三、UML结构的划分 (View视图)
用户视图:以用户的观点表示系统的目标,它是所有视图的核心,该视图描述系统的需求 ;
结构视图:表示系统的静态行为,描述系统的静态元素,如包、类与对象,以及它们之间的关系;
行为视图:表示系统的动态行为,描述系统的组成元素如对象在系统运行时的交互关系 ;
实现视图:表示系统中逻辑元素的分布,描述系统中的文件以及它们之间的关系;
环境视图:表示系统中物理元素的分布,描述系统中的硬件设备以及它们之间的关系;
1,用例图
用例图用于描述系统提供的系列功能,而每个用例则代表系统的一个功能模块。用例图的主要目的是帮助开发团队以一种可视化的方式理解系统的需求功能,用例图对系统的实现不做任何说明,仅仅是系统功能的描述。
用例图包括:用例、角色、角色和用例之间的关系,以及系统内用例之间的关系。用例图一般表示出用例的组织关系——要么是整个系统的全部用例,要么是完成具体功能的一组用例。

 

用例图通常用于表达系统或者系统范畴的高级功能。可以很容易的看出该系统所提供的功能。
用例图主要在需求分析阶段使用,主要用于描述系统实现的功能,方便与客户交流,保证系统需求的无二性,用例图表示系统外观,不要指望用例图和系统的各个类之间有任何联系。不要把用例做的过多导致难以理解。
2,类图
类图是最古老、功能最丰富、使用最广泛的UML图。类图表示系统中应该包含哪些实体,各实体之间如何关联;换句话说,它显示了系统的静态结构,类图可用于表示逻辑类,逻辑类通常就是业务人员所谈及的事务种类。
类在类图上使用包含三部分的矩阵来描述,最上面的部分是名称,中间部分是属性,最下面的部分是方法。
类图除可以表示实体的静态内部结构之外,还可以表示实体之间的相互关系。类之间有三种基本关系:关联(包括聚合、组合)、泛化(与继承同一个概念)、依赖。
1,关联
客观世界中的两个实体之间是存在千丝万缕的关系,当把这两个实体抽象到软件系统中时,两个类之间必然存在关联关系。关联具有一定方向性:如果从一个类单方向地访问另一个类,则被称为单向关联;如果两个类可以互相访问对象,则被称为双向关联。一个对象能访问关联对象的数目被称为多重性。例如,建立学生和老师之间的单向关联,则可以从学生访问老师,但从老师不能访问学生。关联用一条实线来表示,带箭头的实线表示单向关联。
很多时候,关联和属性很像,关联和属性的关键区别在于:类里的某个属性引用到另外一个实体时,则变成了关联。
关联关系包括两种特例:聚合和组合,它们都有部分和整体的关系,但通常认为组合比聚合更加严格。聚合(当某个实体聚合成另一个实体时,该实体还可以是另一个实体的部分。)例如,学生既可以是篮球俱乐部的成员,也可以是书法俱乐部的成员;组合(当某个实体组合成另外一个实体时,该实体则不能同时是一个实体的部分。)例如,学生的胳膊不能是老师胳膊;
聚合体现的是整体与部分的关系,即has-a的关系。此时整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。比如计算机与CPU、公司与员工的关系等,比如一个航母编队包括海空母舰、驱护舰艇、舰载飞机及核动力攻击潜艇等。表现在代码层面,和关联关系是一致的,只能从语义级别来区分。聚合关系以空心菱形加实线箭头表示。
组合体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合。它同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束,比如人和人的大脑。表现在代码层面,和关联关系是一致的,只能从语义级别来区分。组合关系以实心菱形加实线箭头表示。
2,泛化(继承)
泛化与继承是同一个概念,都是指子类是一种特殊的父类,类与类之间的继承关系是非常普遍的,继承关系使用带空心三角形的实线表示。
类实现接口可视为一种特殊的继承,实现用带空心三角形的虚线表示。
3,依赖
如果一个类的改动会导致另一个类的改动,则称两个类之间存在依赖。依赖关系使用带箭头的虚线表示,其中箭头指向被依赖的实体。依赖的常见可能原因如下:
改动的类将消息发给另一个类。
改动的类以另一个类作为数据部分。
改动的类以另一个类作为操作参数。
通常而言,依赖是单向的,尤其是当数据表现和数据模型分开设计时,数据表现依赖于数据模型。
3,组件图
对于现代大型应用程序而言,通常不只是单独一个类或单独一组类所能完成的,通常会由一个或多个可部署的组件组成。对Java程序而言,可复用的组件通常打包成一个JAR、WAR等文件。
组件图提供系统的物理视图,它的用途是显示系统中粗粒度对其他软件组件(例如,函数库)的依赖关系。组件图可以在一个非常高的层次上显示,仅显示系统中粗粒度的组件,也可以在组件包层次上显示。
组件图通常包含组件、接口和Port等图元。组件的接口表示它能对外提供的服务规范,这个接口通常有两种表现形式:
用一条实线连接到组件边界的圆圈表示。
使用位于组件内部的圆圈表示。
组件除了可以对外提供接口外,组件还可能依赖于某个接口,组件依赖于某个接口使用一条带半圆的实线来表示。
4,部署图
现在的软件工程早已超出早期的单机程序,整个软件系统可能是跨国家、跨地区的分布式软件,软件的不同部分可能需要部署在不同的地方,不同的平台之上。部署图用于描述软件系统如何部署到硬件环境中,它的用途是显示软件系统不同的组件将在何处物理运行,以及它们将如何彼此通信。因为部署图是对物理运行情况进行建模,所以系统的生产人员就可以很好地利用这种图来安装、部署软件系统。
部署图中的符号包括组件图中所使用的符号元素,另外增加了节点的概念:节点是各种计算资源的通用名称,主要包括处理器和设备两种类型,两者的区别是处理器能够执行程序的硬件,而设备是一种不具备计算能力的硬件构件。UML使用三维立方体来表示节点。
5,顺序图
顺序图显示具体用例(或者是用例的一部分)的详细流程,并且显示流程中不同对象之间的调用关系,同时还可以很详细地显示对不同对象的不同调用。顺序图描述了对象之间的交互(顺序图和通信图都被称为交互图),重点在于描述消息极其时间顺序。
顺序图有两个维度:
垂直维度:以发生的时间顺序显示消息/调用的序列。
水平维度:显示消息被发送到的对象实例。
顺序图的关键在于对象之间的消息,对象之间的信息传递就是所谓的消息发送,消息通常表现为对象调用另一个对象的方法或方法的返回值,发送者和接收者之间的箭头表示消息信息。
顺序图与通信图:通信图同样可以准确地描述对象之间的交互关系,但通信图没有精确的时间概念。一般来说,通信图所能描述的内容,顺序图都可以描述,但顺序图比通信图多了时间概念。
6,活动图
活动图和状态机图都被称为演化图,其区别于联系:
活动图:用于描述用例内部的活动或方法的流程,如果除去活动图中的并行活动描述,它就变成了流程图。
状态机图:描述某一对象生命周期中需要关注的不同状态,并会详细描述刺激对象状态改变的事件,以对象状态改变时采取的动作。
演化图的5个要素:
状态:状态是对象响应事件后的不同面貌,状态是某个时间段对象所保持的稳定态,目前的软件计算机都是基于稳定态的,对象的稳定态是对象的固有特征,一个对象的状态一般是有限的。有限状态的对象是容易计算的,对象的状态越多,对象的状态迁移越复杂,对象状态可以想象成对象演化过程中的快照。
事件:来自对象外界的刺激,通常的形式是消息的传递,只是相对对象而言发生了事件。事件是对象状态发生改变的原动力。
动作:动作是对象针对所发生事件所做的处理,实际上通常表现为某个方法被执行。
活动:活动是动作激发的后续系统行为。
条件:条件是指事件发生所需要具备的条件。
对于激发对象状态改变的事件,通常有两种:
内部事件:从系统内部激发的事件,一个对象的方法(动作)调用(通过事件激活)另一个对象的方法。
外部事件:从系统边界外激发的事件,例如用户的鼠标、键盘动作。
活动图主要用于描述过程原理、业务逻辑以及工作流技术。活动图非常类似于传统的流程图,它也使用圆角矩形表示活动,使用带箭头的实线表示事件;区别是活动图支持并发。
如果将上图活动图的两个分支分开,每支就是一个传统的流程图,每个活动依次向下,遇到条件分支使用菱形框来表示条件。与传统流程图不同的是,活动图可以使用并行分支分多条并行活动。
绘制活动图时以活动为中心,整个活动图只有一个开始活动,可以有多个结束活动。活动图需要将并行活动和串行活动分离,遇到分支和循环时最好像传统流程图那样将分支、循环条件明确表示。活动图的最大优点在于支持并行行为,并行对于工作流建模和过程建模非常重要。所以有了并行,因此需要进行同步,同步通过汇合来指明。
7,状态机图
状态机图表示某个对象所处的不同状态和该状态的状态转换信息。实际上,通常只对“感兴趣的”对象绘制状态机图。也就是说,在系统活动期间具有三个或更多潜在状态的对象才需要考虑使用状态机图进行描述。
状态机图的符号集包括:
初始状态,使用实心圆来绘制。
状态之间的转换,使用具有带箭头的线段来绘制。
状态,使用圆角矩形来绘制。
判断点,使用空心圆来控制。
一个或多个终止点,使用内部包含实心圆的圆来绘制。
绘制状态图时应该保证对象只有一个初始状态,可以有多个终结状态。状态要表示对象的关键快照,有更重要的意义,无关紧要的状态则无须考虑,绘制状态机图时事件和方法要明确。
状态机图擅长表现单个对象的胯用例行为,对于多个对象的交互行为应该考虑采用顺序图,不要对系统的每个对象都画状态机图,只对真正需要关心的对象才绘制状态图。

 

标签:用例,对象,系统,建模,状态机,面向对象,组件,UML
From: https://www.cnblogs.com/wllovelmbforever/p/17883737.html

相关文章

  • UML建模:深入理解软件设计的语言
    统一建模语言(UnifiedModelingLanguage,简称UML)是一种用于软件开发和系统设计的标准建模语言。它提供了一套图形化的工具,帮助软件开发者更好地理解、设计和交流复杂系统。在本文中,我们将深入探讨UML建模的重要性、主要图表类型以及如何有效应用UML来提高软件开发过程的质量。UML......
  • 面向对象建模语言UML
    自从面向对象编程语言在软件开发中成为主流之后,遵循面向对象技术特点的软件设计工作,也一并发展了起来。首先要提出一个问题,就是设计的工作是要做什么?它包括的范围其实是很广泛的,从搜集用户需求,进行业务分析,到绘制系统流程图等。可以说,在动手编写代码之前,程序员要做的都属于设计......
  • 软件需求与分析课堂测试之九-面向对象设计与分析
    软件需求与分析课堂测试之九-面向对象设计与分析 阅读下列图和文字材料,回答问题1至问题3。某物品拍卖网站为参与者提供物品拍卖平台,组织拍卖过程,提供在线或线下交易服务。网站的主要功能描述如下:(1)拍卖参与者分为个人参与者和团体参与者两种,不同的团体也可以组成新的团体参与......
  • 软件需求与分析课堂测试之九-面向对象设计与分析
    软件需求与分析课堂测试之九-面向对象设计与分析           阅读下列图和文字材料,回答问题1至问题3。某物品拍卖网站为参与者提供物品拍卖平台,组织拍卖过程,提供在线或线下交易服务。网站的主要功能描述如下:(1)拍卖参与者分为个人参与者和团体参与者两种,不同......
  • 【愚公系列】2023年12月 面向对象设计原则(三)-里氏替换原则(Liskov Substitution Pri
    ......
  • 什么是数据建模
    数据建模和数据模型的含义,我们可以分四个部分来了解:1、业务模型2、构建表关系/表链接3、数学模型4、算法模型     1、业务模型重点是懂业务,即了解业务的整个过程,A-B-C大部分是业务模型,指标体系大多数的本质也是在反映业务本身,也可以归为业务模型我们曾经有一支优秀......
  • 1-2 图片数据建模流程范例
    0.配置importos#mac系统上pytorch和matplotlib在jupyter中同时跑需要更改环境变量#os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"!pipinstalltorchmetricsimporttorchimporttorchvisionimporttorchkerasimporttorchmetricsprint('torch',torch......
  • 新建模块&新建用户表&修改代码生成器文件&新建菜单
    1.新建模块打开IDEA在项目结构中新建rome-hotel的一个springboot项目,什么依赖都不需要 在pom.xml文件中修改坐标,引用父坐标 在父级pom文件中将模块加入 在rome-admin中的pom文件中加入admin-hotel,这样就能带动这个模块启动 将包名修改成和rome-admin一样 再创建其......
  • Simulink建模与仿真(10)-Simulink混合系统模型及表示
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。......
  • 1-1 结构化数据建模流程范例
    0.环境配置importos#mac系统上pytorch和matplotlib在jupyter中同时跑需要更改环境变量#os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"!pipinstall-Utorchkeras-ihttps://pypi.douban.com/simple!pipinstallpandas-ihttps://pypi.douban.com/simple!pipins......