一.对象的组成
在面向对象语言中,对象有几种模式:
一个class包含几个组成要素:
签名;用以描述事物的核心语义;
属性;对象的内部特征和状态的描述;
方法;对象的行为特征和描述;
public class User{ 签名区
private String name; 属性区
private int age;
//省略get,set方法
public Stirng print(){ 方法区
//******
}
}
属性和方法的区别在什么地方呢?
举例来说:人有头,眼,驱赶等等,这些就是属性,描述了人这个对象的内部特征,组成。而方法比如人可以行走,跑,这些组成了人的行为特征;
二.对象构成模型
通过对上述三种的不同组成,在现实世界中对象表现了三种形态和运作模式:
第一种属性-行为模式(属性-行为模型):
这一种表示对象同时拥有属性和行为方法,这是对象最为普遍的一种模式;
第二种属性模式(属性模型):
这种模式是指一个对象只拥有属性定义,和相应的get,set方法,java对这种对象统一起名为javaBean(无参的构造函数,get,set方法)。javaBean从其表现出来的特性看,可以作为数据的存储模式和数据的传输体;
javaBean的产生主要是为了强调对象的内在状态和特性,同时构造一个数据存储和数据传输的载体;
第三种行为模式(行为模型):
这种模式指的是构成一个对象的主体是一系列方法,而并不含有具体的属性状态,或者说就算含有一些属性定义,也是一些无状态的协作对象,运行在这种模式下的对象我们称之为“无状态对象”;
三.对象关系模型
以上所列是对象的构成模型,下面我们再讨论下对象的关系模型;
对象的构成模型是从对象的内部结构的角度对面向对象编程中的基本元素进行的分析。对象的关系的模型顾名思义是从对象的外部交互来对对象进行分析
(1)从属关系:一个对象在逻辑语义上隶属于另外一个对象;
(2)协作关系:对象之间通过协作来共同表达一个逻辑语义;
这两种关系在不同的面向对象语言中分别拥有不同的表现形式和逻辑意义;
下面我们来进行仔细分析:
(1)对象的从属关系:
主要是指一个对象在逻辑语义上隶属于另外一个对象;
针对此句我们应该仔细分析,有两种变现形式:
a.归属
归属的含义很直观,比如一个人归属于一个国家,一个轮胎归属于一台汽车。如果将这种状况映射为面向对象语言就是组合和聚合的概念;
在编程语言的体现主要就是相互引用的形式存在;
b.继承
继承我就不多做解释了。
继承关系在面向对象编程语言中,主要以原生语法的形式获得支持;
(2)对象的协作关系:
对象的从属关系从现实世界逻辑语义的角度描述了对象与对象之间的关系。协作关系主要是围绕着对象的行为动作特征来进行处理;
当对象的行为需要其他对象进行配合时,对象之间就形成了协作关系;
对于这句话来仔细理解:
比如一个人跑步需要手和脚进行协作,这就带来了一个协作;所以对象之间的协作需要从更高的一个层次来看。
软件大师Martin Fowler曾经说过一个对象在绝大多数情况下都不是孤立存在的,它总是需要通过与其他对象的协作来完成其自身的业务逻辑。
但是这就带来了另外一个问题:如何来管理对象和协作对象之间的关系?
总结:
面向对象的基本观点:
1.每一种对象的构成模型,都有其特定的应用范围;
如属性模型适合作为数据传输,数据映射;
行为模型适合对动作进行响应;
2.将对象运作在属性-行为模型上,最符合面向对象编程思想的本意;
当对象运作在“属性-行为”模型上时,我们能够最大程度的应用各种设计模式;
当对象运作在“属性-行为”模型上时,我们能够最大程度的发挥对象之间的协作能力;
3.当在进行对象建模的,我们不应僵硬的套用以上对象构成模型,要结合具体情况进行分析;
4.建立对象之间的关系模型是面向对象编程的核心内容;
以上内容摘自<<struts2技术内幕>>