ООП слишком сложно для объяснения в ответе StackOverflow, но основная идея такова:
Процедурное программирование - это написание кода, который выполняет действия с данными. Объектно-ориентированное программирование - это создание данных, которые выполняют над собой действия.
В процедурном программировании у вас есть функции и у вас есть данные. Данные структурированы, но пассивны, и вы пишете функции, которые выполняют действия с данными и ресурсами.
В объектно-ориентированном программировании данные и ресурсы представлены объектами, которые имеют свойства и методы. Здесь данные больше не являются пассивными: метод - это средство указания данным или ресурсу выполнить какое-либо действие над собой.
Причина, по которой это различие имеет значение, состоит в том, что в процедурном программировании любые данные могут быть проверены или изменены любым произвольным образом любой частью программы. Вы должны остерегаться неожиданных взаимодействий между различными функциями, которые касаются одних и тех же данных, и вы должны изменить весь код, если вы решите изменить способ хранения или организации данных.
Но в объектно-ориентированном программировании при правильном использовании инкапсуляции никакой код, за исключением того, что внутри объекта не требуется знать (и, следовательно, не становится зависимым), как объект данных хранит свои свойства или мутирует сам. Это очень помогает в модульности вашего кода, поскольку каждый объект теперь имеет четко определенный интерфейс, и, поскольку он продолжает поддерживать этот интерфейс, а другие объекты и бесплатные функции используют его через этот интерфейс, внутренние операции могут быть изменены без риска.
Кроме того, концепции объектов, наряду с использованием наследования и компоновки, позволяют моделировать ваши данные структурно в вашем коде. Если вам нужны данные, представляющие сотрудника, вы создаете класс Employee
. Если вам нужно работать с ресурсом принтера, вы создаете класс Printer
. Если вам нужно нарисовать кнопки в диалоге, вы создаете класс Button
. Таким образом, вы не только достигнете большей модульности, но и ваши модули будут отражать полезную модель любых реальных вещей, с которыми ваша программа должна работать.