Я видел несколько разных тем на StackOverFlow, в которых обсуждались различия между процедурным и объектно-ориентированным программированием. Возникает вопрос: если программа использует объект, может ли он считаться процедурным?
Может ли процедурное программирование использовать объекты?
Ответы (7)
Да, и масса ранней Java была именно такой; у вас была группа программистов на C, которые занялись Java, потому что это было «горячо», люди, которые не думали в ООП. Множество больших классов с множеством статических методов, множество операторов RTTI в case, много использования instanceof
.
GLib имеет GObject, который представляет собой объектно-ориентированное программирование, реализованное в чистый C. Хотя вы можете создать API, который начинает «ощущаться» как ООП, это по-прежнему простой код на «C» без реальных классов (с точки зрения компилятора). Если вы продвинетесь достаточно далеко, чтобы начать реализацию объектно-ориентированных шаблонов проектирования, я бы назвал это ООП, независимо от того, на каком языке он написан. Все дело в ощущении кода и о том, как вы должны думать, чтобы писать против него.
Процедурное программирование связано с тем, как вы структурируете свою программу и моделируете свою предметную область. То, что в какой-то момент вы создаете экземпляр объекта, само по себе не делает вашу программу ориентированной на объекты (т. Е. Объектно-ориентированной).
Это различие полностью субъективно. Например, если вы кодируете библиотеку C с использованием передачи состояния, вы реализуете что-то вроде шаблона «сообщения» с состоянием в качестве объекта.
Классы можно рассматривать как супертипы. Когда мы преобразовали VB3 в VB6, нашим первым шагом был поиск всех используемых типов, а затем поиск всех подпрограмм и функций, которые принимали этот тип в качестве параметра. Мы переместили их в определение класса, удалили параметр, а затем протестировали, оставив исходный поток управления нетронутым.
Затем мы реорганизовали наш поток управления, чтобы использовать различные шаблоны и объектно-ориентированные методы.
Суть объектной ориентации заключается в том, как вы разбиваете проблему на более мелкие части и как эти части работают вместе. Это о философии. Использование объектно-ориентированного языка не обязательно означает, что программа, написанная на нем, является объектно-ориентированной; просто сделать объектно-ориентированный объект проще на языке, который из коробки поддерживает общие концепции объектно-ориентированного программирования.
Чтобы ответить на вопрос: «Если программа использует объект, может ли он считаться процедурным?» - Это зависит от ваших определений объекта и процедурного программирования. Но, на мой взгляд, ответ звучит «да». «Объекты» - это только часть философии объектно-ориентированного подхода, и их использование «где-то в вашем приложении» не означает, что вы выполняете объектно-ориентированный подход.
Ответ на ваш вопрос - да. Например. Мне нужно поддерживать старую устаревшую страницу php. Большая часть кода носит процедурный характер, но я решил, что некоторые вещи можно будет поддерживать намного проще, если я подключу Zend Framework к существующему материалу и напишу некоторые из моих собственных классов для замены части старого кода. В общем, это приложение по-прежнему написано и функционирует в основном процедурным образом, но здесь и потом создается и используется тот или иной класс. Думаю, нет четкой границы между процедурным и ОО. Вы можете сделать его более чистым или менее чистым. Если у вас недостаточно слоев для размера и сложности вашего приложения, вы автоматически получите больше процедурного кода ...