也乱弹Book.Save而引OO对话

这几天博客园热闹的几乎是OO讨论.我在这里不会详细解说何为OO.因为我对OO的概念也是一层薄纸,只要随便一捅就很容易穿的……

而我写此随笔主要是我刚看了 亚历山大同志的“ 谈谈book.Save()到底OO还是不够OO ”,下面引用作者的几句话:
如果是EditBook.aspx.cs中出现了book.Save()那么我觉得是不符合OO设计的思想的,因为保存书的行为确实不是书本身发出的。但是,如果有一个用户类User,在User里有个UpdateBook的方法,在这个方法里出现了book.Save(),那么我认为这是很OO的

看来作者对Book.Save()方法是否OO的决定因素则是此方法在哪个行为层出现,这里类似把Book.Save给适配隐藏一下就是OO了,是否正确我不评论,我再引用一下两个人的评论:
# re: 谈谈book.Save()到底OO还是不够OO 2007-09-19 20:54 STS

book.Save是什么意思, 是把編程里的數據保存了, 還是描述現實中把書放回書架??

沒搞清編程和現實的區別,根本不能談OO.


# re: 谈谈book.Save()到底OO还是不够OO 2007-09-20 09:37 dali

你们觉得是 
Math.Abs(-1) 
OO呢, 还是 
-1.Abs()


这里重点的则STS的评论,编程界为什么会出现OO?这是因为程序员想借用OO在程序里来描述一个真实的现实世界。而 亚历山大同志的那个Book.Save例子则似乎只是一个数据进库的动作而已,这里为什么却要与OO拉上关系呢?而如果真的想用来描述现实,那也许 亚历山大同志的本意 则可能是某个用户将某本书入库了,那这样看来行为者则是用户而非书本,但为什么却将书本变为行为者了呢?

下面再谈谈dali的评论,第一个则只是一个包装,类似于 亚历山大同志说的将Book.Save方法放于User类去调用一样,第二个-1.Abs()则是用于描述现实世界,因为-1可以看成是自然界里的某个物体,所以它拥有自己的 特性动作,这也就是为什么Ruby称自己是“一个 真正的面向对象的语言”原因…… 


2007年09月21日13:43分添注
看了评论,却发现各位还继续停留在book.save这个方法里,在这里我说明一下,我发这文章的本意是: 当想用OO描述某个动作时必须区别哪个才是真正的行为者,这才是真正的OO想表达的(注意红色部分,书本不可能有自己入库的能力这是大家都所知道的事实,所以Save(入库)方法在书本本身出现则是不太现实的,这也就是我为什么引用STS的评论原因,他的那句话才是重点。) 

2007年09月21日18:30分添注
本来不想讨论book.save对与否的.但看到评论基本都还是围绕着这个,那我将我在 亚历山大同志那里回复说的例子转过来吧,希望大家能明白我这里真正想说是要区分对象的"行为者"是谁,才是OO想表达的东西..
# re: 又见手把手系列-面向对象扫盲-通俗的OO第一弹-【封装】 2007-09-21 18:22 Kingthy

观点同@老翅寒暑 

假如有A报摊和B报摊,现有一份报纸C,你说C送哪个报摊好呢?根据你的文章,你的选择只有一种就是C内部定义的Save方法.即不是放到A就是B报摊(因为C是一个行为者,所以只能决定一种情况).而如果再继续分出一个BookManager,则此时C的最终去处就是由BookManager来决定的.所以BookManager可以根据情况来决定送给A还是B了..也许你可以说也可以在C的内部方法Save做条件处理啊,但假如不只是有限的报摊A和B,而是有很多(现实就是这样有很多不确定性因素)那你这里的Save方法又怎么办呢?大家都知道现实的情况是如果一份报纸发版后是不可能再重更改印刷的,而行为者由BookManager施发则不同,我们可以实现不同的Manager(就好比添加不同的送报员).因为不会破坏Book的数据定义....

本文转自Kingthy博客园博客,原文链接:http://www.cnblogs.com/kingthy/archive/2007/09/21/901011.html ,如需转载请自行联系原作者
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值