It seems that C has its own quasi-objects such as 'structs' that can be considered as objects
Vamos juntos você e eu ler a página da Wikipedia sobre programação orientada a objetos e verificar os recursos de C Estruturas em estilo que correspondem ao que é tradicionalmente considerado como estilo orientado a objetos:
(OOP) is a programming paradigm using "objects" – data structures consisting of data fields and methods together with their interactions
As estruturas do C consistem em campos e métodos juntamente com suas interações ? Não.
Programming techniques may include features such as data abstraction, encapsulation, messaging, modularity, polymorphism, and inheritance.
As estruturas do C fazem alguma dessas coisas de "primeira classe"? Não. A linguagem funciona contra você a cada passo do caminho.
the object-oriented approach encourages the programmer to place data where it is not directly accessible by the rest of the program
As estruturas C fazem isso? Não.
An object-oriented program will usually contain different types of objects, each type corresponding to a particular kind of complex data to be managed or perhaps to a real-world object or concept
As estruturas C fazem isso? Sim.
Objects can be thought of as wrapping their data within a set of functions designed to ensure that the data are used appropriately
Não.
each object is capable of receiving messages, processing data, and sending messages to other objects
Uma estrutura pode enviar e receber mensagens? Não. Pode processar dados? Não.
OOP data structures tend to "carry their own operators around with them"
Isso acontece em C? Não.
Dynamic dispatch ... Encapsulation ... Subtype polymorphism ... Object inheritance ... Open recursion ... Classes of objects ... Instances of classes ... Methods which act on the attached objects ... Message passing ... Abstraction
Algum desses recursos de estruturas C? Não.
Precisamente quais características de estruturas você acha que são "orientadas a objetos"? Porque não consigo encontrar nenhuma além do fato de que as estruturas definem tipos .
Agora, é claro, você pode criar estruturas com campos que sejam ponteiros para funções. Você pode fazer structs ter campos que são ponteiros para matrizes de ponteiros de função, correspondendo a tabelas de métodos virtuais. E assim por diante. Você pode, é claro, emular o C ++ em C. Mas essa é uma maneira não-idiomática de programar em C; você estaria melhor apenas usando C ++.
And also, C files themselves are basically separate "modules", right? Then aren't modules kind of like 'objects' too?
Mais uma vez, que características dos módulos você está pensando que os fazem agir como objetos? Os módulos suportam abstração, encapsulamento, mensagens, modularidade, polimorfismo e herança?
A abstração e o encapsulamento são muito fracos. Obviamente, os módulos são modulares; é por isso que eles são chamados de módulos. Mensagens? Apenas no sentido de que uma chamada de método é uma mensagem e módulos podem conter métodos. Polimorfismo? Não. Herança? Não. Os módulos são candidatos bastante fracos para "objetos".