1.对象的构成模型
作为面向对象编程最基本的构成元素,对象是由一个叫做类(Class)的概念来描述的。因此,针对对象构成分析的研究,也就转化为针对编程语言中类的构成分析。以Java语言为例,我们可以对Java语言中类的定义进行一些构成上的分析。
public class Human{//签名区
.....................................................
//属性区
private String name;
private Head head;
private Body body;
private Leg leg;
......................................................
//方法区
public void printName(){
System.out.println(name);
}
public void work(){
leg.shift();
}
......................................................
}
我们可以看到构成一个对象的基本元素主要有:
签名(Signature) —–对象的核心语义概括,它的作用实际上是界定我们所描述的事物的范畴。
属性(Property) —–对象的内部特征和状态的描述
方法(Method) —–对象的行为特征的描述
在对象的内部,作为对象内部构成的重要元素,属性和方法刚好从两个不同的角度对事物的内在特性给予了诠释。其中,属性所勾勒的是一个对象的构成特性和内部状态的特性;而方法则表达了一个对象的动态行为特性。这就像我们人一样,人有头、躯干、四肢构成,它们可以看作是人这个对象的“属性”。与此同时,人具有“直立行走”的行为特性,我们可以定义一个“方法”来模拟这一行为。
以上这些分析,我们还停留在语法这个层面,因为无论是属性还是方法,它们都是Java语言的原生语法支持。将事物抽象成对象,并且赋予这个对象属性和方法,是一个很自然的编程逻辑,这也符合面向对象编程语言的基本思路。
不过我们也同时发现在实际编程中,对象将表现为三种不同的形态和运行模式。–>参见
《对象的3种形态和运行模式》
2.对象的关系模型
对象的构成模型是从对象内部结构的角度来对面向对象编程中的基本元素进行分析,对象的关系模型则由“内”转向“外”,考虑对象与对象之间的关系。
谈到对象之间的关系,我们很容易想到两个不同的层次:
从属关系:一个对象在逻辑语义上隶属于另外一个对象。
协作关系:对象之间通过协作来共同表达一个逻辑语义。
这两种关系在面向对象编程语言中分别拥有不同的表达形式和逻辑语义,这两者构成了绝大多数的对象关系模型。
对象的从属关系
对象的从属关系,主要是指一个对象在逻辑语义上隶属于另外一个对象。逻辑上的隶属主要有两种不同的含义:
归属:归属的逻辑含义很直观。比如,一个人总是归属于一个国家,一本书总是有作者。当我们把人和国家、书和作者都映射成面向对象编程语言中所定义的一个个对象时,它们之间自然就形成了归属关系。这种归属关系是由外部世界的逻辑关系映射到编程元素之上而带来的。
结论:“归属”关系在面向对象编程语言中,主要是以对象之间互相引用的形式存在。
public class Book{
private String name;
private List authors;
}
继承:继承的逻辑含义就有点晦涩。比如,马、白马和千里马之间的关系。首先,白马和千里马都是马的一种,然而白马和千里马却各自拥有自己的特性;白马是白色的,千里马一日可行千里。此时,我们可以说白马和千里马都属于马,它们都继承了马的基本特性,却又各自扩展了自身独有的特质。
结论:“继承”关系在面向对象编程语言中,主要以原生语法的形式获得支持。
public class Horse{
public void run();
}
public class WhiteHorse extends Horse{
}
public class ThousandMileHorse extends Horse{
}
对象的协作关系 对象的从属关系从现实世界逻辑语义的角度描述了对象与对象之间的关系。从之前的分析中,我们可以发现,无论是“归属”关系还“继承”关系,它们都在围绕着对象构成的属性做文章。那么我们不禁去想,围绕着对象的行为动作特征,对象之间是否能够建立起关系模型呢?
从哲学的观点来看,万事万物都存在着普遍而必然的联系。从对象的行为特性分析,一个对象的行为特征总是能够与另外一个对象的行为特征形成依赖关系。而这种依赖关系,在极大程度上影响着对象的逻辑行为模式。例如,一个人“行走”这样一个动作,需要手脚的共同配合才能完成,具体来说就是“摆手”和“抬脚”。而当我们把手和脚分别看作一个对象时,“摆”和“抬”就成为手和脚的行为动作了。
这样一说,似乎对象之间的协作关系就非常容易理解了。
结论:当对象的行为动作需要其它对象的行为动作进行配合时,对象之间就形成了协作关系。
可以想象,一个对象在绝大多数情况下都不是孤立存在的,它总是需要通过与其它对象的协作来完成其自身的业务逻辑。
对象的协作关系在对象运行在行为对象模式时显得尤为突出。因为当使用一个具体的方法来进行动作响应时,我们总是会借助一些辅助对象的操作来帮助我们共同完成动作的具体逻辑。也就是说,我们会将一个动作从业务上进行逻辑划分,将不同的业务逻辑分派到不同的对象之上去执行。也就成为我们所熟知的分层开发模式的理论基础。
以下是Java Web开发 三层架构的代码示例:
public class MessageAction {
private Message message;// 某个留言
private IMessageService messageService = new MessageService();//可以改进
/**
* 增加一条留言
*/
public String add() {
messageService.add(message);
return SUCCESS;
}
}
public interface IMessageService {
/**
* 增加一条留言
* @param message 留言对象
*/
public abstract void add(Message message);
}
public class MessageService implements IMessageService {
private IMessageDAO dao = new MessageDAO();
//此处可以改进
public void add(Message message) {
//开启事务
Transaction tx = dao.getSession().beginTransaction();
dao.save(message);
//提交事务
tx.commit();
}
}
//MessageDAO的save方法
public void save(Message transientInstance) {
try {
getSession().save(transientInstance);
} catch (RuntimeException re) {
throw re;
}
}
–>>
很多地方值得改进。(*^__^*) 谢谢阅读,多多包涵。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
前言 其实干程序员这么些年来,一直有一个愿望想写本书,但是一直没实现,一开始是想着是因为自己没时间,后来想想也不是说没时间,可能还是感觉水平有限。为了给写书做准备,最近打算写一个专栏,专栏的要求就稍微低一些,能坚持写完的概率也就会大一些。所以最近挑了从Kafk…