什么是面向对象的设计思想?也许有不少初学者对这个概念还有许多不明白的地方,特别是这个处于新旧思想交替的时代,许多人刚刚学完现在看来是快要淘汰的只是面向过程的语言。他们的脑子还没有脱离面向过程思想的束缚,抬头却发现,“面向对象”早已经流行开来,这个陌生的词漫天飞舞。随便拿起一本流行计算机技术书籍,那里会没有“面向对象”的字眼!于是心中便惶惑了:什么叫“面向对象”?不感兴趣者,一带而过;有志于在这方面发展的,匆忙找到一本有关书籍来啃究竟什么是“面向对象”。然而,要突破思想的束缚,说难也不难,说到要深刻认识却也不容易。笔者在做了一些轻量级的工作后,颇以为有点心得,不怕贻笑大方,写出已供广大同行批评指正。
“对象(Object)”一词,早在十九世纪就有现象学大师胡塞尔提出并定义。对象是世界中的物体在人脑中的映象,是人的意识之所以为意识的反映,是做为一种概念而存在的先念的东西,它还包括了人的意愿。举例说明吧。当我们认识到一种新的物体,它叫树,于是在我们的意识当中就形成了树的概念。这个概念会一直存在于我们的思维当中,并不会因为这棵树被砍掉而消失。这个概念就是现实世界当中的物体在我们意识当中的映象。我们对它还可以有我们自己的意愿,虽然我们并不需要付诸实现——只要在你的脑中想着把这棵树砍掉做成桌子、凳子等——我们就把它叫做意向。于是,对象就是客观世界中物体在人脑中的映象及人的意向。只要这个对象存在我们的思维意识当中,我们就可以籍此判断同类的东西。譬如,当我们看到另外一棵树是,并不会因为所见的第一棵树不在了失去了供参照的模板而不认识这棵树了。当我们接触某些新事物时,我们的意识就会为这些事物确立一个对象。当然这个过程是怎么形成的,那就不是我们所能讨论的问题了。上面所说的对象研究的是一般意义上的问题,因而它可以外推到一切事物。我们经常所说的“对象”,一班指的是解决信息领域内所遇到问题的方法。特别是应用软件技术来决问题的方法。如我们经常碰到的面向对象的编程(Object-Oriented Programming)、面向对象的分析(Object-Oriented Analysis)、面向对象的设计(Object-Oriented Design)等。应用前面所介绍的关于对象的概念,可以对这些问题做进一步的分析。在面对较复杂的系统,我们可以将它作为一个对象来进行分析。一个系统(解决某个问题的全套解决方案)作为一个对象,可以由多个部分组成。同样,这个对象也可以由多个对象组成。对于同类的事物,可以由一个对象来表示。这样做的益处是显而易见的,它灵活而高效,可以大大减轻设计人员的工作量,简化实际的模型。举一个例子。在关系型数据库的设计当中,我们可以把一个元组当作对象,给它定义一组操作方法。这些方法将适用于所有元组,从而我们不必在更大的范围内去细致的考虑不同的元组(如判断一个元素是否合法):因为它们有一组公共的面向本身的方法,它们“自己”可以“解决”自己的问题。更上一层的对象可以是一个表、视图等。表对象在元组对象的基础上又有它们自己的方法,如增加、删除等。从这个层面上讲,它也只需要做“自己”的事情,因为有元组对象的支持,它无须去考虑像元素是否合法这类的事情。甚至,有时为了满足我们还可以将元素或表群当作时对象并定义它们自己的方法。这样,更能显示面向对象的优势。
上面所讨论的可以说是面向对象的分析方法。在具体的设计过程当中,还应该采用适当的方式。因为面向对象的思想固然很先进,如果做得不好的话,同样不能达到预期的效果。这主要表现在处理对象与对象的关系上没有做好,对象与对象的层次不分明。如上面所举得关系型数据库得例子,如果在元组层面上得对象过多得考虑一个表对象得因素,或一个表层面上对象过多地考虑一个元组对象的因素,甚至去考虑元素层面上的因素,这些都不是好的面向对象的设计方法。这一点,在语言实现方面,Java比C++更有优势,因为它不允许多重继承,从而使对象之间的关系更明确。谁也不会否认C++的功能更强大,但是它也要由次付出巨大代价——当现在代码库发展到一定程度、一定规模时,个对象之间的层次关系将变得异常复杂,给后继使用者得学习、理解带来很大的困难,应用上很难把握。另外,虽然C++具备面向对象的处理能力,但它还是保留了很多面向过程的东西。用C++完全可以不用面向对象的思想来进行程序设计,当然人们不会这样去做——除了那些只是把C++看成是C扩充的初学者,这就为以后的发展埋下了隐患。在者一方面,Java的限制更多一点。就者一点还远远不够。搞开发的是人,开发方法是由人决定的。要应用面向对象的方法开发出优秀的软件,必须要求开发人员具有良好的面向对象的思想。好的工程师可以利用适当的工具开发出优秀的软件——而不在乎他所使用的语言工具——Java、C++、Object Pascal、Ada等。
要能应用面向对象的思想熟练得做好系统分析、设计、实现(编程),首先要求开发人员知道什么是对象,什么是面向对象得概念,否则是谈不上应用面向对象得思想搞软件开了。希望读者能在看到我在前面的不太严密、详细的论述之后可以对“对象”这个概念由一个初步的了解,同时也希望有不同看法的同行提出批评。其次,还要求开发人员有比较丰富的开发经验。否则,光谈理论,那是不能真正体会“面向对象”的含义的。尽管如此,我们还是可以定出一般的规则的。抛开生命周期的其它阶段,对一个确立的系统一般可以进行以下几个过程:
一、首先应用面向对象的思想进行系统分析。仔细的划分系统的各个部分,明确它们之间的层次关系,然后将各个部分作为一个对象进行功能上的分析。例如,要设计一个用户界面,它可能由几个主要的窗体组成:主窗体MainFrame、功能性子窗体FunctionFrame以及对话对话框Dialog。其中,MainFrame中可能还包括菜单、工具条、文本框、状态条等Windows组件。对于要完成一些重要功能的组件,我们可以单独将它作为一个对象看待,在具体的实现中,用单独一个类来表示。而一些并不是很重要的、只是在过程中需要用到的组件,就可以将它们集成到其他对象中去。要明确每个对象自己的任务——不要让它有缺陷,也不能越殂代庖。各个对象之间的关系通过过程、内容、功能等耦合来实现。
实际上,如果你是用Java进行开发,你会发现swing组件本身就非常好用,因为它们之间的关系是很分明的——你无须去理解分清象C++中的组件那样复杂的关系。在开发你自己的组件时,也需要力求达到这样的效果。
二、其次时应用面向对象的思想进行系统设计。其实在真正做好了系统分析的工作之后,进行设计就比较轻松了。这段时间只要进一步确定各个对象的功能以及各个对象之间的关系。为了能够更好地帮助实现人员明白各个对象之间的关系,可以利用一些工具将这些组件的关系表示出来,统一建模语言(Uniformed Module Language,UML)就是这样的一种好东西。它不仅可以现在帮助开发人员了解整个系统,也为以后的维护工作提供一个档案文件,给以后的工作提供巨大的方便。
三、实现(编码)。这一点就不用多说了。在我的下一篇文章中,将会给出一个比较简单的实例,希望会给读者一个启发。
在搞软件开发时,编码不是最重要的。分析、设计才是最重要的。也许当我们接受了一些更先进的思想之后,会更加理解这一点了。希望我们中国的软件开发人员能应用面向对象的思想开发出具有国际竞争力的优秀软件。
分享到:
相关推荐
### Java编程思想:面向对象的逻辑思维方法 #### 面向对象的设计思想概述 面向对象(Object-Oriented, OO)是一种编程范式,它强调以对象为核心,通过对象来构建程序。对象包含了数据(属性)和行为(方法),并...
### Java编程思想面向对象逻辑思维方法 #### 一、面向对象的基本概念 在探讨Java编程思想中的面向对象逻辑思维方法之前,我们首先需要理解“对象”这一概念的本质。“对象”一词最早由现象学大师胡塞尔提出,他将...
面向对象的编程思维是Java等现代编程语言的核心思想,它强调将现实世界中的事物抽象为对象,通过对象之间的交互来实现程序的功能。在Java中,面向对象编程(OOP)包含三大特性:封装、继承和多态。 1. 封装:封装是...
2. 孙卫琴老师及其书籍:孙卫琴是编写Java相关教材的作者,她出版的书籍以易懂的叙述方式帮助读者理解和掌握Java编程技术,尤其是面向对象的开发思想。这本《JAVA面向对象编程》根据描述,很可能是孙卫琴著作中的一...
《Java面向对象编程思想》是孙卫琴老师的一本经典教程,主要针对Java语言的核心特性——面向对象编程进行深入解析。这本书的第二版本基于2017年的最新技术和最佳实践进行了更新,旨在帮助读者掌握Java编程的核心技巧...
- 应该掌握和实践面向对象的编程思想和模式,以提高软件的可维护性和可扩展性。 5. 书籍内容的可读性: - 作者孙卫琴将复杂的技术细节通过简单明了的语言表达出来,使得书籍内容容易理解。 6. 学习资源的获取: ...
通过这个项目,开发者不仅可以深化对Java面向对象编程的理解,还能提升逻辑思维能力和问题解决能力。同时,这也是一个很好的学习实践,因为贪吃蛇游戏的实现涉及到了许多编程基础概念,如条件判断、循环、事件处理等...
### JAVA编程基础——面向对象基础 #### 面向对象编程思想 面向对象编程(OOP)是一种编程范式,它将计算机程序设计成由多个相互交互的对象组成。这种编程方式模仿了现实世界的运作方式,使得程序员能够以更直观、更...
在讨论孙卫琴老师所著的《JAVA面向对象编程》这本书时,我们可以从中提炼出一些关于Java编程以及面向对象编程的基础知识点。 首先,面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它使用...
3. **面向对象思想的体现**:在设计类和对象的过程中体验面向对象编程的思维模式。 学生需提前预习Java中的基本概念,并在设计类时确保良好的封装性。此外,还需要编写程序完成以下实验内容,并提交相应的实验报告...
《JAVA编程思想》是一本经典的Java编程教材,它深入浅出地介绍了Java语言的核心概念和技术。这本书的配套习题及答案对于学习者来说是极其宝贵的资源,能够帮助他们巩固所学知识,提升编程技能。 首先,Java编程的...
Java的面向对象编程是Java语言的核心特性之一,它基于面向对象编程(Object Oriented Programming,OOP)的概念,旨在模拟现实世界的实体和它们之间的交互。在Java中,对象是类的实例,它们包含状态(数据)和行为...
在这个“java面向对象游戏”的项目中,我们看到开发者使用了Java OOP思想来实现一个猜拳游戏,这为初学者提供了一个很好的实践案例,帮助他们深入理解面向对象编程的概念。 面向对象编程的核心思想是将复杂的问题...
面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,其核心思想是将数据和操作数据的方法封装在一起,形成类和对象,以此来模拟现实世界中的事物。与面向过程(Procedure-Oriented Programming)不同...
总之,"家庭记账系统"是一个很好的实践平台,让初学者能够运用所学的面向对象编程知识,同时还能接触到其他Java编程的基础技术。通过这个项目,他们不仅能够增强编程技巧,还能培养良好的编程思维,为后续更复杂的...
2. **面向对象编程**:Java是一种面向对象的语言,书中的核心部分详细讲解了面向对象编程的三大特性——封装、继承和多态。作者通过实例展示了如何设计类,如何使用接口,以及如何灵活运用抽象类和具体类。 3. **...