В чем разница между модульным и объектно-ориентированное программирование?

объектно-ориентированная программа обычно содержит различные типы объектов, каждый из которых соответствует определенному виду сложных данных управление, или, возможно, к реальному объекту или концепции, такой как банк счет, хоккеист или бульдозер.

модульное Программирование (также под названием "сверху вниз" и "поэтапный уточнение") метод проектирования программного обеспечения который подчеркивает отделять функциональность программы в независимую, взаимозаменяемую модули, такие, что каждый содержит все необходимое для выполнения только один из аспектов желаемой функциональности.

различия, о которых я могу думать, заключаются в том, что вы можете иметь более одного объекта в классе, где, как и в модульном программировании, вы должны иметь только 1 модуль (1 объект) для одной конкретной вещи.

вот пример (как я понимаю)

считайте, что у вас есть программа. Несколько полей ввода и кнопка. Затем некоторые вычисления сделаны и программа что-то выводит.

эта программа может иметь 2 модуля: входной/выходной и расчетный.

однако я не понимаю, почему программа не может иметь макет (класс, содержащий все объекты, которые будут показаны на экране) и логическая часть (которая может быть класс или функция в зависимости от глубины расчетов).

является ли этот пример "правильным" в temrs как модульного, так и объектного программирования ? Может модульный и ООП быть использовать вместе ? И в чем большая разница между этими двумя парадигмами/стилями программирования?

1 ответов


ваши модули могут быть реализованы как классы, что действительно правильно. Однако модули должны быть логически отдельными частями программ, и поэтому не имеет смысла иметь их в качестве классов, так как у вас может быть много разных объектов класса. Если бы я написал модульную систему и использовал классы для модулей, я бы сделал их все синглтонами.

в вашем примере объектно-ориентированного программирования у вас будут классы, определяющие поля ввода и кнопки, или, возможно, класс используется как калькулятор. Вы даже можете пойти на большие глубины и определить интерфейс калькулятора, который может быть реализован как SumCalculator, ProductCalculator и т. д., и, возможно, даже бросить некоторые фабрики, чтобы пользователь мог выбирать между различными вычислениями, выполняемыми вашей программой. Да, у вас могут быть одноэлементные классы, такие как LayoutModule (который будет отслеживать объекты типа InputField и Button) и LogicModule (который будет отслеживать калькулятор реализации.)

модульное Программирование просто подразумевает, что у вас есть эти два (или более) модуля, но ничего не говорит о том, как они достигают того, чего они достигают. Модули могут использовать объектно-ориентированные подходы или вообще не использовать процедурное программирование в стиле C. Способ, которым вы описали модульное программирование через классы, - это просто способ разделения модулей. Их можно разделить как классы или как функции, например, между несколькими единицами компиляции. Это ваш выбор.