写点什么

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

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

关注

评论

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

【愚公系列】2022年7月 Go教学课程 006-自动推导类型和输入输出

愚公搬代码

7月月更

Service Mesh的基本模式

阿泽🧸

Service Mesh 7月月更

【深度学习】AI一键换天

逝缘~

人工智能 7月月更

java编程思想

乌龟哥哥

7月月更

图解网络:揭开TCP四次挥手背后的原理,结合男女朋友分手的例子,通俗易懂

wljslmz

TCP 网络协议 网络技术 7月月更 TCP四次挥手

【SolidWorks】修改工程图格式

大头博士先生

SlideWorks

LinkedBlockingQueue源码分析-新增和删除

zarmnosaj

7月月更

攻防演练中沙盘推演的4个阶段

穿过生命散发芬芳

7月月更 沙盘推演

Flutter 3.0框架下的小程序运行

FN0

flutter 前端框架 小程序容器

Ubuntu安装PyCharm

IT蜗壳-Tango

7月月更

玩转Sonar

sean77

接口测试要测试什么?

Xd

Java 后端 接口测试

牛客基础语法必刷100题之基本类型

京与旧铺

7月月更

云原生应用开发之 gRPC 入门

宇宙之一粟

Go gRPC 云原生 Go 语言 7月月更

每日一题——PAT乙级1002题

武师叔

7月月更

5G NR 系统消息

柒号华仔

5G 7月月更

Http响应头处理

急需上岸的小谢

7月月更

Java多线程案例之任务定时执行器

未见花闻

7月月更

redis你到底懂不懂之list

zxhtom

7月月更

Binder核心API

北洋

binder 7月月更

接口测试进阶接口脚本使用—apipost(预/后执行脚本)

Xd

Java 数据库 接口测试工具

正则表达式

Jason199

正则表达式 js 7月月更

聊聊 Dart 的空安全 (null safety) 特性

岛上码农

flutter ios 安卓 跨平台开发 7月月更

【刷题记录】3. 无重复字符的最长子串

WangNing

7月月更

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