模块化编程和面向对象编程有何大的差异?

22
一个面向对象的程序通常包含不同类型的对象,每个对象对应于一种特定类型的复杂数据管理或者对现实世界中的对象或概念进行建模,例如一个银行账户、曲棍球运动员或推土机等。
模块化编程(也称为“自顶向下设计”和“逐步细化”)是一种软件设计技术,强调将程序的功能分离成相互独立、可交换的模块,使得每个模块都包含执行所需功能的全部内容。
我能想到的区别是,在一个类中可以有多个对象,而在模块化编程中,你应该仅为一个特定的事物拥有一个模块(1个对象)。
以下是一个例子(我的理解方式):
考虑一个程序。它有几个输入字段和一个按钮。然后进行一些计算,程序输出一些东西。
这个程序可以具有两个模块:输入/输出模块和计算模块。
但是,我看不出为什么程序不能有一个布局(一个包含所有将显示在屏幕上的对象的类)和一个逻辑部分(根据计算的深度可以是一个类或一个函数)。
在模块化编程和面向对象编程中是否可以同时使用?这两种范式/编程风格之间的差异是什么?
1个回答

31

您的模块可以实现为类,这是确实正确的。然而,模块意味着程序中逻辑上分离的部分,因此将其作为类并没有意义,因为您可以拥有许多不同的类对象。如果我要编写一个模块化系统并使用类来进行模块化,则会使它们所有成为单例。

在面向对象编程的示例中,您可以定义表示输入字段和按钮的类,或者可能是用作计算器的类。您甚至可以更深入地定义一个计算器接口,它可以作为SumCalculator、ProductCalculator等来实现,甚至可以添加一些工厂,以便用户可以选择程序执行的不同计算。是的,您可以拥有单例类,例如LayoutModule(它将跟踪InputField和Button类型的对象)和LogicModule(它将跟踪计算器实现)。

模块化编程只是暗示您有这两个(或更多)模块,但并不涉及它们如何实现其功能。模块可以使用面向对象的方法,也可以完全不使用面向对象的过程式C语言编程。您描述的通过类实现模块化编程方式只是将模块分离的一种方法。您可以将它们作为类分离,也可以将它们分解为跨多个编译单元的函数。这是您的选择。

面向对象编程意味着您的程序,嗯,面向对象。它并不涉及应用程序内部的模块,但要求将表示应用程序中某些思想的逻辑部分通过类和对象进行建模。

因此,这两种方法可以结合使用,当您决定进行模块化时,面向对象的选择通常会强制您通过类和它们之间的关系来定义这些模块。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接