设计模式不是OOP原则的扩展吗?为什么这两个概念是分开处理的?我们能否相信,如果知道设计模式的人肯定会成为OOP专家?
答案 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)
面向对象编程本身就是一种设计模式。