2009-05-01 3 views
2

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

ответ

4

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

+0

Дана, хороший улов, я не могу напечатать. Я был бы признателен, если в будущем вы укажете это в комментарии, чтобы я мог исправить это сам. – tpdi

+0

@tpdi: stackoverflow совместно редактируется. Если бы кто-то должен был помнить, кто предпочел бы получать уведомления о некоторых опечатках, а не просто редактировать его для всех, это добавило бы * много накладных расходов для всех. Что плохого в том, что все же отредактированы опечатки? –

+0

Различные люди имеют разные уровни комфорта. Я не думаю, что опечатки поднимаются до уровня редактирования. Надеюсь, мы сможем включить в себя уровень чувствительности каждого человека в SO. – tpdi

0

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

1

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

1

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

0

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

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

0

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

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

0

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