首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

《Struts2技术内情》 新书部分篇章连载(二)—— 面向对象浅谈

2012-09-16 
《Struts2技术内幕》 新书部分篇章连载(二)—— 面向对象浅谈第2章 固本清源 —— Web开发浅谈如今当我们谈到Web

《Struts2技术内幕》 新书部分篇章连载(二)—— 面向对象浅谈
第2章 固本清源 —— Web开发浅谈

如今当我们谈到Web开发时,程序员们总是热衷于讨论一些我们耳熟能详的Web开发框架,如Struts2、Spring、Hibernate等。有些程序员将这些框架奉为宝典,并且趋之若鹜地挖掘框架的方方面面、比较各种开发框架的优劣。似乎对于这些框架的熟悉与否,似乎已成为衡量一个程序员是否精通Java,精通J2EE开发的事实标准。甚至在广大程序员找工作的过程中,这些主流的开发框架中的知识细节也常常成为面试中必考的元素,答不上这些问题,无疑会为找工作蒙上一层阴影。

面对这些框架,大家曾经是否真的思考过,我们为什么要学习这些框架?这些框架到底从何而来?框架的本质到底是什么?使用框架,又能够为我们的开发带来什么样的好处呢?在深入分析Struts2及其源码之前,我们首先必须讨论清楚这些比框架更为核心的问题。因为只有了解了为什么,我们才能知道怎么做,才能知道如何才能做得更好

2.1 面向对象浅谈

在谈框架之前,我们不得不首先面对一个比框架更为重要的概念,那就是面向对象的概念。面向对象的概念是一个看起来和听起来简单,却蕴含着丰富内容的概念。众多的国内外学者为了讲清楚这个概念,采用了各种的不同的比喻、也给出了多种多样的代码示例,还为面向对象的概念建立起一套完整的理论体系。

不过至今为止,能够完全将面向对象的来龙去脉讲清楚、讲透彻的毕竟还是少数。随着编程语言从早期的“面向过程式”的C语言发展到后来的C++、Java、甚至近几年来非常热门的Ruby,它们都已经逐渐地将面向对象的基本概念作为编程语言的核心设计法则。因而“面向对象”的概念也逐渐成为了每个程序员都认同,并且在日常编程过程中都遵循的最高纲领。

限于篇幅,我们实在无法涉及面向对象概念的方方面面。不过我们可以将话题聚焦在构成面向对象概念最基本的元素之上,这个基本元素就是:对象。在接下来的章节中,我们将分析对象的构成模型以及对象的关系模型,并以此阐述在面向对象编程过程中的一些基本观点。

2.1.1对象构成模型

2.1.1.1对象的构成分析

对象作为面向对象编程最基本构成元素,它到底由哪些基本要素构成呢?我们可以站在语法的层面,对Java语言中类的定义进行一些构成上的分析,如图2-1所示:



在图中,我们可以看到构成一个对象的基本要素主要有:

签名(Signature) —— 对象的核心语义概括属性(Properties)—— 对象的内部特征和状态的描述方法(Methods) —— 对象的行为特征的描述
在进行面向对象的编程时,首先要做的就是对世间万物进行编程元素的抽象。这个过程说白了,就是通过使用编程语言所规定的语法,例如类(Class)或者接口(Interface)来表达事物的逻辑语义。在上图中我们所谈到的构成一个对象定义的基本要素,实际上不仅反映出我们对世间万物的抽象过程,也是人类使用高级编程语言来实现外部世界表述的基本方式。

从图中我们可以看到,签名(Signature)用以描述事物的核心语义,它的作用实际上是界定我们所描述的事物的范畴。而在对象的内部,作为对象内部构成的重要元素,属性(Properties)方法(Methods)刚好从两个不同的角度对事物的内在特性给予了诠释。其中,属性(Properties)所勾勒的是一个对象的构成特性和内部状态的特性;而方法(Methods)则表达了一个对象的动态行为特性。这就像我们人一样,人由头、躯干、四肢构成,它们可以看作是人这个对象的“属性”。与此同时,人具有“直立行走”的行为特性,我们可以定义一个“方法”来模拟这一行为。

以上的这些分析,我们还停留在语法这个层面,因为无论是属性(Properties)还是方法(Methods),它们都是Java语言的原生语法支持。将事物抽象成为对象,并且赋予这个对象属性和方法,是一个很自然的编程逻辑,这也符合面向对象编程语言的基本思路。不过我们也同时发现对象在实际编程过程中,将表现为三种不同的形态和运作模式:


属性-行为模式

这种模式是指一个对象同时拥有属性(Properties)定义和方法(Methods)定义。这是对象最为普遍的一种运行模式,绝大多数的对象都运作在这种模式之上。

属性模式

这种模式是指一个对象只拥有属性(Properties)定义,辅之以相应的setter和getter方法。Java规范为运行在这种模式下的对象取了一个统一的名称:JavaBean。JavaBean从其表现出来的特性看,可以作为一种数据的存储模式和数据的传输载体。

行为模式

这种模式是指构成一个对象的主体是一系列方法(Method)的定义,而并不含有具体的属性(Properties)定义或者说即使含有一些属性(Properties)定义,也是一些无状态的协作对象。运行在这种模式之下的对象,我们往往称之为“无状态对象”,其中最为常见例子是我们熟悉的Servlet对象。

我们发现,对象的运行模式的划分是根据对象的构成特点进行的。这三种对象的运行模式在我们日常编程中都已经见过并且亲自实践过。接下来的章节,我们将针对后两种构成模式做进一步的分析。

2.1.1.2属性对象模式

属性对象模式又称之为JavaBean模式。这种对象的运行模式在我们日常编程中见得非常多。因为作为数据存储和数据传输的载体,运行在JavaBean模式下的对象,在众多的编程层次都会被用到,并且根据作用被冠以各种各样不同的名称:

PO(Persistent Object) —— 持久化对象BO(Business Object) —— 业务对象VO(Value Object) —— 值对象DTO(Data Transfer Object) —— 数据传输对象FormBean —— 页面对象
对于这些纷繁复杂的缩写和对象类别,许多初学者会感到非常头疼。它们从形式上看是一系列难记的缩写,不过真正让程序员头疼的,不仅在于它们被用于不同的业务场景和编程层次,还在于它们在某些时候甚至只是同一个对象在不同层次上的不同名称。

不过我们大可不必在对象的名称和叫法上过分纠结。因为对于程序员来说,无论这些对象被冠以什么样花里胡哨的名称,它们只不过是对基本的、运行在JavaBean模式下对象的有效扩展或增强

以PO(Persistent Object)为例,当我们使用Hibernate作为O / R Mapping的工具时,一个典型的PO会被定义成以下的样子,如代码清单2-1所示:



从图中,我们看到对象方法(Method)的语法定义,同样体现出一定的规律性:

方法签名(Signature) —— 行为动作的逻辑语义概括参数(Parameters) —— 行为动作的逻辑请求输入返回值(Return) —— 行为动作的处理响应结果输出
我们可以看到,方法的定义实际上是一种触发式的逻辑定义。当需要完成某种行为动作(业务逻辑)时,我们会将请求作为参数输入到方法的参数列表中,而返回值则自然而然地成为了业务逻辑的处理结果。由此,我们可以体会出一个结论:


哈哈,我也看过   6 楼 jyjava 2012-01-13   lz将建模和哲学结合起来,万物之间有联系,不存在孤体,看了这篇文章,我知道了建模不能只纠结于一个对象包含哪些属性和方法,要找出和其他对象的关系,是吧,lz讲了这么多,是不是就是为了说明这个呢,有点像议论文了 7 楼 jyjava 2012-01-13   lz提到的归属和继承感觉不该是struts2里面的东西,该是java基础的东西吧, 8 楼 oyqh 2012-03-02   确实要忘记李刚啊呵呵。鼎楼主 9 楼 yxrs123456 2012-03-03   能否推荐几本讲面向对象理论的书籍呢? 10 楼 downpour 2012-03-05   yxrs123456 写道能否推荐几本讲面向对象理论的书籍呢?

恐怕不能。

因为我目前看到的所有面向对象的理论书籍基本上都不能免俗地谈有关继承性、封装性的话题。这些知识对于程序员领悟面向对象的概念毫无帮助,只会带领初学者走向似懂非懂的深渊。

我觉得面向对象的体会,还是要从实践入手,然后看看Spring的源码对领悟概念有很大的帮助。尤其是Spring中对接口和抽象类的使用,应该能给程序员很多启示作用。

热点排行