OOA

OOA 基本概念

OOA 全称 Object-Oriented Analysis 面向对象分析

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

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

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

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

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

OOA 的主要原则

  • 抽象:从许多食物中舍弃个别的、非本质的特征,抽取共同的、本质性的特征,就叫做抽象。愁乡石形成概念的必须手段。
    抽象原则有两个方面的意义:

    • 1,尽管问题域中的事物是很复杂的,但是分析员并不需要了解和描述它们的一切,只需要分析其中与系统目标有关的事物及其本质性特征;

    • 2,通过舍弃个体事物在细节上的差异,抽取其共同特性而得到一批事物的抽象概念;
      抽象是面向对象方法中使用最为广泛的原则。抽象原则包括过程抽象和数据抽象两个方面。

过程抽象是指,任何一个完成确定功能的操作序列,其使用者都可以把它看做一个单一的实体,尽管实际上它可能是由一系列更低级的操作完成的。
数据抽象是根据施加于数据之上的操作来定义数据类型,并限定数据的值只能由这些操作来修改和观察。数据抽象是 OOA 的核心原则。它强调把数据(属性)和操作(服务)结合为一个不可分的系统单位(即对象),对象的外部只需要知道它做什么,而不必知道它如何做;

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

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

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

  • 分类:

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

  • 聚合:

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

  • 关联:

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

  • 消息通信:

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

  • 粒度控制:

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

  • 行为分析:

显示世界中事物的行为是复杂的。由大量的事物所构成的问题域中各种行为旺旺相互依赖交织;

面向对象分析产生三种模型

  1. 对象模型:

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

  1. 动态模型:

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

  1. 功能模型:

OOA 的主要优点

  1. 加强了对问题域和系统责任的理解;
  2. 改进与分析有关的各类人员之间的交流;
  3. 对需求的变化具有较强的适应性;
  4. 支持软件复用;
  5. 贯穿软件声明周期全过程的一致性;
  6. 实用性;
  7. 有利于用户参与;

OOA 方法的具体步骤

在用 OOA 具体分析一个事物时。大致上遵循如下 5 个基本步骤:

  1. 确定对象和类

这里所说的对象是对数据及其处理方式的抽象,它反映了系统保存和处理现实世界总某些事物的信息能力。类是多个对象的共同属性和方法集合的描述,它包括如何在一个类中建立一个新对象的描述;

  1. 确定结构 structure

结构是指问题域的复杂性和连接关系。类成员结构反映了泛华—特化关系,整体-部分结构反映整体和局部之间的关系;

  1. 确定主题 subject

主题是指事物的总体概貌和总体分析模型;

  1. 确定属性 attribute

属性就是数据元素,可用来描述对象或分类结构的实例,可在图中给出,并在对象的存储中指定;

  1. 确定方法 method

方法是在收到消息后必须进行的一些处理方法:方法要在图中定义,并在对象的存储中指定。对于每个对象和结构来说,那些用来增加、修改、删除和选择一个方法本身都是隐含的(虽然它们是要在对象的存储中定义的,但并不在图上给出),而有些则是显示的;


OOD

OOD 基本概念

OOD 全称 Object-Oriented Design 面向对象设计

OOD 是 OO 方法中一个中间过渡环节。其主要作用是对 OOA 分析的结构作进一步的规范化整理,以便能够被 OOP 面向对象的编程 直接接受。

OOD 是一个软件设计方法,是一种工程化规范。这是毫无疑问的。按照 Bjarne Stroustrup 的说法,OOP 是决定你要的类,给每一个类提供完整的一组操作。
明确地使用继承来表现共同点。由这个定义,我们可以看出 OOD 就是“根据需求决定所需的类、类的操作以及类之间关联的过程”。

OOD 的目标是管理程序内部各部分的相互依赖。为了达到这个目标,OOD 要求将程序分成块,每个块的规模应该小到可以管理的程度,然后分别将各个块隐藏在接口 interface 的后面,让它们只通过接口相互交流。比如说,如果用OOD 的方法类设计一个服务器-客户端 client-server 应用,那么服务器和客户端之间不应该有直接地依赖,而是应该让服务器的接口和客户端的接口相互依赖。

这种依赖关系的转换使得系统的各部分具有了可复用性。还是拿上面那个例子来说,客户端就不必依赖于特定的服务器,所以就可以复用到其他的环境下。如果要复用某一个程序块,只要实现必须的接口就行了。

OOD 是一种解决软件问题的设计范式 paradigm,一种抽象的范式。使用 OOD 这种设计范式,我们可以用对象 object 来表现问题领域 problem domain 的实体,每个对象都有相应的状态和行为。

抽象可以分成很多层次,从非常概括的到非常特殊的都有,而对象可能处于任何一个抽象层次上。另外,彼此不同但又相互关联的对象可以共同构成抽象。只要这些对象之间有相似性,就可以把它们当成同一类的对象类处理。


OOP 基本概念

OOP 全称 Object Oriented Programming 面向对象编程

OOP 是一种实现的方法。在这种方法中,程序被组织成许多组互相协作的对象,每个对象代表某个类的一个实例,而类则属于一个通过继承关系形成的层次结构具体实现。

OOP 的三大特性:

封装:

就是将一个类使用和实现分开,只保留部分接口和方法与外部联系 。

继承:

子类自动继承其父级类中的属性和方法,并可以添加新的属性和方法或者对部分属性和方法进行重写。继承增加了代码的可重用性。

多态:

多个子类中虽然都具有同一个方法,但是这些子类实例化的对象调用这些相同的方法后却可以获得完全不同的结果,多态性增强了软件的灵活性。

iOS 开发之 OOA (面向对象分析) OOD (面向对象设计) OOP (面向对象编程)相关推荐

  1. iOS开发之Objective-C(面试篇)-李飞-专题视频课程

    iOS开发之Objective-C(面试篇)-132人已学习 课程介绍         这个系列,我会选取实际面试过程中会问到的难点问题.几乎都是在面试大公司或者技术要求比较高的公司会问到的问题.希望 ...

  2. iOS开发之Objective-C(基础篇)-李飞-专题视频课程

    iOS开发之Objective-C(基础篇)-232人已学习 课程介绍         该系列课程是iOS开发之Objective-C基础入门视频.课程中会详细的讲解OC语法特点,面向对象的使用,循环 ...

  3. ios开发之OC基础-类和对象

    ios开发之OC基础-类和对象 本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录 ...

  4. (0045) iOS 开发之MBProgressHUD 源码学习

    (0045) iOS 开发之MBProgressHUD 源码学习 第一部分:学习所得和分析线程 1.  学习到了kvo 的使用 和屏幕方向的旋转判断. 2. 如果调起这个 HUD 的方法不是在主线程调 ...

  5. iOS开发之Xcode常用调试技巧总结

    转载自:iOS开发之Xcode常用调试技巧总结 最近在面试,面试过程中问到了一些Xcode常用的调试技巧问题.平常开发过程中用的还挺顺手的,但你要突然让我说,确实一脸懵逼.Debug的技巧很多,比如最 ...

  6. iOS开发之c语言入门教程

    苹果作为移动互联的高端品牌,iOS操作系统也被用户公认为是最好用的移动互联网操作系统.据了解,曾一度拒绝为iOS平台对出浏览器的火狐在今年5月份的时候,他们却食言了.今天,Mozilla宣布iOS版F ...

  7. iOS开发之AVKit框架使用

    2019独角兽企业重金招聘Python工程师标准>>> iOS开发之AVKit框架使用 一.引言 在iOS开发框架中,AVKit是一个非常上层,偏应用的框架,它是基于AVFounda ...

  8. (0016)iOS 开发之Mac上Navicat Premium 创建远程连接和本地连接

    1.下载安装 (百度云盘里面有安装文件和注册机) 链接: https://pan.baidu.com/s/1kVG1k71 密码: mr5g 破解教程看这篇博客:http://blog.csdn.ne ...

  9. 李洪强iOS开发之RunLoop的原理和核心机制

    李洪强iOS开发之RunLoop的原理和核心机制 搞iOS之后一直没有深入研究过RunLoop,非常的惭愧.刚好前一阵子负责性能优化项目,需要利用RunLoop做性能优化和性能检测,趁着这个机会深入研 ...

最新文章

  1. python学习方向-Python学习者的发展方向
  2. svpwm仿真_案例12:三相三线PWM整流仿真建模
  3. java的圆周率_java学习日记,圆周率的打印
  4. 02-go的IDE安装
  5. 56py无锡官方网站2013最新
  6. 自学python要多久-大家觉得自学python多久能学会?
  7. 相平衡计算matlab代码,MATLAB,气液相平衡程序,求帮忙改一下。 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...
  8. 绝地大逃杀服务器维护多少时间,绝地求生4月12日维护到几点/维护多长时间 绝地求生4.12维护什么时候好/能进游戏...
  9. 机器学习与模式识别期末试题回忆
  10. python怎么添加多行注释_python如何注释多行
  11. 上传Android library到JitPack
  12. Android Studio属性动画,Android Studio 三种方式建立动画效果
  13. Java常见面试题大全
  14. Matplotlib:Legend 图例
  15. CBOW与Skip-Gram
  16. CSS3健身男孩平板卧推js特效
  17. 【转】JSON书写格式
  18. 2.8 将一个整型变量的值赋给一个布尔型变量,再将这个布尔型变量的值赋给一个整型变量,得到的值是多少?
  19. 回顾去哪儿的这些年,最让我骄傲的是收获了这9点管理心得
  20. 百度阳泉云计算中心二期开工,背后折射出什么?

热门文章

  1. 【3y】从零单排学Redis【青铜】
  2. 公有/私有/保护继承、overload/overwrite/override之间的区别
  3. Mysql忘记用户密码的解决办法
  4. flask+sqlite3+echarts3+ajax 异步数据加载
  5. [PHP]php发布和调用Webservice接口的案例
  6. nutch-site参数配置
  7. 计算器 abacus 技术文档之二----初步设计
  8. postfix+mysql+dovecot
  9. ETSafeMail安全电子邮件技术白皮书
  10. ROS系统 服务数据的定义与使用