锁定老帖子 主题:我也来发邮件
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2004-04-04
Trustno1 写道 jeffrey_he 写道 对象就是对象,简单的也是对象。
ADT,Object Base和Object Oriented完全是三个不同的概念,虽然他们可能采用相同的语法。 不明白你的意思,我的意思是说邮局是个对象,就算这个邮局只有一个发送邮件的方法也应该看成是一个对象。麻烦多敲几个字,太抽象了。 在一个系统中总会有一些东西无法和现实中的东西相对应,所以就不应该看成是对象,只是由于JAVA中所有的东西都是用class来构造的,容易让我们误以为这些东西也是对象。好像一个论坛系统,通常我们会把一个版块设计成对象,然后可能设计一个控制版块的类,用来创建版块、删除版块等等工作。而这个控制版块的类在现实中没有东西对应。 楼主是这个意思么? 不过我还是不明白你究竟想表达的是什么,是想说这样做的弊端么?还是这样做是错误的? 就上面论坛的例子,把论坛系统看成是一个对象,论坛系统可以创建论坛板块、删除论坛板块等等,由于对板块的控制方法很多,把这些方法放到一个类里面,把它定义为论坛板块控制器,它是没有现实对象跟它对应的,但看成一个虚拟的对象有什么问题呢? 楼主总是提到过程,这部分跟过程有关系么? 在面向对象编程中肯定是存在过程编程的,例如完成一个业务,我可能调用多个对象协同完成。这个业务本身就是一个过程,我们当然是按过程的思路来编写程序了。 楼主写了很多,不过我还是没明白你究竟想表达的是什么东西? |
|
返回顶楼 | |
发表时间:2004-04-04
楼上的讲的都很好:
我觉得期间最为重要的,就是一个分层的问题。 什么样的方法应该放到对象上面,什么样的不放,是个很主观的东西。 有很多情况下面,一个操作都会涉及到更新N多个对象的状态,查询N多个对象的状态。这个时候,这个操作也许本身不属于某一个对象,很经常的情况呢,就是将其作为一个commander模式来实现,需要在设计的时候注意这些操作(Commander),单向的依赖于对象的方法(对象所具有的方法,不能够调用这些commander)。 有些过程或者操作是不需要作为一个commander的,也就是实用工具类(Utils),相当于函数库,实现为immutable的函数,本身没有状态。 |
|
返回顶楼 | |
发表时间:2004-04-05
jeffrey_he 写道 在一个系统中总会有一些东西无法和现实中的东西相对应,所以就不应该看成是对象,只是由于JAVA中所有的东西都是用class来构造的,容易让我们误以为这些东西也是对象。好像一个论坛系统,通常我们会把一个版块设计成对象,然后可能设计一个控制版块的类,用来创建版块、删除版块等等工作。而这个控制版块的类在现实中没有东西对应。
楼主是这个意思么? 对,我基本上就是这个意思! jeffrey_he 写道 不过我还是不明白你究竟想表达的是什么,是想说这样做的弊端么?还是这样做是错误的?
就上面论坛的例子,把论坛系统看成是一个对象,论坛系统可以创建论坛板块、删除论坛板块等等,由于对板块的控制方法很多,把这些方法放到一个类里面,把它定义为论坛板块控制器,它是没有现实对象跟它对应的,但看成一个虚拟的对象有什么问题呢? 楼主总是提到过程,这部分跟过程有关系么? 在面向过程思考的年代,我们常常把真实世界的运行方式,“看成”一个一个的过程。而在现在,面向对象的思想成为主流,于是我们就常常会把只跟计算机相关的工作过程,“看成”一个一个的对象。 这样的两种“看成”,就是对实际情况的扭曲。这样的扭曲,会使得写出来的程序不自然,不合理。 我想指出的,就是面向对象的思考方式,应该集中在真实世界,或者现在常说的“业务层”,而不是像现在这样,无所不在。 jeffrey_he 写道 在面向对象编程中肯定是存在过程编程的,例如完成一个业务,我可能调用多个对象协同完成。这个业务本身就是一个过程,我们当然是按过程的思路来编写程序了。
你说的过程,是一个对象内的某个方法内的过程,与我说的不是一个意思。 jeffrey_he 写道 楼主写了很多,不过我还是没明白你究竟想表达的是什么东西?
我写了很多,因为要说出的这个太......,所以需要做很多的铺垫,我才敢说出来——“面向对象不应该用在所有的层面上,那样的思考方式,是有害的!”。 |
|
返回顶楼 | |
发表时间:2004-04-05
有对象未必就是OO。
ADT,Object base也都是基于对象的概念,但是和OO却一点关系都没有 |
|
返回顶楼 | |
发表时间:2004-04-05
Trustno1 写道 有对象未必就是OO。
ADT,Object base也都是基于对象的概念,但是和OO却一点关系都没有 CSDN_面向对象编程:Java中的抽象数据类型 说ADT和OO没有一点关系,似乎有点过了...... 但是关于Object base的不同于OO介绍,我没有找到,能介绍一下区别吗? |
|
返回顶楼 | |
发表时间:2004-04-05
我晕,扯到这些概念性的东西上去了,完全走题了吧?
|
|
返回顶楼 | |
发表时间:2004-04-05
庄表伟 写道 Trustno1 写道 有对象未必就是OO。
ADT,Object base也都是基于对象的概念,但是和OO却一点关系都没有 CSDN_面向对象编程:Java中的抽象数据类型 说ADT和OO没有一点关系,似乎有点过了...... 但是关于Object base的不同于OO介绍,我没有找到,能介绍一下区别吗? 6.0以前的vb,javascript,都是object base的语言 |
|
返回顶楼 | |
发表时间:2004-04-05
庄表伟 写道 我写了很多,因为要说出的这个太......,所以需要做很多的铺垫,我才敢说出来——“面向对象不应该用在所有的层面上,那样的思考方式,是有害的!”。
不至于吧,这地球人都知道。“有害的”这个说法有点耸人听闻,如果改用“笨重的,x钝的”可能会更好些。 |
|
返回顶楼 | |
发表时间:2004-04-05
xanada 写道 不至于吧,这地球人都知道。“有害的”这个说法有点耸人听闻,如果改用“笨重的,x钝的”可能会更好些。
我当然可以选择一个更加“温和”的评价词。 但是相比面向对象思想带来的种种“问题”。言辞激烈一些,可能能够吸引更多的注意。纠枉必须过正,应该就是用在这样的问题上的吧。:) |
|
返回顶楼 | |
发表时间:2004-04-05
jeffrey_he 写道 我晕,扯到这些概念性的东西上去了,完全走题了吧?
我倒不是不当心扯到这些概念性的东西上去的。 我更愿意承认,我是处心积虑要扯到这些概念性的问题上来的。 发邮件只是一个引子,面向对象的问题,当然可以从讨论这个例子入手。 再者说,概念性的东西,不搞清楚,怎么能够更好的编程呢? |
|
返回顶楼 | |