# GObject

GObject est une interface de programmation et une bibliothèque logicielle multiplate-forme publiée sous licence libre (LGPL), qui offre la possibilité de manipuler des objets en langage de programmation C, ainsi qu'une palette d'objets élémentaires. Elle peut être utilisée dans d'autres langages de programmation.

## Propos de cette bibliothèque

La plupart des langages de programmation modernes (langages de haut niveau) proposent leur propre système d'objets, ainsi que des fonctionnalités de base pour la gestion des données, de la mémoire et des algorithmes remplaçant le code de bas niveau. Alors que le reste de la GLib a pour but d'apporter au C ces fonctionnalités haut-niveau, GObject y introduit quant à lui la programmation orientée objet (POO).
GObject fournit entre autres les fonctionnalités suivantes :
* Une implémentation portable des types fondamentaux.
* Une classe de base, GObject, de laquelle hérite toute la hiérarchie des objets.
* Un système de signal qui permet une utilisation très flexible par l'utilisateur des méthodes virtuelles, pouvant servir comme systèmes de notification entre objets.
* Un système extensible de propriétés, qui peut être utilisé pour paramétrer en temps réel un objet, offrant ainsi une très bonne encapsulation.

## Description

L’architecture de GObject fait écho à celle d’Objective-C, qui permet le développement d'applicatifs sous Mac OS X (cf. Cocoa). GObject, classe de base de toutes les classes-objet de GTK+ 3.0/Gnome 3, est aujourd'hui au cœur de toutes les applications construites à partir de ces deux bibliothèques graphiques. La bibliothèque GObject, qui dépend uniquement de libc (voir bibliothèque standard du C et glibc) et de GLib, offre des fonctionnalités aussi diverses que la programmation par événements, des adaptateurs de type, un système de gestion d'exceptions et un algorithme de ramasse-miettes. Les types d'objet sont d'abord créés par le Moteur d'exécution. Cela confère aux classes objet une capacité d'introspection, quoiqu'au détriment de la sécurité du typage.
L'architecture particulière de GObject interdit la faculté d'héritage multiple, contrairement à C++ ; on peut pallier cette limitation au moyen d'un protocole de classes d'interface comme on en trouve en Java ou en C#. En GObject, toute classe est implémentée par un minimum de deux types de données abstraits (des structures au sens du langage C) : l'une contient les informations relatives à la classe, par exemple les méthodes ou la table virtuelle des appels et les variables statiques associées ; la seconde contient les instanciations, par exemple les variables d’instance. Contrairement aux langages C++, C# ou Java, il n'y a pas de spécificateurs de portée comme public, protected, private ; mais on peut toujours implémenter les objets de classes réservées (private) grâce au type « structure » du langage C. Ces structures réservées n'ont pas à être déclarées dans les fichiers d'en-tête de la classe. Pour remplacer une classe de GObject, il faut souvent ré-écrire à la main plusieurs macros et fonction d'initialisation. Un outil a été mis au point pour faciliter l'écriture de classes, GOB2 (GObject Builder), dont la syntaxe emprunte beaucoup à Java. GOB2 se présente comme un préprocesseur du compilateur C, et génère donc du code C. Une alternative à GOB2 est le langage de programmation Vala génère également du code C.
Les principales limitations du framework GObject sont l'absence d’espace de noms, l'impossibilité de surcharger les opérateurs et méthodes ainsi que la gestion encore « artisanale » des exceptions.

## Bref historique

Dans les premières versions de la bibliothèque graphique GTK, la couche de programmation objet était inextricablement liée à la couche utilisateur. La version GTK+2.0 de GTK/Gnome a marqué un saut considérable de clarification en scindant le framework objet proprement dit de la couche graphique : ainsi la couche objet précédemment élaborée est devenue utilisable aussi bien pour les applications lancées directement en ligne de commande que pour les applications client-serveur ne nécessitant pas d’interface graphique.

## Exemples d'utilisation

L'usage combiné du langage C et de la bibliothèque GObject a fait le succès de plusieurs applications open source, à commencer évidemment par GTK+ : il y a là tous les logiciels développés pour l'environnement Gnome : GIMP, Pango, GNOME Fichiers et bien d'autres.

## Sources

* (en) Documentation de l’API GObject
* GOB2 - GObject Builder