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