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

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

Я разговаривал с коллегой о C и С++, и он утверждал, что C объектно-ориентированный, но я утверждал, что это не так. Я знаю, что вы можете делать объектно-ориентированные вещи в C, но С++ - это истинный объектно-ориентированный язык.

Каковы ваши мысли?

Кроме того, это вызвало дискуссию о том, кто решает, что значит быть объектно-ориентированным, и что трудно сказать, что объектно-ориентированное действительно официально означает. Что вы думаете об этом?

4b9b3361

Ответ 1

Если "объект C ориентирован?" вы имеете в виду, что "есть C, разработанный специально для поддержки объектно-ориентированного программирования"? то нет, C явно не объектно ориентирован.

Ответ 2

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

Вот несколько примеров:

Ответ 3

C не объектно-ориентированный. В этом и заключалась вся цель ++

Что касается определения того, что требуется, чтобы быть объектно-ориентированным: проверьте википедию.

Лично, если он поддерживает наследование, инкапсуляцию и полиморфизм, тогда все в порядке. Еще один ключ здесь - иметь хорошие ключевые слова, такие как класс и объект, как правило, которые помогают...

Примеры реальных объектно-ориентированных языков (не окончательных): Smalltalk, Java, С#, Python, Ruby, C++..

Кроме того, возможно иметь расширения для обеспечения функций OO, таких как PHP, Perl, VB (не .Net),...

Ответ 4

Реальные программисты могут писать объектно-ориентированный код на ЛЮБОЙ язык.

Но нет, C не является "объектно-ориентированным" языком. Он не имеет понятия классов, объектов, полиморфизма, наследования.

Ответ 5

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

Ответ 6

  • C не является объектно ориентированным в строгом смысле слова, поскольку он не имеет встроенного синтаксиса, поддерживающего объектно-ориентированную возможность, например класс, наследование и т.д.

Но если вы знаете трюк, вы можете легко добавить к нему объектно-ориентированную возможность, просто используя struct, function pointer и self-pointer. DirectFB - такая C-библиотека, написанная объектно-ориентированным способом. Плохо, что это больше подвержено ошибкам, поскольку оно не регулируется синтаксисом и проверкой типа компиляции. Вместо этого он основан на соглашении о кодировании.

например.

  IDirectFB/*a typedef of a struct*/ *dfb = NULL;
  IDirectFBSurface/*another typedef of a struct*/ *primary = NULL;
  DirectFBCreate (&dfb); /*factory method to create a struct (e.g. dfb) with 
                         pointers to function and data. This struct is 
                         like an object/instance of a class in a language with build-in 
                         syntax support for object oriented capability  */
  dfb->SetCooperativeLevel/*function pointer*/ 
          (dfb/*self pointer to the object dfb*/, 
           DFSCL_FULLSCREEN);
  dsc.flags = DSDESC_CAPS;
  dsc.caps  = DSCAPS_PRIMARY | DSCAPS_FLIPPING;
  dfb->CreateSurface/*function pointer, also a factory method 
                       to create another object/instance */
          ( dfb/*self pointer to the object dfb*/, 
            &dsc, 
            &primary/*another struct work as object of another class created*/ );
  primary->GetSize/*function pointer*/ 
              (primary/*self pointer to the object primary*/, 
               &screen_width, 
               &screen_height);

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

Ответ 7

C не является языком O-O при любом определении "O-O" и "language".

В качестве языка реализации для компонента, который предоставляет API O-O своим клиентам, довольно просто использовать C. Система X Windows - это, по сути, система O-O с одним наследованием при просмотре ее API, но полный беспорядок C при просмотре ее реализации.

Ответ 8

Ответ может быть да или нет, в зависимости от:

  • Если вы спросите: "C является объектно-ориентированным языком?", ответ "нет", потому что у него нет объектно-ориентированных конструкторов, ключевых слов, семантики и т.д.

  • если вы намерены "я могу реализовать ООП в C?", ответ "да", потому что ООП - это не только требование языка, но и способ "мышления", подход к программированию, прежде касаться какого-либо языка или другого. Однако реализация ООП на С (или любой другой язык, не предназначенный для ООП), безусловно, будет "принудительно" и очень сложна в управлении, чем любой другой язык ООП, поэтому также ожидается некоторое ограничение.

Ответ 9

Если ваш друг не говорил о Objective C (OS superset of C), тогда нет, C не является языком OO. Вы можете реализовать концепции OO с помощью C (что сделал старый компилятор С++ С++, он перевел С++ на C), но это не делает C OO-язык, поскольку он специально не предлагает поддержку стандартных методов OO, таких как полиморфизм или инкапсуляция.

Да, вы можете написать программный стиль OO на C, особенно с использованием либерального (ab-) использования макросов, но как кто-то, кто видел результаты некоторых из этих попыток, я настоятельно рекомендую использовать более подходящий язык.

Ответ 10

Реальные программисты могут писать объектно-ориентированный код на ЛЮБОЙ язык.

Я видел объектно-ориентированный кобол. Кобол, который называет Кобола. Вы хотите назвать этих программистов "Реал"?

Ответ 11

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

Ответ 12

C не является объектно-ориентированным.

C не ориентирует на объекты.

C++ делает.

Ответ 13

Нет, это не так, твой друг ошибается.