Даже при том, что объекты использования ООП и скрытие данных, код все еще выписывает как процедура. Таким образом, что заставляет ООП освободить процедурную маркировку? Это просто, потому что это считают "высоким уровнем"?
Спасибо.
Дело не в том, что объектно-ориентированное программирование является «непроцедурным»; просто код, который мы называем «процедурным», не является объектно-ориентированным (и не функциональным и, вероятно, не парой других)
Это не столько случай «либо-либо», сколько медленный переход:
Спагетти-код - > Структурированный код -> Объектно-ориентированный код -> Компонентный код.
(ОБНОВЛЕНИЕ: "Процедура" удалена из таблицы выше, поскольку она относится ко всем ее правым 3/4)
Я бы сказал, что объектно-ориентированный и процедурный подходы - ортогональные концепции. Многие популярные объектно-ориентированные системы являются расширениями процедурных языков, но не все. Например, Dylan читается как смесь функционального и объектно-ориентированного программирования.
ООП не теряет процедурную метку. Процедурное программирование - это императивное программирование . ООП расширяет процедурное программирование. C ++ и Objective C являются объектно-ориентированными расширениями C. Функциональное программирование обычно декларативно, а не императивно.
Он никогда не теряет процедурную метку. Это заблуждение. ООП - это гораздо больше, чем инкапсуляция и объекты. Щелкните здесь для получения дополнительной информации.
В статье Википедии по адресу http://en.wikipedia.org/wiki/Procedural_programming дается достойное объяснение различий между объектно-ориентированным и процедурным программированием, но вкратце объектно-ориентированное программирование - это обмен сообщениями между взаимодействующими объектами, а не нанизывание процедур для работы со свободными структурами данных.
Внутри объекты действительно напоминают небольшие процедурные программы, но их данные не открыты для публичного доступа и не используются другими объектами. Принцип "Говори, не спрашивай" - это принцип объектно-ориентированного проектирования, который предписывает такое взаимодействие между объектами. Изучение этого принципа может помочь пролить дополнительный свет на природу и намерения объектно-ориентированного проектирования по сравнению с процедурным проектированием.
ООП - это не просто инкапсуляция.
Полиморфизм - одна из самых сильных его черт.
В теории ООП и процедурное программирование - ортогональные понятия. Тот факт, что они так переплетаются на практике, вероятно, больше совпадение, чем что-либо еще. Поскольку процедурный синтаксис так хорошо знаком, он является наиболее читаемым для человека форматом. Message-passing, функциональные вычислительные выражения и различные другие форматы - из-за их непривычности - просто не так просты для большинства программистов. Добавьте к этому тот факт, что большинство систем ООП основаны на расширениях процедурных языков, и разделить эти две парадигмы становится прагматически трудно. (В качестве побочного замечания: это одна из вещей, которые мне нравятся в F#; как мультипарадигмальный язык, он помогает концептуально разделить различные аспекты ООП, императивного программирования, функционального программирования, в то же время делая их все доступными)
.Это просто "конвенция". Когда люди говорят "процедурный", подразумевается, что это не ОО, и наоборот.
Из Wiki (хорошо объяснено):
Процедурное программирование разбить задачу программирования на набор переменных, данных структуры и подпрограммы, тогда как в объектно-ориентированном программировании это разбить задачу программирования на объекты с каждым "объектом" инкапсуляция собственных данных и методов (подпрограммы). Самое важное различие в то время как процедурное программирование использует процедуры для работы на структурах данных, объектно-ориентированный программирование связывает два вместе так что «объект» действует «сам по себе» структура данных.
Более подробную информацию можно найти здесь .
Я думаю, что одно из отличий заключается в том, что виртуальные свойства и методы используются гораздо чаще в объектно-ориентированных языках, чем указатели на функции в таких языках, как C. В C, если я скажу foo (x ), совершенно очевидно, что я делаю одно из двух, и объявление foo (x) скажет мне, какой из них. Я либо вызываю функцию с именем foo (), либо вызываю функцию, на которую указывает указатель функции с именем foo (). В объектно-ориентированном языке, когда я пишу foo (x), это может быть неявно сопоставлено для вызова кода, которого даже не существовало, когда мой модуль был скомпилирован.
Зависит от вашего определения "ориентированного".
Если 51% кода - это O-O, то можно ли это считать?