写点什么

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:071351
用户头像

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

关注

评论

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

项目实战接口开发SpringBoot

不在线第一只蜗牛

springboot 项目开发 区块链项目开发

日志 | AI工程化部署

AIWeker

c AI AI工程化部署

低代码开发如何快速构建AI应用

不在线第一只蜗牛

人工智能 AI 低代码

如何建设财务共享驱动下的企业全面预算管理

智达方通

全面预算管理 财务共享

Flink Forward Asia 2023 主会场精彩回顾

Apache Flink

大数据 flink 实时计算

凝心聚力 共赢计算新时代 ——2023计算产业生态大会在京圆满举办

彭飞

这就是univer

梦数技术团队

typescript 前端 React Hydrate Vue3 Typescript

文心一言 VS 讯飞星火 VS chatgpt (157)-- 算法导论12.3 4题

福大大架构师每日一题

福大大架构师每日一题

诚邀报名 | AI 向量、云原生、开源,今年的数据库热点技术都在这里

开放原子开源基金会

Java 开源 程序员 开发者 算法

【案例分享】 小鹅通|渐进式拥抱 DevOps

CODING DevOps

DevOps

诚邀报名 | GPT驱动的新程序员时代,开发者如何编程?

开放原子开源基金会

Java 开源 程序员 开发者 算法

代币开发:释放代币开发服务力量的 10 个秘密

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

SD-WAN实现MPLS成本降低

Ogcloud

网络 SD-WAN MPLS 专线网络

光纤的跳线和尾纤

小齐写代码

Axie Infinity 之后,Ronin 的潜力何在?

Footprint Analytics

区块链 以太坊 Web3 游戏 Ronin

luchysheet升级版univer产品介绍会

梦数技术团队

typescript 前端 Vue3 Typescript

华为云CodeArts Pipeline常见问答汇总

华为云

19家游戏伙伴参加鸿蒙原生游戏合作仪式,与华为游戏中心一起推动产业自主创新和高质量发展

新消费日报

诚邀报名|聚焦项目管理和社区协作,解读开源治理前沿见解和最佳实践

开放原子开源基金会

Java 开源 程序员 开发者 算法

软通咨询彭智勇(上):探索供应链金融创新路径,驱动产业破局

软通咨询

数字化转型 供应链金融 数字化咨询 管理咨询

Go 与 Rust:现代编程语言的深度对比

互联网工科生

Go rust

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