Sembra che C abbia i suoi quasi-oggetti come "struct" che possono essere considerati come oggetti
Insieme, leggiamo la pagina Wikipedia sulla programmazione orientata agli oggetti e controlliamo le caratteristiche delle strutture in stile C che corrispondono a quello che è tradizionalmente considerato stile orientato agli oggetti:
(OOP) è un paradigma di programmazione che utilizza "oggetti" - strutture di dati costituite da campi e metodi di dati insieme alle loro interazioni
Le strutture C sono costituite da campi e metodi insieme alle loro interazioni ? No.
Le tecniche di programmazione possono includere caratteristiche come l'astrazione dei dati, l'incapsulamento, la messaggistica, la modularità, il polimorfismo e l'ereditarietà.
Le strutture C fanno una di queste cose in un modo "di prima classe"? No. La lingua funziona contro di te ad ogni passo.
l'approccio orientato agli oggetti incoraggia il programmatore a posizionare i dati dove non sono direttamente accessibili dal resto del programma
Le strutture C fanno questo? No.
Un programma orientato agli oggetti di solito conterrà diversi tipi di oggetti, ogni tipo corrispondente a un particolare tipo di dati complessi da gestire o forse a un oggetto o concetto del mondo reale
Le strutture C fanno questo? Sì.
Gli oggetti possono essere considerati come un avvolgimento dei loro dati all'interno di un insieme di funzioni progettate per garantire che i dati vengano utilizzati in modo appropriato
No.
ogni oggetto è in grado di ricevere messaggi, elaborare dati e inviare messaggi ad altri oggetti
Una stessa struttura può inviare e ricevere messaggi? No. Può elaborare i dati? No.
Le strutture di dati OOP tendono a "portare con sé i propri operatori"
Questo succede in C? No.
Invio dinamico ... Incapsulamento ... Polimorfismo dei sottotipi ... Eredità degli oggetti ... Ricorsione aperta ... Classi di oggetti ... Istanze di classi ... Metodi che agiscono sugli oggetti collegati ... Passaggio di messaggi ... Astrazione
C'è una di queste caratteristiche delle strutture C? No.
Quali caratteristiche delle strutture pensi siano "orientate agli oggetti"? Perché non riesco a trovare alcuna altra parte il fatto che le strutture definiscono i tipi .
Ora, ovviamente, puoi creare strutture che hanno campi che sono puntatori a funzioni. È possibile fare in modo che le strutture abbiano campi che sono puntatori a matrici di puntatori a funzione, corrispondenti a tabelle di metodi virtuali. E così via. Ovviamente puoi emulare C ++ in C. Ma questo è un modo molto non idiomatico di programmare in C; staresti meglio usando solo C ++.
Inoltre, i file C stessi sono sostanzialmente "moduli" separati, giusto? Quindi i moduli non sono simili agli "oggetti"?
Ancora una volta, 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; ecco perché si chiamano moduli. Messaging? Solo nel senso che una chiamata di metodo è un messaggio e i moduli possono contenere metodi. Polimorfismo? No. Eredità? No. I moduli sono candidati piuttosto deboli per "oggetti".