Я всегда слышал, что C++ не является объектно-ориентированным, а скорее «C с классами». Итак, когда я сказал интервьюеру, что C++ не был объектно ориентирован, он спросил меня, почему я не рассматривал его как язык OO. Я не делал C++ с Университета, и у меня не было большого количества ответов. Объект C++ ориентирован или нет? и почему?Является ли C++ объектно-ориентированным языком?
ответ
C++ обычно считается языком «multi-paradigm». То есть вы можете использовать его для объектно-ориентированного, процедурного и даже функционального программирования.
Те, кто отрицает, что C++ - это OO, обычно имеют говядину с тем фактом, что примитивные типы не являются самими объектами. По этому стандарту Java также не будет считаться OO.
Это, безусловно, верно, что C++ не является OO в той же степени, что и Smalltalk, Ruby, Self и т. Д., Но это, безусловно, эффективный язык OO по большинству стандартов.
Примитивные типы часто называют объектами по стандарту, и такие удивительные вещи, как 'typedef int INT; 5 .INT :: ~ INT(); 'отлично работает. (Должно быть пробел перед периодом, поэтому он не является десятичным, и вы должны косвенно называть тип 'int' для синтаксиса.) Язык определен как поведение, как будто функции' operator' определены для родных типов, ради того, чтобы посмотреть, что делать с выражением. Синтаксис несколько неоднородный, но меньше, чем «они», если бы вы верили, а функции-члены примитивных объектов все равно переоцениваются. – Potatoswatter
Я уверен, что стандарт не путает типы и объекты. _instance of_ примитивный тип - это объект, но типа нет. Кроме того, самая большая ошибка IMO: вы не можете взять адрес оператора + (int, int) и передать его алгоритмам. – MSalters
C++ - ориентированный на объект. C++ - c с классами - это еще один способ сказать, что C++ c с добавлением oop (и, конечно, больше, чем на c).
C++ - объектно-ориентированный язык. Проблема в том, что у некоторых языковых фанатиков есть свое, иногда противоречивое определение ООП. Например, некоторые люди Java говорят, что C++ не является языком ООП, потому что вы можете определять функции вне класса.
Просто игнорируйте их.
Это не обязательно «фанатики», они (а), которые изобрели термин ООП, имели для него определение (возможно, оно никогда не было формализовано), а C++ не соответствует этому определению. С тех пор многие люди вскочили на вагон ООП, и теперь кажется, что все формы и определения ООП одинаково «действительны», потому что большинство людей не знают первоначального определения. – hasen
@hansenj - Можете ли вы добавить вес к своему комментарию, предоставив надежные ссылки на a) определение ООП из тех, которые изобрели термин ООП b) показать, как C++ не соответствует этому определению. – nslntmnx
Ключами объектной ориентации являются абстракция, инкапсуляция, полиморфизм и наследование.
Я бы сказал, что C++ демонстрирует все четыре, поэтому он квалифицируется как объектно-ориентированный язык.
Возможно писать C++ как «лучше C» и использовать чисто процедурный стиль. Объекты не являются обязательными. Возможно, это то, о чем вы думаете.
Это просто одно определение OO (и на самом деле объединяет OO с более общими модульными/ADT принципами абстракции и инкапсуляции). Поговорите с людьми в другой форме программирования OO (Smalltalk, кто-нибудь?), И вы обнаружите, что основной отличительной чертой объектной ориентации является передача сообщений между объектами. Трудно определить одно определение OO. –
"conflates"? Я не знаю, что вы имеете в виду. Вы говорите, что участники модульности и инкапсуляции не являются частью объектной ориентации? Я могу передавать сообщения в функциональном стиле. – duffymo
C++ является многопрофильным язык программирования paradigm поддержки
- imperative
- object-oriented (класс на основе)
- generic (template metaprogramming)
стили программирования. Вы можете свободно выбирать (и смешивать), чтобы удовлетворить потребности в вашем проекте.
bot java также поддерживает общее программирование –
@ShubhamPatel Вы не можете сравнить мощность и экспрессивность системы шаблонов C++ с общим синтаксическим сахаром Java. На самом деле C++-система шаблонов является Turing-complete. – ebasconp
C++ объектно ориентирован, потому что классы обеспечивают абстракцию и наследование, а также весь этот джаз. Это не всегда считается объектно-ориентированным, потому что код не нужен быть объектно-ориентированным. Это похоже на то, что Scheme не работает, потому что он установил !.
C++ - язык OO.
Но это не единственный стиль кодирования, который может использоваться в C++. N Как таковой C++ является технически многостраничным языком, OO которого является лишь одной парадигмой.
Термин «C с классами» имеет пару значений.
- Это может означать, что C++ - это OO (поскольку классы предоставляют возможности OO).
- Это может относиться к оригинальной версии «Cfront»
- который был в основном C с расширением классов и немного еще.
- Он может относиться (в высшей степени) к стилю программирования, который не использует всю мощь C++, но использует только небольшое подмножество языка.
Первое, что разработал Строуструп, называлось «C с классами», согласно его «Дизайн и эволюция C++» (сама замечательная книга). «C с классами» - это не просто описание начала C++, это имя. –
Bah! Люди, которые говорят, что C++ не являются объектно-ориентированными, - это те же самые, которые могли бы сказать, что спам не является продуктом :-)
ОО «религиозный псих» толпа скажет, что вы можете иметь только истинный язык ОО, если он абсолютно все - это объект. Это прекрасно, они могут сидеть в своих башнях из слоновой кости и верить в то, что они хотят. У некоторых из нас есть реальная работа.
Если вы используете объект mindset, C++ (и даже C, если вы используете всевозможные трюки с указателями функций внутри структур), более чем достаточно, чтобы считаться объектно-ориентированным.
башни из слоновой кости ?? как python башня из слоновой кости? как рубин башня из слоновой кости? – hasen
@hasen, ни Python, ни Ruby являются по сути башнями из слоновой кости. Люди, которые используют Python или Ruby, настаивая на том, что C++ не могут быть OO, _using_ их как башни из слоновой кости. – paxdiablo
Хорошо, спам - это не просто еда. Это продукт пищевого типа. Это ничего не говорит о C++, хотя ... –
Идея состоит в том, что C++ не является только объектно-ориентированным языком.
Термин «объектно-ориентированный» слишком туман, чтобы дать определенному да или нет. Я думаю, вы найдете мнение большинства, что C++ - это язык OO, или, по крайней мере, то, что вы можете написать OO-способом в C++. Если вы хотите получить более конкретный ответ, вам нужно задать более определенный вопрос, например:
В: Имеются ли в C++ объекты «объект» (например, поля данных + связанные функции-члены)?
A: Да.
В: Имеются ли в C++ типы объектов, не являющихся объектами?
A: Да.
В: Имеются ли в C++ функции, не являющиеся членами?
A: Да.
Это действительно объектно ориентированный, но не строго.
Скажем, например, мы можем иметь только
int main()
{
return 1;
}
который не ничего во имя объектно-ориентированном, а с другой стороны, мы можем иметь классы, наследование, полиморфизм и т.д.,, что соответствует к объектно-ориентированному.
Это зависит от нас, чтобы развить силу языка.
Для интервьюера, который задал вам вопрос показать класс а из C++ и спросить его ли она структурирована или .. действия, при Он покажет вам тот же основной() функция Я думаю :)
Так Я предполагаю, что это основано на том, что вы реализовали. Но у него есть функции, которые могут заставить его считаться ООП.
Мех. У каждого есть свое деление ООП.Алан Кей, который изобрел термин ООП сказал: http://www.noulakaz.net/weblog/2007/02/12/true-meaning-of-oop/
OOP мне означает только обмен сообщениями, местное сохранение и защиту и сокрытие государственного процесса, и крайняя позднего связывания всех вещей. Это может быть сделано в Smalltalk и в LISP. Там , возможно, другие системы, в которых это возможно, но я не знаю их.
По этому определению даже Java, C#, Python и т. Д. Не являются языками OO.
ИМХО, эти обсуждения бессмысленны.
Если я являюсь интервьюером, задающим вам этот вопрос, я, вероятно, не забочусь о да/нет ответа - я действительно хочу знать, что вы понимаете в программировании, и на языках C++ или на других языках. Вы просто выбрасываете термины, о которых вы не думаете или не понимаете, или вы на самом деле внимательно относитесь к тому, что вы делаете и говорите. Таким образом, в этой ситуации хороший ответ
«Я определяю объектно-ориентированное кодирование как a, b, c и d. Я определяю объект-ориентированный язык как тот, который поддерживает это определение, т. Е. Позволяет мне (легко/равномерно/строго/другое прилагательное) разработать код, который удовлетворяет этим требованиям. C++ поставляет a, b, c и частично на d. Поэтому я не рассматриваю C++ как OO по этим причинам. "
Для моего личного определения C++ достаточно объектно-ориентирован, а также поддерживает другие подходы.
C++ не является объектно-ориентированным языком. Язык не парадигма. Это находится в соответствии с Java, которая ориентирована на религиозность объектно-ориентированной (например, нет заявления друга). C++ предлагает объектную ориентацию, но по своей сути объектно-ориентированной.
Как говорили другие, C++ не является языком PURE OO. Опять же, единственный чистый язык OO, который я знаю, является небольшим. Единственный чистый функциональный язык, который я знаю, - это исчисление Лямбды. Я не знаю ЛЮБЫХ чистых структурированных языков (все они имеют goto и/или несколько операторов возврата)
Большинство людей не любят писать на чистых языках программирования. Это сужает их стиль.
Объектно-ориентированное программирование (ООП) стало предпочтительным программным подходом в отраслях программного обеспечения, поскольку оно предлагает мощный способ справиться с cpmlexity реальных пролетей. Среди языков ООП, доступных сегодня, C++ является самым широко используемым языком.
Языки должны поддерживать несколько концепций ООП, чтобы утверждать, что они ориентированы на объекты. в зависимости от того, какие они поддерживают, они могут быть разделены на две категории.
Объектно-ориентированные языки программирования.
Объектно-ориентированные языки программирования.
объектно-ориентированный язык программирования. , если он поддерживает
A. DATA ENCAPSULATION B. DATA HIDING AND ACCESS MECHANISAMS C. AUTOMATIC INITIALIZATION& CLEAR-UP OF OBJECTS D. OPERATOR OVER LOADING
2.Объектно-ориентированные языки программирования.
Он поддерживает все объектно-программирования на основе функции, наряду с двумя дополнительными функциями
E. INHERITANCE F. DYNAMIC BINDING
, следовательно, объектно-ориентированных языков программирования означает
**Object-based features+ inheritance+ dynamic binding.**
Примеры: C++, SMALLTALK, OBJECT PASCAL, JAVA
Так, C++ является объектно-ориентированным программированием ЯЗЫКА>
Если вы все равно должны иметь какое-то сомнение в объектно-ориентированных концепциях программирования приведена в книге E.Balaguruswamy.
C++ частично OO, потому что код может быть написан без класса, и он также имеет множественную концепцию наследования, то есть один ребенок может иметь более одного родителя.
Stroustrup, который проектировал C с классами, а именно: оригинальная реализация стандарта ISO C++, ответила на тот же вопрос в OOPSLA '95 ACM. Бумажная копия доступна по адресу http://www.stroustrup.com/oopsla.pdf.
- 1. Является ли C++ свободным языком?
- 2. Является ли jQuery языком?
- 3. Является ли C# языком высокого уровня?
- 4. Является ли деревья выражений основным языком C#?
- 5. Является ли C++ полностью объектно-ориентированным языком?
- 6. Является ли UML языком программирования?
- 7. Является ли конкретным языком API
- 8. Является ли bash интерпретируемым языком?
- 9. Является ли bash языком программирования?
- 10. Является ли Javascript языком программирования?
- 11. Является ли PHA языком программирования?
- 12. Является ли Mathematica нетипизированным языком?
- 13. Является ли SCALA теоретическим языком?
- 14. Является ли JavaScript языком приложения?
- 15. Является ли Cython/Jython независимым языком?
- 16. Является ли vala кросс-платформенным языком?
- 17. Является ли LISP скомпилированным или интерпретируемым языком?
- 18. Является ли CAPL языком сценариев или языком программирования?
- 19. Является ли C# функциональным или объектно-ориентированным языком?
- 20. Является ли C# 100% объектно-ориентированным языком программирования?
- 21. Является ли Objective C подходящим языком для 3D-игр?
- 22. Является ли C++ единственным языком, который работает с mpi
- 23. Является ли Objective-C интерпретированным или скомпилированным языком?
- 24. Является ли C# строго типизированным или слабо типизированным языком?
- 25. Является ли C++ все еще считающимся статически типизированным языком?
- 26. Является ли Haskell строго типизированным языком программирования?
- 27. Является ли Hacklang устаревшим или безгосударственным языком?
- 28. Является ли ActionScript клиентским или серверным языком?
- 29. Является ли скрипт CGI отдельным языком сценариев?
- 30. Является ли JavaScript безопасным для вас языком?
Ха-ха, языки ООП просто страдают от эффекта «Нет истинного шотландца» (http://en.wikipedia.org/wiki/No_true_Scotsman). – Jacob
Если вы хотите, чтобы язык на основе C был действительно OO, вы можете пойти с Obj-C. Но мне это не нравится, и вы, вероятно, тоже этого не сделаете. – 2010-08-17 02:00:44
Зачем вам передавать чужое мнение как свое собственное, не задумываясь, чтобы поддержать ваше требование? –