oop - 模块化和面向对象编程之间的最大区别是什么?

标签 oop module

An object-oriented program usually contains different types of objects, each corresponding to a particular kind of complex data to manage, or perhaps to a real-world object or concept such as a bank account, a hockey player, or a bulldozer.

Modular programming (also called "top-down design" and "stepwise refinement") is a software design technique that emphasizes separating the functionality of a program into independent, interchangeable modules, such that each contains everything necessary to execute only one aspect of the desired functionality.



我能想到的区别是你可以在一个类上拥有多个对象,而在模块化编程中,你应该只有 1 个模块(1 个对象)用于一个特定的事物。

这是一个例子(我理解的方式)

考虑你有一个程序。几个输入字段和一个按钮。然后进行一些计算,程序输出一些东西。

该程序可以有两个模块:输入/输出模块和计算模块。

但是我不明白为什么程序不能有一个布局(一个包含将在屏幕上显示的所有对象的类)和一个逻辑部分(它可以是一个类或一个函数,具体取决于计算的深度)。

这个例子在模块化和对象编程方面是否“正确”?模块化和oop可以一起使用吗?这两种范式/编程风格之间的最大区别是什么?

最佳答案

您的模块可以实现为类,这确实是正确的。然而,模块是逻辑上独立的程序片段,因此将它们作为类是没有意义的,因为一个类可以有许多不同的对象。如果我要编写一个模块化系统并为模块使用类,我会将它们全部设为单例。

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

模块化编程只是暗示您拥有这两个(或更多)模块,但没有说明它们如何实现它们所实现的目标。这些模块可以使用或根本不使用面向对象的方法,并使用过程 C 风格的编程。您通过类​​描述模块化编程的方式只是分离模块的一种方式。例如,您可以将它们分隔为类,也可以将它们分隔为跨多个编译单元的函数。这是你的选择。

面向对象编程暗示你的程序是,嗯,面向对象 .它没有说明应用程序中的模块,但要求表示应用程序中某些想法的逻辑部分通过类和对象建模。

因此,这两种方法可以一起使用,当您决定模块化时,面向对象的选择通常会强加给您这些模块是通过类及其关系定义的。

关于oop - 模块化和面向对象编程之间的最大区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18034683/

相关文章:

php - 对我的模型层方法的反馈 Symfony 2 模型层 + Doctrine

php - 不需要任何 PECL 扩展的纯 PHP 中的 AOP(开始!)- 怎么做?

java - 为什么此 Java 转换会引发错误?

module - Prestashop 交叉销售模块不起作用

module - 如何在 Odoo 13 中没有开发者模式的情况下使时间表在员工模块中可见?

java - Java的 'self'关键字是什么

php - 自动在php中调用类中的所有方法

module - 如何找到 Perl 6 模块的版本和权限?

magento - Mage::getStoreConfig 始终为我的自定义模块管理选项返回 null

javascript - node.js 事件发射器 : Listen for events across files