大数据算法,分布式技术,spark技术爱好者
分类: Java
2013-09-18 09:42:25
现在公司写算法都用JAVA了。每天被面向对象熏陶,渐渐的也有点小感悟。
过去一直觉得java,c++都是面向对象的经典语言,而面向对象的思想应该已经可以完全的被他们实现。但现在我认为其实不然。
在java中,类是概念,对象是实例,对实例的方法调用是对对象发送消息。发送消息的方式为A a = new A(); a.method();
这些大家都耳熟能详,但是大家有没有想过,并不是所有的消息都只针对一类个体。比方说结婚这个消息,如果有两个类,man,woman,请问:
应该把这个方法放在哪个类中,男人类,女人类?还是父类:人。好像都不太合适。
不要因为想不出答案而苦恼,这个问题的根本原因是java中并不支持 对多个对象发送消息。即对对象的集合发送消息。试想如果有下面这种方法的定义:
void [man o1, woman o2].marrige (){o1.couple = o2;o2.couple=o1;} ------------------------------------------- 1
是不是更加一目了然。
Java传说是面向对象的,但是实质却还是只能对一个个体发送消息,可见有很大的局限性,那么对于多个个体发送消息就要寻找其他方式解决,比如把另一个对象放到参数表中,当然可以,
但是这个方法放在哪个类中?如果是同类型的两个对象还没有问题,对于不同类型的两个对象呢?如果他们地位对等呢?
但是像1这种表达形式,在定义marrige方法时,依然无法确定marrige方法放在man还是woman中。所以面向对象的完全实现还需要很多其他的规则,比如说,存在关系的两个类一定要开辟一段空间,专门存储对这两个对象的关系发送的方法。这样,程序的可扩展性会非常强大,因为这样就完全模拟了世界:个体+关系。所以我建议java中定义关键字relation r1,后面跟和哪几个class相关联。如下:
Relation r1: man,woman
{
void [man o1, woman o2].marrige (){o1.couple = o2;o2.couple=o1;}
}
这才是真正的面向对象,在定义中我们限定点号左边方括号中只能出现man,woman这两种类型,而且必须都出现---不能搞基啊。
调用的时候:
[man1,woman2].marrige();
现在看来:
而所谓的只有class的现在的面向对象语言,我看来只是把方法包装到对应类中的过程语言。只不过方便整理分类方法罢了。