你们执着在“事物”,“特征”上,是争吵不出什么结果的。
唯一的方法是回到“事实”,关注“事实”的变化,而不是“事物”的内涵和外延。
也就是抛弃OO的世界观,回到逻辑,至少回到关系理论这个角度。
你们执着在“事物”,“特征”上,是争吵不出什么结果的。
唯一的方法是回到“事实”,关注“事实”的变化,而不是“事物”的内涵和外延。
也就是抛弃OO的世界观,回到逻辑,至少回到关系理论这个角度。
要真正搞清楚专名的含义,还得看克里普克。
唯一的方法是回到“事实”,关注“事实”的变化,而不是“事物”的内涵和外延。 ...
其实理解这个“特征”意义,我个人认为是开始理解“事实”。
颜色;位置;大小;形状
红色;(10,20);5;三角形
蓝色;(10,30);10;三角形
黑色;(20,0);3;四边形
红色;(10,30);9;四边形
蓝色;(0,50);10,圆
黑色;(30,30);9,圆
绿色;(20,0);9,圆
就以上而言,第一个项表达了什么——一个(颜色=红色,位置=(10,20),大小=5,形状=三角形)的图形。在这里我们的确看到了该图形的4项特征。而VO就是说“红色”,“(10,20)”,“5”,三角形等。改变事物,也是改变事物的属性(字段),而不是改变值的含义。如三角形一个值对象例子:三角形(边数=3,两边之和>第三边……),我们改变图形的是改变形状,即:图形.形状=正方形(),而不是通过改变形状概念:图形.形状=三角形().set(边数=4,边长相等……)。
的确这些都不是论“事实”,但这些是我论“事实”的基础和开始。
论事实:
图形列表,“红色三角形”查询通过specification模式实现。
“放大2倍”这个命令:遍历结果集,执行代码
{
oldArea = graph.getArea();
newArea = oldValue*2;
graph.setArea(newArea);
}
若果大小不是以数值保存,而是以值对象:Area(Num,AreaUnit);
{
oldArea = graph.getArea();
//构造新值对象
oldNum = oldArea.getNum();
oldAreaUnit = oldArea.getAreaUnit();
newArea = new Area(oldNum*2,oldAreaUnit);
graph.setArea(newArea);
}
以上代码一个特点,oldArea就是oldArea,oldArea不会变成newArea。其实若果操作符能够被重载,则更能说明问题,即5cm2*2 = 10cm2;那么有newArea = oldArea*2;,即无论新值如何被计算出来,旧值都不能被改变。
从“特征”的角度说,变化前后“大小特征”是变化了(从Area = 5cm2 变成 Area = 10cm2)。但从值对象角度说,值对象是没有变化过(5cm2还是那个5cm2,10cm2还是那个10cm2,所以设立值对象时,必须把equals重写)。
PS:克里普克的《命名与必然性》正在琢磨中,其PDF找得我挺苦的,不过还是找着了,看价值再决定是否买回来收藏。
你觉得有些名词是指事物,比如“圆形”,“四边形”,有些名词是指特征,比如“红色”,“黑色”
但从这个表来看,这些名称是没有什么区别的,没有什么事物和特征的区别,在编程时也表现不出来任何差别。
其实特征也只是在认识事物时说而已,真实编程时,这个概念的确很少出现。
补充一下:我说的“特征”不是“红色”、“黑色”,而是“颜色 = 红色,是红色 = 真”,“颜色 = 红色”单独存在只是一条单纯的等式,要成为“特征”,必须与事物相连。如:“花”的特征是“颜色=红色”。话语上“红色”好像是“花”的特征,是因为当中隐含了“颜色”概念,对于“花是红色的”,我们不能用等式“花 = 红”来表示(除非“=”被重载成另外意思)。
“红色”,“黑色”与“圆形”,“四边形”,在表中没有任何区别,在对象中也一样,他们只是(属性、字段的)值而已。
我认为OO世界观的本质是逻辑分析。而罗素是逻辑分析哲学的鼻祖。
关系理论高度我同意,但是不能和“关系数据库”的关系混淆,罗素认为关系是构成结构,而UML类图和“关系数据库”都是通过“关系”试图达到表达结构。
摹状词是美女蛇,是不确定的,不是好东西;谓词才是确定性的好东西,所以,我们要尽量抛弃回避摹状词,而用谓词,但实际人们生活习惯是不可能抛弃摹状词的,那么我们要用谓词等分析方法来破解摹状词的误用。这是重点。
大家多讨论谓词分析法吧,看用谓词分析法把”玫瑰是红的“如何确定地表达出来。
http://www.frchina.net/data/personArticle.php?id=5280
[该贴被banq于2011-08-04 17:05修改过]
玫瑰是红的
隐藏了属性“颜色”。
试着加入一个句子“玫瑰是花”。
我们不能既“玫瑰 = 红”,又“玫瑰 = 花”。
1、描述事物方式有:
玫瑰{
颜色 = 红;
类型 = 花;
}
但这是转化过的,仍然不太好,最直接的写法:
玫瑰{
是红的(=真);
是花(=真);
}
从这里可以看出,是都是从“特征”出发。
2、若果以命题方式呈现:
玫瑰.颜色 == 红
玫瑰.是红的 == 真
谓词分析法,不错。
文中意思是说,这个“玫瑰是红的”中的“是”有着不一样的意义。关注“是”我们就不需要考虑太多指称问题了。
玫瑰(的颜色)是名词(短语),但是“红的”是形容词,不具有指称能力。所以“玫瑰 = 红”这样的写法是不合理的。
但在编程上,我们不能把形容词直接表示啊,我们必须以“=”进行表示。
所以我觉得,要用谓词分析法,则是对谓词进行代码映射,这是否成为函数式编程呢?
罗素可不是分析哲学的鼻祖。
这里贡献最大的人是德国人弗雷格,著作是《概念文字》,这是独创性的贡献:谓词逻辑。从这本书开始,哲学分支上产生了分析哲学,他们的据点在维也纳。数学和逻辑分支上产生了计算机。维也纳小组的讨论,很多人都参加过,包括哥德尔,冯诺依曼,冯诺依曼是最早认识到哥德尔定理重要性的人。
罗素贡献虽大,也有不少人对罗素不以为然的。
事实,具有原子性,分解为“专名”和“摹状词”,会不会多此一举,陷入一些不必要的困境?
[该贴被jdon007于2011-08-04 20:37修改过]
昨晚试了分析了一些句子的专名和谓词,发现如果对二者没有定义好,是玩不转的。
这个工作谁有时间,可以先去把前人的观点收集整理,贴出来大家看看。接下来一段时间,有别的事情要做,这个工作我暂时可能不会介入。
我简单说一下自己的理解,“谁被谁修饰“,前个“谁”指专名,后个“谁”指“谓词”。
试举例,
名词被形容词修饰,名词就是指专名,形容词就是指谓词。
动词被副词修饰,动词就是指专名,副词就是指谓词。
一个句子被另一个句子修饰,前一个句子就是指专名,后一个句子就是指谓词。
上面我的解释可能有错,专名与谓词的含义可能有更多或不同的约束。
从DDD、DCI、四色原型、专名谓词等任何角度进行解释,都是为了让原语为更多得人所理解,这些角度存在共性,那是肯定的。不然,根据听者的不同,我从不同的角度进行解释的做法,就没法进行了。所谓消除各种buzzword的说法,也就没有任何依据了。
大家不妨注意下,原语的数学描述。因为从上面的任何一个角度解释,都如不原语的数学描述来的直接、简洁。
模型:表示一组时间函数,这个定义上实际上包含与事物有关的所有可能事实,甚至我们还不知道的事实。
场景:表示一段时间内的模型。这个定义实际上包含一段时间内与事物有关的所有事实。
特征:出于复用或抽象的目标从模型上进行剥离,在场景中复合,以构建完整、生动的事实或画面。特征实际上可理解为各个模型的事实集合的交集。
一个例子,不好说出特征的意义,起码也得两个例子。
比如 张三病了,李四病了。 病了就是一个共同可复用的(状态)特征。
比如 张三是经理,李四也是经理。经理就是一个共同可复用的(行为)特征。
四象图的作图方式与四色原型的作图方式是不同的,“一个中心,两个基本点”,可以作为区别二者的一个角度。
模型与特征的表达形式最好不要去硬性规定,这应该是开放的地方,也是体现创造力的地方。比如在Java中,可以表示为类;在Java中,可以表示为函数等等。
原语有局限性,这个uda1341跟我说过,那是肯定的。因为原语的包容性,必然受到我个人视野的制约,尽管我尝试突破这种制约。
还是向大家推荐古人“象、数、理”这一个思维工具。数学上分为三个流派,大致也是从这三个角度分的,比如直觉主义者、形式主义者、逻辑主义者。我个人是个“半直觉主义者”,无“象”的“数和理”我都不太愿意接受,一般会花时间去找出,找不到就意味着“数理认识”可能仅仅是主观臆断,找到了,才有可能形成相对完整、客观的认识。如果从任何一个孤立的角度进行思考,我想我们有限的智力,可能很快就会被耗尽。
大侠们再多多讨论啊,这两天我要去办户口转移的事情,还有要给同事做一个前端性能优化工具方面的分享,都没时间慢慢“享受”你们的精品讨论了。
banq,有没有前端性能优化方面的工具说明或使用经验什么的可以提供我参考下的呢?
为了不影响jdon007专贴思路,我专门写了一篇,当然原因也是看到jdon007和SpeedVan从"值对象"争辩到"特征",还有一点哲学谈的属性问题:
罗素摹状词理论与面向对象OO
[该贴被banq于2011-08-05 09:41修改过]