代码之家  ›  专栏  ›  技术社区  ›  jfs

什么时候OOP更适合?[闭门]

oop
  •  28
  • jfs  · 技术社区  · 18 年前

    自从我开始研究面向对象编程以来,我经常阅读文章/博客,说函数更好,或者不是所有的问题都应该建模为对象。从您的个人编程经历来看,您认为OOP何时能更好地解决问题?

    16 回复  |  直到 15 年前
        1
  •  29
  •   eriegz    8 年前

    没有硬性规定。当你能更好地用面向对象的思维解决问题和思考问题时,OOP能更好地解决问题。面向对象只是另一种工具,它是通过努力使计算成为解决问题的更好工具而产生的。

    OO经常被引用为软件开发的涅磐式解决方案,但是有很多时候它不适合应用于手头的问题。这常常会导致对问题进行过度设计,以获得完美的解决方案,而实际上这并不是必须的。

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

    不确定这是否清楚。在OO法庭上有一些人很强硬,在功能法庭上也有一些人很强硬。还有一些人尝试了这两种方法,并试图从中吸取最好的。两者都不是完美的,但都有一些非常好的特点,你可以利用,无论什么语言。

    如果你想学习OOP,不要只关注OOP,而要尝试将面向对象分析和一般OO原则应用到整个问题解决方案中。

        2
  •  8
  •   bruceatk    18 年前

    我遇到的问题是,很多新开发人员对他们所创建的代码所消耗的资源没有概念。在处理大量数据和访问数据库时,“完美”对象模型可能是性能和资源方面最糟糕的事情。

        3
  •  5
  •   Mike Stone    18 年前

    我认为,当您对与状态和这些状态上的相关操作有关联的东西进行建模时,它最适合。我想这有点模糊,但我不确定这里是否有一个完美的答案。

    OOP的好处在于它可以让你封装和抽象数据和信息,这对于构建一个大型系统来说是一个真正的好处。您可以对其他范例执行相同的操作,但OOP似乎在这方面特别有用。

        4
  •  5
  •   mbillard    18 年前

    我被卖给了OOP。

    OOP的问题是,有些人过度使用了它,使他们的代码更难理解。如果您对在对象中放置的内容以及在服务(静态类)中放置的内容非常谨慎,那么您将从使用对象中获益。

        5
  •  4
  •   Michael Langford    15 年前

    您是否应该支持面向对象而不是基于对象、函数或过程的代码,有5个标准。记住,所有这些样式在所有语言中都可用,它们是 . 所有这些都是以“在这种情况下我应该支持OO吗?”

    OO C

    您的代码不是基于数据的操作(即基于数据库或基于数学/分析)。基于数据库的代码通常更容易通过过程样式表示。基于分析的代码通常更容易用函数式表示。

    您的模型是对某事物的模拟(OO擅长模拟)。

    您的应用程序不是多线程的,尤其是在非工作任务方法类型的代码库中。OO在多线程的程序中是非常有问题的,这些程序需要不同的线程来执行不同的任务。如果您的程序是由一个或两个主线程和多个工作线程构成的,那么OO程序的混乱控制流更容易处理,因为所有工作线程都会在它们所接触的内容中被隔离,并且可以被视为代码的一个整体部分。考虑其他任何范例。Functional擅长多线程处理(没有副作用是一个巨大的好处),基于对象的编程可以通过一些OO封装给您带来好处,但是在代码库的关键部分有更多可跟踪的过程代码。当然,在这一领域,程序也很出色。

        6
  •  1
  •   lomaxx    18 年前

    在某些OO不太好的地方,您需要处理SQL中的“数据集”。OO倾向于使基于集合的操作变得更加困难,因为它并不是真正设计为以最佳方式获取两个集合的交集或两个集合的超集。

    此外,有时功能性方法会更有意义,例如从 MSDN

    例如,考虑编写一个程序来将XML文档转换成不同的数据形式。虽然当然可以编写一个C#程序,通过XML文档进行解析,并应用各种if语句来确定在文档中的不同点要采取的操作,但一种可以说是更好的方法是将转换编写为可扩展样式表语言转换(XSLT)程序。毫不奇怪,XSLT内部有大量的功能主义

        7
  •  1
  •   Chris Roberts    18 年前

    如果问题可以被认为是有一个或多个“东西”,其中每个“东西”都有许多属性或信息块,这些属性或信息块涉及到它的状态,并且可以对其执行许多操作,那么OOP可能是一种方法!

        8
  •  1
  •   RS Conley    18 年前

    学习面向对象编程的关键是学习设计模式。通过学习设计模式,您可以更好地了解何时需要类,何时不需要类。与编程中使用的任何其他功能一样,OOP语言的类和其他功能的使用取决于您的设计和需求。与算法类似,设计模式也是一个更高层次的概念。

        9
  •  1
  •   fluffels    17 年前

    在我看来,这更多的是一个关于你个人的问题。某些人从函数的角度思考得更好,而其他人则更喜欢类和对象。我想说,当OOP与你内心(主观)的世界心理模型相匹配时,它更适合你。

        10
  •  1
  •   Rob Scott    17 年前

    面向对象代码和过程代码具有不同的扩展点。面向对象的解决方案使得在不修改现有函数的情况下添加新类变得更加容易(请参见开闭原则),而过程代码允许您在不修改现有数据结构的情况下添加函数。通常,系统的不同部分需要不同的方法,这取决于预期的变更类型。

        11
  •  1
  •   Ruan Mendes    15 年前

    OO允许将与对象相关的逻辑放在一个位置(类或对象)中,这样它就可以解耦,并且更易于调试和维护。

    我所观察到的是,每个应用程序都是OO和过程代码的组合,其中过程代码是将所有对象绑定在一起的粘合剂(至少是主函数中的代码)。将过程代码转换为OO的能力越强,维护代码就越容易。

        12
  •  1
  •   andrewleung Ashok N    13 年前

    1. 它的灵活性OOP在使用实现方面非常灵活。
    2. 实现安全性要容易得多我们都知道,安全性是web开发的重要要求之一。使用OOP可以简化web项目中的安全实现。
    3. 它使编码更有条理我们都知道一个干净的程序就是一个干净的编码。使用OOP而不是过程化可以使事情更加组织化和系统化(显然)。
        13
  •  0
  •   alepuzio    17 年前

    这取决于问题:OOP范式在设计分布式系统或框架时非常有用,因为在用户的操作过程中存在大量实体(例如:web应用程序)。

    但是如果你有数学问题,你会更喜欢函数式语言(LISP);对于性能关键型系统,您将使用ADA或C等。

    OOP语言很有用,因为它也可能在程序运行时使用垃圾收集器(内存的自动使用):你在C语言中编程很多时间,你必须手动调试和纠正内存问题。

        14
  •  0
  •   stonemetal    15 年前

    当你有东西的时候,OOP很有用。插座、按钮、文件。如果你在er中结束一个类,它几乎总是一个假装是类的函数。TestRunner很可能应该是一个运行测试的函数(可能还被命名为运行测试)。

        15
  •  0
  •   rbrc    15 年前

    就我个人而言,我认为OOP实际上是任何大型应用程序的必要条件。如果不使用OOP,我无法想象一个超过10万行代码的程序,这将是维护和设计的噩梦。

        16
  •  -1
  •   etm1109    15 年前

    我告诉你OOP不好的时候。

    我很抱歉。2页的代码登录是相当可笑的,即使它是可爱的OOP。。。。