为什么使用类而不是函数?

sdf*_*asd 11 oop class function

我确实知道诸如变量和函数作用域之类的一些优点,但除此之外我似乎更容易拥有函数组而不是拥有许多类的实例和抽象.那么为什么在一个类中将类似函数分组的"规范"呢?

evi*_*one 14

简单的非OOP程序可能是一长串命令.更复杂的程序将命令列表分组为函数或子例程,每个函数或子例程可执行特定任务.对于这种类型的设计,通常可以从程序的任何部分访问程序的数据.随着程序规模的扩大,允许任何功能修改任何数据意味着错误可以产生广泛的影响.

相反,面向对象的方法鼓励程序员将数据放置在程序其余部分无法直接访问的位置.相反,通过调用特殊编写的函数来访问数据,这些函数通常称为方法,它们与数据捆绑在一起或从"类对象"继承,并充当检索或修改这些数据的中介.将数据与用于访问和管理这些数据的一组方法组合在一起的编程结构称为对象.

OOP编程的优点:

  • 可维护性面向对象的程序设计方法使代码更易于维护.识别错误的来源更容易,因为对象是自包含的.
  • 可重用性因为对象包含作用于数据的数据和方法,所以可以将对象视为自包含的黑盒子.此功能可以轻松地在新系统中重用代码.消息为对象的数据和功能提供预定义的接口.使用此接口,可以在任何上下文中使用对象.
  • 可扩展性的面向对象的程序也可升级.由于对象的界面提供了在新软件中重用对象的路线图,并提供了替换对象所需的所有信息,而不会影响其他代码.这样老化代码可以用更快的算法和更新的技术代替.


Jak*_*icz 13

OOP的要点不是"在一个类中对类似的函数进行分组".如果这就是你所做的一切,那么你就不会做OOP(尽管使用的是OO语言).使用类而不仅仅是一堆函数会产生"变量和函数范围"的副作用,但我认为它只是副作用.

OOP涉及封装,继承,多态,抽象等许多概念.它是软件设计的一种特定方式,是将问题映射到软件解决方案的特定方式.


cor*_*iKa 7

主要原因是您可以更紧密地将行为与数据相关联.

考虑以下:

class CoffeePot {

    private float waterOunces;
    private float coffeeOunces;
    private int scoopsOfCoffee;
    private boolean filterClean;

    void make() {
        coffeeOunces += waterOunces;
        waterOunces = 0;
        filterClean = false;
    }

    void fill(int water) {
        waterOunces += water;
    }

}
Run Code Online (Sandbox Code Playgroud)

现在你可以拥有一个CoffeePot对象并随心所欲地做任何事情.传递它,扩展它的行为,任何东西.行为保持在对象内.你不能做任何事情.

class MagicCoffeePot extends CoffeePot {

   @Override
   void make() {
       // magic coffee pot makes MORE coffee
       coffeeOunces += waterOunces;
       super.make();
   }

}
Run Code Online (Sandbox Code Playgroud)