当前课程知识点:计算思维导论 > 第七单元 > 7.4 面向对象之方法学 > 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
-期末考试--作业