【AICon】探索八个行业创新案例,教你在教育、金融、医疗、法律等领域实践大模型技术! >>> 了解详情
写点什么

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

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

关注

评论

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

数字藏品系统开发——商城盲盒h5平台搭建

开源直播系统源码

数字藏品 数字藏品系统软件开发 NFT数字藏品系统 数字藏品源码出售 数字藏品交易平台开发

饿了么为啥给你推荐这个?本地生活搜索算法解密

阿里技术

算法 性能提升

26岁从计算机视觉界“黄埔军校”博士毕业,他想为车打造一双慧眼

华为云开发者联盟

人工智能 计算机视觉 天才少年 激光感知

易观分析《2022年中国数据安全市场数据监测报告》正式启动

易观分析

技术

hive数据导入:Python脚本

怀瑾握瑜的嘉与嘉

Python hive 7月月更

用Unity做仿真,这款图表插件我不允许你不知道

恬静的小魔龙

Unity

EMQ映云科技荣登《中国企业家》2022年度“新锐100”榜单

EMQ映云科技

开源 物联网 IoT emq 7月月更

Spirng之Annotation注解与AOP使用

echoes

想要制作沙盒游戏?那么这一款插件你一定不能错过(Unity3D)

恬静的小魔龙

Unity

个人实战经验:数据建模 “账户数据是属于维度还是账户域 ”

松子(李博源)

数据仓库 数据建模 数据中台场景实践

融云超级群的「新能力」

融云 RongCloud

ios Android;

膜拜~ 终于拿到了美团老大哥分享的 Netty 源码剖析与应用 PDF

程序知音

Java 程序员 架构 Netty 后端技术

深入理解完美哈希

C++后台开发

hash 后端开发 C++后台开发 哈希函数 C++开发

带你认识8个软件设计中的谬误

华为云开发者联盟

后端 分层架构 开发

IP地址分类及范围

郑州埃文科技

IP地址 IP地址分类 IP地址范围

还在用Unity开发游戏?那你就out了,试试用Unity做一个答题系统吧

恬静的小魔龙

Unity

运行时,物体移动旋转缩放插件,“RuntimeTransformGizmos插件”使用教程(Unity3D)

恬静的小魔龙

游戏开发 Unity 插件 虚拟仿真 游戏引擎

开发动态 | StoneDB 2022年版本发布里程碑

StoneDB

云原生 #数据库 大数据 开源 #开源

还在用 ListView?使用 AnimatedList 让列表元素动起来

岛上码农

flutter ios 安卓开发 跨平台开发 7月月更

数字化转型失败的罪魁祸首是什么?

雨果

数字化转型 DaaS数据即服务

void 0 有什么意义?undefined竟然是可变的?

南极一块修炼千年的大冰块

7月月更

同城订单同城送,爆单依旧得心应手!

CRMEB

2022年中国第三方支付市场专题分析

易观分析

第三方支付

浅谈负载

Damon

7月月更

终于有人把操作系统、网络系统、线程进程、IO模型全部总结出来了

程序知音

Java 后端 操作系统 网络 TCP/IP

这次和GrowingIO工程师一起搞事情 | StartDT Hackathon

奇点云

还在被电影中吧爆炸的画面震撼?那你一定不要错过这款Unity的爆炸插件

恬静的小魔龙

Unity

同构+跨端,懂得小程序+kbone+小程序容器就够了!

Geek_99967b

小程序容器

移动研发平台EMAS 3.0全新升级,欢迎登陆阿里云官网搜索EMAS进行体验

移动研发平台EMAS

阿里云 emas 移动测试 移动研发 产品架构

2022年中国人工智能产业生态图谱

易观分析

人工智能

你离「TDengine 开发者大会」只差一条 SQL 语句!

TDengine

tdengine 开源 时序数据库

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