GOobjekt

GLib Object System , eller GObject , er et gratis programvarebibliotek lisensiert under LGPL som gir etbærbartobjektsystem og transparent flerspråklig interoperabilitet. GObject er designet for bruk direkte i C -programmer og gjennom bindinger til andre språk.

Historie

GObject er bare avhengig av GLib og libc , og er hjørnesteinen i GNOME og brukes gjennom GTK+ , Pango , Accessibility Toolkit og de fleste GNOME- applikasjoner og -biblioteker på høyt nivå. Før GTK+ 2.0 var GObject-koden en del av GTK+-kodebasen. (Navnet "GObject" var ennå ikke i bruk; det vanlige navnet på basisklassen ble kalt GtkObject.)

GTK+ 2.0-utgivelsen hadde objektsystemet trukket ut i et eget bibliotek på grunn av dets generelle nytte. I prosessen ble de fleste ikke - GUI -spesifikke delene av klassen GtkObjectflyttet til GObject, den nye felles basisklassen. Etter å ha eksistert som et separat bibliotek siden 11. mars 2002 (utgivelsesdatoen til GTK+ 2.0), brukes GObject-biblioteket nå av mange ikke - GUI -programmer som kommandolinje og serverapplikasjoner .

Forholdet til GLib

Selv om GObject har sitt eget separate sett med dokumentasjon [ 1 ] og vanligvis er kompilert til sin egen delte biblioteksfil , ligger kildekoden for GObject i GLib-kildetreet og distribueres sammen med GLib . Av denne grunn bruker GObject GLib versjonsnumre og pakkes ofte sammen med GLib (for eksempel legger Debian GObject i sin pakkefamilie libglib2.0).

Typesystemet

På det mest grunnleggende nivået av GObject- rammeverket ligger en generisk, dynamisk datatype kalt en GType. GType-systemet opprettholder en kjøretidsbeskrivelse av alle objekter som tillater kodekø for å lette flere språkbindinger. Typesystemet kan håndtere alle klassestrukturer med flere arvetyper , så vel som klasseløse typer som ugjennomsiktige pekere , strenger og forskjellige størrelser på heltall og flyttall .

Typesystemet vet hvordan det skal kopiere, tildele og ødelegge verdier som tilhører noen av de registrerte typene. Dette er trivielt for typer som heltall, men mange komplekse objekter er referansetelling , mens noen er komplekse, men ikke referansetelte. Når systemtypen "kopierer" et referansetelt objekt, vil det normalt bare øke referansetellingen, mens når du kopierer et komplekst, ikke et referansetelt objekt (som en streng), vil en gjeldende kopi vanligvis bli opprettet ved tilordning av minne .

Denne grunnleggende funksjonaliteten brukes til å implementere GValue, en generisk beholdertype som kan inneholde verdier av enhver type kjent for typesystemet. Disse beholderne er spesielt nyttige når du samhandler dynamisk med maskinskrevne språkmiljøer der alle native verdier ligger i merkede typebeholdere .

Grunnleggende typer

Typer som ikke har noen assosiert klasse kalles unclassed . Disse typene, sammen med alle typer som tilsvarer en form for rotklassen , er kjent som grunnleggende typer : typene som alle andre typer stammer fra. Disse utgjør et relativt lukket sett, men selv om den gjennomsnittlige brukeren ikke ville forvente å lage sine egne grunnleggende typer, eksisterer muligheten og har blitt utnyttet til å lage tilpassede klassehierarkier - for eksempel klassehierarkier som ikke er basert på klasse GObject.

Fra GLib 2.9.2 [1] er de innebygde grunnleggende uklassifiserte typene

De innebygde grunnleggende klassifiserte typene er:

Typer som kan instansieres automatisk av typesystemet kalles instantiables . Et viktig trekk ved disse typene er at den første byten i enhver forekomst alltid inneholder en peker til klassestrukturen (en form for virtuell tabell ) assosiert med forekomstens type. Av denne grunn må enhver instantierbar type klassifiseres. Kontrapositivt må enhver uklassifisert type (som heltall eller streng') være ikke-instantierbar. På den annen side er de fleste klassifiserte typer instantiable, men noen, som grensesnitttyper, er det ikke.


Se også

Referanser

  1. GObject Referansemanual

Eksterne lenker