【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

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

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

关注

评论

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

【工作感悟】Android大厂高级面试题灵魂100问

欢喜学安卓

android 程序员 面试 移动开发

我删库跑路失败了

程序员鱼皮

Java c++ Python Linux 服务器

4轮技术面+1轮HR面,成功拿到腾讯40k*16的Offer ,详解面试流程和真题解析

Java 程序员 架构 面试

【工作感悟】2021最值得加入的互联网公司有哪些

欢喜学安卓

android 程序员 面试 移动开发

金九银十面试必备,“全新”突击真题宝典,阿里腾讯字节都稳了

Java 编程 程序员 架构 面试

使用tar 命令进行文件的归档和压缩

学神来啦

云计算 Linux 运维 linux运维

腾讯二面:Linux操作系统里一个进程最多可以创建多少个线程?

白亦杨

KDD CUP 2021首届图神经网络大赛放榜,百度飞桨PGL获得2金1银

百度大脑

神经网络 百度

底层技术支撑智慧出行,汽车智能化发展下区块链大放异彩

旺链科技

区块链产业

吹水、面试、进阶齐飞!Github霸榜的阿里分布式设计实录也太香了

Java架构师迁哥

银行业智能运维的探索与实践

云智慧AIOps社区

银行数字化转型 智能运维

Go 学习笔记之 数组

架构精进之路

Go 语言 7月日更

在数据库中如何查询表的创建时间?

华为云开发者联盟

数据库 日志 视图 GaussDB(DWS) 查找对象

我还是没有忍住,于是乎我开通了lua语言学习专栏!

李阿柯

lua 专栏

什么?C语言也能try...catch!

实力程序员

如何利用极狐GitLab CI提高生产力?

极狐GitLab

ci

Python 绑定:从 Python 调用 C 或 C++

华为云开发者联盟

c c++ Python 函数 Python 绑定

统一缓存帝国 - 实战 Spring Cache

悟空聊架构

缓存 passjava 悟空聊架构 7月日更 Spring Cache

HashMap从入门到精通,原创好文,值得收藏!

wljslmz

Java hashmap java8 HashMap底层原理

永续合约交易所开发,虚拟币合约交易系统源码

打造中国数字军人 数军科技携黑科技亮相军博会

科技热闻

RTC为何这么火?

anyRTC开发者

音视频 WebRTC RTC 实时通讯

拖延背后的故事

卢卡多多

拖延症 7月日更

百度交易中台之商品推广流程构建以及实现

百度Geek说

中台 软件架构 电商 交易

一位年薪 180 万的蚂蚁金服大佬扔给我的笔记,建议看完

Java架构师迁哥

并发王者课-铂金9:互通有无-Exchanger如何完成线程间的数据交换

MetaThoughts

Java 多线程 并发

替换 Spring Cloud,使用基于 Cloud Native 的服务治理

火山引擎开发者社区

云原生 后端 Service Mesh 服务网格

GitHub星标70K阿里大佬手写的Spring Boot实战手册

Java架构师迁哥

网安行业这几个熟悉又陌生的名词,啥帽子都清楚啦?

郑州埃文科技

DataWorks赋能企业一站式数据开发治理能力

阿里云大数据AI技术

华为云薛浩:媒体业务进入全面云化时代,云原生成为必然选择

华为云开发者联盟

云原生 媒体 音视频 华为云

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