OOP和设计模式如何相关?

时间:2009-01-26 03:16:13

标签: design-patterns oop

设计模式不是OOP原则的扩展吗?为什么这两个概念是分开处理的?我们能否相信,如果知道设计模式的人肯定会成为OOP专家?

10 个答案:

答案 0 :(得分:38)

Design Pattern是针对常见编程问题的久经考验的解决方案。它不一定是面向对象的编程问题,但这种情况最常见。

学习编程对很多人来说并不难。这就像玩乐高积木一样:你可以随心所欲地将一些不同的部分组合在一起。有时你会做一些很酷的事情,但大部分时间你都会做一些事情=)。通常,你玩的时间越长,你就越好。

学习设计模式正在学习构建程序的好方法。你实际上是在阅读几十年来一直在建设事物的人的建议。他们将最常见的解决方案提炼成简单易懂的知识花絮,并留下令人难忘的名字。这就像数字时代的学徒:你的长辈正在给你最好的建议。你可以接受它并领先于游戏,或者忽略它并重复所有的错误。

为什么设计模式和OOP分开处理?因为它们是不同的主题。一般来说,你学习编程,然后学习如何思考编程。我希望它是另一种方式,但我不会屏住呼吸。

知道设计模式的人是否必定是OOP专家?否。

答案 1 :(得分:4)

  

设计模式不是OOP原则的扩展吗?为什么这两个概念是分开处理的?

“设计模式”是关于OOP原则,主要是由于历史事故。

我很确定ML黑客早在GoF书之前就在谈论代数数据类型的折叠。对于常见问题,这是一个经过验证的解决方案:您希望根据某些代数数据类型的内容计算单个值。同样对于map,我想。

我认为发现和编纂解决方案模板的一般(meta?)实践已经很老了 - 基本上不是“最佳实践”的全部内容吗?

我认为DP和OOP分开处理的原因是因为尽管它们重叠 - 人们会认为OOP最佳实践与OOP原理有关 - 有一些独立性:谈论设计是有意义的非OO设置中的模式。

答案 2 :(得分:3)

设计模式和面向对象编程并非必然相关。碰巧的是,大量的设计模式涉及面向对象的编程。

设计模式是程序创建的常用方法。找到字段的通用模式语言的方法可以扩展到函数编程或桥接构建,或者在架构中到达它开始的地方。 面向对象是一种特定的概念范式,一些编程模式适合于此。

这种情况就像一个维恩图 - 这些方法并没有被反对,但它们并不相同,而且它们在不同的逻辑 级别上运作

答案 3 :(得分:1)

我认为你应该选择任何设计模式书,并阅读介绍。一旦你得到了什么是设计模式,你就会回答这个问题。

答案 4 :(得分:0)

设计模式是解决OOP编程问题的常用方法。了解设计模式可以在确定如何处理情况时节省一些时间。

一些设计模式允许您执行本来不可能或复杂的事情,例如Visitor Pattern允许一组类在不知道更改的情况下获得新功能。使用普通的OOP技术,可以创建每个类实现的接口或虚拟方法。这违背了OOP open/closed principle

我不会说那些知道设计模式的人是专家OOP。

程序员一直使用模式而不研究它们,因为它们在Java和.NET框架中广泛使用。大多数Java IO名称空间由利用Decorator pattern的类组成。知道这不会使某人或多或少成为OOP的专家,但它可以帮助理解事物。

答案 5 :(得分:0)

事实上,设计模式和OOP实际上并没有任何关系。顾名思义,它们是用于实现设计的模式(或“配方”)。对于你工作的几乎所有语言都有“设计模式”,但是“四人帮”一书侧重于OO设计模式。

OO设计模式的知识可以是一个积极的指标,但在面试某人(或试图衡量他们的专业水平)时,我会看看他们熟悉的模式的复杂性,以及良好的知识何时/何地使用模式。我已经看到开发人员锁定了一个像“金锤”的模式,并在不一定适用的地方使用它。

因此,就像食谱书不能成为大厨一样,OO设计模式的知识并不一定能成为OO专家。

答案 6 :(得分:0)

面向对象编程是一种编程方法或编程概念,它将代码组织成对象和对象的关系。设计模式将建议成功构建类型/对象的方法,以解决程序中的某个场景。

这是一个有限的定义。

答案 7 :(得分:0)

我认为OOP原则是一组工具,可以应用设计模式来生成一个好的程序。

答案 8 :(得分:0)

设计模式不是OOP原则的扩展:我认为答案应该是否

为什么设计模式和OOP分开处理?

OOP原则 - 实际上是关于在设计/定义类时应遵循的约束/主题(业务对象的技术表示)。类如何表现..应该采取什么行动?删除任何其他类依赖项,使其功能..还有更多...这是众所周知的 SOLID原则

  

对于那些不了解这一点的人来说,SOLID是第一个的首字母缩略词   面向对象设计的5个原则:

     
      
  • 单一责任原则
  •   
  • 开放封闭原则
  •   
  • Liskov替代原则
  •   
  • 接口隔离原则
  •   
  • 依赖性倒置原则
  •   

设计模式 - 很大程度上是关于如何在应用程序中定义/维护编码标准。如何以标准方式简化应用程序的执行流程,以便它可以轻松维护。 。

在下面的示例中..定义了一个设计模式..它是关于每个开发人员应该如何创建对象..

//Register 
builder.RegisterType<ConsoleOutput>().As<IOutput>();                         
builder.RegisterType<TodayWriter>().As<IDateWriter>();
Container = builder.Build();

//Create instance
var writer1 = Container.Resolve<IOutput>();                
writer1.Write("HelloWorld"); 

var writer2 = Container.Resolve<IDateWriter>();               
writer2.WriteDate();
  

架构师希望为每个开发人员创建一个设计模式   必须在类的顶部创建一个接口..并且接口和类必须在工厂中注册才能创建实例。因为   建筑师想要一些统计报告,如多少   注册类(业务对象)或创建多少个对象   完成单个模块(现在可以轻松实现放一些   代码内部'RegisterType'和'Resolve'工厂的功能)..

     

因此,现在可能很清楚设计模式和OOP是very different aspect

我们能相信,如果知道设计模式的人肯定会成为OOP专家吗? - 预计会......但不是强制性的!

答案 9 :(得分:0)

面向对象编程本身就是一种设计模式。