【问题标题】:Why should I use classes rather than just a collection of functions? [duplicate]为什么我应该使用类而不仅仅是函数的集合? [复制]
【发布时间】:2010-02-18 00:09:08
【问题描述】:

可能重复:
What are the benefits of OO programming? Will it help me write better code?
OO PHP Explanation for a braindead n00b

刚开始学习/玩在 PHP 中创建类,我想知道 他们解决了什么难题? 似乎我可以通过我包含的一组函数完成相同的工作到文件中。所以我的问题是:我为什么要使用类?

【问题讨论】:

    标签: php oop class


    【解决方案1】:

    面向对象编程的三大支柱。好好学习:

    http://codeidol.com/csharp/learncsharp2/Object-Oriented-Programming/The-Three-Pillars-of-Object-Oriented-Programming/

    封装

    面向对象编程的第一个支柱是封装。封装背后的想法是,您希望保持每个类型或类谨慎且自包含,以便您可以更改一个类的实现而不影响任何其他类。

    专业

    面向对象编程的第二个支柱,专业化,是通过继承实现的;特别是通过声明一个新类派生自现有类。特化类继承了更一般类的特征。专门的类称为派生类,而更通用的类称为基类。

    派生类型继承共享字段和方法,而不是将代码从一种类型剪切和粘贴到另一种类型。如果您更改在基类中实现共享功能的方式,则不必更新每个派生类型中的代码;他们继承了更改。

    多态性

    多态性允许使用统一接口处理不同数据类型的值。多态性的主要用途是属于不同类型的对象能够响应同名的方法、字段或属性调用,每个调用都根据适当的特定于类型的行为。程序员(和程序)不必事先知道对象的确切类型,因此确切的行为是在运行时确定的

    另见:

    http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming

    http://en.wikipedia.org/wiki/Type_polymorphism

    【讨论】:

      【解决方案2】:

      这是一种以更直观、更真实的方式查看代码的方法。 (您将数据和对该数据的所有可能操作打包在一起。)它还鼓励封装、抽象、数据隐藏……您真正要寻找的是 OOP 的优势。

      【讨论】:

        【解决方案3】:

        基本上,类允许您将数据与代码一起放置 - 即组织。

        此外,类允许您的“追随者”在不重写代码的情况下自定义您的类,而是创建新的继承类。

        每个基于类的代码都可以用函数重写,但会更难理解。

        【讨论】:

          【解决方案4】:

          通常,您可以自定义该组函数的行为。通常,您有一堆协同工作的函数。

          使用这些功能的人可能只想针对某些特殊情况修改其中一个。或者,也许您提供了一个强制函数以某种原因进行交互的类,但您无法定义它们实际上会做什么

          一个老生常谈的例子:想象一下,如果你有一些库来检查一些 事物 没有重叠。

          class Comparator:
            def Greater(self, left, right): pass
            def Less(self, left, right): pass
          
          def EnforceNoOverlap(self, comparator, left, right)
            assert comparator.Greater(left, right) != comparator.Lesser(left, right)
          

          【讨论】:

            【解决方案5】:

            通过适当的数据隐藏、关注点分离和其他一些最佳实践,使您的代码更加细化。

            IMO 迟早会在您的代码中仅使用函数,这会导致难以维护和扩展的意大利面条式代码。修复错误更难,实现新功能也更难,因为经常有大量的代码复制。

            此外,您不能在代码设计中使用多态性,因此您不能使用抽象。

            【讨论】:

              【解决方案6】:

              类/对象是实现面向对象应用程序设计的方式。它在许多 OOAD/OOP 书籍中都有详细介绍。

              【讨论】:

                猜你喜欢
                • 2014-09-25
                • 2011-06-19
                • 1970-01-01
                • 2012-10-08
                • 2015-08-13
                • 2021-09-13
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多