速来报名!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:07916
用户头像

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

关注

评论

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

本夕生活小程序开发|快速搭建

ALVIS

纷多多拼团小程序开发

ALVIS

女巫面具APP开发是什么??

ALVIS

织信Informat低代码平台,赋能企业数字化飞速升级,提效300%!

优秀

低代码 低代码平台

短短29天,应对高峰100W+访问,看浙大如何交出满分答卷

TakinTalks稳定性社区

sql task6

橙橙橙橙汁丶

茶酒交易小程序开发难吗??

ALVIS

微商新零售模式开发怎么做???

ALVIS

益题库小程序找谁开发??

ALVIS

27岁到来之际,我在阿里实现了年薪40W+的小目标

编程菌

Java 编程 程序员 计算机 技术宅

新零售商城怎么开发??

ALVIS

[架构实战营]模块六作业

xyu

#架构实战营

SSR 技术概述

编程三昧

SSR 8月日更 服务端渲染

蚂蚁金服+拼多多+抖音+天猫Java面经合集,金九银十Java开发校招社招福音!

编程susu

Java 编程 程序员 计算机 技术宅

去哪儿网库存搜索在高并发场景下的探索

Qunar技术沙龙

技术 高并发 投票机制

DockerHub再现百万下载量黑产镜像,小心你的容器被挖矿

腾讯安全云鼎实验室

容器 云原生 镜像

公司刚来的京东架构师:看完我写的spring笔记,甩给了我一份文档

编程菌

Java 编程 程序员 计算机 技术宅

netty系列之:轻轻松松搭个支持中文的服务器

程序那些事

Java Netty 程序那些事

商家入驻平台开发多少钱??

ALVIS

微商新零售小程序怎么开发??

ALVIS

绿袋环保小程序开发怎么样?

ALVIS

图书馆预约小程序开发多少钱?

ALVIS

Go- 包的使用

HelloBug

Go 语言

浪潮云说丨浪潮云IBP数据工场,打造行业数据基座

云计算

关键字transient的认识

阿志

序列化 java关键字

实现"双碳"目标,看下纺织业的智慧样本

百度大脑

人工智能

撒花!!金九银十喜提offer!秋招蚂蚁金服Java研发岗四面

编程菌

Java 编程 程序员 计算机 技术宅

做了好几年Java开发,一直碌碌无为,如今靠着这份面试题跟答案,我从15K变成了30K

编程susu

Java 编程 程序员 计算机 技术宅

课程管理APP开发难吗?

ALVIS

Go- 包的制作

HelloBug

Go 语言 包的制作

京东三面惨遭被虐,关于redis,高并发,分布式,微服务一窍不通

编程菌

Java 编程 程序员 计算机 技术宅

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