面向对象编程中的设计模式是否是OO范式的系统性问题?

时间:2011-01-30 16:17:36

标签: oop design-patterns apache-fop

  

可能重复:
  Are design patterns really language weaknesses?

在花了多年时间阅读有关OOP和OOP技术的书籍,并且最近越来越多地参与编程的功能样式之后,推断设计模式是指向面向对象编程的系统问题的指针是公平的。整个。面向对象编程是否存在一个根本性缺陷(不要与设计混淆),因为在通过封装处理状态时,已经导致越来越多的模式来解决这种范式的问题。

我对此没有得出任何结论,但我的“直觉”感觉是OOP范式可能会出现更严重的错误。

封装的想法是否导致了比他们解决的问题更多的问题。

5 个答案:

答案 0 :(得分:6)

一个非常好的问题和一些我以前想过的事情。这是我的结论\意见:

  1. 面向对象编程的想法并非没有缺陷,但确实提供了最完整的设计范例。如果问题域表示正确,明确的目标,谁知道自己的责任,可以在一个相当优雅的方式进行交互,这非常类似于对象的现实世界的互动。 (或想法)。

  2. 为了制作一些更具抽象性的概念,具体而言,OOP会产生一些自信的陈述。 (就像封装一样,不要暴露超出你的责任和对象责任)。

  3. 像所有通用的假设,将有例外,当一个通常来说是一个好主意,在手可能不适合特定的问题。它也没有的事实,OOP,几乎涵盖了所有的问题,设想(不像AOP,甚至更复杂的语义建模,迎合特定种类的问题)的帮助。

  4. 所以在某些情况下,当你需要制作异常并摆脱OOP断言时,设计师需要一种方法来保持良好的设计,这样他们就不会偏离公认的设计实践。

  5. 所以设计模式,对我来说是一个问题只是个案研究,不会被一些OOP的核心主张的送达。除了解决方案的协作和整理,设计模式也有助于增加OOP。 (特别是对于新手设计师而言)。

  6. 注意:大多数情况下,不需要设计模式。需要明确使用模式的理由。我知道,有些的新手,想要实现一些设计模式,仅仅是因为他们知道他们(有时并非如此的新手;))。它的方形钉,圆孔问题

答案 1 :(得分:1)

好问题,几个星期前,我开始对这个问题开始怀疑,同时更多地了解Python和Scala。

我想是的,不是。 OOP肯定存在一些内在问题和状态的封装,但并不是说OOP本身就是一种糟糕的做事方式。我认为问题在于,当你拥有的只是一把锤子时,一切都变成了钉子。 OOP非常适合某些事情,首先想到的是GUI,但函数式编程也有非常明显的好处。

值得注意的是,像Scala这样的新功能编程语言并没有抛弃对象。

我没有详细考虑过这个问题,但我当然同意OOP有一些我没有看过的问题,除了设计模式的形式,它们确实解决了症状而不是疾病

答案 2 :(得分:1)

没有。虽然您看到了一些不同的设计模式,但您仍然可以在功能代码中看到设计模式。基本的区别几乎没有(如果有的话)与缺乏国家有关。相反,它主要源于(大多数)函数式语言,在创建函数时提供了足够多的功能,而另一种语言中的“设计模式”只是在函数式语言中成为函数。

如果您在具有状态的语言中提供(大致)类似的多功能性,则可以获得相同的效果。例如, Modern C ++ Design 的大部分介绍都是为了捍卫设计模式可以编码为模板的位置(本书的大部分内容都是作为模板实现的设计模式)。

答案 3 :(得分:0)

我认为当您尝试将单一编程范例应用于问题时,总会出现问题。这就是我喜欢C ++的原因:它是多范式的;它不会强迫你进入一套解决方案。

答案 4 :(得分:0)

我正在重复我的基本理论,但模型只是 - 只有模型。 OOP定义的模型是构建程序的一种非常有效的方法,对于许多应用程序编程域来说,它是完全合适的。对于某些问题空间,模型可能变得越来越有效(或效率越低,或两者兼而有之)。

潜在的隐喻存在于物理学中。许多年来,牛顿物理学确实(并且实际上仍然如此)在运动,时间和空间定律方面做了非凡的工作(在欧几里得和精确几何学的帮助下)。但是当科学开始探究问题空间的微观和宏观方面时,牛顿物理学(AND euclidian / Spherical geometry)开始崩溃。因此,我们现在拥有相对论和量子力学。它们分别在宏观和微观层面上对宇宙建模做了出色的工作,但是过于复杂地用作日常人类活动的描述符。

在很多情况下,OOP对于应用程序编程非常有效,当考虑到在线性机器的消费和处理的现实世界问题和人类交互建模所涉及的复杂性的背景下。如上所述,没有银子弹。而我的印象(从未使用过C ++)是试图成为多范式的语言也变得更加复杂,并且对于使用更高级别,更有针对性的语言更容易处理的小问题而言,并不一定有效。就像量子力学和/或相对论理论一样(我的意思是,真的,当你在高速公路上以60英里/小时的速度旅行时,是否有人对质量和速度之间的关系感兴趣?或者洛杉矶的概率是你到达时的预期?)。

在我看来,只要模型适合问题空间,坚持qa特定模型就很重要。当这种情况停止时,模型可能需要进化,并且会对此产生抵抗。将尝试将问题空间强制转换为不适合的模型(再次回顾物理学的历史,或检查太阳系的以螺旋为中心的模型的演变,并包括关键词“本轮”)。

以上所有内容只是我对事物状况的最佳理解,如果我在某个地方错过了标记,我很高兴听到一些相反的消息。