这几天博客园热闹的几乎是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的数据定义....

也乱弹Book.Save而引OO对话相关推荐

  1. Python操作excel基础

    前言 导航页--数字IC设计SOC入门进阶 基于自己实际工作使用情况,做下面学习记录和整理. python 数据类型转换语法str( ) 可以把其他类型数据转化为字符串类型 int( ) 可以把其他类 ...

  2. PSD模版如何变成网页模版

    PSD格式的模板,怎样弄到Dreamweaver 中去编辑?? 1.psd源文件一般都是不能直接放到DW里的~一般都是用PS打开,然后用PS的切片工具切好图,存为gif或者jpeg格式再插入到DW里面 ...

  3. 宇文成 关于node基本命令

    关于node基本命令 npm网站( npmjs.com ) npm( 是命令行工具 ) npm install --global npm ( 自己升级自己 ) npm -v (npm -version ...

  4. 实现OO的最后一公里

    一切要从<系统分析师UML实务手册>谈起 在台湾,有许多读者手上同时拥有<系统分析师UML实务手册>及<C++程序员UML实务手册>这两本书.有些读者看完前者之后, ...

  5. 对话屏幕Dynpro(se51)

    对话屏幕Dynpro(SE51) 屏幕元素 屏幕属性 l  屏幕序号(Screen number).四个数字组成的序列号,用于在程序中确定屏幕,该序号在同一个ABAP程序内部是唯一的. l  屏幕类型 ...

  6. OSChina 周四乱弹 ——遇上色狼后辣椒水的妙用!

    2019独角兽企业重金招聘Python工程师标准>>> @白糖就青桔 : 烟波定,眉黛青颦, 千帆过境明霞倩影如昔. 御剑行,归期何期, 春风和煦回眸原是不经意. 霜雪凝,暗香为引, ...

  7. OSChina 周四乱弹 ——世界满满的恶意

    2019独角兽企业重金招聘Python工程师标准>>> @codeIsMyGirl : 再次体验离我而去的感觉.secret base~君がくれたもの~ secret base~君が ...

  8. 对话屏幕Dynpro(SE51) 屏幕元素 屏幕属性 PAI事件的触发、屏幕元素Function Code设置 屏幕流逻辑Screen Flow Logic 对话屏幕中的字段命名大小写问题

    对话屏幕Dynpro(SE51) 屏幕元素 屏幕属性 l  屏幕序号(Screen number).四个数字组成的序列号,用于在程序中确定屏幕,该序号在同一个ABAP程序内部是唯一的. l  屏幕类型 ...

  9. OSChina 周三乱弹 ——吸血鬼哪有这么色!

    2019独角兽企业重金招聘Python工程师标准>>> @Soi : 有些东西,一旦失去了,无论做什么,都无法弥补!-- 坚持走自己的路,总有人和你同行. 手机党要听音乐,请戳(这 ...

  10. 对话腾讯AI Lab:即将开源自动化模型压缩框架PocketFlow,加速效果可达50%

    整理 | Jane 出品 | AI科技大本营 [导语]腾讯 AI Lab 机器学习中心今日宣布成功研发出世界上首款自动化深度学习模型压缩框架--PocketFlow,并即将在今年10-11月发布开源代 ...

最新文章

  1. 将JavaScript字符串全部转换为小写吗?
  2. 论文笔记:CycleGAN
  3. ubuntu让/etc/hosts修改后立刻生效
  4. 精通Android开发 1
  5. 【uoj#37/bzoj3812】[清华集训2014]主旋律 状压dp+容斥原理
  6. 实现超级玛丽上下左右运动
  7. webpack打包原理
  8. 使用二级域名+gh-pages分支构建自己的静态页面
  9. mac下增加eclipse内存
  10. 实现微信支付宝收款到账语音提醒
  11. matlab中pid参数整定,基于MATLAB/Simulink的PID参数整定
  12. Chrome 的人都需要知道的「神器」扩展:「油猴」使用详解
  13. php的include once,php include_once的使用方法详解
  14. quest2 APK破解游戏包安装器 如何安装方法
  15. c语言中strlen什么作用,strlen函数在c语言中的用法是什么
  16. 应用程序-特定权限设置_在您的应用程序中管理付款:设置网站-代码
  17. 百度地图Javascript API 使用记录
  18. Tyrion中文文档(含示例源码)
  19. arm服务器安装docker及docker-compose
  20. Quick BI可以帮助我们大大提升响应速度

热门文章

  1. 力扣-888 公平的糖果交换
  2. L1-005 考试座位号 (15 分)—团体程序设计天梯赛
  3. Android ListView 获取Item的值和得到每一个Item的view对象以及得到他们所对应的控件值
  4. 微服务深入浅出(4)-- 负载均衡Ribbon
  5. P3707 [SDOI2017]相关分析
  6. Ubuntu中使用dnw工具:没有找到/dev/secbulk0
  7. skynet 学习笔记-netpack模块(1)
  8. VC++控件加载BMP图片(静态和动态方式)
  9. ESXi添加第三方驱动
  10. LAMP架构调优(六)——开启长链接