当前课程知识点:计算思维导论 >  第七单元 >  7.5 面向对象技术 >  Video

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

Video在线视频

Video

下一节:Video

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

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

大家好

这一节我们介绍

面向对象技术

我们已经知道

面向对象方法学

与面向过程的结构化方法

有着本质的区别

具有非同寻常的意义

那么

如此卓越的思想

怎么变成现实呢

也就是说

面向对象方法学

如何演变成面向对象技术

进而提高程序设计的效率呢

从面向对象方法学的角度来说

一个程序就是

由若干个对象组成的

那么 从实现的角度来说

下面这些问题怎么解决呢

一 每一个对象中的数据

和操作

怎么定义

二 同一类对象

既有其个性

也有其共性

怎么表示

比如一个班的同学

有的会唱歌

有的会跳舞

有的会弹吉他等等

三 如何提高程序设计的效率

而不是每次都从零开始

等等这样的问题

为此 还需要引入一些概念

比如类和类库

继承和发展等等

我们知道

尽管现实世界中的对象

五花八门

但却可以按照某种方式进行归类

比如人是一类

树是一类

花是一类

书是一类等等

既然如此

计算机世界中的对象也应该

按照某种方式划分成不同的类

每个类描述

同一类对象的共同属性

也就是状态和行为

类中定义的方法

是允许施加于

该类对象的操作

是该类所有对象共享的

并不需要为每个对象

提供相同的程序代码

从而避免了代码的重复

因此

面向对象方法学中的类

是一类对象的抽象

它是将不同类型的数据和

与这些数据相关的操作

封装在一起

属于一个抽象的概念

而对象是某个类的实例

是一个具体的概念

类和对象的关系就是

抽象与具体的关系

典型地

是一个抽象的概念

它表示一个类

具有人所有共同的属性和行为

比如说人

有姓名

性别

年龄

身高

体重等等属性

人有

吃饭

睡觉

行走

谈恋爱

生儿育女

等基本的行为

张三是人这个类中的一个实例

是一个非常具体的对象

比如我们不能说

人的年龄是24岁

但可以说张三的年龄是24岁

那么类库

又是一个什么样的概念呢

根据客观世界的对象

可以抽象出各种各样的类

这些类不可能都是完全孤立的

相反类和类之间

有着千丝万缕的联系

这就像哲学上所说

事物是相互联系的

例如我们可以抽象出

物质

生物

动物

植物

野生动物

等等这些类

你能说这些类之间没有关系吗

显然不能

让我们考虑这样一些类

雏菊

红玫瑰

黄玫瑰

花瓣

和瓢虫

不难发现

雏菊是一种花

玫瑰是另一种花

红玫瑰和黄玫瑰都是一种玫瑰

花瓣是这两种花的组成部分

瓢虫会吃蚜虫等等这些害虫

而这些害虫会侵扰某些种类的花

显然 类和类之间有着

这样或那样的关系

这些关系大致上可以分为三类

一是一般与特殊的关系

表示是一种关系

例如 玫瑰是一种花

这意味着玫瑰是一种花的子类

而花是更一般的类

二是整体与部分的关系

表示组成部分关系

比如 花瓣不是一种花

它是花的一部分

三是关联关系

表示某种语义上的依存关系

比如瓢虫和花之间的关系

研究类和类之间的关系

有意义吗

当然 由此可引出

非常重要的继承的概念

在类与类的关系之中

继承也许是语义上最有趣的

它代表了一般与特殊的关系

比如动物与哺乳动物

就是这样的关系

如果我们定义好了动物这个类

由于哺乳动物也是动物

具有动物的一般属性

因此我们没有必要重新定义

一个全新的哺乳动物类

只要在原来已经定义好的

动物类的基础上

做些修正或者补充就可以了

这就是继承

通过继承

可以把很多类有机地联系起来

构建出一个类库

这个图就是一个简单的

类库示意图

不难想像

通过不断地扩充

类库会越来越庞大

一个新类可以从已有的类中派生

这个过程称之为类继承

通过继承产生的新类

称之为派生类

也叫子类

而被继承的类称为

新类的基类

也称父类

派生类可以从其基类中

继承方法和状态

当然也可以对它进行

修改或者增加新的方法

使之更适合特殊的情况

以便更好地体现

大自然中一般与特殊的关系

显然 继承性很好地解决了

软件的可重用性问题

回想程序设计领域

虽然发展至今不过几十年

但已经有很多的程序员

费尽心血写出了大量的

非常优秀的程序代码

可大家每写一个程序

差不多都是从零开始

几乎没有一种好的方法

继承前人所写的程序

这是多么不可思议的事情啊

现在面向对象方法学

为人们提供了

一套良好的技术机制

让我们既可以

完全继承前人已有的程序代码

也可以在此基础上有所发展

也就是说你还可以

修正或者补充前人所做的工作

现代程序设计语言

既支持单继承

也支持多继承

单继承不难理解

就像武林弟子一样

只修本派武功

绝不偷学其它门派的功夫

而多继承呢

令狐冲就是典型例子

很多人看过金庸先生的名著

笑傲江湖

华山派弟子令狐冲

被师傅罚去思过崖思过练功

竟无意中在洞中

学到了多个教派的武功

而且得到了

华山派前辈风清扬的真传

练就了独孤九剑

之后因救任我行

又糊里糊涂地学会了吸星大法

为了去除吸星大法的毒害

少林寺方丈又授予易筋经

最后 在黑木崖上惨烈的较量中

不可一世的东方不败死了

任我行死了 岳不群死了

剩下的一代剑侠令狐冲

独步武林 笑傲江湖

令狐冲之所以

成为了武功盖世的一代天骄

就因为他继承了

几大门派的顶尖武功

然后加以发展 并灵活运用

理论上 通过继承机制

如果能构建出一个庞大的完全的类库

也就是说人们需要什么样的类

都可以从类库中找到的话

程序设计也就

完全不是今天的程序设计了

充其量就是一种程序组装技术了

就像各种零部件都可以轻易得到

我们自己稍加学习

就能组装一台机器一样

当然 这只是理想状态

那么 一般情况下

面向对象程序设计

到底怎么进行呢

大致上可以分为如下几个步骤

一 针对问题域做面向对象分析

找出问题求解所需的

各种相关的对象和类

二 与系统提供的类库相匹配

找到已有的类

有现成的类当然是最好的

三 如果没有完全匹配的类

则从相近的类中派生出新的子类

然后进行修正与补充

使之与问题求解所需要的类相吻合

四 如果没有相近的类

也没有匹配的类

那只好设计新的类

五 等所需要的类都有了以后

给指定的类发消息

生成程序的对象集

六 给对象发消息

对象和对象之间发消息

从而完成计算

看一个例子

理想情况下

整个过程大致可以用

这么一个图来表示

对类库中的

Class1

Class2

Class8

发消息

分别产生出对象A B C

这就是程序设计

对象A B C之间发消息并响应

程序就执行完了

显然

面向对象程序设计方法学

与面向过程的程序设计方法学

是有很大差异的

理解这样的程序设计思维对

学习面向对象程序设计

是非常有帮助的

好 这一节就到这

谢谢大家

计算思维导论课程列表:

第一单元

-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笔记与讨论

也许你还感兴趣的课程:

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