写点什么

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

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

关注

评论

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

通过题目来讲一讲计算机系统概述相关知识 3 | 计算机组成与系统结构专题

Regan Yue

计算机组成原理 10月月更

一周信创舆情观察(10.18~10.24)

统小信uos

Vue进阶(幺伍肆):vue-resource 应用

No Silver Bullet

Vue vue-resource 10月月更

精益求精,零代码训练营第五期顺利结业

明道云

Linux内核漏洞精准检测如何做?SCA工具不能只在软件层面

华为云开发者联盟

Linux 二进制 漏洞 SCA工具

2021年1-9月墨天轮最受欢迎的20篇技术文章

墨天轮

MySQL 数据库 oracle

你未必知道的 WebRTC – 前世、今生、未来

FinClip

WebRTC

科技赋能乡村振兴,农林牧渔如何“拥抱”区块链技术?

CECBC

保障公有云资源安全运维小技巧-使用内网!

行云管家

公有云 内网穿透 内网 云资源 IT运维

客户服务CRM系统,提供优质客户服务

低代码小观

软件 CRM 管理工具 客户服务

阿里教学篇:一切从代码出发,Spring Boot从入门到源码到项目

Java Spring Cloud Spring Boot

银行网点业绩增长缓慢,中科柏诚本地生活高效解决

联营汇聚

20张图!常见分布式理论与解决方案

Java 架构 面试 分布式 后端

倒计时1天|StarRocks Summit 2021,为您揭开数据分析的秘密!

linux之zgrep查找压缩包文件文本

入门小站

Linux

优雅代码技巧

十二万伏特皮卡丘

[ CloudWeGo 微服务实践 - 02 ] 上手

baiyutang

golang 微服务 10月月更

OpenSearch 文档如何进行编译

HoneyMoose

ffmpeg 推拉流示例

webrtc developer

应用开发专家一席谈:开发低代码,上手低门槛,AppCube使能Citizen Developer,人人都是开发者

华为云开发者联盟

开发者 软件开发 低代码 AppCube 应用开发

云短信服务孰优孰劣?博睿数据9月云短信评测报告

博睿数据

WebRTC(66 - 96)Release Notes

webrtc developer

WebRTC

鸿蒙轻内核M核的故障管家:Fault异常处理

华为云开发者联盟

鸿蒙 异常 故障 Fault异常处理 Fault

演讲VIDEO大放送|如何打造实景三维高效业务支撑架构

焱融科技

云计算 分布式 GIS 高性能 文件存储

等保办是啥单位?属于哪个系统?有什么作用?

行云管家

网络安全 信息安全 数据安全 等级保护 等保测评

netty系列之:netty实现http2中的流控制

程序那些事

Java Netty HTTP 程序那些事 http2

030云原生之交付部署

穿过生命散发芬芳

云原生 10月月更

文本逆序翻转工具

入门小站

工具

ES入门教程

阿强

elasticsearch elastic ES

Python代码阅读(第48篇):返回最大元素的索引

Felix

Python 编程 Code Programing 阅读代码

带你了解3类预训练语音模型预测方法

华为云开发者联盟

语音 预训练 语音模型 前文 后文

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