`
tangqs
  • 浏览: 18571 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

第一章 Java初入门(2)

阅读更多

1.3 面向对象……

在我在高中通过basic而知道编程时;当我进入大学后在电脑中敲入第一个Pascal及C语言版本的HelloWorld程序时;当我在课堂上为了看见系主任讲台上大谈特谈软件工程而昏昏欲睡时,我并不知道世界上居然还有另外一种叫做“面向对象”的概念。在那时,“对象”两字总能引起一些暧昧的、不怀好意或是意味深长的笑声。哪怕纯洁如我大学时的上铺,一提起这两字,也立即会变得神神叨叨起来。

我真正接触到“面向对象”是从学习C++开始的,通过一本名叫《最新C++应用编程技术》的书,我知道了什么是类,什么是对象,什么是封装、继承、多态……,不过可惜的是,学习完C++之后,我只是用VC完成了一个小项目,并没有更多的机会通过C++更进一步去理解面向对象。真正的理解面向对象是从学习Java开始,那时候,我手头上有一本Bruce Eckel的《Thinking in Java》,这本书无疑是一本非常棒的Java书籍,可是根据我当年学习的痛苦程度,我不建议初学者以这本书作为自己的Java入门书籍,因为这本书实在太厚。

万物皆对象(Everything is an object)”——这是我从《Thinking in Java》中借用过来,这句话告诉我们,在利用Java等面向对象的编程语言进行开发时,需要充分利用面向对象的各种特性,开发出高效的应用程序。

对于一个初学编程的人来说,总是非常容易理解面向过程式的编程方式,而不易理解面向对象。可是,当你准备使用Java进行程序开发时,必须克服这一困难,将编程的思想转到面向对象的世界中来。

废话说了不少,言归正传,在这一节中我将向大家简要介绍面向对象的一些基本概念,更为详细的内容将分别在后续章节中会分别加以介绍。

1.3.1 

类是具有相同特征的一类事物的总称。这个很容易从现实生活中举例,比如自然界的生物按照各自的特征不同分为植物、动物和微生物这三大类,每一类生物都具有自己的特征;再如,家用电器按照用途划分可以分为电视机、冰箱、微波炉等等,相似的例子还有很多。而在程序设计中,我们也需要将待解决的问题按照的特征找出需要定义的类,通常,每个类都应当包含具有各自特点的属性和行为。

1.3.2 对象

既然万物皆对象,那什么是对象?简而言之对象就是类的一个实例,是我们在程序中所看到的一个具有自己的属性和行为的实体。对象和类是一对有关联但又有区别的概念,有时会让人有些许混淆,但总体来说是很容易区分的:例如,“人”这个概念属于类的范畴,而我家隔壁那个叫张三的邻居则属于“人”的一个实例,也即“人”的对象。

1.3.3 封装、继承与多态

封装与继承、多态被称为面向对象技术的三个基本特征。一个面向对象的编程语言基本都支持这三个特性。

封装指信息隐藏。通过封装,我们可以将对象的实现细节隐藏起来,只将需要给其他人使用的东西暴露出来。关于这句话我们该怎么理解?举个例子,工厂生产出洗衣机卖给用户,并不会将洗衣机的内部细节告诉用户,因为这些实现细节对于用户来说是没有太多的用途的,他们关心的是如何使用洗衣机洗衣服而不是洗衣机是怎么洗衣服,对于生产厂家来说,他们需要做的仅仅是告诉用户如何通过洗衣机面板上的那几个按钮实现洗涤、脱水以及烘干等操作。对于程序员来说,封装非常重要,一个定义良好的代码应该仅仅暴露了那些必须暴露的接口,而具体的实现细节则隐藏在代码的深处。不过有读者可能会问,那么在代码中如何实现封装特性呢?这个问题我先卖个关子,在后文将有具体描述。

而继承则是指一个类可以获得先前已定义类的全部特性的机制。继承最初出现的动机是为了消除代码的重复。在早期,利用继承复用他人代码,并在此基础之上添加一些新的功能、整合到自己的系统中是一种流行的做法。不过现在在大多数情况下不建议这样做,取而代之的是利用组合来实现代码的复用。

最后再谈谈多态,多态可以说是这三个特性中最难以捉摸的概念。为了说明这个问题,我们从下面这个例子开始,先看下面这句话——“有个动物在吃东西”,接着我们考虑下面的这个问题:这个动物是怎么吃东西的?(注意:这不是脑筋急转弯。)说实话,这个问题不好回答,因为动物是个很宽泛的概念,而对于不同种类的动物,它们吃东西的行为是不一样的。这个例子很能说明多态这个概念,也就是可以用一个不变的形式(“有个动物在吃东西”),当代入具体的内容之后(例如小鸡、猴子和狗都属于动物),使得整个语句的行为发生变化(每种动物吃东西的方式不同)。实际上,多态是面向对象技术中一项非常重要的内容,我们会在很多重要场合看到它的应用。不过,对于一些很简单的项目来说,特别是很多初学者利用Java编写一些小程序时,总会感觉到利用多态是非常麻烦的,这一点很正常,因为面向对象技术原本就是适合于比较大的软件项目中。

1.3.4 抽象

我将抽象放在这里,是因为经常能听见这样一种论调:抽象是面向对象技术的特性之一。我也不止一次地在书上看到过将抽象与封装相提并论。实际上,抽象是任何一个程序员——无论用的是Java还是C,抑或是VB——都需要具备的一种能力。抽象,指的是从众多事物中提取出本质的内容,而将非本质的内容抛弃,它并不是面向对象技术所特有的,而是程序员应遵循的一个普遍原则。例如,当你在自己的C语言代码中发现了大量的重复代码,而将这些代码抽取出来组成一个函数;或者你在程序的设计过程中,为解决一个问题而设计了一系列的类;又或者你在你的代码中发现利用多态可以更好的解决问题……诸如此类,都可以看到抽象的影子。

1.3.5 设计模式

设计模式可以说是目前一个非常有热度的话题,如果一个程序员不知道设计模式,那么就像到了北京不登长城,去了埃及不看金字塔一样,会遭到其他人强烈的鄙视。当然,设计模式也有自己的缺点,比如容易将一些简单的问题复杂化。但无论如何,设计模式已经成为面向对象技术中的主流内容,我们在任何地方都能或多或少的看到它的影子。设计模式的开天辟地之作是“四人团”GOF的《设计模式》一书,由他们这四人总结了自己以及前人的一些经验,归纳出23种设计模式,我们称这23种设计模式为GOF模式。对于Java程序员来说,学习设计模式是非常必要的,不过一定要记住——千万不要滥用设计模式。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics