统一对象消息编程(3)—对象的本质

       关于类、对象的概念我们不用多说什么了,基本所有对象编程的书籍、教材开始都介绍了,《java编程思想》说的稍微多了些。对象由方法、属性组成,对象编程就是抽象出一个对象(类)出来,对象之间互相调用对方的方法。但是我认为这种对对象的认识还比较粗浅,因为这个粗浅,导致了编程的复杂性,比如产生依赖、耦合,同样也失去了对象的标准性,每个人任意对一个对象设置各种方法。

         我们观察现实世界,个体(对象)之间的相互关系是消息的传递,而不是方法的调用。比如我们的家人或同事让我们吃饭,他们不是拿起我们的手,再控制我们的手去抓饭、然后控制我们手把饭放到嘴里。他们是给我们一个吃饭消息,我们接受这个消息,然后自行决定是否吃,自行采取行为。同样比如开车,也不是我们去运转车轮,是给车一个启动的信号,车自行运转。因此现实事物对象之间的关系不是方法的调用或控制对方行为,而是消息的传递。现在我们对象编程基本和过程语言差不多,NEW一个对象,然后顺序调用对象的方法,这样基本上,对象之间必然耦合一起,一个对象无法离开另一个对象,因为它要依赖对方的方法,每个对象失去了独立性、自由性。强行调用(执行)另一个对象的方法,也完全是对另一个对象的干涉。目前来看,httpserver是基于消息的,客户端并不是调用server的方法,而是传递get、post消息,所以开发一个客户端完全不用考虑server类型,一个客户端不非依赖某种server,这才是对象真正的对象关系模式。

     再看我们对象的建立,我们需要一个对象的时候,就NEW一个出来,这完全也是不符合事实的,现实的中我们创造出的任何东西,其实都是对某些个体的组合。对象必须由造物者统一创造(见契约),对象如果被某个对象创造,就存在相互依赖的关系。

        对比谈谈目前流行的编程框架Spring(对于java来说),spring功能很强大,基本完成各种应用。虽然我没有学过、用过Sping,只是大概知道原理。但我认为它完全严重违背了上述象原则。它用反射机制强行挖掘一个对象的内部,用注解方式强行改变一个对象的行为,虽然某方面实现一定程度的解耦和灵活性,但是我认为这是违反现实的,不符合事物之间的关系互动原则,是为了编程中某些便利而发明的怪东西。我觉得Spring的方式愚笨而丑陋,它的效率肯定很低。

   我认为对象编程在基于现实契约的基础上,遵守以下规范;

1、对象之间只能通过收发消息来互动。一个对象不能调用另一个对象的方法、行为。对象的行为只能自己执行。

2、每个对象对收到的消息,采取或不采取行为完全取决对象本身。

3、对象由统一的创建者创建。

猜你喜欢

转载自blog.csdn.net/tianlong117/article/details/81432959