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

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


person Community    schedule 01.05.2009    source источник


Ответы (7)


Да, и масса ранней Java была именно такой; у вас была группа программистов на C, которые занялись Java, потому что это было «горячо», люди, которые не думали в ООП. Множество больших классов с множеством статических методов, множество операторов RTTI в case, много использования instanceof.

person tpdi    schedule 01.05.2009
comment
Дана, хороший улов, я не умею печатать. Буду признателен, если в будущем вы укажете это в комментарии, чтобы я мог исправить это сам. - person tpdi; 01.05.2009
comment
@tpdi: stackoverflow редактируется совместно. Если бы кому-то пришлось вспомнить, кто предпочел бы получать уведомления о некоторых опечатках, а не просто редактировать его для всех, это добавило бы много накладных расходов для всех. Что плохого в том, что опечатки исправлены? - person Joachim Sauer; 01.05.2009
comment
У разных людей разный уровень комфорта. Я не думаю, что опечатки доходят до уровня редактирования. Я надеюсь, что мы сможем учесть каждый уровень чувствительности здесь, в SO. - person tpdi; 01.05.2009
comment
Хотя я понимаю это, вы должны видеть, что запоминание и / или проверка уровня чувствительности каждого автора перед каждым редактированием серьезно затруднит процесс редактирования. - person Joachim Sauer; 01.05.2009

GLib имеет GObject, который представляет собой объектно-ориентированное программирование, реализованное в чистый C. Хотя вы можете создать API, который начинает «ощущаться» как ООП, это по-прежнему простой код на «C» без реальных классов (с точки зрения компилятора). Если вы продвинетесь достаточно далеко, чтобы начать реализацию объектно-ориентированных шаблонов проектирования, я бы назвал это ООП, независимо от того, на каком языке он написан. Все дело в ощущении кода и о том, как вы должны думать, чтобы писать против него.

person Mark Renouf    schedule 01.05.2009

Процедурное программирование связано с тем, как вы структурируете свою программу и моделируете свою предметную область. То, что в какой-то момент вы создаете экземпляр объекта, само по себе не делает вашу программу ориентированной на объекты (т. Е. Объектно-ориентированной).

person Haakon    schedule 01.05.2009

Это различие полностью субъективно. Например, если вы кодируете библиотеку C с использованием передачи состояния, вы реализуете что-то вроде шаблона «сообщения» с состоянием в качестве объекта.

person Jeff Ober    schedule 01.05.2009

Классы можно рассматривать как супертипы. Когда мы преобразовали VB3 в VB6, нашим первым шагом был поиск всех используемых типов, а затем поиск всех подпрограмм и функций, которые принимали этот тип в качестве параметра. Мы переместили их в определение класса, удалили параметр, а затем протестировали, оставив исходный поток управления нетронутым.

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

person RS Conley    schedule 01.05.2009

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

Чтобы ответить на вопрос: «Если программа использует объект, может ли он считаться процедурным?» - Это зависит от ваших определений объекта и процедурного программирования. Но, на мой взгляд, ответ звучит «да». «Объекты» - это только часть философии объектно-ориентированного подхода, и их использование «где-то в вашем приложении» не означает, что вы выполняете объектно-ориентированный подход.

person Rik    schedule 01.05.2009

Ответ на ваш вопрос - да. Например. Мне нужно поддерживать старую устаревшую страницу php. Большая часть кода носит процедурный характер, но я решил, что некоторые вещи можно будет поддерживать намного проще, если я подключу Zend Framework к существующему материалу и напишу некоторые из моих собственных классов для замены части старого кода. В общем, это приложение по-прежнему написано и функционирует в основном процедурным образом, но здесь и потом создается и используется тот или иной класс. Думаю, нет четкой границы между процедурным и ОО. Вы можете сделать его более чистым или менее чистым. Если у вас недостаточно слоев для размера и сложности вашего приложения, вы автоматически получите больше процедурного кода ...

person markus    schedule 01.05.2009