论坛首页 Java企业应用论坛

敲响OO时代的丧钟!——DJ对于数据持久化的支持(3)

浏览 192827 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-07-15  
一切都是对象显然很难破解,但是有一个实际问题却可以讨论,就是OO是描述世界的最好方法吗?难道不应该在不同领域使用不同方法来描述世界吗?
0 请登录后投票
   发表时间:2005-07-15  
庄表伟 写道
to:ozzzzzz
说说你对“一切都是对象”的理解吧。

你对我、徐昊、Gigix、老曹等等等等人的失望,我不太明白。你上面的这篇文章,我也没看明白。

你说:只要是使用名词法就不可能做到《一切都是对象》
那么,动词也是对象、副词也是对象、形容词也是对象、代词也是对象、介词也是对象、如此等等,一切能够说出的语言中的每一个词都是对象?

你想说的是这个意思吗?


名词即数据。再例如“关联”,同样是一种数据。但数据,无非是一组自洽的操作接口而已,即数据也是操作。因此名词/动词最终都可以归结到操作。
0 请登录后投票
   发表时间:2005-07-15  
前面的讨论太长了,还涉及到哲学,我没有看,只看最近的一篇OO和数据库的blog:

引用
1、关系:也就是徐昊所说的边语义。在OO中,对象与对象之间是否存在关系,在对象之外是不知道的。当一个对象被封装起来以后,他内部是否使用、关联、组合了其他的对象,是不可知的。因此,我们看到的通常的OO图,只能说是Object被剖开了以后的对象图。事实上,关系是被隐藏起来的。而在RDB中,关系非常明确的被定义与标识出来,一目了然。这将带来巨大的描述效果。相比起UML Class图,E-R要容易理解得多。


这段话基本上是无稽之谈,对象与对象之间的关系描述是非常清楚,并且一目了然的,庄偷换了一个基本概念:把接口契约偷换成了接口实现代码,所以结论是荒谬的。

引用
Primary Key:这是RDB特有的概念,在OO中没有对应概念。因此,我们要判断两个对象是否相等,就相当困难。如果每个对象都有一个“一次设置,终身不变的Primary Key”,那么对象之间的比较语义,就能够被清楚的区分为:IS和LIKE。IS就是Primary Key相同的两个对象,他们应该完全一致,甚至在内存中,也只应该保存一份。LIKE,就是成员数据相同的两个对象,他们不是一个东西,仅仅是像而已。


对象相等语义是指他们的内存地址是一样的,在Java中,使用对象的hashCode来判断。hashCode就是OO的PK。看来庄子的Java基本功有待加强。

引用
SQL:这也是RDB特有的语言,而在OO的世界里,查找一个对象的工作,从来没有被规范过。


ODMG就是OO数据管理规范,ODMG1.0是1993年发布的,覆盖了C++,smalltalk,Java等面向对象编程语言,现在ODMG规范已经到了3.0。在Java的O/R Mapping中,如JDO和Hibernate都使用了该标准。可见ODMG不但由来已久,而且已经规范了n多年了。

前面的帖子没有怎么看过,不过这个最新的blog实在漏洞百出,很多基本问题都搞错了,实在看不下去了,只好跳出来指正一下。
0 请登录后投票
   发表时间:2005-07-15  
引用
hashCode就是OO的PK

小失误.hashCode不是pk,它可能重复。java没有一个函数能保证返回一个pk。

不过obj1==obj2够用了。
0 请登录后投票
   发表时间:2005-07-16  
ajoo 写道
不过obj1==obj2够用了。

In distributed computing environment, it's not enough.
0 请登录后投票
   发表时间:2005-07-16  
JavaCup 写道
ajoo 写道
不过obj1==obj2够用了。

In distributed computing environment, it's not enough.

也对。饿了还不能当饭吃呢。
0 请登录后投票
   发表时间:2005-07-16  
以个人的愚见,《一切都是对象》改为<一切都是联系>就对了,就像质点没有形状和大小一样,单独的对象什么也不是,但可代表任何事,只有当它与其它对象发生联系时它在某方面的特征才被确定下来(这个特征取决于关联它的对象).
个人认为真正意义上的对象是不存在的,只是联系发生的交汇点.
0 请登录后投票
   发表时间:2005-07-17  
everything is object 的小示例

背景: 文本输入框是常用的交互控件,可以满足一般的信息录入需求,但是很多需求并不满足于此,比如说数值输入,要求只能接受数值输入。
要解决数值输入框的问题,最少有四种解决方案。

方案1:一般事件处理,对于有数值输入要求的文本输入框,只需要捕捉事件进行处理即可
TextBox tb = new TextBox();;
tb.TextChanged += new TextChanged(text_changed);;

void text_changed(object sender);
{
	TextBox tb = sender as sender;
	// check text
}


方案2: 方案1解决了问题,但是代码复用只能用copy, paste方式,所以我们将检查工作移交给TextChecker,不过这种方式常被批评为过程式的OO设计
TextBox tb = new TextBox();;
tb.TextChanged += new TextChanged(text_changed);;

void text_changed(object sender);
{
	TextBox tb = sender as sender;
	// check text
	TextBoxChecker.CheckNumeric(tb);;
}

class TextBoxChecker
{
	static void CheckNumeric(TextBox tb);
	{
		// check text
	}
}


方案3: 方案2虽然解决了检查方法复用的问题,但是每次去写事件响应代码并不是件令人愉快的事情,这次采用标准的继承方式解决问题
class NumericTextBox : TextBox
{
	NumericTextBox();
	{
		this.TextChanged += new TextChanged(text_changed);;
	}
	
	void text_changed(object sender);
	{
		TextBox tb = sender as sender;
		// check text
	}
}

// usage:
TextBox tb = new NumericTextBox();;


方案4: 使用继承必然会带来继承树的问题,为了避免这种情况,将数值检查职责对象化,解除继承依赖关系
class NumericChecker
{
	NumericTextBox(TextBox tb);
	{
		tb.TextChanged += new TextChanged(text_changed);;	
	}
	
	void text_changed(object sender);
	{
		TextBox tb = sender as sender;
		// check text
	}
}

// usage
TextBox tb = new TextBox();;
new NumericChecker(tb);;


“everything is object”实际上指的是“everything都可以是object”,只要有天马行空的想象力,everything is possible,这就是OO设计的精髓,理论和原则只能灵活运用,而不是用来套的。
0 请登录后投票
   发表时间:2005-07-17  
一种新的语言(1)

http://spaces.msn.com/members/zbw25/Blog/cns!1pA6-3FOo9yNp_4lmEHxdDqA!302.entry

一种新的语言(2)

http://spaces.msn.com/members/zbw25/Blog/cns!1pA6-3FOo9yNp_4lmEHxdDqA!303.entry
0 请登录后投票
   发表时间:2005-07-18  
庄子的新语言终于出来了。:D  千呼万唤始出来。

Check 部分,相当于contraint吧。post-check after setting properties?
CheckMethod 都是静态方法?

引用

datatype IsoscelesRightTriangle as IsoscelesTriangle,RightTriangle{

}


as 是否相当于 多重继承?是否具有多态的特性?

引用

datatype Polygon:ValueList{


: 表示继承?

数据 和 操作 之间是多对多的关系。
操作(方法代码)可以重用,数据本身(不是包装成类的object)也可以重用。
是这样吗?
0 请登录后投票
论坛首页 Java企业应用版

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