写点什么

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

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

关注

评论

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

明基 RD280U显示器——程序员之选

Yan-英杰

程序员

TinyPro Vue 1.1.0 正式发布:增加细粒度权限、页签模式、多级菜单,支持Vite/Rspack/Farm等构建工具

OpenTiny社区

开源 前端 组件库 OpenTiny TinyVue

手撕单例的 5 种写法!

王磊

SOL项目开发代币Dapp的基本要求

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 交易所开发代币开发

打造去中心化交易平台:公链交易所开发全解析

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

Spring Cloud+Nacos+KMS 动态配置最佳实践

阿里巴巴云原生

阿里云 云原生

如何选择团队网盘?企业常用的8款工具盘点

易成研发中心

掌握API开发:分步实操技巧

幂简集成

API 入门指南

什么工具可以解决团队协作障碍?

秃头小帅oi

签约案例|GreptimeDB 为数据驱动的汽车应用带来安全高效的车云一体解决方案

Greptime 格睿科技

数据库 车联网 汽车 车云一体

深入编码规则:构建灵活且可扩展的编号生成器

inBuilder低代码平台

低代码

中国恩菲:有色金属行业如何使用 IoTDB?|用户零距离第一期

Apache IoTDB

如何管理测试用例

易成研发中心

测试管理 测试管理工具 测试用例管理

NFTScan | 11.25~12.01 NFT 市场热点汇总

NFT Research

NFT\ NFTScan

官方提供平台,导师倾情陪练,助力学生玩转开源|Greptime 参与「开源之夏」的第二年正式收官!

Greptime 格睿科技

数据库 开源 活动 开源之夏

Hume AI 语音控制功能:创建个性化语音;李飞飞空间智能首个模型:单图生成 3D 交互场景丨 RTE 开发者日报

声网

OKR工作法软件大盘点,7款优秀工具助力目标管理

易成研发中心

ETL工具观察:ETLCloud与MDM是什么关系?

RestCloud

系统集成 ETL 数据集成 MDM

一线GPMI,牵动智能大屏;一触星闪,点亮万家欢声

脑极体

AI

测试是如何跟进和管理 bug

易成研发中心

bug bug管理

CDN的作用以及哪些企业适合使用CDN?

Ogcloud

CDN 网络加速 CDN加速 CDN技术 CDN网络加速

Web自动化测试中的元素定位与显式等待

测试人

软件测试

云服务器的故障率比物理服务器更低吗?

Ogcloud

云主机 云服务器 香港云服务器 美国云服务器 云服务器租用

与火山引擎合作深化,观测云携一站式监控解决方案登陆万有商城

观测云

火山引擎

Byteman 让 i++ 百分百线程不安全

FunTester

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