oop - OOP什么时候更适合用于?

  显示原文与译文双语对照的内容

自从我开始学习object-oriented编程之后,我经常阅读文章/博客说函数更好,或者不是所有的问题都应该建模为对象。 在你的个人编程冒险中,你什么时候认为问题可以通过OOP更好的解决?

时间:

没有一个快速的规则。 当你更好地解决问题并在OO思维中思考时,你可以用OOP解决问题。 对象方向只是另一个工具,它通过尝试使计算成为解决问题的更好工具。

但是,它可以更好地重用代码,也可以导致更整洁的代码。 但这些高度推崇的品质,in-relity,几乎没有真正的价值。 将面向对象技术应用到现有的功能应用程序可能会引起很多问题。 技能在于学习许多不同的技术,并在手边应用最适合的问题。

OO常常被引用为一个类似于软件开发的解决方案,在那里,很多时候都不适合应用到这个问题。 它常常会导致overengineering遇到一个问题,达到完美的解决方案,当常常是不必要的时候。

实际上,OOP不是面向对象编程,而是将面向对象的思想映射到能够支持面向对象技术的编程语言。 面向对象的技术可以由非面向对象的语言支持,并且可以在函数语言中使用一些技术来利用优势。

例如我已经开发了大约 20年的OO软件,所以我倾向于在解决问题时考虑OO术语,而不管我在编写什么语言。 目前我正在使用 Perl 5.6实现多态,它并不支持它。 我已经选择这样做,因为它将使代码维护和扩展成为一个简单的配置任务,而不是开发问题。

不确定这是否清晰。 在oo法院aare有困难的人,还有人在功能上法庭。 然后,有一些人尝试了这两种方法,并尝试从每一个。 两者都是完美的,但是无论语言是什么,都有一些非常好的特性。

如果你想学习 OOP,不要仅仅关注 OOP,而是试着利用面向对象的分析和面向对象的原则来解决整个问题解决方案。

我是一个老的计时器,但也已经编程了很长一段时间了。 我个人反对使用OOP来使用它。 我更喜欢对象有特定的理由,因为它们对一些具体的事物建模,并且它们有意义。

我与许多新开发者的问题是他们没有使用他们所创建的代码的资源概念。 在处理大量数据和访问数据库时,"完美"对象模型可能是性能和资源最糟糕的事情。

我的底线是,如果把它作为对象,然后将它作为对象编程,只要你考虑对象模型实现的性能/资源影响。

当你对状态和关联行为进行建模时,我认为它是最好的。 我想这有点模糊,但我不确定这里是否有一个完美的答案。

关于OOP的事情是它允许你封装和抽象数据和信息,这在构建一个大系统方面是一个真正的好处。 你可以对其他范例进行同样的操作,但是它似乎在这个类别中特别有用。

它也取决于你使用的语言。 如果它是一种具有丰富OOP支持的语言,你应该使用它来实现你的优势。 如果没有,那么你可能需要寻找其他机制来帮助将问题分解为更小更容易测试的部分。

我被卖给了 OOP 。

当你可以定义一个问题的概念时,它很可能被封装在一个对象中。

OOP的问题是一些人使用了它,使得他们的代码更加难以理解。 如果你对对象和你放入服务( 静态类)的内容非常小心,你将受益于使用对象。

不要把不属于对象的东西放到对象中,因为你需要你的对象来做一些你最初没有想到的事情,重构并找到最好的方法来添加这个功能。

无论如何基于对象,函数或者过程代码,都有 5个标准。 记住所有这些样式都可以使用所有语言,它们是风格的 。 所有这些都是以一种"我应该在这种情况下偏向 OO"的风格编写的"?

系统非常复杂,并且有大约 9 k 位置( 只是一个任意级别) 。 --系统变得越来越复杂,封装复杂性所带来的好处相当大。 其他技术相比,与其他技术相比,你倾向于封装更多的复杂性,这在这个级别上非常有价值。 基于对象或者程序应该优先于。 ( 这并不是提倡一种特定的语言) 。 OO C 符合这些特性oo C++ 在我看来,多一种语言和一个臭名昭著的名声漏水的抽象和吃商店甚至 1平庸的能力/固执程序员吃午饭)。

你的代码不是对数据的操作( 例如 。 基于数据库或者数学/分析) 。 基于数据库的代码通常更容易通过程序风格表示。 基于分析的代码通常更容易体现在函数风格中。

你的模型是对( OO在模拟时擅长)的模拟。

你正在做的事情是,基于对象的子类型分派的对象是有价值的( 又名,你需要将消息发送给所有对象的类型和不同的亚型和得到一个合适的,但不同,React出他们所有人) 。

你的应用程序不是 multi-threaded,特别是在non-worker任务方法类型的代码库中。 面向方面的程序在多线程和需要不同线程来执行不同任务的程序中是相当有问题的。 如果你的程序具有一个或者两个主要线程,并且许多工作线程执行相同的操作,则OO程序的muddled control流更容易处理,因为所有的工作线程都将被隔离,并且可以看作是单独的代码段。 考虑任何其他的范例。 功能擅长多线程( 副作用是一个巨大的好处) 和基于对象的编程可以给你boons一些面向对象的封装,然而更多的可追踪的过程代码的关键部分代码库。 当然,过程在这个竞技场中也很出色。

有些地方,OO不是那么好的地方,就是你处理"集合集"数据的地方。 OO往往使得基于集合的操作变得更加困难,因为它不是真正设计为优化两个集合的交集或者两个集合的超集。

此外,有时函数方法会更有意义,比如这个示例取自 MSDN:

例如考虑编写一个程序将一个XML文档转换成不同的数据形式。 尽管可以编写一个通过XML文档解析的C# 程序,并应用各种if语句来确定文档中的不同操作,但是,一个公认的方法是将转换写成可以扩展样式表语言转换( XSLT ) 程序。 毫不奇怪,XSLT在它的内部有大量的功能性

我发现用'事物'来思考一个给定的问题有帮助。

如果问题可以被认为是有一个或多个'事物', 其中每个'事物'有许多属性或指其状态的信息,和一个可以执行的操作数,然后oop可能是路要走!

学习面向对象编程的关键是学习设计模式。 通过了解设计模式,你可以在需要类和不需要时看到更好的。 编程使用面向对象语言的类和其他特性一样,它依赖于你的设计和需求。 像算法设计模式是一个更高级别的概念。

设计模式与传统编程语言的算法扮演类似的角色。 设计模式告诉你如何创建和合并对象来执行一些有用的任务。 和最好的算法一样,最好的设计模式是通用的,可以应用到各种常见问题。

我认为这更像是一个关于你的问题。 某些人在功能术语方面认为更好,其他人更喜欢类和对象。 我想说,OOP在与你的内部( 主观) 心智模型匹配时更适合。

面向对象代码和过程代码具有不同的扩展点。 面向对象的解决方案使得添加新的类变得更容易,而不修改现有的函数( 查看Open-Closed原理),而程序代码允许你在不修改现有的数据结构。 系统的不同部分需要不同的方法,具体取决于所期望的变更类型。

...