软件是现实世界的抽象,关键是怎么抽?

软件是对现实世界的抽象,越是自然简单生命力就会越长,抽象的过程越符合人类思想结果越能明确。
现实世界是一个人与自然、人与人的世界。在这个世界中人与自然(物)是一次交互,因为自然(物)没有
思想,没办法给与回馈,每一次的交互都是从人发起,到人结束。而人与人之间的交互则是一个非常复杂的过程,
当一个人发出一次交互申请后,其他人是否能够回馈,如何回馈等将是一个未知因素,由此产生了流程和制度,
流程是保证人的交互顺序,而制度则保证人交互的规则。
上面的简单描述是我对这个世界的一些简单理解,是对我对世界进行了一次抽象的结果。基于上述的,我想说一下
软件的抽象。
我认为无论是面向过程也好,面向对象也好,最难处理的部分就是如何抽象现实世界中的流程。
面向过程是从一种自然的状态下描述流程,第一步做什么,第二步做什么。而对面向对象而言,流程该如何处理呢?
顺序图描述的内容依然是面向过程的,第一步对象A发出申请,第二步对象B响应。

这样和我们实际的世界是不相一致的,在实际中,首先要有一个特定的场景,在场景下,参与者均知道要做什么事情,
在这样的场景下,对象A发出一条消息,当B得到消息后根据自己的理解(规则)后同样发出消息,依次传递下去。
对象是有思想的,会根据自己的规则进行判断,而不是流程化的。最近了解了一写规则引擎方面的内容,觉得很有意思,
同上述的内容由一些类似。在一个特定的场景下,为每一个对象设定自己的规则,然后通过触发消息来引导事情的发展。

真正从思想上来说,只有面向过程和面向对象,而领域模型则更像是一个成品,无论是基于过程还是对象,思考后
得到一个符合某个领域的模型。而框架更是一个成品,框架是对特定软件开发领域的抽象后的产品,抽象的思想依然可以
是面向过程也可以是面向对象。

思想上面向过程、面向对象。
思想指导行动,行动可以是建立领域模型、建立开发框架。
行动的结果是形成了特定的领域模型、开发框架。

上面的描述自己都感觉有些乱,还请各位指教。

最近看到一段对话:蚂蚁的物流是最好的物流,而人现在的物流系统设计得是最差的,这里面至少有一个问题需要注意:流程表面上是一种过程和流程,本质上肯定不是,只是它的最终结果表现为流程和过程。
人类邯郸学步第一步就流程谈流程,就过程谈过程,好像很自然,实际很愚蠢。
老子道德经崇尚道法自然,不是追随自然的结果,而是探究自然的本质,道法自然本质,找到自然内部那旋律,无欲观其妙,有欲观其缴,缴是边界的意思,这已经和面向对象的切分划分边界很类似了。
当然关键是如何切的问题。

感谢板桥老师,一直无法很好理解对于显示世界中流程的抽象,您说的切分对象的边界是一个结果的展示,怎么去想呢?怎么用自然的方法切分边界呢?
在领域驱动模型中提到服务这个概念,这个服务是如何理解呢?服务在面向对象中的作用是什么呢?(我个人一直理解为服务是对一个场景规则的描述,在一个场景中参与者是实体,消息是值对象,而服务就是参与者之间交互的描述。比如一个简单的购买场景中,参与者有卖主、买主、商品、支付凭证,而服务则是描述这个购买的流程和规则)

还请老师指教

2011年06月15日 23:04 "@gaofangjian"的内容
在领域驱动模型中提到服务这个概念,这个服务是如何理解呢? ...

领域驱动中服务是讲得最少,也是其弱项,我想不如用DCI的场景来替代可能更合适。

谈到“规则”,应该想到规则的目标,规则是为了保证目标实现,所以,这里又可以分为战略目标描述和战术实现方式了。

如果我们可以使用目标和实现这样二分法来切分,使用战略和战术来切分,使用无为和有为来切分,那么无疑,凡是目标 战略方向等都是领域模型关注的,而其他都是听候领域模型调遣的实现路径而已。
如这个案例,我也是这样切分的:
软件思想的进化和相通
[该贴被banq于2011-06-16 10:34修改过]


以前没有听说过DCI,可能是有一段时间没有来J道的缘故吧,以后要常来,否则会落伍咯。
虽然还没有仔细看DCI,但只是从名字上划分来看,这种思想同我现在一直考虑问题的想法是一样的,我很久很久以来一直在想面向对象
这种思想如何来抽象我们的现实世界,为此也看过一些书籍和资料,很多书里面都是在讲述如何建立静态模型,更多的是用面向对象来
组织,建立静态模型结构。对于如何处理对象间的行为,如何处理多对象的动态关系则是很少介绍。如果只是用面向对象来建立静态模型
的话,数据库建模也是不错的选择。
最近因为一些需求,我开始看一些介绍规则引擎方面的内容,规则文件给我很大的触动,规则文件更像是一个场景的描述,当我显示的拿出场景这个概念之后,觉得一些问题开始变得清晰,在一个场景中,对象(角色)如何切分,如何确定对象(角色)责任变得自然一些。

我想表达的是思想会随着经验、经历不断演变的,应该是一个螺旋上升的一种形态,曲折漫长,不断斗争的过程。我个人觉得这是一个规律,
我虽然不知道未来我的思想会变成什么,但是我相信只要不断思考思想就会变,而且可能会使颠覆性的变。
在这里我想请教板桥老师,您觉得我的理解对么?如果是对的话,那么DCI也应该是一个阶段的思想成果,应该还有更加优雅简单的方式来描述
(抽象)我们的世界。

“软件是现实世界的抽象”,这个命题很鲜明,但从逻辑上说,就是错的。即使对于“模拟软件”,也不能赞成这个命题。

我的看法是:软件本身也是现实世界的一部分。它也许包含或涉及对现实世界某些部分的抽象(数据),并据此,以及自身的规则(程序),形成自己的行为——响应或与现实世界其它部分的交互。