Rhetorische Fragen: ;Frage: Kann man in C objektorientiert Programmieren? ;Antwort: Ja, aber es ist mehr Arbeit und alle Aspekte von OO Sprachen kann man nicht nachbilden. ;Frage: Warum sollte es dann jemand tun wollen? ;Antwort: Weil man die Vorteile von C (Systemnähe, Effizienz, ...) nicht aufgeben, sondern mit möglichst vielen Vorteilen der OO Arbeitsweise und Denkweise verbinden möchte. Es kann natürlich verschiedene Ausprägungen von OO Programmierung in C geben, und ich beschreibe hier nur eine, relativ einfache Form. Jeder ist herzlich eingeladen zu ergänzen oder mitzuschreiben. -- HelmutLeitner Siehe auch einzelne Punkte von ProgrammierStilAlpha [[Überschrift]Objekte] C hat keine Objekte, also muss man die Verbindung von Datenstruktur und Funktionen nachbilden. Dazu vereinheitlich man die Schnittstellen: * Objekte werden immer nur als Pointer zur zugrunde liegenden Struktur übergeben * Jeder Funktionname beginnt mit dem Objektnamen. Zusätzlich sammelt man alle Funktionen zu einem Objekt in einem Sourcemodul und alle Prototypen in einem korrespondierenden Header (es kann Gründe geben, von dieser Organisation abzuweichen). Die typischen Basisfunktionen für ein Objekt sind: [[Code] object=ObjectCreate?(...); ObjectSetProperty?(object,property); ObjectGetProperty?(object,&property); property=ObjectRetProperty?(object); error=ObjectAction?(object); error=ObjectActionAnotherobject?(object,anotherobject); ... ObjectFree?(&object); ] Das Vokabular ist natürlich frei wählbar, man könnte statt ObjectCreate auch object_create, ObjectNew, object_new oder object_alloc verwenden, aber es muss konsistent sein. [[Überschrift]Kapselung] Eine Kapselung kann im strengen Sinn nicht realisiert werden, denn in C kann man mit einem Zeiger im Prinzip überall hineinarbeiten. Eine Kapselung könnte in gewissen Ausmaß realisiert werden, indem die Übergabe der Objekte mittels neutralisierter Pointer (z.B. void Pointer) erfolgt, die nicht die eigentliche Strukturinformation haben. Auf eine Kapselung wird verzichtet, weil sie kein sinnvolles Verhältnis von Kosten und Nutzen existiert. [[Überschrift]Speicherverwaltung] [[Überschrift]Vererbung] KategorieCee |
Siehe OopInCee |