面向对象软件开发方法及UML一览

来源:互联网 发布:占座 知乎 编辑:程序博客网 时间:2024/05/08 14:34

面向对象软件开发方法及UML一览

引言

 

从大学开始就接触UML,但是总感觉使用起来畏手畏脚。最近,通过阅读大量的书籍及网上的文章,总算有了一点领悟,写下此文章,和大家分享一下。

通过这篇文章,我想表达的观点:

1.     学习UML要结合软件开发过程

2.     UML即可用于抽象的图,也可用于具体的图。从业务建模阶段的图到实现阶段的图是一个从抽象到具体的过程。比如,抽象阶段的类图中的类,可以只有一个类名。到了实现阶段,才加上属性,加上方法。抽象阶段的序列图中的消息,可以自由一个消息名称,到了实现阶段,才会加上消息参数、返回值等。

 

正文

 

软件开发方法演变

我们开发软件是为了解决现实问题,所以我们软件开发过程中,需要把现实问题转化成计算机能处理的二进制指令和数据。

一个现实问题如何转变成计算机能懂的二进制指令及数据,从而由计算机帮助解决?

现实问题一般是以人理解的方式来描述,而二进制指令及数据是计算机能理解的,所以如何把以人理解方式描述的问题转化为计算机能理解的方式。

 

从计算机诞生到现在,计算机科学家做了很多工作来降低这个转化的难度。

在计算机诞生之初,对于现实问题(当时的问题侧重于计算类型的问题):

  1. 科学家们用机器语言直接书写程序,这是一个非常可怕的工作。
  2. 之后科学家发明了汇编语言,汇编语言是符号化的机器语言,这在一定程度上减轻了书写程序的劳动强度。但是学过计算机的人都知道,用汇编语言写程序也是一件很不容易的事情。
  3. 再后来,随着编译器技术的发展,人们可以用高级语言来书写程序。比起汇编程序来,高级语言书写的程序更容易让人理解。

 

有了高级语言,人们编写程序更加容易了,但还有一个问题?如何把现实问题转化成高级语言书写的程序呢?

 

问这个问题,有的同学会觉得不以为然:我是编程高手,会写程序就一切OK了,想那么多干吗?

 

可以用这样一个类比来解释。我们都会写字,但是我们有多少人能写的出好文章。会写字,但是如果没有一定的功底、文采、语言组织方式,仍然写不出好的文章。作家们在准备创作时,也会花时间进行构思。

 

现在要把现实问题转化成高级语言程序,也要遵循一定的方式、方法,也需要计划、构思才能写出有价值的程序。

 

一开始,人们采用面向过程的分析方法,一步一步的把问题转化成程序。

 

面向过程的分析方法侧重于算法+数据,先确定数据,然后确定处理数据的算法,这个方式更接近于计算机的工作方式。计算机的工作方式就是CPU不断的读取指令,然后指令操作寄存器或内存中的数据,指令就代表了算法。

 

所以面向过程的方法较之于我们要重点说明的面向对象的方法更接近于计算机的工作方式,而不是与现实世界接近。

 

面向对象的方法将程序理解为是由一个个对象组成的,而对象又是数据+方法。我们的世界不正是由一个个个体组成的嘛!每一个个体就是一个对象。所以面向对象的方法更接近于现实世界本来的面目。所以用这个方法来把现实问题转化为程序是最恰当不过的。

 

面向对象分析与设计可以有不同的过程,可以把这里的"过程"理解为方法,不管这些过程、方法有什么不同,各有各的什么特点,他们都是面向对象分析与设计的一种,都是为了把现实问题通过一定的方法转换成面向对象编程语言的程序。

 

常见的面向对象开发方法有
1. RUP
2.
敏捷方法,其中又以XP(极限编程)最为常见
3. 瀑布模型
4. 基于构件的开发模型

 

到现在,面向对象编程成为主流的编程方式,但是从现实问题到用面向对象编程语言书写的程序,这中间仍然有很多工作要做。未来,一定会发展出一套技术,使计算机能够直处理用人类语言描述的问题。现在苹果公司的Siri就已经具有这方面功能,虽然还很弱。

 

模型

  1. 什么是模型
    1. 模型是对现实世界的形状、状态行为的抽象模拟和简化,模型提供了系统的骨架和蓝图
  2. 为什么要有模型?
    1. 交流
    2. 应对变化
  3. 例如:
    1. 软件开发过程中,各类人员间通过模型来交流
      1. 对系统用户而言,软件的开发模型向他们描述了软件开发者对软件系统需求的理解.让系统用户查看软件对象模型并且找到其中的问题,可以使开发者不至于从一开始就发生错误.
      2. 对软件开发而言,软件的对象模型有助于他们对软件的需求以及系统的架构和功能进行沟通.
      3. 对软件的维护和技术支持者而言,在软件系统开始运行后的相当长的一段时间内,软件的对象模型能够帮助他们理解程序的架构和功能,迅速地对软件所出现的问题进行修复.
    2. 软件开发过程中,通过模型,应对不断出现的变化,比如需求变化,设计变化,人员变化。
      1. 当需求、设计变化时,可以基于原来的设计思考如何实现新的要求
      2. 让新进的开发人员,迅速了解系统

UML -- 统一建模语言

  1. 为什么说是"语言"
    语言是用来表达思想的,思想表达出来之后,就可以进行交流。

    UML可以表达 、记载、传承 软件设计思想,所以它是一门语言。
  2. 为什么说是"建模"
    1. 每个行业都有其建模或者说设计工具,比如建筑行业的设计图纸,建筑模型。电子行业的电路图。
    2. 面向对象软件开发领域,我们所关注的是对象、对象间的关系、对象间的通讯、对象的状态。UML所定义的各类图,非常合适的能够表达出上述这些,所以能够用来对软件进行表征,从而反映了软件的各个方面。
    3. UML不光适合对软件进行建模,其实只要是涉及到流程、设计到有参与流程的对象,这样的系统都适合用UML来对其进行建模。
  3. 为什么说是"统一",我们用UML的活动图来表达一下UML的诞生,大家就会明白。

 

RUP(统一软件开发过程)

RUP已成为一种流行的构造面向对象系统的软件开发过程。下面介绍RUP中,业务建模、需求、设计、实现和测试这几个阶段中使用UML的哪些图进行建模。

  1. 业务建模
    1. 采用UML的对象图和类图表示目标软件系统所基于的的应用领域中的概念和概念间的关系。
    2. 这些相互关联的概念构成了领域模型。
      1. 领域模型一方面可以帮助软件项目组理解业务背景,与业务专家进行有效沟通;
      2. 另一方面,随着软件开发阶段的不断推进,领域模型将成为软件结构的主要基础。
    3. 如果领域中含有明显的流程处理部分,可以考虑利用UML的活动图来刻画领域中的工作流,并标识业务流程中的并发、同步等特征。
  2. 分析
    1. UML的的用例视图以用户为中心,对系统的功能性需求进行建模。
    2. 通过识别位于系统边界之外的参与者以及参与者的目标,来确定系统要为用户提供哪些功能,并用用例进行描述。
    3. 可以用文本形式或UML活动图描述用例,利用UML用例图表示参与者与用例之间、用例与用例之间的关系。
    4. 采用UML顺序图图形描述参与者和系统之间的系统事件。利用系统操作契约刻画系统事件的发生引起系统内部状态的变化。
    5. 如果目标系统比较庞大,用例较多,则可以用包来管理和组织这些用例,将关系密切的用例组织到同一个包里,用UML包图刻画这些包及其关系。
  3. 设计
    1. 把分析阶段的结果扩展成技术解决方案,包括软件体系结构设计和用力实现的设计。
    2. 采用UML包图设计软件体系结构,刻画系统的分层、分块思路。
    3. 采用UML协作图或顺序图寻找参与用例实现的类及其职责,这些类一部分来自领域模型,另一部分是软件实现新加入的类,它们为软件提供基础服务,如负责数据库持久化的类。
    4. 用UML类图描述这些类及其关系,这些类属于体系结构的不同的包中。
    5. 用UML状态图描述那些具有复杂生命周期行为的类。
    6. 用UML活动图描述复杂的算法过程和有多个对象参与的业务处理过程,活动图尤其合适描述过程中的并发和同步。
    7. 用UML构件图描述软件代码的静态结构与管理。
    8. 用UML部署图描述硬件的拓扑结构以及软件和硬件的映射问题。
  4. 实现
    1. 把设计得到的类转换成某种面向对象程序设计语言的代码。
  5. 测试
    1. 不通的测试小组使用不同的UML图作为他们工作的基础
    2. 单元测试使用类图和类的规格说明
    3. 集成测试典型地使用构件图和协作图
    4. 确认测试使用用例图和用例文本描述的来确认系统的行为是否符合这些图中的定义。

写在最后

至此,我们介绍软件开发技术的演进历史,介绍了模型的作用,介绍UML,那么三者是一个什么关系呢?总结一下:面向对象软件开发过程中,会产生一系列表征系统的模型,我们使用UML来表达这些模型。

我向大家推荐我在网上找到的两个ppt,这两个ppt非常好,能够帮助你对UML及分析设计阶段的理解。感谢这两个ppt的作者。

UML基础教程

软件工程:UML建模之分析模型和设计模型 

 

 

 

 

原创粉丝点击