代码之家  ›  专栏  ›  技术社区  ›  Shimi Bandiel

什么时候面向对象不是正确的解决方案?

  •  7
  • Shimi Bandiel  · 技术社区  · 16 年前

    最近我遇到一些观点,认为不应该总是使用面向对象的设计/编程。
    您知道一些用例不会受益于并且不应该使用面向对象的设计吗?

    例如:有一些问题(关注点)将从AOP中受益。

    15 回复  |  直到 11 年前
        1
  •  15
  •   ConcernedOfTunbridgeWells    16 年前

    一些问题最好用其他范例来表达,例如函数式编程。另外,声明性范式允许对代码的正确性进行更为有力的形式推理。见 Erlang 举一个很好的例子,一种具有某些优势的语言,由于范例的基本性质,不能与OO语言真正匹配。

    其他语言范式更适合的问题域示例如下 database queries (SQL) , expert systems (Prolog, CLIPS etc.) Statistical computing (R) .

        2
  •  10
  •   Rossini    16 年前

    根据我的经验,其中一个不会从OO设计中受益的地方是低端嵌入式系统。OO需要一定的开销,有时您负担不起这个开销。在标准PC中,开销非常小,甚至不值得考虑,但是在低端嵌入式系统中,开销可能非常大。

        3
  •  5
  •   Paul Croarkin    16 年前

    横切关注点受益于面向方面编程(AOP)。通过横切,我的意思是可以使应用程序的各个部分受益的功能,而这些功能实际上并不属于特定的对象。通常以日志记录为例。安全可能是另一回事。例如,为什么一个人对象应该知道关于日志记录的任何信息,或者应该允许谁访问它?

        4
  •  5
  •   Gishu    16 年前

    一个容易想到的…数据库-Y Web应用程序。
    在这种情况下,遵守一个公认的框架更有意义。而不是找出一个好的OOP设计。例如,如果必须使用join和order bys执行某种复杂的查询。SQL将踢对象屁股。

    根据问题选择解决方案…而不是把问题反复强调直到解决为止。

        5
  •  4
  •   Ather    16 年前

    这里要理解的基本原则是,没有通用的方法、范例或方法可以应用于所有问题领域。这些通常是为满足特定的一组问题而设计的,可能不会针对其他域进行优化。

    它就像一个典型问题(例如排序)的算法。不能有适用于所有可能的场景或数据集的通用算法。

    OOP也一样。我不会将它应用于一个本质上与人工智能相关的问题,并且可以使用声明性编程更好地解决这个问题。我当然不会将它应用于开发需要最大性能和速度的设备驱动程序。

        6
  •  3
  •   Rik elirevach    16 年前

    OOP和AOP不是互斥的,它们是互补的。

    至于OO,当然也有不太适合的情况。如果不是只有OO语言的话。对于纯粹的数字处理任务,许多人仍然喜欢Fortran。函数语言在处理并发性和并行性时非常有用。

    另外,当你的应用主要是一个数据库,上面有一个图形用户界面(比如CRM应用),OO并不是很有用,即使你可能使用OO语言来构建它。

        7
  •  2
  •   James Curran    16 年前

    OO设计的优点是可扩展性和可维护性。因此,在不需要这些特性的地方,它没有多大用处。这些将是非常小的应用程序,用于非常特殊的短期需求。(您可以考虑作为批处理文件或脚本语言执行的操作)

        8
  •  2
  •   coder1    16 年前

    如果您正在使用的编程语言不容易允许您使用OOP,那么我就不必担心OOP了。我们在我的工作场所使用的是程序化的BDL。我曾经试过做一些糟糕的事,但那只是一个很大的糟糕。本不该麻烦的。

        9
  •  1
  •   Mitchel Sellers    16 年前

    不够好?我不知道是否可以举一个这样的例子,但是我知道一些非常简单的应用程序在使用一个完全面向对象的设计模型开始时可能看不到任何“好处”。然而,如果这是真正的程序性和琐碎的事情,最终可能需要重新访问它。

        10
  •  1
  •   Vordreller    16 年前

    我建议你访问维基百科并阅读他们关于不同类型编程语言的文章。

    说一种编程“不够好”没有任何意义。 每种类型都有目的。你不能比较它们。他们不是被迫做同样的事情。

        11
  •  1
  •   Schmoo    16 年前

    任何时候如果你想不出一个好的OO理由,那就是避免OO的好时机。(听起来很滑稽,但我是认真的。)

        12
  •  0
  •   Ryan Thames    16 年前

    正如其他海报所说,如果您创建一个极其简单的应用程序或过程应用程序,OOP可能会有点太多。另外,我认为AOP不一定需要取代OOP,如果有什么帮助的话,它可以加强良好的OOP设计。

        13
  •  0
  •   dkretz    16 年前

    与奈杰尔相呼应,SQL似乎几乎隐式地与任何抽象(包括子查询和函数)都不兼容。

        14
  •  0
  •   Marcin    16 年前

    好吧,OOP与任何事物都不是特别正交的(除了其他获得多态性的方法),所以……呃……随便什么。

        15
  •  -2
  •   Antonio    16 年前

    如果设计得好,那么面向对象编程是很好的解决方案。