吸尘车

终于找到了一篇文章!通俗地讲解面向对象的工作原理

日语中有一句杂俳,大意是“看不懂药品的疗效说明书,反而让人觉得药很有效”。

 

面向对象也有类似之处。“封装、多态和继承三种结构”“现实世界和软件是无缝的”等,当第一次听到这些时,相信不少人都会觉得“虽然不是很明白,但好像很厉害的样子”。

 

今天就来通俗地给大家介绍面向对象编程(Object Oriented Programming,OOP)的基本结构。

OOP 具有之前的编程语言所没有的三种优良结构,分别是类、多态和继承(一般认为OOP的三大要素为封装、多态和继承,但由于类不只具有封装的作用,所以这里改为使用“类”)。

 

在 OOP 刚开始普及的 20 世纪 90 年代,它们经常被称为 OOP 的三大要素。

 

打个比方,那些让人无从着手、难以理解的程序就像是一个乱七八糟的房间。由于无法马上在这样的房间里找到需要的东西,所以我们很有可能会再次购买,或者即使将房间里的某一处整理干净,周围也依然是乱作一团。

 

如果要保持房间整洁,平时就要多加注意,此外还需要使用清理不必要物品(去除冗余)的吸尘器和规整必要物品(整理)的收纳架。

 为了保持房间整洁,需要吸尘器和收纳架  ▲

OOP 的三种结构为程序员提供了去除冗余逻辑、进行整理的功能结构。类结构将紧密关联的子程序(函数)和全局变量汇总在一起,创建大粒度的软件构件。通过该结构,我们能够将之前分散的子程序和变量加以整理。多态和继承能够将公用子程序无法很好地处理的重复代码进行整合,彻底消除源代码的冗余。

 

接下来我们将使用简单的 Java 示例代码来介绍 OOP 的基本功能。

1.1

 三大要素之一:类

这里,我们将类的功能总结为汇总、隐藏和“创建很多个”。

类的功能是汇总、隐藏和“创建很多个”。

1

“汇总”子程序和变量。

2

“隐藏”只在类内部使用的变量和子程序。

3

从一个类“创建很多个”实例。

类的功能之一:汇总

 

代码清单 1.1 中定义了 openFile(打开文件)、closeFile(关闭文件)和readFile(读取一个字符)这三个子程序及一个全局变量。下面我们使用类的功能来逐步修改该程序。

 

代码清单1.1采用结构化编程的文件访问处理

首先来看一下汇总功能。类能汇总变量和子程序。这里所说的变量是指 C 和 COBOL 等语言中的全局变量。OOP 中将由类汇总的子程序称为方法,将全局变量称为实例变量(又称为“属性”“字段”),之后我们会根据情况使用这些术语。

 

下面就让我们使用类来汇总代码清单1.1。

 

代码清单1.2 使用类进行汇总

打个比方,在收拾乱七八糟的屋子时,与其只准备一个大箱子,不如准备多个箱子分别存放衣服、CD、杂志、文具和小物件等,这样会更方便拿取物品,汇总功能也是同样的道理。

 类的功能之一:汇总 ▲

汇总的效果并不只是减少整体构件的数量,子程序的名称也改变了。代码清单1.1中子程序的名称是openFile、closeFile、readFile,而在代码清单1.2中则去掉了File,名称分别为open、close、read,显然这种命名方式更轻松。在没有类的结构化语言中,所有子程序都必须命名为不同的名称,而类中存储的元素名称只要在类中不重复就可以。

 

举例来说,一个家庭中所有成员的名字应该都不相同,但是和姓氏不同的邻居家的家庭成员重名则没有关系。 

 

< 类的功能之一:汇总 > 

能够将紧密联系的(多个)子程序和(多个)全局变量汇总到一个类中。优点如下。

● 构件的数量会减少

● 方法(子程序)的命名变得轻松 

● 方法(子程序)变得容易查找

类的功能之二:隐藏

接下来我们看一下隐藏功能。

 

在代码清单1.2 中,子程序和全局变量都汇总到了类中,但是在这种状态下,从类的外部仍然可以访问 fileNO 变量。TextFileReader 类 的 open、read 和 close 方法会访问 fileNO 变量,但其他处理则无须访问,因此最好限定为只有这三个方法能访问该变量。

 

OOP 具有将实例变量的访问范围仅限定在类中的功能。加上该限定后的代码如代码清单1.3 所示。

 

代码清单1.3隐藏实例变量

 

代码清单1.2 与代码清单1.3 只存在细微的差别。后者在实例变量的

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至xcc@gmail.com举报,一经查实,本站将立刻删除。