为什么类是单继承的?接口是多继承的?

14-12-24 liangshan


如果将资源的组织结构看作空间的话资源确实是单继承的,确实应该是树。因为一个空间单元只可能有一个直接的父空间单元不可能会有两个,因为空间是不交叉的。

那个PrivilageBigram两两组合出的多继承应该是从运动的角度观察事物的,运动就是变化,就是时间。比如一个人肯定是只有一个直接领导的,但是这个人在开展工作的时候是可以从任何他人那里得到(继承或者别人委托给他)权限的,这是多继承的。

类是单继承的,接口是多继承的,人们的知识树的确是良好的、一致的。类关注的是结构、结构类比空间,接口关注的是行为、行为类比时间。

时间 == 运动 == 变化 == 状态的保持 == 连续性(关于这个等式的来源见末尾)

资源、空间是单继承的是因为这样:一个0 1物理开关在一个时刻只可能是至多一个单元(比如一个int类型包括一排32个物理开关)中的节点,一个物理开关不可能在同一个时间具有多个父节点。但是当世界运动起来后事情就不是这样了,世界运动起来就是引入时间维度(时间 == 运动 == 变化 == 状态的保持 == 连续性),引入时间维度后一个物理开关可以在不同时刻具有不同的父节点。

时间是什么?

设想一个状态:这个状态没有“物质”没有“空间”没有“能量”……总之什么也没有。让我用null来代表这个状态。 显然null不会突然间改变。因为一个空的世界怎么会‘突然’生出东西来呢?null若改变就得无缘无故地生出东西。null要保持 null的状态,null要连续,这里的“状态保持”需要时间,或者说状态保持就是时间,再或者说连续性就是时间。绝对的不变的状态不存在,时间是衡量状态改变快慢的物理量。状态不能突然改变的连续的性质使null具有了时间概念。

19
liangshan
2014-12-24 19:03
下班回来的路上我突然感觉我悟到道了。单继承是棵正树,多继承是棵倒树;或者说单继承是棵倒树,多继承是棵正树。到底哪个定义成正哪个定义成负无需纠结。

单继承是子节点从父节点继承事物,多继承是父节点从子节点继承事务。这刚好是棵自然界的树,自然界的树有地上部分和地下部分。当那棵树获取输入(光、二氧化碳、氮磷钾元素)的时候是多继承的,是父节点从子节点继承事物;但那棵树生长的时候,当那棵树分配自身能量的时候是单继承的,子节点从父节点继承事物。这可能就是新陈代谢。这可能是道,是那个太极图上的道的分形。

zyh5160
2014-12-25 15:16
多继承恐怕就是一张网了吧。

banq
2014-12-26 08:02
多继承是和场景有关,是动态的,如同一个演员演戏,更换不同的布景场景,他有不同的行为接口。

而单继承是静态的,是一种天然属性,和主体动作无关。

从动态和静态两个方面区分,就不会把动态的硬搞成静态的,函数动态组合能解决的硬是使用静态结构去解决,虽然都是树,但是创建树的时机不同。

liangshan
2014-12-26 09:58
2014-12-26 08:02 "@banq"的内容
多继承是和场景有关,是动态的,如同一个演员演戏,更换不同的布景场景,他有不同的行为接口。 ...

确实是这样,如同DCI中观点。接口的出发点是想要去管理那棵动态的运动树。

接口试图表达的是事物的变化、运动、行为,是时间维度。类或者准确的叫struct(数据结构)试图表达的是事物的空间维度。

有这样的接口这是什么意思呢?

interface IUser{

string UserName{get;}

string Password{get;}

}

这样的接口看起来像class那样表达的是结构,其实还是在表达行为。人们抽象一个这样的接口是因为行为不是因为结构。

接口虽然可以多继承,但是接口表达的是变化、是运动,如果一个接口从很多个别的接口继承而来的话就会造成它可能具有很多个方向不一致的运动方向(有时候两个接口表达的运动方向可能是一致的,有时候可能是不一致的两者的方向是有大的夹角的),导致把问题复杂化了不好管理。

如果问题单元具有很多个变化方向的话会把问题复杂化导致不好管理。

虽然接口可以继承甚至可以多继承,但是接口应该是适合用来组合的不是用来继承的。

westsource
2014-12-29 13:35
我是这样理解的:类表示“是什么”,接口表示“能干什么”。依据这个逻辑,理解为什么类是单继承的,接口是多继承的就比较简单了

jdon007
2014-12-29 22:34
兄弟,感觉有点走火入魔了。。。。

印象中有一篇相关的文章说得不错,特地搜了一下:

设计模式及继承和接口

其中有两句话,说得很好:

继承:描述事物的自然属性和行为的复用。

接口:描述事物的社会属性和行为的复用。

--------------------------------------------------

进一步,借用一下苏格拉底的问题:我是谁,我来自哪里,我将去哪里?

我们也可以提出类似的问题:对象是什么?对象从哪里来(继承)?对象将去哪里(接口)?这问题可大可小,可不回答。

落实在代码中,如果是有状态的行为复用,用继承;如果是无状态的行为的复用,用接口。

在有些语言中,继承之所以是单继承:原因怕是犹如鸠摩智一般,练了小无相功、又学了少林七十二绝技、易筋经,而又没有领悟化解之佛法(管理好各种继承来的状态),容走火入魔呀。

nulldust
2015-01-02 08:41
就是is 与 has 的问题,这是接口与继承的根本原理,想偏了吧。

liangshan
2015-01-02 20:25
2014-12-29 22:34 "@jdon007"的内容
兄弟,感觉有点走火入魔了。。。。 ...

回了趟老家没及时回复。这段时间突然找到了将之前学习的已有知识通过一条线联系起来的方法,希望抓住这个思考的机会多思考一些。

下面是对洋葱头和树形结构的统一:

Core代表核心,中心,可以把整个系统看作洋葱头,core是洋葱的心。

洋葱头跟树形是同一个结构,如果洋葱可以有多套同心圈的话(事实上确实有这样的洋葱)。

其实换个角度看树,树也是这样的一层一层包裹。比如树根代表是整个资源集,而子节点代表的是子集。树就是对集合中的所有记录进行有偏移的单元划分,每一子集不交差。父子之间是包含。可以试试这样考虑,将自然界的整棵树收缩到树干的一个切面上,就是很多个同心圈了。

内圈从外圈继承空间,外圈从内圈继承行为。枝从叶继承吸收二氧化碳的能力,释放氧气的能力,吸收光的能力,散发水和热的能力,这些都是行为的继承。叶子从枝继承的是在整棵树上的坐标位置空间标识,这个是空间的继承。

ericyang
2015-01-05 13:23
2015-01-02 20:25 "@anycmd"的内容
洋葱头和树形结构的统一 ...

确实有点走火入魔了,树之所以有根,枝,叶的形状,是因为地球的重力使然,,,如果你要硬搬,很难概括,特别是毫不相干的比喻,很容易被人挑出毛病来,比如'枝从叶继承吸收xxxx',这个就很牵强,因为枝很显然没有吸收xxx的能力。。。

建议你倒是可以继续思考,为何树的这种静态结构,如此和谐而牢固,呵呵。

liangshan
2015-01-05 13:53
2015-01-05 13:23 "@ericyang"的内容
比如'枝从叶继承吸收xxxx',这个就很牵强,因为枝很显然没有吸收xxx的能力。。。 ...

谢谢鼓励。枝条从叶子继承吸收二氧化碳和光的能力的这样考虑的:对于枝条的父节点来说它的父节点丝毫不知道叶子的存在,枝条的父节点认为那些输入来自于自己的子枝条。

liangshan
2015-01-05 17:32
2015-01-05 13:23 "@ericyang"的内容
树之所以有根,枝,叶的形状,是因为地球的重力使然

2015-01-05 13:23 "@ericyang"的内容
建议你倒是可以继续思考,为何树的这种静态结构,如此和谐而牢固 ...

这个太难了,可能永远不会有真理

我想了这样一种假说:场是状态的变化,场是状态的保持,场是运动,无处不在的运动。场无处不在,任何物质都是场,都是场源,任何物质的场都沿着垂直于这个物质的方向传播(传播的能量来自于场心,场心的场具有更强的单位,场心带动出一个垂直于场的传播方向的震荡,正是这个震荡使得场垂直于震荡方向传播)。生命系统刚好沿着震荡的方向,刚好垂直于场的传播方向。场的传播方向是时间,时间不断的垂直的穿越我们,我们被来自于场源的能量控制着永无止境的沿着垂直于场的传播方向的方向震荡,过去已经穿越了我们的身体,未来即将穿越我们的身体……树和我们(我们也是树)之所以存在是因为我们也是场,树可能是刚好垂直于某个方向的构造

ericyang
2015-01-08 17:17
2015-01-05 13:53 "@anycmd"的内容
枝条的父节点认为那些输入来自于自己的子枝条 ...

你善于思考的习惯,会让你走得更高更远,加油。不过,行走的过程中希望随时停下来,休息下,总结下,这样不容易走极端,或者跑偏。

我极力想让你停下来的,就是树其实只是自然界的一种形态,结合到你的思考,它是一种稳定的结构,并且如你所说,承载了那些'不知道存在'的输入,以及你后面提到的场,呵呵,banq喜欢的事件来了。。。

建议你,不妨在思考下人体结构,神经元,大脑如何发送指令到我们的四肢使之行动的。。。

再次希望你不要固化某个思路,这个世界,包括软件开发,没有银弹,就像人类靠四肢,鱼靠鳍,鸟靠翼,都能前行,,,

liangshan
2015-01-10 12:08
2015-01-08 17:17 "@ericyang"的内容
建议你,不妨在思考下人体结构,神经元,大脑如何发送指令到我们的四肢使之行动的。。。 ...

我真的尝试思考了,但是理不清。人体是一棵树,从人体的任何一个部位任何一个细胞出发都可以沿着那棵树到达整棵树的任何位置。人体的每一个组件可能都在大脑那有个映射,但是就像计算机一样虽然上层是丰富多彩的但是到了大脑那就只有无数个0 1这两元的加法了,不是平铺直叙的加法而是按照整棵树的结构分层编排加法。人脑是整个人体中最耗能的设备,据说人在惊吓时大脑产生的电力足以电死一只老鼠。人脑可能是通过编排那可以映射到人体各部位的上千亿个神经元来从外部系统获得输入并转化为在人体系统内可以通用流通的能量来控制整个人体系统的运动的,人脑同时也控制输出。

原文是:(后来人们通过实验发现,人在试图说外语而又说不出来时因焦虑而在脑部产生的电流,可以电死一只老鼠,可见学外语时的焦虑程度之高。)

[该贴被anycmd于2015-01-10 12:23修改过]

sinaID59023
2015-01-13 08:34
fdsa sdf

猜你喜欢
2Go 1 2 下一页