写点什么

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

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

关注

评论

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

掌握高阶定位技巧:Xpath神功解析!

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

测试

HTTPS 是如何进行安全传输的 ?

EquatorCoco

https 哈希算法 密钥

新一代智慧音视频平台,企业必备新基建

中关村科金

音视频 企业服务 大模型

2024-05-08:用go语言,给定一个由正整数组成的数组 nums, 找出数组中频率最高的元素, 然后计算该元素在数组中出现的总次数。 输入:nums = [1,2,2,3,1,4]。 输出:4。

福大大架构师每日一题

福大大架构师每日一题

一键自动化博客发布工具,用过的人都说好(oschina篇)

不在线第一只蜗牛

运维 自动化

程序员离不开的10款开发软件(必备)

伤感汤姆布利柏

从代码到洞察:使用API接口深入分析商品详情数据

Noah

Invisor for Mac v3.24激活版 - 轻松管理您的Mac文件与文件夹

iMac小白

Invisor下载 Invisor for mac Invisor 破解版 Invisor激活版

Cheetah3D for mac(3D渲染建模软件)v8.1激活版

iMac小白

Cheetah3D注册机 Cheetah3D 8新功能 Cheetah3D8下载 Cheetah3D破解版

芯盾时代IAM,三种权限管理模型按需选择

芯盾时代

权限管理 iam 统一身份认证 统一身份管理平台 最小权限管理

Sermant在异地多活场景下的实践

EquatorCoco

数据库 异地多活

当「软件研发」遇上 AI 大模型

阿里巴巴云原生

阿里云 云原生 通义灵码

单体到微服务架构的涅槃重生之路?

智在碧得

微服务 微服务架构 单体架构 单体项目 单体服务

在 Postman 中设置和使用 Mock Server

Liam

程序员 前端 Postman Mock MockServer

Mitti for Mac v2.8永久激活版:视频编辑新选择,简单而强大

iMac小白

Mitti下载 Mitti激活版 Mitti for mac

理论+实践,带你了解分布式训练

华为云开发者联盟

机器学习 华为云 华为云开发者联盟 大语言模型 企业号2024年5月PK榜

ExpressScribe PRO for Mac(易于使用的专业转录软件)v13.11注册激活版

iMac小白

Express Scribe下载 Express Scribe注册版 Express Scribe激活版

开发欧冠体育赛事直播在线观看平台:时间与费用详解

软件开发-梦幻运营部

Navicat Premium for Mac(多连接数据库管理工具)v16.3.4中文激活版

iMac小白

Navicat Premium 中文版 Navicat Premium 16下载 Navicat Premium16破解版

程序员必备的8款工具软件,第5款简直绝了!

高端章鱼哥

RAR Extractor Max for Mac - 轻松解压,高效管理

iMac小白

程序员必备的7大神器,效率飞起!

秃头小帅oi

当「软件研发」遇上 AI 大模型

阿里云云效

阿里云 云原生 通义灵码

Infuse for Mac - 影音播放新高度,轻松驾驭您的媒体库

iMac小白

Infuse 中文 Infuse播放器 Infuse 下载

深入学习和理解Django模板层:构建动态页面

快乐非自愿限量之名

django 框架

CopyClip for Mac激活版 - 你的智能剪贴板管家

iMac小白

CopyClip下载 CopyClip激活版 CopyClip mac

TouchDesigner Pro for mac(可视化原型渲染设计)v2023.11760激活版

iMac小白

TouchDesigner下载 TouchDesigner激活版 TouchDesigner破解版

Analyzing Efficiency:QCN6224 vsQCN6274 WiFi7 chipset

wallyslilly

XSKY SDS 6.4 重磅更新:NFS 性能飙升 3 倍,对象多站点等 10 多项功能强势升级

XSKY星辰天合

对象存储 软件定义存储 XSKY 星辰天合

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