关于阅读陆舟老师《Struts2技术内幕-深入解析Struts2架构设计与实现原理》一书的阅读笔记之对象的构成模型(2)

来源:互联网 发布:java语言的主要特点 编辑:程序博客网 时间:2024/04/28 11:34

1、对象的构成分析

      作为面向对象编程最基本的构成元素,对象是由一个叫做类(Class)的概念来描述的。因此,针对对象构成分析的研究,也就转化为针对编程语言中类的构成分析。以java语言为例,我们可以对java语言中类的定义进行一些构成上的分析,如下:

public class Human {                                                                                                                  签名区

…………………………………………………………………………………………………………………………..

         privateString name;

        

         privateHead head;

                                                                                                                                                        属性区

         privateBody body;

        

         privateLeg leg;

         …………………………………………………………………………………………………………………….

         publicString printname(){

                   System.out.println(this.name);

                   returnthis.name;

         }

                                                                                                                                                         方法区

         publicvoid walk(){

                   leg.shift();

         }

         ……………………………………………………………………………………………………………………

}

我们可以看出构成一个对象的基本要求有三个:

(1)签名:对象的核心语义概括

(2)属性:对象的内部特征和状态的描述

(3)方法:对象的行为特征的描述

也就是根据构成对象的三个基本要求,我们可以将对象分为三种不同的形态和运作模式。

a:属性-行为模式

指一个对象同时拥有属性定义和方法定义。

b:属性模式

这种对象只拥有属性的定义,辅之于getter和setter方法,在java中我们通常称这种对象为JavaBean。

c:行为模式

这种模式只指构成一个对象的主体是一系列方法的定义,而并不含有属性的定义,像我们常见的servlet对象。


其中属性对象模式又称为JavaBean,作为数据存储和数据传输的载体,运行在JavaBean模式下的对象,在众多的编程层次都会被用到,并且根据作用的不同被冠以各种不同的名称。

PO(Persistent Object):持久化对象

BO(Business Object):业务对象

VO(Value Object):值对象

DTO(Data Transfer Object):数据传输对象

FormBean:页面对象

也许从形式上看,他们是一系列难记的缩写,被用于不同的业务场景和编程层次,不过有时真正让人头痛的是,有时候只是同一个对象在不同层次上表现出不同的名称,实质上是一样的,所以项目中也不会说一定定义这些对象。

对于这些属性对象而言,JavaBean自身的特性并没有发生改变,只是引入了一些额外的编程元素从而对JavaBean进行了增强。当一个对象运作在属性对象模式时,其本质是JavaBean的特性。

所以:JavaBean对象的产生主要是为了增强对象的内在特性和状态,同事构造一个数据存储和数据传输的载体。


行为对象模式我们又称之为无状态对象。是指对象的方法所表达的行为特性并不依赖于对象的内部属性的状态。而这种无状态的特性,非常适合一个请求的响应,并在方法的内部实现中进行复杂业务逻辑的处理。就像servlet,

public void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");PrintWriter out = response.getWriter();out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");out.println("<HTML>");out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");out.println("  <BODY>");out.print("    This is ");out.print(this.getClass());out.println(", using the GET method");out.println("  </BODY>");out.println("</HTML>");out.flush();out.close();}
参数中包含了请求对象和响应对象,其实他将请求和响应作为方法的参数。所以:对象的方法定义是进行请求响应的天然载体。

2、对象关系模型

上面我们将对象构成分析,讲的是对象。那么对象与对象之间存在什么样的关系呢。

(1)从属关系:一个对象在逻辑语义上隶属于另外一个对象

(2)协作关系:对象之间通过协作来共同表达一个逻辑语义

对于从属关系又可分为归属和继承:

①归属:一本书总是有作者。

②继承

对象的协作关系在对象运行在行为对象模式时显得尤为突出。因为当一个具体的方法来进行动作响应时,我们总是会借助一些辅助对象的操作来帮助我们共同完成动作的具体逻辑。也就是说,我们会将一个动作从业务上进行逻辑划分,将不同的业务分派到不同的对象之上去执行。这就成为分层开发模式的理论依据。

所以,当我们进行对象建模的时候,总是需要根据业务情况选择一个对象建模设计的角度,而这个角度往往取决于对象在整个程序中所起的作用。例如,当我们需要进行数据传输或者数据映射时,我们应该基于对象的“属性模式”进行建模;当我们需要进行动作响应时,我们应该基于对象的“行为模式”进行建模。

0 0