Pane profesore, já myslím, že tady dochází značnému zmatení všech, nejen nás a Vás. Já bych řekl, že jsme stále nesestoupili na stejnou frekvenci myšlení. Stejně jako vy jsem začínal na C (ještě předtím v Pascalu) a postupně jsem přešel na C++, mezitim jsem si pohrál s Javou a něco drobného ve smalltalku (i když to je šilenej jazky). Můj náhled na OOP by se dal rozdělit do několika urovni, tak jak jsem sve dovednosti casem procvicoval.
1. Objekt je striktne definovaný (lapidárně) jako "utvar v programu, ktery obsahuje data a metody s daty pracujici na jednom miste". Čili ve smyslu definice, kterou jste tu víceméně připoměl
2. Objekt je cosi, co lze považovat za minimální entitu v programu žijící vlastním životem a komunikující s jinými objekty, má přesně definovaný svůj vznik a zánik a rozhraní, se kterým komunikuje s okolím
3. Objekt je model reálného objektu našeho reálnho světa
Nejprve jsem byl na úrovni 1) a hádal se s každým okolo, kteří mě přesvědčovali, že existuje i úroveň 2) a 3). Jako Vy. Teprve pochopením úrovně 2) a úrovně 3) pro mne začalo OOP mít smysl. Prvně tedy jako nástroj, jak vytvořit v programu řád mezi jeho části, kdy jasne definovat zodpovědnost objektů za jednotlivé dílčí úkoly daného programu. Proto jsem schopen ve vašem GString vidět objekt, byť na úrovni 1) bych tuto myšlenku zavrhl. Jenže toto je možné na úrovni 2) protože GString lze považovat za minimální entitu v programu žijící vlastním životem a komunikujcící s jinými objekty. Má přesně definovaný vznik a zánik a rozhraní, se kterým komunikuje s okolím. I když toto rozhraní je definované procedurálním jazykem, pokud virtuálně spojíme tyto funkce s daty uloženými ve struktuře, získáme objekt, který může (po tomto virtuálním spojení) vyhovovat i definici 1). Pokud pochopíme i úroveň 3) stane se pro nás OOP prostředkem jak jednoduše, ale zato velice efektivně modelovat objekty z reálného prostředí v programu. V této fázi Vám garantuju, že Vám C++ přestane vadit a naopak budete oceňovat jeho pomoc při modelévání takovýchto objektů.
Tím chci říct, že po pochopení úrovně 2 a 3 budete schopen používat a modelovat objekty i v jazycích, které nejsou pro OOP určeny. Budete tvořit objekty v Prologu i v Lispu, víceméně v každém jazyce, který zvládne aspoň dekompozici. Ale samozřejmě, bude to považovat za utrpení a ztrátu času a raději sáhnete po nějakém OOP jazyce. Nicméně pak možná pochopíte, proč i v linux shellu jsem schopen vidět objektové prvky, byť to je jazyk, který podle definice 1) objektový neni a ani být nemůže.
Proto stále trvá můj názor, že jste se dobře naučil syntaxi, ale zatím jste nepřešel vrchol OOP a tak návrat C je pro vás cesta dolu, čili snadnější. Až se vám podaří ten vrchol překonat, návrat k procedurálnímu programování bude pro vás chůze do kopce a tato cesta se stane pro Vás nepohodlná.
Jinak doporučuju doporučuju pana Tomáše Kozla z FIM UHK, ten OOP vysvětluje na Javě a celkem pěkně. Dále tam mají předmět Objektové modelování, na tom lze OOP velice pěkně pochopit