把握行业变革关键节点,12 月 19 日 - 20 日,AICon北京站即将重磅启幕! 了解详情
写点什么

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

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

关注

评论

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

数据赋能 | STEM学科数据如何助力教育大模型深度进化?

数据堂

人工智能 数据集 大模型 STEM教育 教育大模型

国际化 App 开发流程

北京木奇移动技术有限公司

APP开发 软件外包公司 国际化APP

低代码应用菜单避坑指南:新建 / 删除 / 导入全流程,路由重复再也不怕!

引迈信息

HAIDAKHAN数据库遭黑客攻击完整事件分析

qife122

网络安全 漏洞挖掘

【隐语SecretFlow】 Unbalanced PSI Benchmark性能测试报告

隐语SecretFlow

信创合规+效能双升!嘉为蓝鲸2025CTeam敏捷协同平台:一站式Jira迁移筑牢研发协同底座

嘉为蓝鲸

需求管理 研发协同 研发项目管理 敏捷协同平台 敏捷协同

NineData 亮相新加坡 Tech Week 2025,为全球企业提供 AI 数据管理方案

NineData

数据复制 玖章算术 NineData 新加坡科技周 AI数据管理

AI赋能研发效能!嘉为蓝鲸2025DevOps研发效能平台:7大产品覆盖需求到交付全链路

嘉为蓝鲸

项目管理 DevOps 需求管理 研发效能 研发效能分析

直播预告丨数智领航,AI践未来:人工智能+风潮下数据智能基础设施建设圆桌论坛即将开启

数新网络官方账号

DDD本质论:从哲学到数学,再到工程实践的完整指南之实践篇

canonical

领域驱动设计 DDD 可逆计算 Nop平台

分布式共识的哲学

陈一之

分布式系统 架构师 技术思维

CAD软件中的模型空间和布局空间你了解吗?

在路上

cad cad看图 CAD看图王

在线编辑DWG SDK的集成方法

WEB CAD SDK

CST软件教程:利用OPERA和CST研究行波管ppm聚焦系统中的传输问题

思茂信息

cst cst电磁仿真 CST软件 CST Studio Suite

区块链Web3项目的开发流程

北京木奇移动技术有限公司

区块链开发 软件外包公司 web3开发

案例解析 | 斯科信息RFID云仓项目应用

斯科信息

斯科信息 RFID仓储通道门 RFID隧道机

Web3 项目的开发及费用

北京木奇移动技术有限公司

区块链开发 软件外包公司 web3开发

CAD尺寸标注如何隐藏与显示?

在路上

cad CAD看图王

Volcano v1.13 重磅发布!大模型训练与推理等调度能力全面增强

华为云原生团队

云计算 容器 云原生 Volcano

采用 Flutter 开发小程序并整合为 App,是否能让 App 开发更高效?

xuyinyin

企业必看:AD 账号未清理的三大危害

运维有小邓

AD域 AD域管理

混合应用开发:2025 企业移动开发降本增效之道

xuyinyin

MyEMS + 边缘网关:偏远基站如何实现 “无人值守” 下的精准能耗管理?

开源能源管理系统

开源 能源管理系统

架构剖析:Playwright MCP Server 的工作原理与性能优化最佳实践

测试人

软件测试

30天冲刺爆单季:黑五网一卖家完整备战指南

Wolink

跨境贸易 出海企业 海外营销推广 达人营销

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