我知道类有一些优点,比如变量和函数作用域,但除此之外,相比于许多实例和抽象类,将函数分组似乎更容易。那么为什么将相似的函数分组成类是“常规做法”呢?
我知道类有一些优点,比如变量和函数作用域,但除此之外,相比于许多实例和抽象类,将函数分组似乎更容易。那么为什么将相似的函数分组成类是“常规做法”呢?
面向对象编程(OOP)的目的不是“将相似函数分组到一个类中”。如果这是你所做的一切,那么你并没有实现OOP(尽管使用了面向对象语言)。将一堆函数替换为类有一个'变量和函数作用域' 的副作用,但我只把它看作是一个副作用。
OOP 是涉及到一些概念的,如封装、继承、多态、抽象以及其他很多。它是一种特定的软件设计方式,一种将问题映射到软件解决方案的具体方式。
将函数分组到一个类中并不是常见的做法。让我通过尝试不同的语言和范例分享一些我所学到的东西。
我认为这里的核心概念是命名空间。命名空间非常有用,几乎在任何编程语言中都存在。
命名空间可以帮助您解决一些常见问题,并模拟出许多领域中出现的各种模式,例如避免名称冲突、隐藏细节、表示层次结构、定义访问控制、对相关符号(函数或数据)进行分组、定义上下文或作用域...... 我相信还有更多应用。
类是命名空间的一种类型,不同语言之间甚至同一语言的不同版本也会有不同的类属性,例如一些提供访问修饰符,一些则没有;一些允许从多个类继承,其他则不行。人们一直试图找到最有用的功能混合,这在不同的编程语言中解释了可用选项的繁多。
那么,为什么要使用类呢?因为它们以一种似乎自然或直观的方式解决了某些问题。每当我们编写计算机程序时,都在试图捕捉问题的本质,如果可以使用上述某些模式来建模问题,那么使用语言的这些功能是很有意义的。
随着问题变得越来越清晰,您可能会意识到程序的某些部分可以通过使用不同的范例/功能/模式更好地实现,然后是重构的时候了。我有机会工作的大多数程序都在不断发展,直到资金/资源耗尽或者到达收益递减点,很多时候你会得到一些足够好的东西,目前没有继续开发的动力。
这不是规范,只是一种做法。类将方法(函数)和数据组合在一起,基于封装的概念。
对于较大的项目,通过这种方式进行分组通常更容易。许多人发现使用对象更容易理解问题。
使用类的原因有很多,其中最重要的是逻辑封装。对象更贴近我们生活中的世界,因此通常比其他方法更直观。考虑一辆汽车,它具有诸如车身颜色、内饰颜色、发动机马力、功能、当前里程等属性。它还有方法,例如Start()、TurnRight(.30)、ApplyBrakes(.50)。当你用钥匙打开汽车门时,它会发出“叮”的声音。
可能最大的原因是,现在大多数应用程序似乎都有图形组件,而大多数图形用户界面库都是使用对象模型实现的。
多态性也可能是一个重要原因。能够通用地处理多种类型的对象非常有帮助。
如果您是数学家,则函数式风格可能更直观,如ML、F#。如果您正在以可预测的格式与数据交互,则声明式风格会更好,例如SQL或LINQ。