2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

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

关注

评论

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

CTF中PHP相关题目考点总结(二)

H

网络安全 CTF

MASA Framework - DDD设计(1)

MASA技术团队

C# .net 微软 框架 Framework

使用 Flink Hudi 构建流式数据湖平台

Apache Flink

大数据 flink 编程 数据湖 实时计算

DevOps进阶(四):Jenkins 实战之构建定时项目与远程触发器

No Silver Bullet

DevOps jenkins 定时器 2月月更 触发器

白盒绕过、黑盒绕过——绕过waf(一)

喀拉峻

网络安全

手把手带你基于嵌入式Linux移植samba服务

华为云开发者联盟

Linux 嵌入式 Samba UNIX系统 SMB协议

教你用Elastic Search:运行第一条Hello World搜索命令 原创

华为云开发者联盟

数据库 全文检索 索引 Elastic Search 分布式实时搜索引擎

消除if-else之为Enum添加行为实现策略模式

topsion

Java clean code

「重磅消息」OpenMLDB 官方网站 正式上线!

第四范式开发者社区

机器学习 大数据 OpenMLDB

运维安全是指什么?如何做好运维安全?

行云管家

运维 网络安全 IT运维 运维安全

Linux常用的命令

龙空白白

linux 文件权限控制 linuc

云原生多云应用利器--Karmada 总览篇

Daocloud 道客

云原生 多云管理 Karmada

数据分析实际案例之:pandas在餐厅评分数据中的使用

程序那些事

Python 数据分析 pandas 程序那些事 2月月更

极光笔记 | 极光推送业务无中断迁移上云实践

极光GPTBots-极光推送

企业上云 后端技术 上云

云原生微服务技术趋势解读

阿里巴巴中间件

阿里云 微服务 云原生 中间件

G7完成2亿美元融资

极客天地

新年新知 | 2022必读的5篇行业趋势(内附下载)

LigaAI

AI 创新 行业趋势 新能源

优秀程序员的30种思维--分析总结篇(13/100)

hackstoic

架构思维

如何构建一个流量无损的在线应用架构 | 专题中篇

阿里巴巴中间件

阿里云 云原生 中间件

如何构建一个流量无损的在线应用架构 | 专题尾篇

阿里巴巴中间件

阿里云 云原生 中间件 EDAS

DG-IoT: 开源项目职业教育助力解决过度补课难题

dgiot

物联网 2月月更 2月日更 dgiot dgiot物联网

Java线程池必知必会

CRMEB

Kubernetes应用,如何选择适合你的Kubernetes应用发布模式

阿里云云效

阿里云 Kubernetes 云原生 CI/CD 发布模式

网络编程懒人入门(十四):到底什么是Socket?一文即懂!

JackJiang

TCP 网络编程 socket IM 即时通讯IM

知名信息安全厂商渔翁信息加入龙蜥社区,共建开源生态

OpenAnolis小助手

Linux 开源 信息安全

低代码如何解锁制造业数字生态系统?

TOBESOFT特碧软件

低代码 数字化 TOBESOFT

网络安全kali渗透学习 web渗透入门 WireShark抓包及常用协议分析

学神来啦

北京冬奥有哪些AI“黑科技”?

澳鹏Appen

人工智能 自动驾驶 计算机视觉 nlp 黑科技

一周信创舆情观察(2.7~2.13)

统小信uos

声网Agora Lipsync 技术揭秘:通过实时语音驱动人像模拟真人说话

RTE开发者社区

人工智能 音视频

英特尔CEO:开启超级摩尔定律的时代,推动前沿进展

科技新消息

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