Wbrew pozorom język C daje większe możliwości swobodnego podejścia do programowania obiektowego niż język C++. Zauważyłem, że podawane tutaj przykłady głównie pokazują, jak naśladować C++ w języku C. Natomiast język C nie posiada ograniczenia zamknięcia danych w ciele klasy i umożliwia na przykład odwoływanie się do tych samych danych przez przez funkcje, które można by zgrupować jako przynależne do dwóch obiektów programowania zorientowanego obiektowo w C.
struct Dane
{ unsigned id;
char *nazwa;
};
struct Dane2
{ unsigned id;
char *etykieta;
};
struct Dane *dane;
unsigned dane_n;
struct Dane2 *dane2;
unsigned dane2_n;
//po przydzieleniu pamięci konstruktorem i ustawieniu liczby elementów w tablicy...
char *
etykieta_dla_nazwy( struct Dane *dane, struct Dane2 *dane2, char *nazwa
){ for( unsigned i = 0; i != dane_n; i++ )
if( !strcmp( nazwa, dane[i].nazwa ))
for( unsigned j = 0; j != dane2_n; j++ )
if( dane[i].id == dane2[j].id )
return dane2[j].etykieta;
return 0;
}
To jest trywialny przykład, ale obrazuje, jak można przechowywać dane, by ich nie kopiować w czasie wykonywania programu, by ich niepotrzebnie nie powielać.
Jest to przykład nawiązujący do kolekcji obiektów i ewentualnie relacyjnych baz danych.
Istnieją inne metodologie programowania obiektowego niż zamknięte klasy hierarchiczne albo obiektowość otwarta, jak na przykład w Javascript, gdzie również przypisuje się funkcje do wnętrza obiektów.
Pytanie tylko, jakie to metodologie programowania. Gdzie mógłbym zacząć szukać, chcąc zachować szybkość C, a programować obiektowo w sposób opisany powyżej z zabezpieczeniem przed błędami lepszym niż w C?