Hören Sie zuallererst niemandem zu, der sagt: "Es gibt keine Objektorientierung in der Sprache x", weil sie wirklich nicht verstanden haben, dass OO eine Programmentwurfsmethode ist, ganz abgesehen von der Sprache Syntax.
Einige Sprachen haben elegante Möglichkeiten, OO zu implementieren, andere nicht. Es ist jedoch möglich, ein objektorientiertes Programm in jeder Sprache zu schreiben, für Beispiel in C . In ähnlicher Weise erhält Ihr Programm nicht automatisch ein korrektes OO-Design, nur weil Sie es in Java geschrieben haben oder weil Sie bestimmte Sprachschlüsselwörter verwendet haben.
Die Art und Weise, wie Sie die private Kapselung in C implementieren, ist ein bisschen kruder als in Sprachen mit OO-Unterstützung, aber es sieht so aus:
// module.h
%Vor%// module.c
%Vor%// main.c
%Vor%Kann es "Klasse" oder "ADT" oder "Codemodul" nennen, wie Sie es bevorzugen.
So wird jedes vernünftige C-Programm geschrieben . Und wurde für die letzten 30 bis 40 Jahre oder so geschrieben, solange das Programm Design existiert hat. Wenn Sie sagen, dass in einem C-Programm keine Setter / Getter vorhanden sind, liegt das daran, dass Sie keine Erfahrung mit C. haben.
Ja, es ist sehr viel möglich und manchmal sogar nützlich. C unterstützt undurchsichtige Typen:
%Vor% C-Code, der nur mit dieser Deklaration im Gültigkeitsbereich kompiliert wurde, kann nicht auf hypothetische Elemente der Struktur zugreifen und kann auch keinen Wert vom Typ Context
verwenden. Aber es kann immer noch Zeiger auf Context
-Werte verarbeiten, so dass Funktionen wie diese möglich sind:
Dieses Muster isoliert den Client-C-Code vor Änderungen an der Größe oder dem internen Layout von Context
. Beachten Sie, dass dies eine stärkere Garantie ist, als die Mitglieder einfach zu deklarieren, aber nicht zu dokumentieren: Selbst wenn die Programmierer die undokumentierten Mitglieder ignorieren, ist der wertmäßige Gebrauch der Struktur erlaubt (und wird sicher hineinfallen), und nun muss der Code sein neu kompiliert, wenn sich die Größe ändert. Mit anderen Worten, undurchsichtige Typen, die nur durch Zeiger behandelt werden, ergeben eine größere ABI-Stabilität.