当前课程知识点:计算思维导论 >  第七单元 >  7.4 面向对象之方法学 >  Video

返回《计算思维导论》慕课在线视频课程列表

Video在线视频

Video

下一节:Video

返回《计算思维导论》慕课在线视频列表

Video课程教案、知识点、字幕

大家好

这一节我们介绍

面向对象方法学

我们知道

在计算机内部

数据和程序代码是分开存放的

为了与其一致

面向过程的

结构化程序设计方法学

把描述客观世界实体的数据

及其处理数据的过程

当作了相对独立的实体

忽视了数据和操作之间的

内在联系

导致解空间(计算机世界)

与问题空间(客观世界)并不一致

造成系统难于理解

且程序员负担过重

迫使人们重新去审视客观世界

从而得到了新的认知

归纳起来有这么几点

一 客观世界是由

各种各样的事物

也称之为实体组成的

二 每一个实体在任一时刻

都具有特定的状态

三 实体之间

具有这样或那样的相互关系

或者叫相互作用

四 实体之间的相互作用

可以改变它们的状态

五 事物或者实体

可以按一定的属性

进行分类

六 不同的类之间

存在一定的关系

比如 继承与进化

进一步 人们认识到

客观世界中的问题

都是由客观世界中的实体

及其相互之间的关系构成的

我们称这种实体为

客观世界的对象

从本质上讲

我们用计算机求解问题

就是把客观世界中的问题

所涉及的对象

及其结构与关系

自然地映射到计算机世界中去

然后借助于某种语言的规则

对计算机世界中的实体

也称之为解空间对象

施加某种操作

并以此操作去影射问题的解

一旦提供了某种解空间的对象

就隐含着该对象允许的操作

很显然

客观世界中的对象

及其结构与计算机世界中的对象

或称解空间的对象

及其结构应该一一对应起来

只有这样 才便于人们分析

研究和理解

就像这个图一样

正如Simula的设计者

Kristen Nygard所说

编写程序就是去理解客观事物

一种新的语言提供了

描述与理解客观事物的

一个新的视角

Smalltalk的设计者

(Alan Kay)讲得更简洁

客观现实就是面向对象的

基于以上认识以及软件技术

比如数据抽象

信息隐藏

软件重用等的进步与发展

自20世纪60年代后期出现的

编程语言Simula-67开始

逐步发展

并完善了一种

新的程序设计方法学

也就是

面向对象程序设计方法学

面向对象方法学的

出发点和基本原则

是尽可能模拟

人类习惯的思维方式

使程序设计的方法与过程

尽可能地接近

人类认识客观世界

解决实际问题的方法与过程

也就是使描述问题的问题空间

与实现解法的解空间

在结构上尽可能一致

面向对象方法学的基本原理是

使用现实世界的概念

抽象地思考问题

从而自然地解决问题

它强调模拟现实世界中的概念

鼓励设计者在软件开发的

绝大部分过程中

都用应用领域的概念去思考

面向对象的软件开发过程

从始至终都围绕着建立

问题领域的对象模型来进行

对问题领域进行自然的分解

确定需要使用哪些对象

在对象之间传递什么样的消息

以实现相互之间的联系

从而按照人们习惯的思维方式

建立起问题领域的模型

以此来模拟客观世界

概括地说

面向对象方法学

具有下述两个要点

一面向对象方法学认为

客观世界是由各种对象组成的

任何事物都是对象

对应地一个程序就是由若干个

不同的对象组成的

或者说是由若干个对象的集合

也就是说 面向对象方法学

用对象分解取代了

传统方法的功能分解

这样就显得非常自然

二对象之间仅通过

发送消息相互联系

对象不是被动地去等待

外界对它施加某种操作

它拥有主权必须依靠发消息

请求它执行某个操作

以此处理它的私有数据

一切局部于对象的私有数据

都被封装在对象之中

就好像装在一个

不透明的黑盒子中一样

在外界是看不见的

更不能直接操作它

这就是封装性

因此我们可以说

消息统一了数据流和控制流

封装强化了信息隐藏

面向对象方法学

有两个核心的概念

一个是对象

一个是消息

那么 什么是对象(Object)

我们说

计算机世界中的对象是

映射客观世界中的对象的

那么计算机世界的对象

到底又是个什么样的实体呢

简单来说对象就等于数据加操作

在这里数据是用来描述

客观世界中对象的状态

操作

其实也就是程序代码

它是用来描述

客观世界中对象的行为

把数据和操作封装起来

就形成了计算机世界中的对象

例如

我们要在计算机中描述一个人

那么要描述的这个人的

姓名

年龄

性别

身高

体重

健康状况

籍贯

政治面貌

住址

邮编

等等等等

这些我们所关心的信息

就是他的状态

我们可以用对应的一组数据

张三

21岁

一米七

70公斤

良好

广西桂林

团员

广西柳州市东环路268号

545006

等等等等来表示

之外这个人

还常画画

上网聊天

玩游戏

打羽毛球

唱歌

跑步

骑自行车

当然也有吃喝拉撒睡等行为

这些行为我们分别用

一段程序代码来表示

这就是操作

有时也叫方法

不难想象

对象的行为会影响到他的状态

比如

张三去跑步

那他的心率肯定就会增加

长期坚持跑步锻炼

他的健康状况就会很好等等

至此 也许你要问

对象为什么要封装啊

封装的目的一是信息隐藏

二是对象的状态

只能由它自己的行为来改变

这样才与客观世界相吻合

比如张三有多少财富

那是他个人的隐私

别人没有必要了解

也不应该了解

这就是信息隐藏

另外 张三静静地躺着看书

心率每分钟80次

外界不能随便强迫他的心率

提高到每分钟120次

除非他自己去运动

这就是行为改变状态

二 对象和对象之间通讯

靠的是消息

每当需要改变对象的状态时

只能由其他对象向它发送消息

对象响应消息后

按照消息模式

找出匹配的方法并执行

对象间的联系与协作

只能通过传递消息来实现

发送消息的对象

我们称之为发送者

接收消息的对象

称之为接收者

程序的执行是

靠在对象间传递消息来完成的

在这里边

我们对消息再做进一步的解释

一 消息中包含发送者的请求

它请求接收者需要做哪些事情

但并不指示接收者

应该怎么样去完成这些处理

比如老师布置作业

提出具体的要求

但怎么完成作业

是学生们自己的事情

二 消息完全由接收者来解释

这就像老师阐述某一问题

不同的同学就会有不同的理解

三 消息接收者独立决定

采用什么方式完成所需要的处理

比如老师布置某一道作业

不同的学生完全可以

采用不同的方法来求解

四 一个对象能够接收不同形式

不同内容的多个消息

就像有人邀请你去打球

有人同时邀请你去看电影

有人邀请你去散步等等

五 相同形式的消息

可以送往不同的对象

这有点像广播找人

大家都可以听到相同的消息

六 不同的对象对于形式相同的消息

可以有不同的解释

能够做出不同的反应

这个图就是

一个非常形象的例子

您看

森林里的大老虎嗷嗷叫几声

不同的生物包括人听到后

就会有完全不同的反应

七 对于接受到的消息

对象可以做出反应

并返回相应的回答信息

但这种响应并不是必须的

这就好比老师要求同学们做什么

个别同学可以当耳边风

无动于衷

八 一个对象在处理某个消息时

如果需要

它可以通过传递消息

请求其他对象做点什么

其他对象根据需要

也同样可以通过

传递消息与别的对象联系

这就像您托张三办事

张三正好没时间

或者有别的困难

又转托李四去办

可见

面向对象方法学中的消息传递

与处理机制

与现实世界何其相似

甚至可以说几乎一模一样

这就是计算机世界

与客观世界的一致性

最后我们总结一下

一 问题域中的客观对象

与计算机世界中的对象

在数量和结构方面

具有一一对应的映射关系

二 计算机世界的对象

是由数据和操作

封装起来的实体

与传统的模块不一样

三 一个对象请求另一个对象

做点什么

只能向对方发消息

对方如何反应

您管不了

这与一个模块

调用另外一个模块不同

后者它具有强制性

四 程序由若干个对象组成

程序的执行就是

对象间相互发消息

消息处理完了

程序也就执行完了

好 这一节就到这

谢谢大家

计算思维导论课程列表:

第一单元

-1.1 计算思维及其教育

--Video

第二单元

-2.1 计算是什么

--Video

-2.2 计算与自动计算

--Video

-2.3 计算机及其计算本质特征(I)

--Video

-2.4 计算机及计算的本质特征(II)

--Video

第三单元

-3.1 数的表示与模拟计算

--Video

-3.2 数的表示与数字计算

--Video

-3.3 二进制加法运算的机器化

--Video

-3.4 “九九归一”的加法运算

--Video

-3.5 二进制之优越性及问题与代价

--Video

第四单元

-4.1 从数学危机到图灵机

--Video

-4.2 图灵机的计算能力

--Video

-4.3 什么问题都能计算吗?

--Video

-4.4 冯•诺依曼机及其发展与演化

--Video

-4.5 从算盘到图灵机——机械计算的本质

--Video

-4.6 电子计算机——透过现象看本质

--Video

第五单元

-5.1 思维可机械计算吗(I)

--Video

-5.2 思维可机械计算吗(II)

--Video

第六单元

-6.1 量子理论

--Video

-6.2 量子计算机

--Video

第七单元

-7.1 人类求解问题之过程

--Video

-7.2 基于计算(机)的问题求解过程

--Video

-7.3 面向过程的结构化设计方法学

--Video

-7.4 面向对象之方法学

--Video

-7.5 面向对象技术

--Video

-7.6 抽象

--Video

-7.7 计算学科中的抽象

--Video

-7.8 时间与空间及其相互转换

--Video

-7.9 技术层面的其他方法学

--Video

-7.10 认知层面的其他方法学

--Video

第八单元

-8.1 算法与程序

--Video

-8.2 算法设计方法——枚举

--Video

-8.3 算法设计方法——递推

--Video

-8.4 算法设计方法——递归

--Video

-8.5 算法设计方法——分治

--Video

-8.6 算法设计方法——仿生

--Video

第九单元

-9.1 机器间的通信方式

--Video

-9.2 数据转发方法

--Video

-9.3 网络分层体系结构

--Video

-9.4 有趣的对称加密技术

--Video

-9.5 难解的非对称加密技术

--Video

-9.6 数字签名及其应用

--Video

-9.7 从自然智能到人工智能

--Video

-9.8 符号主义的基本思想

--Video

-9.9 连接主义Ⅰ

--Video

-9.10 连接主义Ⅱ

--Video

-9.11 行为主义的基本思想

--Video

-9.12 机器翻译的愿景与困难

--Video

-9.13 峰回路转的自然语言处理

--Video

-9.14 信息传输中的问题与挑战

--Video

-9.15 重复传输与冗余编码

--Video

-9.16 校验与校验和

--Video

-9.18 自纠错技术及应用

--Video

-9.19 两种简单的数据压缩方法

--Video

-9.20 哈夫曼编码

--Video

-9.21 数据压缩极限与LZ压缩方法

--Video

-9.22 大海捞针的搜索引擎

--Video

-9.23 网页排序方法(PageRank)

--Video

第十单元

-10.1 计算文化

--Video

期末考试

-期末考试--作业

Video笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。