Oop 为甚么代理及;经理们认为O-O设计很差

Oop 为甚么代理及;经理们认为O-O设计很差,oop,object,Oop,Object,早在90年代初,我就参与了一个系统的设计和实现,该系统包括许多“代理”类。该系统运行良好,可合理维护。现在,我正在与新工作环境中的人们争论,他们声称“对象应该是名词”。有没有好文章解释为什么代理是个坏主意?还有,在更详细的方面,代理与对象的区别是什么(我得到了一般的想法,但具体什么是不推荐的?) 最好不是整本书:我刚刚开始读Bertrand Meyer关于面向对象软件构建的书,这需要一些时间来完成 根据Tomasz和Niko的评论,我改变了主题行(从询问文章的指针),现在邀请人们直接回答,而不是

早在90年代初,我就参与了一个系统的设计和实现,该系统包括许多“代理”类。该系统运行良好,可合理维护。现在,我正在与新工作环境中的人们争论,他们声称“对象应该是名词”。有没有好文章解释为什么代理是个坏主意?还有,在更详细的方面,代理与对象的区别是什么(我得到了一般的想法,但具体什么是不推荐的?)

最好不是整本书:我刚刚开始读Bertrand Meyer关于面向对象软件构建的书,这需要一些时间来完成

根据Tomasz和Niko的评论,我改变了主题行(从询问文章的指针),现在邀请人们直接回答,而不是给出文章的指针。

维基百科说

面向代理编程(AOP)是一种编程范式,其中 软件的构建以 软件代理。与面向对象编程相比,面向对象编程 对象(提供具有可变参数的方法)作为其核心 ()

然而,我并不认为AOP与OOP是分开的,我个人曾与JADE()合作过,它是实现FIPA标准()的最著名的框架之一,据我所知,在JADE中,代理可以拥有对象(作为java类的实例)在这个意义上,代理的概念与活动对象的概念类似(http://en.wikipedia.org/wiki/Active_object)。主要区别在于代理在黄页注册表中发布对其提供的服务的描述,并且能够通过共享语言进行通信(可能基于逻辑)。还可以提供移动性,以便运行的代理可以迁移到不同的设备,保留其执行状态。但是,这种复杂性可以在线程顶部实现,从而扩展OO范式,而不是与之形成对比

1990年,Yoav Shoham在他的人工智能研究中首次使用了代理的概念

在这个链接中,你可以找到一个肖厄姆出版的摘录,他在其中说

而OOP建议将计算系统视为由 能够相互通信且具有 处理传入消息的单独方式,AOP专门用于 通过修复模块的状态(现在称为精神状态)来构建框架 (现在称为代理)由精确定义的组件组成,称为 信仰(包括关于世界、关于自我和关于某人的信仰), 能力、选择,以及可能或类似的问题 计算包括rhese代理的通知、请求、提供、, 接受、拒绝、竞争和互相帮助。这个想法 直接从言语行为文献中借用(Grice 1989; 塞尔1969年;奥斯汀1962年)


关键词是AOP专门化了OOP框架。正如我所说的,它扩展了OOP(但不一定是以一种好的方式)。我想,当您处理可能需要扩展以处理高度可变的任务量的计算密集型系统时,您可能会希望使用这种架构,这种架构的设计和实现非常好。在其他情况下,AOP可能会过度杀伤力,但这取决于设计师/架构师的敏感性。

OOP就是关于封装g状态和相关行为结合在一起

代理、管理器和助手往往没有状态;它们通常只是一组对某些输入数据进行操作的方法。此类代码还包含大量的getter和setter,因为数据对象本身太笨,无法执行任何操作。这不是OOP,而是过程编程

好的OO设计围绕着告诉对象要做什么,而不是要求他们提供数据,然后用数据做一些事情。每当你调用getter时,问问自己是否可以让对象直接执行操作。例如,不要执行:

account.setBalance(account.getBalance() + x);
试着做:

account.deposit(x);

请注意,在某些情况下,人们可能会使用类似代理的对象,以策略或服务对象的形式,但如果操作得当,它们不会破坏封装。

看看现在有多少炒作(而且永远!)选择最好的工具。PS:投票结束是不具有建设性的。让你投票结束是不令人信服的。这是非常令人沮丧的。我故意不要求人们在这里称重,我要求指针的文章。所以通常不是一个好的地方列出命令。你应该考虑重新措置你的问题和DIR。在这里,我要明确地问“(为什么)特工是个坏主意”,而不是询问关于这个话题的文献。我抵制仅仅因为以“维基百科说……”开始回应而否决投票的冲动我想引用别人的话并没有错。重要的是总是像我实际做的那样引用来源。你为什么不喜欢它?因为维基百科几乎是任何东西的未经验证的来源,由任何人编写,几乎没有对其准确性负责。别介意引用,但我不喜欢维基百科。我明白你的观点虽然我只是想引用民间对AOP(维基百科)的理解和Shoham的观点,为什么你说代理没有状态,只是一堆方法。这实际上是错误的。AOP正好相反。代理的目标是自治,可能是智能(显然是人工智能方面的),能够执行复杂操作并合作处理更复杂操作的实体(或在工作量增加时适当扩展整体功能)它们有状态,而不仅仅是由一堆方法组成,因为它们通过消息与特定语言进行通信,符合复杂的协议和本体(请参见)@Silli:My