大厂Data+Agent 秘籍:腾讯/阿里/字节解析如何提升数据分析智能。 了解详情
写点什么

OOP:超脱动词 / 名词隐喻,完成更好的设计

  • 2007-11-07
  • 本文字数:894 字

    阅读完需:约 3 分钟

为了表达面向对象编程,对象常常被看作是“名词”,而确定其行为的动作则被看作是“动词”。这些“动词”一般被实现为方法,即系统地与“实施”动作的对象联系起来。在近期的一篇博客文章中, Reg Braithwaite 指出,“有两方面,一是主动方的实体应该拥有该动词的定义;二是被动方的实体不应该拥有该动词的定义,然而并非所有的‘动词’都能清楚地区分两者”。Braithwaite 举出的一些交互操作就属于这样的情况,例如将动词联系到对象身上可能导致“代码重复和信息外泄”。他认为可能有必要将一些动词与名词相脱离,并将之提升到与名词相同的抽象层次:

有些动词从属于名词,但也许有些动词独立自主会更好?比如 + 和 <=> 之类?真应该把它们从对象的奴役下解放出来,应该让它们有自己的定义。

Buko Obele 对动词 / 名词隐喻的正当性提出了质疑。他认为,与真正的动词和名词不同,对象和方法不能彼此独立:

“人”这个词放在句子中并不依赖于任何一个动词 [……]。在现实中我们并不会说一个不能“跑”的人不是一个人 [……]。在面向对象设计中,概念根本不能脱离它们的方法而存在——相反,对象严格地由它们的方法所构成,这正是面向对象的要旨。

而且,在现实的语言中使用隐喻会令“主语和动词以及其它句法关系”产生混淆,从而“产生出全新的概念”,“语言卓绝的创造力量”即源于此。但在编程中是没有隐喻的。因此,对象仅仅是一个非常狭窄的概念,它与其它概念结合在一起“以表达出对一个问题的解答”。

虽然 Buko Obele 认为应该超脱出动词 / 名词的想象,但他与 Braithwaite 的结论却殊途同归,两者都对传统的 OOP 方法提出疑问。一方面 Braithwaite 提出了分离动词与名词的一些想法,另一方面 Obele 则提倡注重他认为是不可避免的软件设计主题,“无论使用的是对象、函数还是 DSL,甚至伟大的 Lisp”:

动词“属于”谁这个问题本身就是错误的;真正的问题是一个新概念如何有意义地加入到我们现有的系统中。 [……]

名词、动词这类说法在一开始是有用的,但最终你还是要深入地思索,使出你在抽象化方面的本事,才能描述一个不那么粗浅的系统。

查看英文原文: OOP: Thinking beyond verb/noun metaphor to yield a better design

2007-11-07 09:071203
用户头像

发布了 225 篇内容, 共 70.8 次阅读, 收获喜欢 52 次。

关注

评论

发布
暂无评论
发现更多内容

SpringBoot 实战:如何优雅的处理异常

看山

springboot 实战 优雅响应

创新者谈

善宝橘

创新

手把手教你锤面试官 04——假装精通redis

慵懒的土拨鼠

第3周作业提交

饭桶

PanDownload复活了!60MB/s!附下载地址

程序员生活志

PanDownload 网盘 下载器

第3周学习总结

饭桶

2020南京国际工业互联网及工业通讯展览会

InfoQ_caf7dbb9aa8a

MySQL-技术专题-实战技巧

码界西柚

“三段三域法”应用架构模型

凌晞

架构 架构设计 技术架构

2020第十三届南京国际智慧停车展览会

InfoQ_caf7dbb9aa8a

技术革新的脉络及趋势

凌晞

技术 进步

转型敏捷123

研发管理Jojo

什么是 Kubeless?| 玩转 Kubeless

donghui

Kubernetes kubeless

MySQL-技术专题-Join语法以及性能优化

码界西柚

架构师训练营第一期 - 第四周课后 - 作业二

极客大学架构师训练营

SpringBoot-技术专题-@Async异步注解

码界西柚

深圳派发数字人民币红包!个人数字人民币钱包即将亮相

CECBC

数字货币 数字人民币

2020第十三届南京国际智慧工地装备展览会

InfoQ_caf7dbb9aa8a

2020第十三届南京国际大数据产业博览会

InfoQ_caf7dbb9aa8a

高难度对话读书笔记——目的篇

wo是一棵草

我就不服了,看完这篇文章,5大常见消息队列开发你还学不会

小Q

Java 编程 程序员 开发 消息队列

晨间日记的奇迹

熊斌

读书笔记

2020南京国际人工智能产品展览会

InfoQ_caf7dbb9aa8a

人工智能

MySQL-技术专题-SQL性能分析

码界西柚

万万没想到!ModelArts与AppCube组CP了

华为云开发者联盟

AI 技术 华为云

Java 客户端操作 FastDFS 实现文件上传下载替换删除

哈喽沃德先生

Java 文件系统 分布式文件存储 fastdfs 文件服务器

Redis-技术专题-数据结构

码界西柚

轻言业务架构图

凌晞

架构 企业架构 架构设计 架构设计原则 业务架构

技术解码 | 玩转视频播放,自适应码流技术

腾讯云音视频

音视频 转码

架构方法论之“极限审视法”

凌晞

架构 方法论 设计思维

从戚家军看组织战斗力塑造(组织的六脉神剑)

凌晞

组织

OOP:超脱动词/名词隐喻,完成更好的设计_架构_Sadek Drobi_InfoQ精选文章