曾经一个偶然的机会,我接触了一种利用三元组表达知识的语言OWL,这种语言中,最基本的单位是三元组组合,[本体,属性,值]。
比如 本体:花 拥有一个 属性:颜色 值:红色 [花,颜色,红],就构成了一个三元组。
我相信这也是很多人的第一印象吧。在面向对象(OO)编程里面,我们也有三元组,对象,属性,和值,类似于这样:
flower.color == red
小贴士:
------------------------------------------------------------------------
但是跟一般OO语言有一点不同的是,我们看到在这个最简单的模型系统中,只有“对象object”的概念,而没有"类class"的概念。
其实仔细想一下,在我们的日常生活中,真真切切的存在的只有object, 而class是一个抽象的概念。
在javascript里面,利用prototype去实现类的的功能,我先创建一个"原型",然后根据这个“原型”,去创造更多的“特例”,这个做法避免了增加一个
抽象的"class"概念。
例如,现在我有3辆车,红色的车,黄色的车,绿色的车,我如何表示这3个实例?
如果用类的思路去实现,我先抽象出:所有的车都颜色,然后创建一个 class 车, 并且拥有一个颜色属性,然后实例化这个class,做出3个实例,并且
在构造函数中,将3个实例的颜色属性分别初始化为 红,黄,绿。
如果按照原型的思路去实现,我们可以先定义一辆红色的车,然后以红色的车为原型去创造两辆车,并且将这两辆车的颜色初始化为黄色和绿色。
你们更喜欢哪种?我更喜欢后者,因为后者少一个概念,更简单,直观。
-------------------------------------------------------------------------
按照这个思路,我们很快会遇到一个问题,例如:我们希望设计一个人工智能机器人tommy,tommy判断事物,做出决定都要根据他自己的好恶,对自己的好,坏。
也就是一个相对好,坏,那么这个相对的概念,要怎么表达?
好了,汽车A相对汽车B快,这个概念,用3元组怎么实现?
实际上当牛顿说出 “只有相对运动,没有绝对运动”的时候,我们就可以同样说出 “只有相对属性,没有绝对属性”。
而要表达这个相对的概念,需要一个4元组,[主体,属性,相对域,值],是不是有点像函数的定义域和值域?
3元组的绝对属性可以看作是4元组这种相对属性的一种特例。
我们可以创造出一个绝对域“absolute”,比如花是红的,是相对这个"absolute"是红的。这个"absolute"代表全部,也代表无,在编程语言中,可以看作是 void。
花是红的 红 == 花.颜色(void) [花, 颜色, void, 红]
汽车A比汽车B快 快 == 汽车A.速度比较(汽车B) [汽车A, 速度比较, 汽车B,快]
这样我们看到,其实常量属性(颜色),可以看作是一个方法,接受一个void,返回一个固定的值。我想这就是为什么在interface中可以定义常量的一个原因吧。
甚至我们可以得出,属性就是方法,想一想 property [ get, set ] 这种实现。
汽车A是红色的
汽车A.get颜色(void) == 红色
void 给汽车A喷漆() {
汽车A.set颜色(黄色);
}
本期我们简单介绍了4元组的概念,接下来我们将更深入一步,探讨继承的概念。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26899445/viewspace-1364205/
,如需转载,请注明出处,否则将追究法律责任。