Bei der objektorientierten Programmierung geht es nicht um Syntaxfunktionen, sondern um eine Codierungs- und Designphilosophie. Im Kern steht das Konzept eines Objekts , bei dem es sich um ein Konstrukt handelt, das Zustände mit Routinen gruppiert, um darauf zu reagieren (oder, abhängig von Ihrer Sichtweise, Antworten auf Nachrichten). Der andere wichtige Aspekt von OOP ist die Kapselung : Implementieren von Implementierungsdetails in undurchsichtige Strukturen und Verbinden dieser über genau definierte Schnittstellen. So ziemlich alles andere in der OOP-Theorie geht auf diese beiden Grundlagen zurück.
Daher kann jede Sprache, die Objekte (Entitäten, die sowohl Daten als auch Code enthalten) und Kapselung irgendwie modellieren kann, für OOP verwendet werden. In C können Sie beispielsweise Funktionszeiger verwenden, um Funktionen in Strukturen zu speichern, und Sie können das Header- / Quelldateisystem verwenden, um die Kapselung zu realisieren. Es ist nicht bequem, aber es reicht aus, um OOP zu machen. Sie können wahrscheinlich sogar so etwas wie Haskell oder ML dazu bringen, OOP zu machen, und ich wäre nicht überrascht, wenn jemand einen Weg finden könnte, OOP in der Montage zu machen.
In der Praxis kann eine Sprache jedoch als "objektorientiert" bezeichnet werden, wenn sie einen vollständigen Satz von Syntaxfunktionen für die explizite objektorientierte Programmierung bietet. In der Regel bedeutet dies, dass eine solche Sprache Folgendes haben sollte: * einen Begriff eines Objekts * einen Begriff des Methodenaufrufs oder der Nachrichtenübermittlung * eine komfortable und unkomplizierte Möglichkeit, den Zugriff auf Objektmitglieder zu steuern * eine komfortable und unkomplizierte Art der Definition von Schnittstellen
Folglich würde ich einen Code als objektorientiert bezeichnen, wenn er den OOP-Prinzipien entspricht und die verfügbare OOP-Syntax verwendet.
BTW. Ihr Codebeispiel wahrscheinlich tut Verwendung Polymorphismus und virtuelle Funktionen, obwohl die C - Syntax nicht offensichtlich macht. Ich bin kein SDL-Experte, aber ich würde erwarten, dass ein Unternehmen SDL_surface
verschiedene Arten von Oberflächen darstellen kann, von denen jede ihre eigenen Implementierungen hat. Das Aufteilen von Daten auf eine Speicher-Bitmap und das Aufteilen auf eine Bildschirmoberfläche erfordert radikal andere Code, aber die Schnittstelle (die Funktionen, die ein SDL_surface*
als Argument verwenden) bleibt gleich. Auf diese Weise wird auch die Kapselung implementiert: Sie können nicht direkt auf die zugrunde liegende Darstellung einer Oberfläche zugreifen, sondern müssen Funktionen durchlaufen, die wissen, wie man mit einer handelt SDL_surface
, denn das ist alles, was Sie haben. Es ist ein schönes Beispiel dafür, wie Sie OOP in C machen würden.