A programação orientada a objetos não trata de recursos de sintaxe, é uma filosofia de codificação e design. Na essência, está o conceito de um objeto , que é um construto que agrupa estados com rotinas para agir sobre ele (ou, dependendo do seu ponto de vista, respostas a mensagens). O outro aspecto importante do OOP é o encapsulamento : agrupando detalhes da implementação em estruturas opacas e conectando-os por meio de interfaces bem definidas. Praticamente tudo o mais na teoria OOP remonta a esses dois fundamentos.
Portanto, qualquer linguagem que possa, de alguma forma, modelar objetos (entidades que contenham dados e código) e encapsulamento pode ser usada para fazer OOP. Por exemplo, em C, você pode usar ponteiros de função para armazenar funções em estruturas e o sistema de arquivos de cabeçalho / origem para realizar o encapsulamento. Não é conveniente, mas é suficiente para fazer POO. Você provavelmente pode até inclinar algo como Haskell ou ML para fazer POO, e eu não ficaria surpreso se alguém pudesse inventar uma maneira de fazer POO em assembléia.
Na prática, porém, uma linguagem pode ser chamada de 'orientada a objetos' se fornecer um conjunto completo de recursos de sintaxe para programação orientada a objetos explícita. Normalmente, isso significa que essa linguagem deve ter: * uma noção de um objeto * uma noção de chamada de método ou passagem de mensagem * uma maneira confortável e direta de controlar o acesso aos membros do objeto * uma maneira confortável e direta de definir interfaces
Conseqüentemente, eu chamaria um pedaço de código de orientado a objeto se ele seguisse os princípios de OOP e usasse a sintaxe disponível de OOP.
BTW., O exemplo de código, provavelmente, faz uso polimorfismo e funções virtuais, embora a sintaxe C não torna óbvia. Não sou especialista em SDL, mas esperaria SDL_surface
poder representar vários tipos diferentes de superfícies, cada uma com seu próprio conjunto específico de implementações. código, mas a interface (as funções que aceitam SDL_surface*
como argumento) permanece a mesma. Assim, ele também implementa o encapsulamento: você não pode acessar diretamente a representação subjacente de uma superfície, precisa passar por funções que sabem como lidar com uma SDL_surface
, porque é tudo o que você tem. É um bom exemplo de como você faria POO em C.