OOA和OOD的区别

OOA:Object Oriented Analysis 面向对象分析方法
OOD:Object Oriented Design 面向对象设计1)OOA将现实世界中的实体抽象为问题对象,并构造问题域中的系统需求模型;OOD将 问题对象转化为解域中的类并在解域中构造出问题的解。 2)OOA侧重于用户需求的分析和对问题域的理解,分析人员关心的是系统结构及对象间 的关系;OOD则侧重于系统的实现,设计人员关心的是对象的行为及其实现。 3)OOA标识了一组对象,并通过其相互作用来刻划系统,该阶段的工作与程序设计语言 无关;OOD定义了一组类,并设计出系统的实现蓝图,概要设计与程序设计语言无关,但详细 设计则与之有比较密切的联系。 4)OOA识别的对象是对客观世界实体的抽象,标识对象的准则是:该对象的引入是否有助于对问题域的理解;OOD中构造类的准则是:该类的构造是否可行,是否有效地实现了抽象 数据类型,是否有助于系统的实现和提高软件质量。5)两个阶段都没有提及系统对象,但原因不同。在OOA阶段,分析与实现无关,分析所涉 及的范围与解域无关,系统对象自然不用考虑。OOD建立的对象模型本身就是要设计的软件 系统,对系统对象的考虑是隐含的。 6)组装结构和分类结构在两个阶段所起的作用不同。在OOA阶段,它们的引入主要是为 了理解问题;而在OOD阶段,它们的引入则主要是针对软件的构造和实现。分类结构通过继 承机制来实现,因而代码得到了有效地复用;组装结构则将一些类组合在一起构成较大的软件 构件。 7)OOA并没有考虑对象的产生问题,当其对应的实体在现实世界中出现时,它也就在问 题域中产生了。OOA也不考虑对象属性的取值和服务算法的实现。而在OOD阶段这些问题 都必须详细考虑。 8)OOD涉及到重载问题;而OOA没有考虑,因为考虑过多的实现细节对理解问题和分 析用户需求没有多大帮助。

OOP:Object Oriented Programming 面向对象的程序设计

所谓“对象”在显式支持面向对象的语言中,一般是指类在内存中装载的实例,具有相关的成员变量和成员函数(也称为:方法)。面向对象的程序设计完全不同于传统的面向过程程序设计,它大大地降低了软件开发的难度,使编程就像搭积木一样简单,是当今电脑编程的一股势不可挡的潮流。
OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。OOP 主要有以下的概念和组件:
组件 - 数据和功能一起在运行着的计算机程序中形成的单元,组件在 OOP 计算机程序中是模块和结构化的基础。
抽象性 - 程序有能力忽略正在处理中信息的某些方面,即对信息主要方面关注的能力。
封装 - 也叫做信息封装:确保组件不会以不可预期的方式改变其它组件的内部状态;只有在那些提供了内部状态改变方法的组件中,才可以访问其内部状态。每类组件都提供了一个与其它组件联系的接口,并规定了其它组件进行调用的方法。
多态性 - 组件的引用和类集会涉及到其它许多不同类型的组件,而且引用组件所产生的结果得依据实际调用的类型。
继承性 - 允许在现存的组件基础上创建子类组件,这统一并增强了多态性和封装性。典型地来说就是用类来对组件进行分组,而且还可以定义新类为现存的类的扩展,这样就可以将类组织成树形或网状结构,这体现了动作的通用性。
由于抽象性、封装性、重用性以及便于使用等方面的原因,以组件为基础的编程在脚本语言中已经变得特别流行。Python 和 Ruby 是最近才出现的语言,在开发时完全采用了 OOP 的思想,而流行的 Perl 脚本语言从版本5开始也慢慢地加入了新的面向对象的功能组件。用组件代替“现实”上的实体成为 JavaScript(ECMAScript) 得以流行的原因,有论证表明对组件进行适当的组合就可以在英特网上代替 HTML 和 XML 的文档对象模型(DOM)。

举个简单例子分析三者(直接看这里浅显易懂)

引来对ooa,ood,oop的理解;
分析师拿到了所有来自客户的需求了;了解需求,分析需求,分析技术实现等,得出一个结论:假设要在这里修条隧道;于是分析师,系统分析师,架构设计师出现了,他们干的工作就分析出来一个方案,即项目需求,他们的身份就是OOA了。OOA是Object-Oriented Analysis(面向对象分析)分析师们分析结果出来后,形成了最早的需求模型;可能是一个草图,一张可行性分析XX报告;设计师们拿到这个模型进行细化,模块化,定义所有的细节,也就是详图,或是详细的需求分析规格书了,在这里,可能会有隧道的位置,长度,宽度,高度,容量,光线,材料,设备,电子眼,安全等,这里就是具体的需求文档了。设计师的设计工作完成了,他们就是OOD。OOD是Object Oriented Design(面向对象设计)OOP就是施工队了,他们按照设计图的要求完成隧道工程,包括质量,容量,安全等测试,也就是完成项目的实际操作部分,在项目里就是coding的工作和testing的工作。到此为止,隧道就完成了,駕駛員也可以说成是testing的一员,他们进行体验,体验完了,没问题,oop的工作也就结束了,我们可以收工了。OOP是Object Oriented Programming (面象对象程序设计)

OOD, OOA和OOP相关推荐

  1. iOS 开发之 OOA (面向对象分析) OOD (面向对象设计) OOP (面向对象编程)

    OOA OOA 基本概念 OOA 全称 Object-Oriented Analysis 面向对象分析 指的是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题.OOA 与结构 ...

  2. OOD面向对象设计浅谈

    來源:http://dev.csdn.net/htmls/59/59377.html OOD面向对象设计浅谈 前言 OOD指面向对象设计,在软件设计生命周期中发生于OOA之后期或者之后,OOA与OOD ...

  3. Python设计模式面向对象编程

    前言 本篇文章是基于极客时间王争的<设计模式之美>做的总结和自己的理解.   说到面向对象编程,作为一个合格的Pythoner,可以说信手拈来.毕竟在Python里"万物都是对象 ...

  4. 软件开发环境-工具集

    软件开发环境中的工具可包括:支持特定过程模型和开发方法的工具,如支持瀑布模型及数据流方法的分析工具.设计工具.编码工具.测试工具.维护工具,支持面向对象方法的OOA工具.OOD工具和OOP工具等:独立 ...

  5. 【吐血推荐】领域驱动设计学习输出

    一.Hello DDD 刚开始接触学习「DDD - 领域驱动」的时候,我被各种新颖的概念所吸引:「领域」.「领域驱动」.「子域」.「聚合」.「聚合根」.「值对象」.「通用语言」.....总之一大堆有关 ...

  6. 论面向对象方法与软件复用关系-z

    1.软件复用的特点和现状 软件复用就是将已有的软件成分用于构造新的软件系统.可以被复用的软件成分一般称作可复用构件,无论对可复用构件原封不动地使用还是作适当的修改后再使用,只要是用来构造新软件,则都可 ...

  7. 学android开发,入门语言JAVA知识点

    Android是一种以Linux为基础的开源码操作系统,主要使用于便携设备,而linux是用c语言和少量汇编语言写成的,如果你想研究Android,就去学java语言吧. Android开发入门教程  ...

  8. OOAD理论知识小结

    软件工程基本概念 软件工程三要素: 方法:完成软件开发的各项任务的技术方法,为软件开发提供 "如何做" 的技术 工具:为运用方法而提供的自动的或半自动的软件工程的支撑环境 过程:为 ...

  9. php教育网站设计案例_课程教学网站的设计与实现(MySQL)(含录像)

    课程教学网站的设计与实现(MySQL)(含录像)(开题报告,毕业论文17000字,程序代码,MySQL数据库)摘 要 随着Internet技术的发展,人们的学习生活已经离不开网络.未来社会人们的生活和 ...

最新文章

  1. input按钮中的onclick事件
  2. 18离线帮助文档_VIM学习笔记 Zeavim离线文档查看器
  3. 关于 resgen.exe已退出 代码为 2 的错误问题的解决办法。
  4. linux的11186端口,linux – CentOS – semanage – 删除端口范围
  5. CSS实现div悬浮框的代码(兼容IE6)
  6. 列表推导式 python原理_python之列表推导式
  7. Python 3.9 正式版要来了,会有哪些新特性?
  8. html5自定义组件样式,Taro 自定义组件样式不生效及解决方案
  9. java功能模块_Java 14功能
  10. JavaScript正则表达式之分组匹配 / 反向引用
  11. Android 代码关于重构的一点体会
  12. ListView优化的
  13. 附件文件超过了服务器的大小,Exchange 2010修改附件大小限制
  14. RecycleView多布局的实现
  15. Ubuntu WPS字体缺失
  16. 企业快速构建可落地的IT服务管理体系的五大关键点
  17. 公司注销代理合同模板
  18. 计算机怎么转到超级用户,电脑系统管理员权限怎么设置为超级管理员权限
  19. 数据结构和算法基础(4)——树
  20. 学习C++在windows下窗口应用程序开发(一)

热门文章

  1. ar测量距离android,精度惊人!使用iPhone AR功能测量距离
  2. java毕业生设计二手车交易市场网站计算机源码+系统+mysql+调试部署+lw
  3. 每条跑道背后,可能都有一个胖子~
  4. Q群机器人--C语言零基础也能拥有
  5. Python+Selenium,实现贴吧自动发帖
  6. 升级版的超低功耗2.4G SI24R2F+ 有何优势?
  7. ImageNet 1k and 22k
  8. Inception v1~v4和Inception-ResNet v1~v2总结
  9. 对“基础算法(LeetCode)刻意练习活动”的复盘
  10. python建筑设计运用_传统建筑设计在现代建筑设计的运用