Parece que C tem seus próprios quase-objetos, como 'estruturas' que podem ser considerados objetos
Vamos juntos, você e eu, ler a página da Wikipedia sobre programação orientada a objetos e verificar os recursos das estruturas no estilo C que correspondem ao que é tradicionalmente considerado estilo orientado a objetos:
(OOP) é um paradigma de programação usando "objetos" - estruturas de dados que consistem em campos e métodos de dados, juntamente com suas interações
As estruturas C consistem em campos e métodos, juntamente com suas interações ? Não.
As técnicas de programação podem incluir recursos como abstração de dados, encapsulamento, sistema de mensagens, modularidade, polimorfismo e herança.
As estruturas C fazem alguma dessas coisas de maneira "de primeira classe"? Não. A linguagem funciona contra você a cada passo do caminho.
a abordagem orientada a objetos incentiva o programador a colocar dados onde não são diretamente acessíveis pelo restante do programa
As estruturas C fazem isso? Não.
Um programa orientado a objetos geralmente contém diferentes tipos de objetos, cada tipo correspondendo a um tipo específico de dados complexos a serem gerenciados ou talvez a um objeto ou conceito do mundo real
As estruturas C fazem isso? Sim.
Os objetos podem ser considerados como agrupando seus dados em um conjunto de funções projetadas para garantir que os dados sejam usados adequadamente
Não.
cada objeto é capaz de receber mensagens, processar dados e enviar mensagens para outros objetos
Uma estrutura pode enviar e receber mensagens? Não. Ele pode processar dados? Não.
As estruturas de dados OOP tendem a "transportar seus próprios operadores com eles"
Isso acontece em C? Não.
Expedição dinâmica ... Encapsulamento ... Polimorfismo de subtipo ... Herança de objetos ... Recursão aberta ... Classes de objetos ... Instâncias de classes ... Métodos que atuam nos objetos anexados ... Passagem de mensagens .. Abstração
Há algum desses recursos das estruturas C? Não.
Precisamente, quais características das estruturas você acha que são "orientadas a objetos"? Porque eu não posso encontrar qualquer que não seja o fato de que estruturas definem tipos .
Agora, é claro que você pode criar estruturas que possuem campos que são indicadores de funções. Você pode fazer com que as estruturas tenham campos que são ponteiros para matrizes de ponteiros de função, correspondentes a tabelas de métodos virtuais. E assim por diante. É claro que você pode emular C ++ em C. Mas essa é uma maneira muito não-idiomática de programar em C; seria melhor você usar C ++.
E também, os arquivos C são basicamente "módulos" separados, certo? Então os módulos também não são como 'objetos'?
Novamente, em quais características dos módulos você pensa que os fazem agir como objetos? Os módulos suportam abstração, encapsulamento, sistema de mensagens, modularidade, polimorfismo e herança?
Abstração e encapsulamento são bem fracos. Obviamente, os módulos são modulares; é por isso que eles são chamados de módulos. Mensagens? Somente no sentido de que uma chamada de método é uma mensagem e os módulos podem conter métodos. Polimorfismo? Não. Herança? Não. Módulos são candidatos bastante fracos para "objetos".