2011年08月09日 21:25 "@jdon007"的内容
如果认为这两个事实互为因果,则需考虑怎么表达这种因果关系,“因果关系”是一种常见的事实变化模式 ...

其实我对jdon007在DCI中的角色场景的“戏剧化”解释相当赞赏,一语道破DCI天机。

表面上好像是我和jdon007争论,其实我们也是在给大家展示自己对罗素的事实观的解释,对大家都有好处,罗素提出自指问题,实际上在人思维也很显然,我很容易看出jdon007的思维问题,而jdon007也能看出或者误读出我的问题,但是我们都无法看清自己的问题,哈哈。

所以,我想我该表达的观点jdon007已经清楚了,但是jdon007不能接受,如果我再去说服他,就好象有强迫意思,违背老子的无为精神,jdon007是有自己主见的人,所以,不容易说服;有主见另外一个意思是房间里好看有用家具比较多,要等腾空了,才能再接受新家具。

那么我为什么还要写这个帖子呢?是不是冒犯了悖论呢?因为我觉得jdon007的一个观点“如果认为这两个事实互为因果,则需考虑怎么表达这种因果关系,“因果关系”是一种常见的事实变化模式。”是不符合罗素的关系论的。当然,可能和我的观点一致,因为我也在学习,所以,我们之间没有分歧。

在我之前推荐的这篇罗素文章中,有明确讲到:

在罗素提倡的人工语言中,诸命题之间的关系通过逻辑联结词“或者”、“并且”、“非”、“如果……那么”、“当且仅当”表达。这种逻辑联结词是表示命题间的关系的逻辑功能的词,它们并不是在描述事实与事实之间的内在关系

事实与事实之间并没有“或者”之类的内在关系。

在我们的日常语言中,有“因为……所以”的表达式,人们通过这一表达式可能会产生世界诸事物间的普遍的因果关系的想法,会产生世界的第一因之类的形而上学的构思。现在罗素用“如果……那么”这一表达式包括了和取代了“因为……所以”的表达式,给出了“如果……那么”间的外在关系。

即在命题逻辑中,并不考虑命题P和命题q间的内在的因果关系,而只是关心“如果p,那么q”间的逻辑上的真值关系。罗素认为,这可以防止不必要的形而上学的联想,打消世界普遍内在因果联系的一元论的形而上学。

引用结束。

所以,我也在反省自己,需要时间,我们因为都接受黑格尔马克思的一元论教育,,所以,思维中难免都带有认为“因为 所以”就是逻辑的习惯。

我会慢慢修道,来去除我前40年的根本思维。


我答应过要拿那个图书借阅系统来试刀的,时间不多,就在这里边打草稿边讨论好了。
不过请各位注意的是,该方法是我正伴随新语言所提出来的全新的软件设计方法论,在此申明首创权,
但各位可任意使用。

一、初始状态的事实,此刻图书全部位于图书馆,尚未借阅。

关于书本身的事实
BookID,书名,作者,出版社,摘要,出版时间,印数,

关于书位于何处的事实
BookId,State Comment

二、借阅过程:

这是一个动作,对动作的定义是:改变事实状态的过程,外部输入包括:借阅者和ID

Borrow(BorrowerID,BookID)
借阅之前:Id=XXX,State=In,Comment=图书的位置信息
借阅之后:Id=XXX,State=Out,Comment=借阅者代号

三、还书过程:

这也是一个动作

return(BorrowerID,BookID)

四、历史存储

历史存储尚未得到语言级别的支持,这里可以人工加入

时间,BookID,BorrowerID,动作

每进行一个借阅或者归还之后,在历史存储中加入一条

这里仅仅是一个简单的草稿,可以比较一下,随着分析进一步深入,细化,和OO分析的区别就越来越大了。
从这里可以看出,这里并不需要分析对象,划分边界,仅仅是描述事实和动作,将来还有事件,就可以很
自然地描述这个过程。

边界思维,在于定义边界,这种边界可以变化无穷。

数据库的记录方式(仅作讨论)
1)货物集合,Cargo (cargo_id, cargo_name, ...)
2) 城市集合,City (city_id, city_name,...)
3) 邮寄集合,Ship_Cargo_City (ship_id, cargo_id, city_id, ship_state)

这就是边界的体现,我们从事实中得出边界,并不是说边界油然而生的。为啥是City (city_id, city_name,...),不是其他?为啥邮寄集合Ship_Cargo_City (ship_id, cargo_id, city_id, ship_state),只有ship_state?没有其他?这就是边界,它当中一个单元,就是一个对象。

(对比)
1)货物集合,Map(or List)<Cargo (cargo_id, cargo_name, ...)>
2) 城市集合,Map(or List)<City (city_id, city_name,...)>
3) 邮寄集合,Map(or List)<Ship_Cargo_City (ship_id, cargo_id, city_id, ship_state)>//可以认为是状态,可以认为是一条Record。

分割线-----------------------------------


《火影忍者》邮寄到“北京”去,陈述这个事实:
(001, 火影忍者,北京,寄出)
《火影忍者》邮寄到“北京”了,陈述这个事实:
(002, 火影忍者,北京,寄到)

Cargo中“火影忍者”是什么?(难道这不是事物?当然,一样可以称为事实)
即使是逻辑式,一样有结构体这东西。

邮寄中,通过记录邮寄集合来展示事实。OO中的具体技术是通过Service,Context,事件等,实实在在地发生一件事,然后把事记录下来(一条记录,已成为事实)。或者说模拟一个空间来展示事实。很明显,相差就在“实实在在地发生一件事”,也就是OO为什么有事件。我认为一件事存在(发生)以后就是事实。

请问,事实(001, 火影忍者,北京,寄出)怎么来的?

banq所说到的因为所以,是不是就是指事实的由来的?



[该贴被SpeedVan于2011-08-10 10:16修改过]

2011年08月10日 10:12 "@uda1341"的内容
一、初始状态的事实,此刻图书全部位于图书馆,尚未借阅。

关于书本身的事实
BookID,书名,作者,出版社,摘要,出版时间,印数,

关于书位于何处的事实
BookId,State Comment ...

为啥位于何处不是书本身的事实呢?我认为这是你边界的划分而已,当然有理就行。


2011年08月10日 10:12 "@uda1341"的内容

这里仅仅是一个简单的草稿,可以比较一下,随着分析进一步深入,细化,和OO分析的区别就越来越大了。
从这里可以看出,这里并不需要分析对象,划分边界,仅仅是描述事实和动作,将来还有事件,就可以很
自然地描述这个过程。

边界你一直在划,你自己没注意而已。而且划分边界是OO的基础,OO不是划分边界就完事了,哪个OO项目是划分边界就完事了?划分边界是为了把话说清楚,把事实说清楚。试想模式是不是在划分边界?
[该贴被SpeedVan于2011-08-10 10:45修改过]

说得不错。

两个表完全可以合二为一,但后果是效率下降,因为前一张表是很少写入的但会被经常读,而且不允许修改的,后一张表的读写操作则频繁得多。

在日常思维中,可以将前一张表看做这本书的固有属性,但为什么是固有属性,是因为前面说到的原因,“固有属性”的“幻觉”来源于日常进行的操作,而不是来源于头脑中先天的概念。这一点非常重要。

对象幻觉的来源,道理也是类似的。我在一篇面向对象解构的连载中已经有了初步尝试。

说到划分边界,这个肯定是有的,但不需要特别地注意。如果转到事实分析方法,就会明白为什么会这么说了。边界是在对语言的分析中自然地浮现出来的,而不是从头脑中依靠先天概念来划分的。


[该贴被uda1341于2011-08-10 11:25修改过]

2011年08月10日 10:39 "@uda1341"的内容
“固有属性”的“幻觉”来源于日常进行的操作,而不是来源于头脑中先天的概念。这一点非常重要。 ...


“幻觉”来源于事实,是人去定义的,也就是边界。

事实:
《火影忍者》作者是岸本齐史,《红楼梦》作者是曹雪芹+高鹗,《数学原理》作者是罗素+怀特海。


作者是不是固有属性呢?有没有没有作者的书呢?


其实很简单,所有属性都是被抽象出来的。固有不固有跟领域相关。


2011年08月10日 10:39 "@uda1341"的内容
说到划分边界,这个肯定是有的,但不需要特别地注意。 ...

逻辑式的特点正是这个,可以说,它省略了OO以前需要做的前提事情,但两者的目的都是为了展示事实。其实OO某些部分跟逻辑式很相似,如Specification Pattern,相当于逻辑查询,OO的事实在仓储。Context、Event是在改变事实。
[该贴被SpeedVan于2011-08-10 12:33修改过]

都忘了OO吧,OO早已经死了。

这些层出不穷的设计模式,框架,都是在为OO打补丁,越搞越复杂,需要学习的东西越多,你们没觉得,除了领域内的知识以外,为什么还要学这么多模式和架构?

关于实体(对象)的幻觉仍然是有用的,但新的视角完全不需要以前那种OO理论。

2011年08月10日 10:39 "@banq"的内容
我会慢慢修道,来去除我前40年的根本思维。 ...

我试图从“内涵/外延”、“系统”、“角度”、“粒度”等概念去解释banq的边界观(可惜似乎都不是),因为这些是我相对常用的的词汇,询问banq的边界到底跟哪个比较像,是为了克服语言的障碍,提高沟通的效率。

在我看来,边界一词只是与这些概念有联系而已,还不足以将其取而代之。比如我认“边界”只是根据“角度”划分“混沌”的结果而已。就像一个西瓜,拿着把刀,从哪个“角度”切开,吃起来比较方便,切开后各个西瓜片之间就是存在“边界”了。

我关心的是这个西瓜怎么切(角度),切成多大块(粒度),才比较好吃。这个显然与需求(或条件)挂钩,要看吃西瓜的人打算怎么吃西瓜?用匙子?切成半球状,要好一些;直接吃?切成薄片,吃起来应该方便一些;用杯子? 还是把皮切了,榨成西瓜汁比较好。

回到软件,软件要怎么切分世界这个混沌?总不能拿一把刀乱砍吧,乱砍虽说也是有角度,有边界的。可是砍后,世界还是乱成一团糟。

FP把这个世界切分成“过程集合”,OO把这个世界切分成“事物集合”,“事实观”把这个世界切分成“事实集合”。我将其统称为“象”集(这是古人的智慧,我只是继承并将其传播而已),因为“过程”是一种“象”,“事物”是一种“象”,“事实”也是一种
“象”。

将“过程与事物”分开,个人认为这是二元观;认为“过程与事物”不能分开,这才是一元观。对世界这个混沌怎么切分,取决于目标与需求,或者说前提。

1)只有甲乙丙丁四人而已,没啥好分的,那么将“混沌”切分为“过程”的集合较为直接。
2)除了吃喝拉撒,没干别的,那么将“混沌”切分为“事物”的集合可能对头。
3)人多事杂,还是将“混沌”切分为“事实”的集合比较妥当。

OO的概念细胞是“事物”,不是“事实”。如果用“事物”的角度去看“事实”,或“事实”的角度去看“事物”,而不是用“事实”的角度去看“事实”,那么都可能找别扭。

每一个自然科学都有自己的概念细胞,化学是“分子”,生物是“细胞”。基于自身的概念细胞,才可能进行深入的研究。而所谓“分久必合,合久必分”,自然科学发展一定阶段,需要融合各种学科,比如生物化学,就同时使用了“分子”和“细胞”两个概念细胞。

可是,现在,我们对“事实”这个概念的理解,可以说还只是停留在相当粗浅的阶段,对其并未有进行深入的探索,就用老眼光“事物观”(OO)看“事实观”,实非明智之举。

“象”不同了,其“数”、其“理”还是原来的吗?还能用原来的吗?事实的变数,事实的变化之理是什么,我们怎么去探求与表达?这些与事物的变数,事物的变化之理相通吗?在对事实未有深刻思考前,我想我们谁都不会轻易做出结论。

改造我们的思维,永远都是头等大事,这是需要勇气的,因为蜕变往往是痛苦的。

2011年08月10日 13:35 "@jdon007"的内容
OO的概念细胞是“事物”,不是“事实”。如果用“事物”的角度去看“事实”,或“事实”的角度去看“事物”,而不是用“事实”的角度去看“事实”,那么都可能找别扭。 ...

这个随你怎么认为吧,反正我从来不把OO当事物,只把它作为一种边界思维。我认为就是如你所说的,怎么切的问题。混沌切分思维,和我不谋而合,切出来的东西就成为对象,即象。对世界解析的话,只能从世界切分出对象来解析,不切分的话,即原来的“道”,成“不可言”了。

那是那句话:

世界是事实的总和,而不是事物的总和。

这句话出自一个天才哲学家之口,而且是当今主流哲学的一个重要结论,这不是平白无故的。

从数学和物理的发展来看:
数学:希尔伯特认识到点无法定义,直线也无法定义,可以定义的只有点和直线的关系。数学的基础是公理,
公理就是一系列基本事实,再加上推导规则,就可以建构起整个公理化体系。

物理:虽然目前关于物质,还保持了传统的关于对象的思考方法,从量子理论开始,尤其是现在最前沿的弦论,
这些传统的物质概念已经不适用了,取而代之的是一种关系,和非常数学化的描述。

这一切还可以追溯到毕达哥拉斯和柏拉图,而不是老子庄子。

都忘了OO吧,OO早已经死了。

这些层出不穷的设计模式,框架,都是在为OO打补丁,越搞越复杂,需要学习的东西越多,你们没觉得,除了领域内的知识以外,为什么还要学这么多模式和架构?

-------------------------------------------
不认同你这种说法
在你看来是越来越复杂,我看来则是越来越丰富
毕竟如果只有骨感的三大支柱、五大原则,我们并不能从中受益多少

从你的发言中,似乎你在试图描述一种很玄的理论,也许是正确的
但你从来都没表述清楚

如果这个“混沌”



发生了这样一幕:已经逝去的老子庄子已经(或者将来的老子庄子可能)搞出来一个这些公理不可靠定理,这个“混沌”该怎么办?




[该贴被oojdon于2011-08-10 18:14修改过]

不说也罢。
uda1341,你一个人战斗吧。
我闪了。

你说前门楼子,人家说胯骨轴子,我还忙着搞东西,顾不上掰扯这些风马牛不相及的事情。

我觉得怎么就理解的这么复杂呢?其实我觉得我们没一个人是对的。
记得之前的“一点纯哲学”的那个帖子中有人说过,我们心中所认为的对象只是我们所关心的客观存在的一个方面;
比如你认为图书有Property1,Property2,Property3,Behavior1,Behavior2这些属性或行为,但是在别人看来同一本图书可能就没这些属性和行为,因为他不关注这些,他可能只关注Property4,Property5,Behavior3,Behavior4这些属性和行为;你关心他哪些方面,那么对象就会有哪些方面;任何对象的属性或行为都是我们认为加上去的,是我们人类的主观意识;你如你跟一个外星人说某辆车的重量是100吨,但外星人完全听不懂,因为我们所说的重量基于很多的前提条件:引力的存在,单位表示,等等;但是在外星人看来可能他们那里的引力和地球不一样,单位也不一样;所以它对这辆车的在重量这个角度的认识就完全不一样,或者在他看来根本没有重量这个属性;所以任何所谓的对象的本质属性和交互得来的属性都是相对的,都是我们人类关注某个客观存在的某个方面而已;

uda1341在前面说的那个图书借阅的例子中,他只关心书本状态变化的事实,但却没关注到借书人状态也在变化,而我就会关心,我会关心借书人借书之前拥有几本“借的书”,借书之后拥有几本“借的书”;但我不会说uda1341设计的对象或者借书交互过程不对,因为在他看来他不关心借书人的状态变化,或者按他的逻辑就是“事实的变化”;而实际上借书这一过程所影响的事实变化又何止“书本的位置变化”和“借书人所借书本的数量的变化”这连个?实际上可能已经发生了1000个事实的生成,只是我们不关心,而也许某个外星人关心呢。比如这本书从图书馆移动到了某个人的口袋中,影响了”空气的流动“,那这个是否也是事实呢?当然是,但是我们不关心。

所以不要认为我们建模的东西已经描述了整个活动的方方面面,或者所有的事实;在任何时候我们只要关心我们自己想关心的,只要把我们自己关心的某个客观存在或某个交互活动以我们所关心的方面把其描述清楚即可;

比如借书过程,我关心的东西有两点:
1)借书人所借的书本多了几本;
2)书本的状态从图书馆转移到了外面;

所以如果我认为借书人(Borrower)应该具有借书(Borrow)行为的话,我会在这个行为中做上面这两件事情;
比如:


public void BorrowBook(Book book)
{
var library = DependencyResolver.Resolve<ILibrary>();
library.LendBook(book);//通知图书馆把书借给我;
borrowedBooks.Add(new BorrowedBook(book, this, DateTime.Now));我把借来的书加到自己的已借书本列表中
}

在这个例子中,我认为图书馆只是一个可以提供借书和还书的场所,可以理解为是一个可以提供借书和还书功能的服务;比如它有如下两个功能:


public interface ILibrary
{
//别人可以调这个方法通知图书馆把某本书借出去;
void LendBook(Book book);
//别人可以调这个方法通知图书馆接受别人还给他的某本书;
void ReceiveReturnedBook(Book book);
}

谁能说我上面的设计是错误的?

所以,在我看来,我们只需要明白一点,凡事没有绝对对错,只看我们如何去关注,关注事物的哪些方面而已。在设计中我们会认为事物的哪些属性是固有属性,哪些行为是固有行为,哪些属性是通过交互得来的,哪些行为是交互行为;我觉得我们会有意识的去这些东西很好;与其大家把关注点放到非常高的哲学角度,还不如系统的分析和设计一下关于对象的“交互行为”以及“交互后得来的属性”该如何设计,放在对象内还是该动态注入;如果是需要注入,那么该用动态语言实现还是用java,c等语言实现,各种实现方式的优劣,比如用js等弱类型的动态语言是实现,那么持久化如何做?下次重建对象时如何知道上次保存的状态(当然我要求不能用对象序列化的方式保存,假设用关系数据库持久化一个js对象该如何做,我相信这并不容易,因为你如何用一个结构固定的关系数据库保存一个属性个数不确定的弱类型的对象呢),等等;如果是用c#,java等静态语言,那么如何让一个对象在运行时表现出不同的接口呢?因为你们一直强调一个对象运行时在不同的场景中会具有不同的行为,而这些行为却有不能全部定义在对象之中,那必定在其他地方,那如何做到jdon007所说的“凝聚特征”呢?

试问这些问题你们都想清楚了吗?好的东西不是总是用脑子想理论或哲学的,还需要结合实际考虑如何利用目前我们人类所已知的技术实现我们心中所想的理论的。

jdon007,你的理论很好,很有创新意思,但是你想过“凝聚特征”就这么容易吗?当然用动态语言实现除外,除非你能解决掉我上面所说的问题。我想要的最终答案是“动态变化的状态和行为”和“静态强类型对象结构”的完美结合,不管用什么方式;至少我目前还没看到完美的解决方案。所以我们要走的路还很远。