Подтвердить что ты не робот

Является ли С++ объектно-ориентированным языком?

Я всегда слышал, что С++ не является объектно-ориентированным, а скорее "C с классами". Итак, когда я сказал интервьюеру, что С++ не был объектно ориентирован, он спросил меня, почему я не рассматривал его как язык OO. Я не делал С++ с Университета, и у меня не было большого количества ответов. Объект С++ ориентирован или нет? и почему?

4b9b3361

Ответ 1

С++ обычно считается языком "многопарадигмы". То есть вы можете использовать его для объектно-ориентированного, процедурного и даже функционального программирования.

Те, кто отрицает, что С++ - это OO, обычно имеют говядину с тем фактом, что примитивные типы не являются самими объектами. По этому стандарту Java также не будет считаться OO.

Конечно, С++ не является OO в той же степени, что и Smalltalk, Ruby, Self и т.д., но это, безусловно, эффективный язык OO по большинству стандартов.

Ответ 3

С++ - объектно-ориентированный язык. Проблема в том, что у некоторых языковых фанатиков есть свое, иногда противоречивое определение ООП. Например, некоторые люди Java говорят, что С++ не является языком OOP, потому что вы можете определять функции вне класса.

Просто игнорируйте их.

Ответ 4

Ба! Люди, которые говорят, что С++ не являются объектно-ориентированными, являются теми же, что и Spam не является продуктом: -)

ОО "религиозный псих" будет говорить, что вы можете иметь только истинный язык ОО, если абсолютно все является объектом. Это прекрасно, они могут сидеть в своих башнях из слоновой кости и верить в то, что они хотят. У некоторых из нас есть реальные задания.

Если вы используете мышление объекта, С++ (и даже C, если вы используете всевозможные трюки с указателями функций внутри структур), более чем достаточно, чтобы считаться объектно-ориентированным.

Ответ 5

Мех. У каждого есть свое деление ООП. Алан Кей, который изобрел термин ООП, сказал: http://www.noulakaz.net/weblog/2007/02/12/true-meaning-of-oop/

OOP для меня означает только обмен сообщениями, локальный сохранения и защиты и процесс состояния и экстремальный поздняя привязка всех вещей. Может быть сделано в Smalltalk и в LISP. Там возможно, другие системы, в которых это возможно, но я не знаю их.

По этому определению даже Java, С#, Python и т.д. не являются языками OO.

ИМХО, эти обсуждения бессмысленны.

Ответ 6

Ключами объектной ориентации являются абстракция, инкапсуляция, полиморфизм и наследование.

Я бы сказал, что С++ показывает все четыре, поэтому он квалифицируется как объектно-ориентированный язык.

Возможно писать С++ как "лучше C" и использовать чисто процедурный стиль. Объекты не являются обязательными. Возможно, это то, о чем вы думаете.

Ответ 7

С++ - это язык OO.
Но это не единственный стиль кодирования, который можно использовать в С++. N Таким образом, С++ является технически многопарадигменным языком, OO которого является лишь одной парадигмой.

Термин "C с классами" имеет пару значений.

  • Это может означать, что С++ - это OO (поскольку классы предоставляют возможности OO).
  • Он может ссылаться на оригинальную версию "cfront"
    • Что было в основном C с расширением классов и еще немного.
  • Он может относиться (отвратительно) к стилю программирования, который не использует всю мощь С++, но использует только небольшое подмножество языка.

Ответ 8

Идея состоит в том, что С++ не является просто объектно-ориентированным языком.

Ответ 9

С++ объектно ориентирован, потому что классы обеспечивают абстракцию и наследование и весь этот джаз. Это не всегда относится к объектно-ориентированным, потому что код не должен быть объектно-ориентированным. Это похоже на то, что Scheme не работает, потому что он установил!.

Ответ 10

Как говорили другие, С++ не является языком PURE OO. Опять же, единственный чистый язык OO, который я знаю, является небольшим. Единственный чистый функциональный язык, который я знаю, - это исчисление Лямбды. Я не знаю ЛЮБЫХ чистых структурированных языков (все они имеют goto и/или несколько операторов возврата)

Большинство людей не любят писать на чистых языках программирования. Это сужает их стиль.

Ответ 11

Термин "объектно-ориентированный" слишком туман, чтобы дать определенный ответ "да" или "нет". Я думаю, вы увидите, что представление большинства состоит в том, что С++ является языком OO или, по крайней мере, вы можете писать в OO-способе на С++. Если вы хотите получить более конкретный ответ, вам нужно задать более четкий вопрос, например:

В: Имеются ли в С++ объекты "объект" (т.е. поля данных + связанные функции-члены)?

A: Да.

Q: Имеются ли в С++ типы объектов, не являющихся объектами?
A: Да.

Q: Имеются ли в С++ функции, не являющиеся членами?
A: Да.

Ответ 12

С++ является объектно-ориентированным. С++ - это c с классами, это еще один способ сказать, что С++ c с добавлением oop (и, конечно, больше, чем на c).

Ответ 13

Если я интервьюер, задающий вам этот вопрос, я, вероятно, не забочусь о да/нет ответа - я действительно хочу знать, что вы понимаете в программировании, и на С++ или на других языках. Вы просто выбрасываете термины, о которых вы не думаете или не понимаете, или вы на самом деле внимательно относитесь к тому, что вы делаете и говорите. Поэтому в этой ситуации хороший ответ

"Я определяю объектно-ориентированное кодирование как a, b, c и d. Я определяю объект-ориентированный язык как тот, который поддерживает это определение, т.е. позволяет мне (легко/равномерно/строго/другое прилагательное) разработать код, который удовлетворяет этим требованиям. С++ поставляет a, b, c и частично на d. Поэтому я (не) считаю С++ для OO соображением."

Для моего личного определения С++ достаточно объектно-ориентированный, плюс он поддерживает другие подходы.

Ответ 14

Stroustrup, который проектировал C с классами, а именно. оригинальная реализация стандарта ISO С++, ответила на тот же вопрос в ACM OOPSLA '95. Бумажная копия доступна в http://www.stroustrup.com/oopsla.pdf.

Ответ 15

Это действительно объектно-ориентированное, но не строго, хотя.

Скажем, например, мы можем просто

int main()
{
 return 1;
}

который является ничего в названии Object oriented, а с другой стороны мы можем иметь классы, наследование, полиморфизм и т.д., что соответствует объектно-ориентированному. p >

Мы должны развязать власть языка.

К интервьюеру, который спросил у вас вопрос, покажите класс a из С++ и спросите его, структурирован он или обработан. Он покажет вам ту же самую функцию main(), которую я предполагаю:)

Итак, я полагаю, что он основан на том, что вы реализовали. Но у него есть функции, которые могут заставить его считаться ООП.

Ответ 16

С++ не является объектно-ориентированным языком. Язык не парадигма. Это находится в соответствии с Java, которая ориентирована на религиозность объектно-ориентированной (например, нет заявления друга). С++ предлагает объектную ориентацию, но не является объектно ориентированной.

Ответ 17

С++ частично OO, потому что код может быть написан без класса, и он также имеет множественную концепцию наследования, то есть один ребенок может иметь более одного родителя.

Ответ 18

Объектно-ориентированное программирование (ООП) стало предпочтительным программным подходом в отраслях программного обеспечения, поскольку оно предлагает мощный способ справиться с cpmlexity реальных пролетей. Среди языков ООП, доступных сегодня, С++ является наиболее широко используемым языком.

Языки должны поддерживать несколько концепций ООП, чтобы утверждать, что они объектно ориентированы. в зависимости от поддерживаемых им фетров, их можно разделить на две категории.

  • Языки программирования на основе объектов.

  • Объектно-ориентированные языки программирования.

    • Языки программирования на основе объектов. если он поддерживает

         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.**

Примеры: С++, SMALLTALK, OBJECT PASCAL, JAVA

Итак, С++ - ЯВЛЯЮЩИЙ ЯЗЫК ПРОГРАММИРОВАНИЯ ОБЪЕКТОВ

Если у вас все еще есть сомнения в концепциях объектно-ориентированного программирования, обратитесь к книге E.Balaguruswamy.