web-dev-qa-db-pt.com

A linguagem de programação C é orientada a objetos?

Eu estava conversando com um colega de trabalho sobre C e C++ e ele afirmou que C é orientado a objetos, mas eu aleguei que não era. Eu sei que você pode fazer coisas semelhantes a objetos em C, mas C++ é uma linguagem orientada a objeto. 

Quais são seus pensamentos?

Além disso, desencadeou uma discussão sobre quem decide o que significa ser orientado a objetos e que é difícil dizer o que o orientado a objetos realmente significa oficialmente. O que você está pensando sobre isso?

37
Brian T Hannan

Se por "é orientado a objeto C?" Você quer dizer "C é projetado com instalações especificamente para apoiar a programação orientada a objeto?" então, não, C claramente não é orientado a objetos.

59
James McNellis

Você pode programar em um estilo orientado a objetos em mais ou menos qualquer idioma. (Eu acho que polimorfismo de tempo de execução - ou seja, métodos virtuais - requer uma linguagem que suporte ponteiros de função.)

Aqui estão alguns exemplos: 

18
Tim Robinson

C não é orientado a objetos. Esse foi o objetivo por trás do ++

Quanto a uma definição do que é preciso para ser orientado a objetos: verifique wikipedia .

Pessoalmente, se ele suporta herança, encapsulamento e polimorfismo, então é bom ir. Outra chave aqui é ter palavras-chave legais como classe e objetos que tendem a ajudar ...

Exemplos de linguagens orientadas a objetos reais (não conclusivas) são: Smalltalk, Java, c #, Python, Ruby, C++.

Além disso, é possível ter extensões para fornecer recursos OO como PHP, Perl, VB (não .Net), ...

10
NotMe

Programadores reais podem escrever código orientado a objeto em QUALQUER linguagem.

Mas não, C não é uma linguagem "orientada a objetos". Não tem conceito de classes, objetos, polimorfismo, herança.

9
Roddy

A confusão pode ser que C pode ser usado para implementar conceitos orientados a objetos como polimorfismo, encapsulamento, etc., o que pode levar seu amigo a acreditar que C é orientado a objetos. O problema é que, para ser considerada uma linguagem de programação orientada a objetos, esses recursos precisariam ser incorporados à linguagem. Quais não são.

3
Graphics Noob

C não é uma linguagem O-O sob qualquer definição de "O-O" e "linguagem".

É muito fácil usar o C como linguagem de implementação para um componente que fornece uma API O-O aos seus clientes. O sistema X Windows é essencialmente um sistema O-O de herança única quando visto de sua API, mas uma confusão completa de C ao visualizar sua implementação.

3
Bill Torcaso
  1. C não é orientado a objetos em sentido estrito, uma vez que não possui uma sintaxe embutida com suporte a recursos orientados a objetos, como classe, herança e assim por diante.

Mas se você conhece o truque, você pode facilmente adicionar a capacidade orientada a objeto simplesmente usando struct, ponteiro de função e ponteiro próprio. O DirectFB é uma biblioteca C escrita de maneira orientada a objetos. A coisa ruim é mais propenso a erros, uma vez que não é governado pela verificação de sintaxe e tipo de compilação. Baseia-se na convenção de codificação.

por exemplo.

  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 O C++ é orientado a objetos, pois possui suporte interno para recursos orientados a objetos, como classe e herança. Mas há argumento de que não é uma linguagem orientada a objetos completa ou pura, uma vez que ela permite a sintaxe C (sintaxe de programação estrutural) nela. Também me lembro de que o C++ carece de alguns recursos orientados a objetos, mas não se lembra exatamente de cada um deles.

3
ttchong

A menos que seu amigo estivesse falando sobre Objectivo C (um OO superconjunto de C) então não, C não é um OO idioma. Você pode implementar OO conceitos usando C (isso é o que o antigo compilador c ++ C++ fez, traduziu C++ para C), mas isso não faz C an OO linguagem como não faz especificamente oferecem suporte a técnicas padrão OO como polimorfismo ou encapsulamento.

Sim, você pode escrever software OO estilo em C, especialmente com o uso liberal (ab-) de macros, mas como alguém que viu os resultados de algumas dessas tentativas, eu sugiro fortemente usar um melhor linguagem adequada.

1
Timo Geusch

Programadores reais podem escrever código orientado a objeto em QUALQUER linguagem.

Eu tenho visto Object Oriented Cobol. Cobol que chama Cobol. Você quer chamar esses programadores de "Real"?

1
newbie007

C não é linguagem orientada a objetos. C é uma linguagem imperativa de propósito geral, suportando programação estruturada. Como C não é orientado a objetos, C++ surgiu para ter o recurso OOPs e OOP é um modelo de linguagem de programação organizado em torno de objetos. Uma linguagem para ter o recurso OOPs precisa implementar certos princípios de OOPs. Alguns deles são Herança, Polimorfismo, Abstração, Encapsulamento. 

1
Varunnuevothoughts

Resposta pode ser sim ou não , dependendo de:

  • se você perguntar "C é uma linguagem orientada a objetos?", a resposta é "não" porque não tem construtores orientados a objeto, palavras-chave, semântica etc ...

  • se você pretende "posso realizar OOP em C?", a resposta é sim, porque OOP não é apenas uma exigência de uma linguagem, mas também uma maneira de "pensar", uma abordagem à programação, antes de tocar em alguma linguagem ou outra. No entanto, a implementação de OOP em C (ou qualquer outra linguagem não projetada nativamente como OOP) será certamente "forçada" e muito difícil de gerenciar em qualquer outra linguagem OOP, portanto também haverá alguma limitação. esperado.

0
bzimage

Não, não é, seu amigo está errado.

0
Ed S.