AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

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

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

关注

评论

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

ChatGPT:改变未来沟通方式的人工智能语言模型

wisonzhu

Vue3 内置组件

程序员海军

Vue 3 三周年连更

2023-04-19:给定一个非负数组arr 任何两个数差值的绝对值,如果arr中没有,都要加入到arr里 然后新的arr继续,任何两个数差值的绝对值,如果arr中没有,都要加入到arr里 一直到ar

福大大架构师每日一题

Go 算法 rust

node可以用nvm快速切换版本,golang如何快速切换版本?用gvm就行。

福大大架构师每日一题

Go

测试需求平台 7- 产品管理服务接口一篇搞定

MegaQi

Python 挑战30天学完Python 三周年连更

图数据库 NebulaGraph 的 Java 数据解析实践与指导

NebulaGraph

Java 数据库

Lex Fridman、Sam Altman对话摘要,从高维度看 ChatGPT 是什么?

B Impact

测试用例该如何编写?

测吧(北京)科技有限公司

测试

devops如何使用chatgpt提高工作效率

wisonzhu

DevOps

华为,找寻科技秋天里的春光

脑极体

通信 算力

算法题每日一练---组合总和

知心宝贝

数据结构 算法 前端 后端 三周年连更

Linux内核中的C语言宏:常见用法和最佳实践

Linux内核拾遗

Linux C语言

《嗨,城市猎人》首播,揭秘猎头行业职场真实状态

极客天地

TikTok视频怎么无水印保存到相册?这有啥难的,跟我学轻松变大神~

frank

TikTok

如何使用 Linux find 命令查找文件?

wljslmz

三周年连更

【JVM故障问题排查心得】「GC内存诊断」一文教你如何打印及分析JVM的GC日志(实战分析上篇)

码界西柚

JVM GC 4月日更 GC日志

一文初探 Go reflect 反射包

陈明勇

Go golang 反射 三周年连更

《一文带你看懂:亿级大表垂直拆分的工程实践》

后台技术汇

数据库 后端 三周年连更

陈小伟:从ChatGPT谈起,预测5个数据库开发趋势

OceanBase 数据库

数据库 oceanbase

华为工单宝:助力制造业数字化转型,通过项目管理实现售后服务自动化和规范化

YG科技

【Python 实战】Python 采集二手车数据——超详细讲解

BROKEN

三周年连更

易观千帆 | 2023年3月银行APP月活跃用户规模盘点

易观分析

金融 经济 手机银行

Groovy as关键字性能测试

FunTester

金蝶赵燕锡:如何选择大模型?融入To B产品?

B Impact

携程商旅白皮书前瞻:商务旅行,迎来怎样的复苏?

携程商旅

技术 企业管理 数字化 商旅系统 差旅报销

华为工单宝助力科视光学实现售后服务自动化,提升客户体验和企业效率

YG科技

ShareSDK Android SDK API

MobTech袤博科技

免费,无需魔法,媲美ChatGPT4

石云升

AI AIGC ChatGPT 三周年连更

阿里云周靖人回答:第一个提出MaaS模式背后的思考路径

B Impact

掌玩科技×OceanBase:HTAP实时数据分析,降低80%存储成本

OceanBase 数据库

数据库 oceanbase

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