Zum Inhalt springen

„GObject“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
[gesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
http→https
Formulierung verbessert
Zeile 1: Zeile 1:
{{Infobox Software
{{Infobox Software
|Name = GObject
|Name =
|Logo =
|Logo =
|Screenshot = [[Datei:GObject example.png|300px|Beispielcode]]
|Screenshot = [[Datei:GObject example.png|300px|Beispielcode]]
Zeile 7: Zeile 7:
|Programmiersprache = [[C (Programmiersprache)|C]]
|Programmiersprache = [[C (Programmiersprache)|C]]
|Hersteller = [https://www.gtk.org/development.php#Team Das GTK+-Team]
|Hersteller = [https://www.gtk.org/development.php#Team Das GTK+-Team]
|Erscheinungsjahr = 2002
|AktuelleVersion = 2.42.1
|AktuelleVersion = 2.42.1
|AktuelleVersionFreigabeDatum = 10. November 2014
|AktuelleVersionFreigabeDatum = 10. November 2014
Zeile 20: Zeile 21:
}}
}}


'''GObject''' ist eine unter der [[Freie Software|freien]] Lizenz [[GNU Lesser General Public License|LGPL]] veröffentlichte [[Programmbibliothek]] und ein [[Framework]], das [[Objektorientierung|objektorientiertes]] Programmieren in der [[C (Programmiersprache)|Programmiersprache C]] ermöglicht und auf vielen Plattformen einsetzbar ist.
'''GObject''' ist eine unter der [[Freie Software|freien]] Lizenz [[GNU Lesser General Public License|LGPL]] veröffentlichte [[Programmbibliothek]] und ein [[Framework]], das [[Objektorientierte Programmierung|objektorientiertes Programmieren]] in der [[C (Programmiersprache)|Programmiersprache C]] ermöglicht und auf vielen Plattformen einsetzbar ist.


== Beschreibung ==
== Beschreibung ==


Der Ansatz von GObject entspricht dem von [[Objective-C]], welches für Anwendungsentwicklung unter [[macOS]] ''(siehe [[Cocoa (API)|Cocoa]])'' verwendet wird. Als Fundament aller [[GTK+]]-/[[Gnome]]-Anwendungen ist GObject die Basisklasse aller GTK-/Gnome-Klassen. Diese Softwarebibliothek hängt lediglich von der ''libc'' ''(siehe [[Standard C Library]]/[[glibc]])'' sowie der [[GLib]] ab. GObject stellt weitere Funktionalitäten wie [[Ereignis (Programmierung)|Events]], [[Autoboxing|Boxing von Datentypen]], Fehlerbehandlung und das [[Referenzzählung|Referenzzählen]] bereit. Objekttypen werden erst zur [[Laufzeit (Informatik)|Laufzeit]] registriert. Damit wird eine gute [[Reflexion (Programmierung)|Introspektion]] der Klassen ermöglicht, allerdings auf Kosten einer starken [[Typsicherheit]].
Der Ansatz von GObject entspricht dem von [[Objective-C]], das für Anwendungsentwicklung unter [[macOS]] ''(siehe [[Cocoa (API)|Cocoa]])'' verwendet wird. GObject ist das Fundament aller [[GTK+]]-/[[Gnome]]-Anwendungen und die Basisklasse aller GTK-/Gnome-[[Klasse (Objektorientierung)|Klassen]]. GObject hängt lediglich von der ''libc'' ''(siehe [[Standard C Library]]/[[glibc]])'' sowie der [[GLib]] ab. GObject stellt weitere Funktionalitäten wie [[Ereignis (Programmierung)|Events]], [[Autoboxing|Boxing von Datentypen]], Fehlerbehandlung und das [[Referenzzählung|Referenzzählen]] bereit. Objekttypen werden erst zur [[Laufzeit (Informatik)|Laufzeit]] registriert. Damit wird eine gute [[Reflexion (Programmierung)|Introspektion]] der Klassen ermöglicht, allerdings auf Kosten einer starken [[Typsicherheit]].


Die Objektorientierung bei GObject ermöglicht im Gegensatz zu [[C++]] keine [[Mehrfachvererbung]]. Stattdessen werden [[Schnittstelle (Objektorientierung)|Interfaceklassen]] wie bei [[Java (Programmiersprache)|Java]] oder [[C-Sharp|C#]] eingesetzt. Eine Klasse in GObject wird durch mindestens zwei [[Verbund (Datentyp)|C-Strukturen]] implementiert: Eine davon beinhaltet die Informationen der Klasse, zum Beispiel die [[Methode (Programmierung)|Methode]]n/[[VTable]] und statische [[Membervariable]]n. Die zweite beinhaltet als Instanzinformationen zum Beispiel die Membervariablen. Es gibt keine [[Zugriffsmodifikator]]en ''public, protected, private'' wie in den Programmiersprachen C++, Java oder C#; private Klassen-Member können aber durch zusätzliche verborgene C-Strukturen implementiert werden. Diese privaten Strukturen werden nicht in den öffentlichen [[Header-Datei]]en der Klasse definiert. Bei der Erstellung einer GObject-Klasse müssen viele [[Makro]]s und Initialisierungsfunktionen manuell geschrieben werden. Zur Erleichterung beim Schreiben von Klassen gibt es das Werkzeug [[GOB2]] (GObject Builder), welches eine von Java entlehnte Syntax anbietet. GOB2 fungiert als [[Präprozessor]], welcher aus den Objektvorlagen Code für den C-Compiler generiert. Eine Alternative zu GOB2 stellt die Programmiersprache [[Vala (Programmiersprache)|Vala]]/[[Genie (Programmiersprache)|Genie]] dar, welches neben dem Codegerüst auch in der Lage ist, den gesamten Quelltext aus C#-ähnlicher Sprache zu übersetzen.
Die Objektorientierung bei GObject ermöglicht im Gegensatz zu [[C++]] keine [[Mehrfachvererbung]]. Stattdessen werden [[Schnittstelle (Objektorientierung)|Interfaces]] wie bei [[Java (Programmiersprache)|Java]] oder [[C-Sharp|C#]] eingesetzt. Eine Klasse in GObject wird durch mindestens zwei [[Verbund (Datentyp)|C-Strukturen]] implementiert: Eine davon beinhaltet die Informationen der Klasse, zum Beispiel die [[Methode (Programmierung)|Methode]]n/[[VTable]] und statische [[Membervariable]]n. Die zweite beinhaltet als Instanzinformationen zum Beispiel die Membervariablen. Es gibt keine [[Zugriffsmodifikator]]en ''public, protected, private'' wie in den Programmiersprachen C++, Java oder C#; private Klassen-Member können aber durch zusätzliche verborgene C-Strukturen implementiert werden. Diese privaten Strukturen werden nicht in den öffentlichen [[Header-Datei]]en der Klasse definiert. Bei der Erstellung einer GObject-Klasse müssen viele [[Makro]]s und Initialisierungsfunktionen manuell geschrieben werden. Zur Erleichterung beim Schreiben von Klassen gibt es das Werkzeug [[GOB2]] (GObject Builder), welches eine von Java entlehnte Syntax anbietet. GOB2 fungiert als [[Präprozessor]], welcher aus den Objektvorlagen Code für den C-Compiler generiert. Eine Alternative zu GOB2 stellt die Programmiersprache [[Vala (Programmiersprache)|Vala]]/[[Genie (Programmiersprache)|Genie]] dar, welches neben dem Codegerüst auch in der Lage ist, den gesamten Quelltext aus C#-ähnlicher Sprache zu übersetzen.


Wichtige Einschränkungen des GObjekt-Frameworks sind die fehlende Unterstützung von [[Namensraum|Namensräumen]], keine Möglichkeit zum [[Überladen]] von Operatoren und Methoden sowie die rein „manuelle“ [[Ausnahmebehandlung]].
Wichtige Einschränkungen des GObjekt-Frameworks sind die fehlende Unterstützung von [[Namensraum|Namensräumen]], keine Möglichkeit zum [[Überladen]] von Operatoren und Methoden sowie die rein „manuelle“ [[Ausnahmebehandlung]].

Version vom 20. September 2018, 18:48 Uhr

GObject

Beispielcode
GObject-Beispielcode: Hinzufügen der Eigenschaft file-size zu einer Klasse.
Basisdaten

Entwickler Das GTK+-Team
Erscheinungsjahr 2002
Aktuelle Version 2.42.1
(10. November 2014)
Aktuelle Vorabversion 2.43.2
(15. Dezember 2014)
Betriebssystem Unix, Windows, OS/2, BeOS
Programmier­sprache C
Kategorie Programmbibliothek
Lizenz LGPL
deutschsprachig nein
www.gtk.org

GObject ist eine unter der freien Lizenz LGPL veröffentlichte Programmbibliothek und ein Framework, das objektorientiertes Programmieren in der Programmiersprache C ermöglicht und auf vielen Plattformen einsetzbar ist.

Beschreibung

Der Ansatz von GObject entspricht dem von Objective-C, das für Anwendungsentwicklung unter macOS (siehe Cocoa) verwendet wird. GObject ist das Fundament aller GTK+-/Gnome-Anwendungen und die Basisklasse aller GTK-/Gnome-Klassen. GObject hängt lediglich von der libc (siehe Standard C Library/glibc) sowie der GLib ab. GObject stellt weitere Funktionalitäten wie Events, Boxing von Datentypen, Fehlerbehandlung und das Referenzzählen bereit. Objekttypen werden erst zur Laufzeit registriert. Damit wird eine gute Introspektion der Klassen ermöglicht, allerdings auf Kosten einer starken Typsicherheit.

Die Objektorientierung bei GObject ermöglicht im Gegensatz zu C++ keine Mehrfachvererbung. Stattdessen werden Interfaces wie bei Java oder C# eingesetzt. Eine Klasse in GObject wird durch mindestens zwei C-Strukturen implementiert: Eine davon beinhaltet die Informationen der Klasse, zum Beispiel die Methoden/VTable und statische Membervariablen. Die zweite beinhaltet als Instanzinformationen zum Beispiel die Membervariablen. Es gibt keine Zugriffsmodifikatoren public, protected, private wie in den Programmiersprachen C++, Java oder C#; private Klassen-Member können aber durch zusätzliche verborgene C-Strukturen implementiert werden. Diese privaten Strukturen werden nicht in den öffentlichen Header-Dateien der Klasse definiert. Bei der Erstellung einer GObject-Klasse müssen viele Makros und Initialisierungsfunktionen manuell geschrieben werden. Zur Erleichterung beim Schreiben von Klassen gibt es das Werkzeug GOB2 (GObject Builder), welches eine von Java entlehnte Syntax anbietet. GOB2 fungiert als Präprozessor, welcher aus den Objektvorlagen Code für den C-Compiler generiert. Eine Alternative zu GOB2 stellt die Programmiersprache Vala/Genie dar, welches neben dem Codegerüst auch in der Lage ist, den gesamten Quelltext aus C#-ähnlicher Sprache zu übersetzen.

Wichtige Einschränkungen des GObjekt-Frameworks sind die fehlende Unterstützung von Namensräumen, keine Möglichkeit zum Überladen von Operatoren und Methoden sowie die rein „manuelle“ Ausnahmebehandlung.

Geschichte

Ursprünglich war das Objektsystem von GTK eng mit der Benutzerschnittstelle von GTK verwoben. Erst zur Version 2.0 von GTK/Gnome wurde es in ein eigenes Framework ausgelagert, damit dieses Objektsystem auch ohne Einbindung von GTK für beispielsweise reine kommandozeilengesteuerte Anwendungen und Serveranwendungen ohne grafische Benutzeroberfläche verwendet werden kann.

Einsatz

Die Kombination von C und GObject wird in vielen erfolgreichen Open-Source-Projekten eingesetzt, allen voran GTK+ und damit schließlich dem kompletten Gnome-Desktop sowie GIMP, Pango und vielen anderen.

Literatur

  • Das GTK+/GNOME Entwickler Handbuch, Matthias Warkus 2008, dpunkt verlag – Fundierte Einführung in GOBject Implementierung in Kapitel drei