Может ли процедурное программирование использовать объекты? - PullRequest
2 голосов
/ 01 мая 2009

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

Ответы [ 7 ]

4 голосов
/ 01 мая 2009

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

1 голос
/ 01 мая 2009

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

1 голос
/ 01 мая 2009

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

0 голосов
/ 01 мая 2009

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

0 голосов
/ 01 мая 2009

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

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

0 голосов
/ 01 мая 2009

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

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

0 голосов
/ 01 мая 2009

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

...