Nun, das kommt drauf an. Aus Programmierer sich mag QT besser sein, doch ich wie viele andere finde ich GTK angenehmer bei der Bedienung (obwohl ich eigentlich garnicht weis warum ;) ), und wenn du etwas schreibst um es selbst zu nutzen wirst du wohl auch das nehmen was dir in der Bedienung am meisten zusagt.
Danke für die tolle Erklärung. Ich denke ich habe es soweit verstanden, zumindest zum Teil. Aber mal ehrlich, ist nicht "richtige" Objektorientierung ala C++ viel leichter und schöner zu benutzen??? Ich kann jetzt alle verstehen, die über GTK+ lästern. Sorry, aber da finde ich QT um einiges besser. In QT habe ich mich sehr schnell eingewöhnt, warum dann noch GTK+ lernen???
Erstmal: Um "objektorientiert" zu programmieren bedarf es nicht einer "objektorienterten" Sprache wie C++ oder Smalltalk, da es ein Programmierpardigma ist und es erstmal nichts mit technischen Dingen zu tun. Objektorientierte Programmierung beinhaltet z.B. Datenkapelung, Generalisierung/Spezialisierung usw.
C++ und Smalltalk bieten Sprachkonstrukte die die Umsetzung dieser Paradigmen _sehr vereinfachen_.
Zu den Fragen weiter oben: In C wird Vererbung durch einen einfachen Trick erreicht: Verschachtelt man structs ineinnander, starten diese beide an der selben Adresse. Bsp: Klasse ClassA, Klasse ClassB soll von ClassA abgeleitet werden:
struct ClassB { ClassA parentclass;
int i; };
i ist dann zusätzliches öffentliches Attribut und ClassB enthält auch alle Attribute und Methoden von ClassA. Man kann einen Pointer auf diesen struct nach ClassA und nach ClassB casten.
Für private Attribute und Methoden wird ein BPrivate struct in der *.h Datei deklariert und in der *.c Datei definiert. Die darin enthaltenen Attribute sind daher für andere Klassen die B verwenden nicht sichtbar.
Der größte Nachteil von C ist, dass es von sich auch nicht Typsicher ist. Daher gibt es keine implizite Polymorphie und alles mus explizit mit Makros gecastet werden.
Nicht jedes Auto mit einem schnellen Motor, ist gleichzeitig auch ein Ferrari... C ist eine rein prozedurorientierte Sprache. Es fehlen fast alle Leistungsmerkmale die ein OO-Sprache ausmachen. Sicherlich kann man mit C-Strukturen Daten zusammenfassen, allerdings macht das noch kein Objekt aus objektorientierter (programmier)Sichtweise aus.
Erst "ObjectiveC" kann man als objektorientiert bezeichnen und "C++" natürlich sowieso... Objektorientiert meint unter GTK+ eher das zusammenfassen von Daten in Strukturen. Mit einigen Abstrichen und beiden Augen zudrücken könnte man das als Kapselung bezeichnen. Wenn mit generischen Zeigern gearbeitet wird (und das macht man ja bei GTK+ )auch als Abstraktion. GTK+ kann man eher als gut strukturiertes, prozedurorientiertes Toolkit bezeichnen. Objektorientiert passt aber nicht zu GTK+ - oder um bei der Einleitung zu bleiben: "Nicht jedes rote Auto ist auch ein Ferrari"
Schön, daß ich mit meiner Unwissenheit nicht alleine bin ;-) Jetzt muß ich aber noch einmal fragen. Was bedeutet "casten"? Wie muß man sich das vorstellen? Ich habe leider bisher nur QT programmiert und noch nie in GTK+. Vielleicht muß ich das mal nachholen.....
Ein einfaches Beispiel für Datenkapselung in C wäre ein "struct" bestehend aus Variablen (den Daten) und Zeigern auf Funktionen. Schon hat man ein einfaches Objekt erzeugt, nur die nativen Fähigkeiten des Schutzes und der Vererbung wird man wohl nie finde ... Aber soooo schlimm sieht das auch nicht aus finde ich.
Und weil C langsam aus der Mode kommt freuen wir uns alle auf Kylix :) (ist ein scherz ok)
GTK und C++ wäre eine Schöne Kombi, auch wenn mit GTK+Kylix besser gefalle würde. Mal sehen wie lange man auf die ersten Umsetzungen warten muss (QT ist nicht soo mein traum)
Gtk+ ist hat trotz C eine objektorientierte Hierarchie. Die Widgets sind voneinander abgeleitet. natürlich hat C OOP nicht eingebaut. darum muß man die Widgets auch immer casten anstatt Polymorphismus. private, public und protected wie in C++ oder Ruby gibts da nicht. das kann C nicht. objektorientiert programmieren kann man theoretisch mit jeder sprache. bei C sieht es halt nicht so toll aus und es ist auch nicht so ausgereift und mächtig wie bei C++
Das klingt mir hier alles etwas nach "Selbsthilfegruppe". Eine Gruppe mit dem selben Problem trifft sich hier und hofft, daß durch einen Austausch des Nichtwissens plötzlich Wissen entsteht.
Ich weiß nur, daß es vor dem C++-Compiler den C++-Präprozessor gab, der alle C++-Befehle in C-Befehle umwandelte. Später entstand daraus der erste C++-Compiler, der auch noch ein paar Erweiterungen enthielt.
Ansonsten teile auch ich Deine Frage und hätte ebenfalls gerne eine Antwort dadrauf gewußt.
Kann mir mal jemand erklären, was "Gtk+ ist auch objektorientiert und trotzdem in C geschrieben" bedeutet? Wie schafft man dann die Kapselung von Variablen als "private, protected und public" hin? Bzw. Vererbungen etc. eben alles was objektorientierte Programmierung ausmacht? Wie verhindert man zum Beispiel, daß das Programm doch nicht ungewollt auf "private" deklarierte Variable von außerhalb der Klasse zugreift? Wo liegt dann der Unterschied zu C++?
ADA ist für einige eine vernünftige Programmiersprache und für andere nur die längste Praline der Welt.
ADA95 hat OO Erweiterungen erhalten und ist etwas besser nutzbar.
Ansonsten ist ADA eine Sprach Spezifikation des US Verteidigungsministerium. Hat sich allerdings wesentlich freier als entwickelt als JAVA wo ja SUN der Übervater ist.
Bei den Lizenzen sehe ich keine Probleme GVD ist ja auch Free Software.
Da steht, daß GVD in GtkAda geschrieben wurde. Beides (GVD und GtkAda) stammt von denen und ist unter der GPL. Kann mir einer mehr zu Ada sagen? Ich dachte Ada gehört einer Firma. Wenn man solche Bibliotheken mit einem Programm linkt, dann darf das Resultat doch nicht unter der GPL stehe. Oder?
Objektorientiert kann alles heißen. Man sollte dazu schreiben, das Inti eine C++ bibliothek ist. Gtk+ ist auch objektorientiert und trotzdem in C geschrieben. Drum sieht es manchmal etwas grausig ist.
Nun, das kommt drauf an. Aus Programmierer sich mag QT besser sein, doch ich wie viele andere finde ich GTK angenehmer bei der Bedienung (obwohl ich eigentlich garnicht weis warum ;) ), und wenn du etwas schreibst um es selbst zu nutzen wirst du wohl auch das nehmen was dir in der Bedienung am meisten zusagt.
C++ und Smalltalk bieten Sprachkonstrukte die die Umsetzung dieser Paradigmen _sehr vereinfachen_.
Zu den Fragen weiter oben:
In C wird Vererbung durch einen einfachen Trick erreicht: Verschachtelt man structs ineinnander, starten diese beide an der selben Adresse. Bsp: Klasse ClassA, Klasse ClassB soll von ClassA abgeleitet werden:
struct ClassB {
ClassA parentclass;
int i;
};
i ist dann zusätzliches öffentliches Attribut und ClassB enthält auch alle Attribute und Methoden von ClassA. Man kann einen Pointer auf diesen struct nach ClassA und nach ClassB casten.
Für private Attribute und Methoden wird ein BPrivate struct in der *.h Datei deklariert und in der *.c Datei definiert. Die darin enthaltenen Attribute sind daher für andere Klassen die B verwenden nicht sichtbar.
Der größte Nachteil von C ist, dass es von sich auch nicht Typsicher ist. Daher gibt es keine implizite Polymorphie und alles mus explizit mit Makros gecastet werden.
C ist eine rein prozedurorientierte Sprache. Es fehlen fast alle Leistungsmerkmale die ein OO-Sprache ausmachen. Sicherlich kann man mit C-Strukturen Daten zusammenfassen, allerdings macht das noch kein Objekt aus objektorientierter (programmier)Sichtweise aus.
Erst "ObjectiveC" kann man als objektorientiert bezeichnen und "C++" natürlich sowieso...
Objektorientiert meint unter GTK+ eher das zusammenfassen von Daten in Strukturen. Mit einigen Abstrichen und beiden Augen zudrücken könnte man das als Kapselung bezeichnen. Wenn mit generischen Zeigern gearbeitet wird (und das macht man ja bei GTK+ )auch als Abstraktion.
GTK+ kann man eher als gut strukturiertes, prozedurorientiertes Toolkit bezeichnen. Objektorientiert passt aber nicht zu GTK+ - oder um bei der Einleitung zu bleiben: "Nicht jedes rote Auto ist auch ein Ferrari"
Jetzt muß ich aber noch einmal fragen. Was bedeutet "casten"? Wie muß man sich das vorstellen? Ich habe leider bisher nur QT programmiert und noch nie in GTK+. Vielleicht muß ich das mal nachholen.....
Schon hat man ein einfaches Objekt erzeugt, nur die nativen Fähigkeiten des Schutzes und der Vererbung wird man wohl nie finde ...
Aber soooo schlimm sieht das auch nicht aus finde ich.
(ist ein scherz ok)
GTK und C++ wäre eine Schöne Kombi, auch wenn mit GTK+Kylix besser gefalle würde. Mal sehen wie lange man auf die ersten Umsetzungen warten muss (QT ist nicht soo mein traum)
Hierarchie. Die Widgets sind voneinander
abgeleitet. natürlich hat C OOP nicht eingebaut. darum muß man die Widgets auch immer casten anstatt Polymorphismus.
private, public und protected wie in C++ oder Ruby gibts da nicht. das kann C nicht.
objektorientiert programmieren kann man theoretisch mit jeder sprache. bei C sieht es halt nicht so toll aus und es ist auch nicht so ausgereift und mächtig wie bei C++
Aber ich schließe mich Steffens Frage an.
Ansonsten teile auch ich Deine Frage und hätte ebenfalls gerne eine Antwort dadrauf gewußt.
Danke.
in C geschrieben" bedeutet? Wie schafft man dann die Kapselung von Variablen als "private, protected und public" hin? Bzw. Vererbungen etc. eben alles was objektorientierte Programmierung ausmacht?
Wie verhindert man zum Beispiel, daß das Programm doch nicht ungewollt auf "private" deklarierte Variable von außerhalb der Klasse zugreift?
Wo liegt dann der Unterschied zu C++?
ADA95 hat OO Erweiterungen erhalten und ist etwas besser nutzbar.
Ansonsten ist ADA eine Sprach Spezifikation des US Verteidigungsministerium. Hat sich allerdings wesentlich freier als entwickelt als JAVA wo ja SUN der Übervater ist.
Bei den Lizenzen sehe ich keine Probleme GVD ist ja auch Free Software.
Kann mir einer mehr zu Ada sagen?
Ich dachte Ada gehört einer Firma. Wenn man solche Bibliotheken mit einem Programm linkt, dann darf das Resultat doch nicht unter der GPL stehe. Oder?
Und wenn man nun noch den GNU Visual Debugger (GVD) hinzunimmt, hat man ein perfektes Entwicklungssystem auf Basic von GTK+/Linux. :-)
Man sollte dazu schreiben, das Inti eine
C++ bibliothek ist.
Gtk+ ist auch objektorientiert und trotzdem
in C geschrieben. Drum sieht es manchmal etwas grausig ist.
Das Cookfire-ISO gibt's auf ftp.sunet.se...
...und das sogar per rsync ;-)
hat sich schon jemand die Software angeschaut???
Wäre nett wenn mir jemand seine erfahrungen mitteilen könnte
stefan
*prust*
lodger
"echte" Männer haben kein Force Feadback, Frauen haben das !;)
Mein Trackball ist auch Optisch, und das schon lange bevor M$ je so eine Maus rausgebracht hat!