It seems that C has its own quasi-objects such as 'structs' that can be considered as objects
Mettiamo insieme te e io attraverso la pagina di Wikipedia sulla programmazione orientata agli oggetti e controlla le funzionalità di C strutture in stile che corrispondono a quello che è tradizionalmente considerato uno stile orientato agli oggetti:
(OOP) is a programming paradigm using "objects" – data structures consisting of data fields and methods together with their interactions
Le strutture C consistono di campi e metodi insieme alle loro interazioni ? No.
Programming techniques may include features such as data abstraction, encapsulation, messaging, modularity, polymorphism, and inheritance.
Le strutture C fanno una di queste cose in un modo "di prima classe"? No. Il linguaggio funziona contro di te in ogni momento.
the object-oriented approach encourages the programmer to place data where it is not directly accessible by the rest of the program
Le strutture C lo fanno? No.
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
Le strutture C lo fanno? Sì.
Objects can be thought of as wrapping their data within a set of functions designed to ensure that the data are used appropriately
No.
each object is capable of receiving messages, processing data, and sending messages to other objects
Può una struttura stessa inviare e ricevere messaggi? No. Può elaborare i dati? No.
OOP data structures tend to "carry their own operators around with them"
Questo succede in C? No.
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
Ci sono alcune di queste funzionalità delle strutture C? No.
Precisamente quali caratteristiche delle strutture pensi siano "orientate agli oggetti"? Perché non riesco a trovare qualsiasi se non il fatto che le strutture definiscono tipi .
Ora, ovviamente, puoi creare strutture con campi che puntano a funzioni. È possibile creare strutture con campi che puntano a matrici di puntatori di funzioni, corrispondenti a tabelle di metodi virtuali. E così via. Ovviamente emula C ++ in C. Ma questo è un modo molto non idiomatico di programmare in C; staresti meglio usando solo C ++.
And also, C files themselves are basically separate "modules", right? Then aren't modules kind of like 'objects' too?
Ancora una volta, a quali caratteristiche dei moduli stai pensando che li fanno agire come oggetti? I moduli supportano l'astrazione, l'incapsulamento, la messaggistica, la modularità, il polimorfismo e l'ereditarietà?
L'astrazione e l'incapsulamento sono piuttosto deboli. Ovviamente i moduli sono modulari; è per questo che si chiamano moduli. Messaging? Solo nel senso che una chiamata al metodo è un messaggio e i moduli possono contenere metodi. Polimorfismo? No. Eredità? No. I moduli sono candidati piuttosto deboli per "oggetti".