Почему программирует с объектами, которые не рассматривают процедурными?

Даже при том, что объекты использования ООП и скрытие данных, код все еще выписывает как процедура. Таким образом, что заставляет ООП освободить процедурную маркировку? Это просто, потому что это считают "высоким уровнем"?

Спасибо.

11
задан T.T.T. 15 July 2010 в 16:29
поделиться

11 ответов

Дело не в том, что объектно-ориентированное программирование является «непроцедурным»; просто код, который мы называем «процедурным», не является объектно-ориентированным (и не функциональным и, вероятно, не парой других)

Это не столько случай «либо-либо», сколько медленный переход:

Спагетти-код - > Структурированный код -> Объектно-ориентированный код -> Компонентный код.

(ОБНОВЛЕНИЕ: "Процедура" удалена из таблицы выше, поскольку она относится ко всем ее правым 3/4)

10
ответ дан 3 December 2019 в 01:38
поделиться

Я бы сказал, что объектно-ориентированный и процедурный подходы - ортогональные концепции. Многие популярные объектно-ориентированные системы являются расширениями процедурных языков, но не все. Например, Dylan читается как смесь функционального и объектно-ориентированного программирования.

5
ответ дан 3 December 2019 в 01:38
поделиться

ООП не теряет процедурную метку. Процедурное программирование - это императивное программирование . ООП расширяет процедурное программирование. C ++ и Objective C являются объектно-ориентированными расширениями C. Функциональное программирование обычно декларативно, а не императивно.

4
ответ дан 3 December 2019 в 01:38
поделиться

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

1
ответ дан 3 December 2019 в 01:38
поделиться

В статье Википедии по адресу http://en.wikipedia.org/wiki/Procedural_programming дается достойное объяснение различий между объектно-ориентированным и процедурным программированием, но вкратце объектно-ориентированное программирование - это обмен сообщениями между взаимодействующими объектами, а не нанизывание процедур для работы со свободными структурами данных.

Внутри объекты действительно напоминают небольшие процедурные программы, но их данные не открыты для публичного доступа и не используются другими объектами. Принцип "Говори, не спрашивай" - это принцип объектно-ориентированного проектирования, который предписывает такое взаимодействие между объектами. Изучение этого принципа может помочь пролить дополнительный свет на природу и намерения объектно-ориентированного проектирования по сравнению с процедурным проектированием.

2
ответ дан 3 December 2019 в 01:38
поделиться

ООП - это не просто инкапсуляция.

Полиморфизм - одна из самых сильных его черт.

0
ответ дан 3 December 2019 в 01:38
поделиться

В теории ООП и процедурное программирование - ортогональные понятия. Тот факт, что они так переплетаются на практике, вероятно, больше совпадение, чем что-либо еще. Поскольку процедурный синтаксис так хорошо знаком, он является наиболее читаемым для человека форматом. Message-passing, функциональные вычислительные выражения и различные другие форматы - из-за их непривычности - просто не так просты для большинства программистов. Добавьте к этому тот факт, что большинство систем ООП основаны на расширениях процедурных языков, и разделить эти две парадигмы становится прагматически трудно. (В качестве побочного замечания: это одна из вещей, которые мне нравятся в F#; как мультипарадигмальный язык, он помогает концептуально разделить различные аспекты ООП, императивного программирования, функционального программирования, в то же время делая их все доступными)

.
7
ответ дан 3 December 2019 в 01:38
поделиться

Это просто "конвенция". Когда люди говорят "процедурный", подразумевается, что это не ОО, и наоборот.

4
ответ дан 3 December 2019 в 01:38
поделиться

Из Wiki (хорошо объяснено):

Процедурное программирование разбить задачу программирования на набор переменных, данных структуры и подпрограммы, тогда как в объектно-ориентированном программировании это разбить задачу программирования на объекты с каждым "объектом" инкапсуляция собственных данных и методов (подпрограммы). Самое важное различие в то время как процедурное программирование использует процедуры для работы на структурах данных, объектно-ориентированный программирование связывает два вместе так что «объект» действует «сам по себе» структура данных.

Более подробную информацию можно найти здесь .

3
ответ дан 3 December 2019 в 01:38
поделиться

Я думаю, что одно из отличий заключается в том, что виртуальные свойства и методы используются гораздо чаще в объектно-ориентированных языках, чем указатели на функции в таких языках, как C. В C, если я скажу foo (x ), совершенно очевидно, что я делаю одно из двух, и объявление foo (x) скажет мне, какой из них. Я либо вызываю функцию с именем foo (), либо вызываю функцию, на которую указывает указатель функции с именем foo (). В объектно-ориентированном языке, когда я пишу foo (x), это может быть неявно сопоставлено для вызова кода, которого даже не существовало, когда мой модуль был скомпилирован.

1
ответ дан 3 December 2019 в 01:38
поделиться

Зависит от вашего определения "ориентированного".

Если 51% кода - это O-O, то можно ли это считать?

1
ответ дан 3 December 2019 в 01:38
поделиться