來源:http://blog.csdn.net/vipxiaotian/archive/2007/07/13/1689863.aspx

面向对象分析方法(Object-Oriented Analysis,OOA),是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题。OOA与结构化分析有较大的区别。OOA所强调的是在系统调查资料的基础上,针对OO方法所需要的素材进行的归类分析和整理,而不是对管理业务现状和方法的分析。

OOA(面向对象的分析)模型由5个层次(主题层、对象类层、结构层、属性层和服务层)和5个活动(标识对象类、标识结构、定义主题、定义属性和定义服务)组成。在这种方法中定义了两种对象类之间的结构,一种称为分类结构,一种称为组装结构。分类结构就是所谓的一般与特殊的关系。组装结构则反映了对象之间的整体与部分的关系。

OOA在定义属性的同时,要识别实例连接。实例连接是一个实例与另一个实例的映射关系。

OOA在定义服务的同时要识别消息连接。当一个对象需要向另一对象发送消息时,它们之间就存在消息连接。

OOA 中的5个层次和5个活动继续贯穿在OOD(画向对象的设计)过程中。OOD模型由4个部分组成。它们分别是设计问题域部分、设计人机交互部分、设计任务管理部分和设计数据管理部分。

一、OOA的主要原则

(1)抽象:从许多事物中舍弃个别的、非本质的特征,抽取共同的、本质性的特征,就叫作抽象。抽象是形成概念的必须手段。

抽象原则有两方面的意义:第一,尽管问题域中的事物是很复杂的,但是分析员并不需要了解和描述它们的一切,只需要分析研究其中与系统目标有关的事物及其本质性特征。第二,通过舍弃个体事物在细节上的差异,抽取其共同特征而得到一批事物的抽象概念。

抽象是面向对象方法中使用最为广泛的原则。抽象原则包括过程抽象和数据抽象两个方面。

过程抽象是指,任何一个完成确定功能的操作序列,其使用者都可以把它看作一个单一的实体,尽管实际上它可能是由一系列更低级的操作完成的。

数据抽象是根据施加于数据之上的操作来定义数据类型,并限定数据的值只能由这些操作来修改和观察。数据抽象是OOA的核心原则。它强调把数据(属性)和操作(服务)结合为一个不可分的系统单位(即对象),对象的外部只需要知道它做什么,而不必知道它如何做。

(2)封装就是把对象的属性和服务结合为一个不可分的系统单位,并尽可能隐蔽对象的内部细节。

(3)继承:特殊类的对象拥有的其一般类的全部属性与服务,称作特殊类对一般类的继承。

在OOA中运用继承原则,就是在每个由一般类和特殊类形成的一般—特殊结构中,把一般类的对象实例和所有特殊类的对象实例都共同具有的属性和服务,一次性地在一般类中进行显式的定义。在特殊类中不再重复地定义一般类中已定义的东西,但是在语义上,特殊类却自动地、隐含地拥有它的一般类(以及所有更上层的一般类)中定义的全部属性和服务。继承原则的好处是:使系统模型比较简练也比较清晰。

(4)分类:就是把具有相同属性和服务的对象划分为一类,用类作为这些对象的抽象描述。分类原则实际上是抽象原则运用于对象描述时的一种表现形式。

(5)聚合:又称组装,其原则是:把一个复杂的事物看成若干比较简单的事物的组装体,从而简化对复杂事物的描述。

(6)关联:是人类思考问题时经常运用的思想方法:通过一个事物联想到另外的事物。能使人发生联想的原因是事物之间确实存在着某些联系。

(7)消息通信:这一原则要求对象之间只能通过消息进行通信,而不允许在对象之外直接地存取对象内部的属性。通过消息进行通信是由于封装原则而引起的。在OOA中要求用消息连接表示出对象之间的动态联系。

(8)粒度控制:一般来讲,人在面对一个复杂的问题域时,不可能在同一时刻既能纵观全局,又能洞察秋毫。因此需要控制自己的视野:考虑全局时,注意其大的组成部分,暂时不详察每一部分的具体的细节;考虑某部分的细节时则暂时撇开其余的部分。这就是粒度控制原则。

(9)行为分析:现实世界中事物的行为是复杂的。由大量的事物所构成的问题域中各种行为往往相互依赖、相互交织。
 
二、面向对象分析产生三种分析模型

1、功能模型(即用例模型à作为输入)

2、对象模型:对用例模型进行分析,把系统分解成互相协作的分析类,通过类图/对象图描述对象/对象的属性/对象间的关系,是系统的静态模型

3、动态模型:描述系统的动态行为,通过时序图/协作图描述对象的交互,以揭示对象间如何协作来完成每个具体的用例,单个对象的状态变化/动态行为可以通过状态图来表达

三、OOA的主要优点

(1)加强了对问题域和系统责任的理解;
     (2)改进与分析有关的各类人员之间的交流;
     (3)对需求的变化具有较强的适应性;
     (4)支持软件复用。
     (5)贯穿软件生命周期全过程的一致性。
     (6)实用性;
     (7)有利于用户参与。
 
四、OOA方法的基本步骤
 
      在用OOA具体地分析一个事物时,大致上遵循如下五个基本步骤:
 
      第一步,确定对象和类。这里所说的对象是对数据及其处理方式的抽象,它反映了系统保存和处理现实世界中某些事物的信息的能力。类是多个对象的共同属性和方法集合的描述,它包括如何在一个类中建立一个新对象的描述。
 
      第二步,确定结构(structure)。结构是指问题域的复杂性和连接关系。类成员结构反映了泛化-特化关系,整体-部分结构反映整体和局部之间的关系。
 
      第三步,确定主题(subject)。主题是指事物的总体概貌和总体分析模型。
 
      第四步,确定属性(attribute)。属性就是数据元素,可用来描述对象或分类结构的实例,可在图中给出,并在对象的存储中指定。
 
      第五步,确定方法(method)。方法是在收到消息后必须进行的一些处理方法:方法要在图中定义,并在对象的存储中指定。对于每个对象和结构来说,那些用来增加、修改、删除和选择一个方法本身都是隐含的(虽然它们是要在对象的存储中定义的,但并不在图上给出),而有些则是显示的。

面向对象分析方法(Object-Oriented Analysis,OOA)相关推荐

  1. OO开发思想:面向对象的开发方法(Object oriented,OO)

    面向对象的开发方法(Object oriented,OO)认为是好文章吧,拿来分享一下(转载) 面向对象的开发方法(Object oriented,OO) 从事软件开发的工程 师们常常有这样 的体会: ...

  2. 面向对象编程(Object Oriented Programming)概念总结及延伸(一)

    1.介绍 笔者的梦想是成为一个架构师,但是要成为一个合格的架构师是相当不易的,它既需要丰富的项目经验也需要不断地吸取新的知识,而且在这过程中我们也要不断巩固基础知识.我也注意到了,现在主流的文章大都集 ...

  3. 面向过程(或者叫结构化)分析方法与面向对象分析方法到底区别在哪里?

    AutoSAR入门到精通系列讲解 将从2019年开始更新关于AutoSAR的知识,从入门到精通,博主xyfx和大家一起进步 雪云飞星 ¥29.90 去订阅 简单地说结构化分析方法主要用来分析系统的功能 ...

  4. 面向过程(或者叫结构化)分析方法与面向对象分析方法到底区别在哪里?请根据自己的理解简明扼要的回答。...

    面向过程分析方法有点儿像解数学题,必须要按照顺序一步一步来,如果一步错,则要推翻之后的全部重新开始. 面向对象分析方法则像是画一幅画,把问题分成一个个的对象也就是类,先画人物.再画风景,最后将人物风景 ...

  5. 面向过程(或者叫结构化)分析方法与面向对象分析方法到底区别

    博主选的是老师给出的第一个议题"面向过程(或者叫结构化)分析方法与面向对象分析方法到底区别在哪里?",首先来讨论一下二者的定义. 结构化方法的基本思想是将待解决的问题看作一个系统从 ...

  6. OOA面向对象分析方法

    Object-Oriented Analysis:面向对象分析法 指的是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题.OOA与结构化分析有较大的区别.OOA所强调的是在系 ...

  7. JS面向对象程序设计(OOP:Object Oriented Programming)

    你是如何理解编程语言中的面向对象的? 我们研究JS和使用JS编程本身就是基于面向对象的思想来开发的,JS中的一切内容都可以统称为要研究的"对象",我们按照功能特点把所有内容划分成& ...

  8. 夯实基础,彻底掌握js的核心技术(二):面向对象编程(Object Oriented Programming)

    单例设计模式(Singleton Pattern) 1. 单例模式解决的问题: 表现形式: Var obj = {xxx; xxx, - } 2. 作用: 把描述同一件事物的属性和特征进行" ...

  9. 面向对象数据库(Object Oriented Databases

    前面说几句费话.现在正在从事面向对象数据库在国内的推广工作,如果有兴趣可以与我联系.如果有任何问题可以私信我,也可以到我们网站上 面向对象数据库交流社区 来向我提问,我一定以最快的速度解答. 想把 面 ...

最新文章

  1. 【洛谷】【动态规划/二维背包】P1855 榨取kkksc03
  2. python super 变参数问题(五)
  3. mqtt协议详解_IoT物联网设备上云技术方案详解
  4. jumpserver开源堡垒机部署安装
  5. 算法学习(四)——alphago模型
  6. python乱码怎么解决方法_python中文乱码的解决方法
  7. Excel基础知识(10):多工作簿数据的引用与更新
  8. 卫星遥感数据处理软件SeaDAS
  9. 文献笔记:Plasmonic metagratings for simultaneous determination of Stokes parameters
  10. springboot集成solr实现全局搜索系列
  11. C++Primer 第10章 bind与迭代器
  12. 象棋世家 v6.0a 官方
  13. UKF-MATLAB实现
  14. centos8 解决编译安装 nginx时遇到的报错
  15. linux grub 编辑器,KGRUBEditor: 可视化的 GRUB 编辑器
  16. Qt:QTableView(01) 的用法
  17. 车展背后|车规级芯片知多少?
  18. python文件夹操作指令
  19. Word制作生成html模板替换动态值为占位符使用Java转为pdf文件
  20. 202-基于TI DSP TMS320C6678、Xilinx K7 FPGA XC7K325T的高速数据处理核心板

热门文章

  1. MFC中获取任务栏大小
  2. MFC多线程各种线程用法 .
  3. Android中数据库的一些操作(增删改查)
  4. IOS基础之NSFounation框架的NSDictionary,NSMutableDictionary的使用
  5. IOS开发设置应用程序App启动图片
  6. .net 怎么使用github_如何正确的使用ncnn的Extractor
  7. 响应式中解决图片大小不一样,导致盒子高度不一样的问题
  8. Android开发之动态添加WebView实现进度条标题栏展示效果
  9. 数据结构题及c语言版实验报告排序,数据结构二叉排序树实验报告
  10. 2 数据源配置_SpringBoot 整合Druid与配置数据源监控