La programmazione orientata agli oggetti non riguarda le caratteristiche di sintassi, è una filosofia di programmazione e progettazione. Al suo interno sta il concetto di un oggetto , che è un costrutto che raggruppa lo stato con le routine per agire su di esso (o, a seconda del punto di vista, le risposte ai messaggi). L'altro aspetto importante di OOP è encapsulation : il wrapping dei dettagli di implementazione in strutture opache e il loro collegamento attraverso interfacce ben definite. Praticamente tutto il resto della teoria OOP risale a questi due fondamenti.
Quindi, qualsiasi linguaggio che può in qualche modo modellare oggetti (entità che contengono sia dati che codice) e incapsulamento può essere usato per fare OOP. Ad esempio, in C è possibile utilizzare i puntatori di funzione per memorizzare le funzioni nelle strutture e utilizzare il file system di intestazione / origine per realizzare l'incapsulamento. Non è conveniente, ma è sufficiente per fare OOP. Probabilmente puoi persino piegare qualcosa come Haskell o ML nel fare OOP, e non sarei sorpreso se qualcuno potesse inventare un modo di fare OOP in assemblea.
In pratica, tuttavia, un linguaggio può essere chiamato 'orientato agli oggetti' se fornisce un set completo di funzioni di sintassi per la programmazione orientata agli oggetti esplicita. In genere, ciò significa che una lingua del genere dovrebbe avere:
* una nozione di un oggetto
* una nozione di metodo di chiamata o passaggio di messaggi
* un modo comodo e diretto per controllare l'accesso ai membri degli oggetti
* un modo comodo e diretto per definire le interfacce
Di conseguenza, chiamerei un pezzo di codice orientato agli oggetti se si aderisce ai principi OOP e utilizza la sintassi OOP disponibile.
BTW., il tuo esempio di codice probabilmente fa usa il polimorfismo e le funzioni virtuali, sebbene la sintassi C non lo renda ovvio. Non sono un esperto di SDL, ma mi aspetterei che un SDL_surface
sia in grado di rappresentare vari tipi di superfici, ognuna con un proprio specifico insieme di implementazioni - blittare qualcosa su una bitmap di memoria e passare a una superficie dello schermo richiede un codice radicalmente diverso, ma l'interfaccia (le funzioni che accettano un SDL_surface*
come argomento) rimane la stessa. Proprio così, implementa anche l'incapsulamento: non è possibile accedere direttamente alla rappresentazione sottostante di una superficie, devi passare attraverso funzioni che sanno come gestire un SDL_surface
, perché è tutto ciò che hai. È un bell'esempio di come potresti fare OOP in C.