东亚银行、岚图汽车带你解锁 AIGC 时代的数字化人才培养各赛道新模式! 了解详情
写点什么

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

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

关注

评论

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

浅谈业务级灾备的架构模式

得物技术

运维 稳定生产

打工人都在用的AI工具

不在线第一只蜗牛

人工智能 工具 ChatGPT

AI for Science交流会来了!科学计算前沿邀您共同探讨

飞桨PaddlePaddle

人工智能 百度 paddle 飞桨 百度飞桨

网心科技入选2023年“边缘计算技术创新先锋案例”

网心科技

边缘计算 边缘云 AIGC

对线面试官-Redis(六 如何保证 Redis 高并发 主从复制原理)

派大星

Java 面试题

prometheus Histogram 统计原理

蓝胖子的编程梦

Grafana Prometheus #Grafana #Prometheus #监控

Monibuca 中的内存复用

不卡科技

GC go语言 流媒体开发 内存池 Monibuca

华为Mate X3、P60系列用户隐藏福利:唤醒小艺解决相册搜图难题

最新动态

星辰天合公司产品完成阿里云PolarDB数据库产品生态集成认证

阿里云数据库开源

polarDB PolarDB-X PolarDB for PostgreSQL

[BitSail] Connector开发详解系列二:SourceSplitCoordinator

字节跳动数据平台

软件测试 | 接口自动化测试,如何实现多套环境的自动化测试?

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

测试

软件测试 | 性能测试人力资源规划

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

测试

极限科技受邀参加 2023 可信数据库发展大会并入选 “中国数据库产业图谱”

极限实验室

中国信通院 数据库· 北京 极限科技 2023可信数据库发展大会

软件测试/测试开发丨Python常用数据结构-元组Tuple

测试人

Python 程序员 软件测试 元组 tuple

软件测试 | 测试设计技巧—游戏类

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

测试

如何通过云管平台实现降本?降低云成本?

行云管家

云计算 云平台 云资源 云成本

Rust重写万行C,太有必要了!

高端章鱼哥

rust C语言

超算环境为什么不推荐使用 NFS

焱融科技

#高性能 #分布式文件存储 #文件存储

云原生K8S精选的分布式可靠的键值存储etcd原理和实践

不在线第一只蜗牛

云原生 k8s etcd

直播软件开发知识:实现感知网络质量功能

山东布谷科技

源码 软件 软件开发 直播 源码搭建

软件测试 |瓶颈分析方法

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

测试

以“信”数智,筑“广”生态:亚信科技CEO高念书受邀出席中国广电数字化赋能大会

亚信AntDB数据库

数据库 AntDB AntDB数据库

用Vue3编写一个简单的组件

互联网工科生

Vue 3 slots

云堡垒机比硬件堡垒机便宜吗?为什么呢?

行云管家

网络安全 堡垒机 硬件堡垒机

前端开发需要了解的工具集合

树上有只程序猿

软件测试/测试开发丨Python常用数据结构-集合Set

测试人

Python 程序员 软件测试 测试开发

沙漠觅绿洲——华为HMS生态强势赋能伙伴成功掘金中东非

最新动态

陶建辉在“2023 可信数据库发展大会”发表演讲,TDengine 入选中国数据库产业图谱

爱倒腾的程序员

涛思数据 tdengine 时序数据库

软件测试 | 测试工具与技术总结

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

测试

Clang-Format用法详解

Linux内核拾遗

vscode Clang 代码风格

华为云代码托管CodeArts Repo:保护企业核心代码资产安全

华为云PaaS服务小智

云计算 华为云 代码托管 华为开发者大会2023

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