论坛首页 Java企业应用论坛

再次小结领域模型的种种观点

浏览 146171 次
该帖已经被评为精华帖
作者 正文
   发表时间:2005-12-21  
想到这里,我突然有个灵感,在现实世界中,人类对事务的认识是在不断修正的,象一个人第一次看到一个动物时,会先给其一个“类型”定义,然后发现了另外一个物体一颗“树”,它们的相同点是都能被察觉到,也有不同点是一个能跑,一个不能,于是就给他们分类,这样他们的父类就都是“物”,动物就变成“动物”了,植物就变成“植物”了,然后这个人又发现了一块石头,于是又需要对刚才的定义进行修改,这样对象的类型是不断在认识加深中进行修正,那么能否存在着这么一种语言支持这种“动态修正类型”的语言呢?
0 请登录后投票
   发表时间:2005-12-21  
横看成岭侧成峰啊.

分类都是主观的,没有唯一正确的答案.所以围绕分类展开的设计往往不那么容易灵活适应变化.
0 请登录后投票
   发表时间:2005-12-21  
ajoo 写道
横看成岭侧成峰啊.

分类都是主观的,没有唯一正确的答案.所以围绕分类展开的设计往往不那么容易灵活适应变化.


不灵活有时候就意味着准确哦:分类划定了个问题的讨论空间,我说到人:大家想到的是大家想到的是站着走路能说话的。
  世界就是这样详细了就不灵活,没办法
0 请登录后投票
   发表时间:2005-12-21  
除了主观认识,我们还能做什么?
0 请登录后投票
   发表时间:2005-12-21  
现实世界本身是一个极端复杂的复合系统,不过如果仅仅是从特定层面或角度去分析的话,还是可以得到一个相对简化的类型系统。
就以人自身为例,从医学、经济、社会或者其他角度来进行分析,都可以获得看似正交、独立的系统模型,但实际上这些模型并非毫无关联,所以简化的理论模型事实上并不能真切反应世界的复杂本质。
不过设计的目的本来就是要以最低成本提供能够解决现有问题的简洁方案,所以将就着就好了,完美设计实在是非人力能所为。
0 请登录后投票
   发表时间:2005-12-22  
nihongye 写道
除了主观认识,我们还能做什么?

除了主观认识,还有客观认识阿.

那就是,承认我们主观认识的局限,不试图用某种主观分类法来主导设计.不把分类法上升到生死存亡的高度.
0 请登录后投票
   发表时间:2005-12-22  
ajoo 写道
nihongye 写道
除了主观认识,我们还能做什么?

除了主观认识,还有客观认识阿.

那就是,承认我们主观认识的局限,不试图用某种主观分类法来主导设计.不把分类法上升到生死存亡的高度.


主观认识?客观认识?
我们来说一说盲人摸象,一群瞎子围着大象各自乱摸,摸完之后各抒己见都认为自己摸到部分才是大象的真貌,这时候我们就可以搬出冠冕堂皇的大道理:看,这就是主观认识的错误所在。我们不难发现,这些“主观认识”单独而言都是片面、不完整的,但是只要将它们集合在一起就是全面、完整的,符合“客观认识”的定义。最后不难得出结论,“客观认识”是正交而片面的“主观认识”的集合。所以最终问题可以归结为:如何判别我们的认识到底是“主观认识”还是“客观认识”?瞎子的问题比较好解决,毕竟有眼睛健全的人为他们指路,那么OO设计呢?谁是“眼睛健全”的指路人?
0 请登录后投票
   发表时间:2005-12-22  
ajoo 写道

不把分类法上升到生死存亡的高度.


先说两句题外话,我觉得人类的思维和交流(语言)是建立在给事物分类的基础上(即:以大多数人可理解的分类方式对事物进行分类并给类型命名)。

比如人们会说:
车、
自行车、
汽车;

而不会说:
带轮子的可用来运物的物、
带两个轮子的可供两条腿走路的活物用体力驱动的可用来运物的物、
拥有两个以上轮子的可自己驱动并且由两条腿走路的活物控制的可用来运物的物;
(哦,忘记了,轮子也是一个名词一个类型

人们都已经习惯基于对事物进行分类的思维和交流方式。

大家都说OO更符合人的思维方式,是更自然,容易被理解的。

所以个人感觉在作OO分析设计时的主要工作之一是在分类,分类法真的很重要,否则也不会有那么多的关于 has a / is a 的讨论了。

ajoo 写道

围绕分类展开的设计往往不那么容易灵活适应变化.


能否举个例子介绍一下,如何避开“围绕分类展开的设计”?

另外大家说的客观是指什么?(更贴近真实世界?还是更贴近大多数人的思维?或则更贴近未来的变化?你如何能了解到真实世界是什么样子、大多数人的思维是什么样子、或者未来是什么样子的?)

如何才能更客观地进行分类?
0 请登录后投票
   发表时间:2005-12-22  
wolfsquare 写道
想到这里,我突然有个灵感,在现实世界中,人类对事务的认识是在不断修正的,象一个人第一次看到一个动物时,会先给其一个“类型”定义,然后发现了另外一个物体一颗“树”,它们的相同点是都能被察觉到,也有不同点是一个能跑,一个不能,于是就给他们分类,这样他们的父类就都是“物”,动物就变成“动物”了,植物就变成“植物”了,然后这个人又发现了一块石头,于是又需要对刚才的定义进行修改,这样对象的类型是不断在认识加深中进行修正,那么能否存在着这么一种语言支持这种“动态修正类型”的语言呢?


这一点我倒是觉得有点过虑了。
毕竟我们在设计OO模型时,基本上都是局限在某一个特定领域,比如说超市销售系统和医疗系统,在这两个系统中,人分别扮演着病人和消费者两种截然不同的角色,而这两种角色基本上没有什么交集。在特定的领域范围之内,角色的特性都是相对比较稳定,发展平稳而具备延续性,一般不会出现象“物-动物-植物”这种程度的波动。
“动态修正类型”似乎也不大可行,看起来象是背离了“上帝”的设计,现今的科学研究已经表明,“上帝”是以原子类型来规划系统设计的,无论系统有多复杂,它们最终是由有限的原子类型组合而成。而我们的对象定义基本上都是凭空出现,最多只是有个聊胜于无的hyper class: object,这种见山是山、见水是水的设计可能才是根本的问题所在。
0 请登录后投票
   发表时间:2005-12-22  
在人类世界中,分类是经过长时间广泛共识后确定的,基本是稳定的,变化的风险较少。

而在作分析设计时,基本上是少数人在不完全了解实际情况的基础上进行的,分类是经过极短时间没有通过共识后确定的,而且随着时间的推移在产品也在不断发展,变化的风险很大。而在诸如java这样的环境下,分类是静态的,改变往往造成较大影响。
完全同意
age0 写道
这种见山是山、见水是水的设计可能才是根本的问题所在。
但是如何解决呢?
是1)追求分类的完美,减少变化的风险?
但是引出如下问题:如何才能更完美地进行分类?
还是2)设计不围绕分类展开?
ajoo 写道

围绕分类展开的设计往往不那么容易灵活适应变化.
那么,能否举个例子介绍一下,如何避开“围绕分类展开的设计”并且能得到OO的好处?
抑或是3)增加开发环境的动态性?
wolfsquare 写道
能否存在着这么一种语言支持这种“动态修正类型”的语言呢?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics