गोऑब्जेक्ट: Difference between revisions

From Vigyanwiki
(Created page with "{{Infobox software | name = GLib | title = GObject | logo = <!-- Image name is enough --> | screenshot = <!--...")
 
No edit summary
 
(7 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Infobox software
{{Infobox software
| name                  = GLib
| name                  = GLib
| title                  = GObject
| title                  = जीऑब्जेक्ट
| logo                  = <!-- Image name is enough -->
| logo                  = <!-- Image name is enough -->
| screenshot            = <!-- Image name is enough -->
| screenshot            = <!-- Image name is enough -->
| developer              = [[The GNOME Project]]
| developer              = [[गनोम परियोजना]]
| released              = {{Start date and age|2002|03|11|df=yes}}<!--Date only-->
| released              = {{Start date and age|2002|03|11|df=yes}}<!--Date only-->
| discontinued          =  
| discontinued          =  
Line 11: Line 11:
| latest preview version =  
| latest preview version =  
| latest preview date    = <!-- {{Start date and age|YYYY|MM|DD|df=yes/no}} -->
| latest preview date    = <!-- {{Start date and age|YYYY|MM|DD|df=yes/no}} -->
| programming language  = [[C (programming language)|C]]
| programming language  = [[C (programming language)|सी]]
| operating system      = [[Cross-platform]]
| operating system      = [[क्रॉस-प्लेटफॉर्म]]
| platform              =  
| platform              =  
| size                  =  
| size                  =  
| language              = [[Multilingual]]{{which|date=November 2014}}
| language              = [[बहुभाषी]]{{which|date=November 2014}}
| language count        = <!-- Number only -->
| language count        = <!-- Number only -->
| language footnote      =  
| language footnote      =  
| genre                  = [[Software library]]
| genre                  = [[सॉफ्टवेयर लाइब्रेरी]]
| license                = [[GNU Lesser General Public License|GNU LGPL]]
| license                = [[GNU Lesser General Public License|जीएनयू एलजीपीएल]]
| alexa                  =  
| alexa                  =  
| website                = {{URL|https://developer.gnome.org/gobject/stable/}}<!--One link only-->
| website                = {{URL|https://developer.gnome.org/gobject/stable/}}<!--One link only-->
}}
}}


[[File:Linux kernel System Call Interface and glibc.svg|thumb|300px|चूंकि [[जीएनयू सी लाइब्रेरी]] [[लिनक्स कर्नेल]] [[सिस्टम कॉल]] के लिए एक रैपर के रूप में कार्य करती है, इसलिए जीएलआईबी (जीओब्जेक्ट, जीएलआईबी, [[जीमॉड्यूल]], जीटीएचड और जीआईओ (सॉफ्टवेयर)) में बंडल किए गए पुस्तकालय अपने विशिष्ट कार्यों के लिए आगे के रैपर के रूप में काम करते हैं।]]जीएलआईबी [[ वस्तु प्रणाली ]], या जीओब्जेक्ट, एक [[मुफ्त सॉफ्टवेयर]] [[ सॉफ्टवेयर पुस्तकालय ]] है जो एक पोर्टेबल ऑब्जेक्ट सिस्टम और पारदर्शी क्रॉस-लैंग्वेज इंटरऑपरेबिलिटी प्रदान करता है। GObject को ऑब्जेक्ट-ओरिएंटेड C-आधारित API प्रदान करने के लिए सीधे C (प्रोग्रामिंग लैंग्वेज) प्रोग्राम में उपयोग करने के लिए और पारदर्शी क्रॉस-लैंग्वेज इंटरऑपरेबिलिटी प्रदान करने के लिए अन्य भाषाओं के लिए भाषा बाइंडिंग के माध्यम से डिज़ाइन किया गया है, उदा। [[PyGObject]].
[[File:Linux kernel System Call Interface and glibc.svg|thumb|300px|चूंकि [[जीएनयू सी लाइब्रेरी]] [[लिनक्स कर्नेल]] [[सिस्टम कॉल]] के लिए एक रैपर के रूप में कार्य करती है, इसलिए जीएलआईबी (जीओब्जेक्ट, जीएलआईबी, [[जीमॉड्यूल]], जीटीएचड और जीआईओ (सॉफ्टवेयर)) में एकत्र किए गए लाइब्रेरी अपने विशिष्ट फंक्शन के लिए आगे के रैपर के रूप में कार्य करती हैं।]]जीएलआईबी[[ वस्तु प्रणाली | ऑब्जेक्ट सिस्टम]] या '''जीओब्जेक्ट''', एक [[मुफ्त सॉफ्टवेयर|मुक्त सॉफ्टवेयर]] [[ सॉफ्टवेयर पुस्तकालय |लाइब्रेरी]] है जो पोर्टेबल ऑब्जेक्ट (वस्तु) सिस्टम और पारदर्शी अनुप्रस्थ-भाषा अंतर प्रचालनीयता प्रदान करती है। जीओब्जेक्ट को वस्तु-उन्मुख सी प्रोग्रामिंग आधारित एपीआई प्रदान करने के लिए सी प्रोग्राम में प्रत्यक्ष रूप मे उपयोग के लिए और पारदर्शी अनुप्रस्थ-भाषा अंतर प्रचालनीयता प्रदान करने के लिए अन्य भाषाओं में बाइंडिंग प्रोग्रामिंग के माध्यम से [[PyGObject|<code>PyGObject</code>]]को डिज़ाइन किया गया है।


== इतिहास ==
== इतिहास ==
केवल GLib और [[libc]] पर निर्भर करते हुए, GObject [[GNOME]] की आधारशिला है और इसका उपयोग [[GTK]], [[Pango]], [[अभिगम्यता टूलकिट]], और अधिकांश उच्च-स्तरीय GNOME लाइब्रेरी जैसे [[GStreamer]] और अनुप्रयोगों में किया जाता है। GTK+ 2.0 से पहले, GObject के समान कोड GTK कोडबेस का हिस्सा था। ("गोब्जेक्ट" नाम अभी तक उपयोग में नहीं था - सामान्य बेसक्लास कहा जाता था <code>GtkObject</code>.)
<code>GLib</code>और <code>libc</code>पर निर्भर करते हुए, जीओब्जेक्ट <code>GNOME</code> का आधार है। इसका उपयोग [[GTK|जीटीके]], [[Pango|पंगो]], [[अभिगम्यता टूलकिट]] और अधिकांश उच्च-स्तरीय जीनोम लाइब्रेरी जैसे [[GStreamer|<code>GStreamer</code>]]और अनुप्रयोगों में किया जाता है। <code>GTK+ 2.0</code> से पहले जीओब्जेक्ट के समान कोड जीटीके कोडबेस का एक भाग था। यह "<code>GObject</code>" नाम अभी तक उपयोग में नहीं था, सामान्य आधारित क्लास को <code>GtkObject</code> कहा जाता था।


GTK+ 2.0 के रिलीज के समय, वस्तु प्रणाली को उसकी सामान्य उपयोगिता के कारण एक अलग पुस्तकालय में निकाला गया था। इस प्रक्रिया में, अधिकांश गैर-[[जीयूआई]]-विशिष्ट भाग <code>GtkObject</code> वर्ग में ऊपर ले जाया गया <code>GObject</code>, नया सामान्य बेसक्लास। 11 मार्च, 2002 (जीटीके+ 2.0 की रिलीज तिथि) के बाद से एक अलग पुस्तकालय के रूप में अस्तित्व में होने के बाद, गोब्जेक्ट लाइब्रेरी का उपयोग अब कई गैर-जीयूआई प्रोग्राम जैसे [[कमांड लाइन]] और [[सर्वर (कंप्यूटिंग)]] अनुप्रयोगों द्वारा किया जाता है।
<code>GTK+ 2.0</code> के प्रारम्भ होने पर इसकी सामान्य उपयोगिता के कारण वस्तु प्रणाली को एक अलग लाइब्रेरी में निकाला गया था। इस प्रक्रिया में <code>GtkObject</code> वर्ग के अधिकांश गैर-जीयूआई विशिष्ट भागों को जीओब्जेक्ट के नए सामान्य आधारित क्लास में ले जाया गया था। 11 मार्च 2002 (<code>GTK+ 2.0</code> की प्रकाशन तिथि) से एक अलग लाइब्रेरी के रूप में अस्तित्व में आने के बाद जीओब्जेक्ट लाइब्रेरी का उपयोग अब कई गैर-जीयूआई प्रोग्रामों जैसे [[कमांड लाइन]] और [[सर्वर (कंप्यूटिंग)]] अनुप्रयोगों द्वारा किया जाता है।


== जीएलआईबी से संबंध ==
== जीएलआईबी से संबंध ==
हालाँकि GObject के पास प्रलेखन का अपना अलग सेट है<ref>{{cite web|url=https://developer.gnome.org/gobject/stable/|title=GObject Reference Manual}}</ref> और आमतौर पर अपनी साझा लाइब्रेरी फ़ाइल में संकलित किया जाता है, GObject के लिए स्रोत कोड GLib स्रोत ट्री में रहता है और इसे GLib के साथ वितरित किया जाता है। इस कारण से, GObject GLib संस्करण संख्याओं का उपयोग करता है और आमतौर पर GLib के साथ पैक किया जाता है (उदाहरण के लिए, [[डेबियन]] GObject को अपने <code>libglib2.0</code> पैकेज परिवार)।
हालाँकि जीओब्जेक्ट के पास दस्तावेज़ीकरण का अपना अलग समूह है<ref>{{cite web|url=https://developer.gnome.org/gobject/stable/|title=GObject Reference Manual}}</ref> और सामान्यतः इसे अपनी साझा लाइब्रेरी फ़ाइल में संकलित किया जाता है। जीओब्जेक्ट का स्रोत कोड <code>GLib</code> स्रोत ट्री में रहता है और <code>GLib</code> के साथ वितरित किया जाता है। इस कारण से जीओब्जेक्ट <code>GLib</code> संस्करण संख्याओं का उपयोग करता है और सामान्यतः <code>GLib</code> के साथ पैक किया जाता है। उदाहरण के लिए [[डेबियन]] जीओब्जेक्ट को अपने <code>libglib2.0</code> पैकेज समूह में रखता है।


== टाइप सिस्टम ==
== टाइप प्रणाली ==
GObject ढांचे के सबसे बुनियादी स्तर पर एक सामान्य और गतिशील प्रकार की प्रणाली है जिसे GType कहा जाता है। GType सिस्टम में सभी ऑब्जेक्ट्स का रनटाइम विवरण होता है, जिससे [[ गोंद कोड ]] को कई भाषा बाइंडिंग की सुविधा मिलती है। अपारदर्शी पॉइंटर्स, [[ स्ट्रिंग (कंप्यूटर विज्ञान) ]], और विभिन्न आकार के [[पूर्णांक]] और [[चल बिन्दु संख्या]] जैसे गैर-वर्गीकृत प्रकारों के अलावा, [[प्रकार प्रणाली]] किसी एकल वंशानुक्रम वर्ग संरचना को संभाल सकती है।
जीओब्जेक्ट फ्रेमवर्क के सबसे आधारिक स्तर पर एक सामान्य और गतिशील प्रकार की प्रणाली निहित है जिसे <code>GType</code>कहा जाता है। जीटाइप प्रणाली सभी ऑब्जेक्ट्स का रनटाइम विवरण रखता है जो ग्लू-कोड को कई भाषा बाइंडिंग की सुविधा प्रदान करता है। जीटाइप प्रणाली गैर-वर्गीकृत प्रकारों जैसे अपारदर्शी पॉइंटर्स, [[ स्ट्रिंग (कंप्यूटर विज्ञान) |स्ट्रिंग]] और विभिन्न आकार के पूर्णांक और फ़्लोटिंग पॉइंट संख्याओं के अतिरिक्त किसी भी एकल विशेषता वाली वर्ग संरचना का संरक्षण करती है।


टाइप सिस्टम जानता है कि किसी भी पंजीकृत प्रकार से संबंधित मूल्यों को कैसे कॉपी, असाइन और नष्ट करना है। यह पूर्णांक जैसे प्रकारों के लिए तुच्छ है, लेकिन कई जटिल वस्तुएं [[संदर्भ गिनती]] हैं। संदर्भ-गणना की जाती हैं, जबकि कुछ जटिल हैं लेकिन संदर्भ-गिनती नहीं हैं। जब टाइप सिस्टम एक रेफरेंस-काउंटेड ऑब्जेक्ट को "कॉपी" करता है, तो यह आमतौर पर इसकी रेफरेंस काउंट को बढ़ा देगा, जबकि एक कॉम्प्लेक्स, नॉन-रेफरेंस-काउंटेड ऑब्जेक्ट (जैसे स्ट्रिंग) को कॉपी करते समय, यह आमतौर पर मेमोरी द्वारा एक वास्तविक कॉपी बनाएगा। आवंटन।
टाइप प्रणाली किसी भी पंजीकृत प्रकार से संबंधित मानों को आयोजित करना और नष्ट करना जानती है। यह पूर्णांक जैसे प्रकारों के लिए अपेक्षाकृत सामान्य है, लेकिन कई जटिल वस्तुओ की संदर्भ के लिए गणना की जाती हैं, जबकि कुछ वस्तुएँ जटिल हैं लेकिन उनकी संदर्भ-गणना नहीं की जाती हैं। जब टाइप प्रणाली किसी संदर्भ-गणित वस्तु का अनुकरण करता है तो यह सामान्यतः केवल इसकी संदर्भ संख्या को बढ़ाता है जबकि एक जटिल गैर संदर्भ गणना वाली वस्तु (जैसे कि एक स्ट्रिंग) की प्रतिलिपि बनाते समय यह सामान्यतः मेमोरी आवंटित करके एक वास्तविक प्रतिलिपि बनाता है।


इस बुनियादी कार्यक्षमता को लागू करने के लिए प्रयोग किया जाता है <code>GValue</code>, एक प्रकार का जेनेरिक कंटेनर जो टाइप सिस्टम द्वारा ज्ञात किसी भी प्रकार के मान को होल्ड कर सकता है। इस तरह के कंटेनर विशेष रूप से उपयोगी होते हैं जब गतिशील रूप से टाइप किए गए भाषा परिवेशों के साथ बातचीत करते हैं जिसमें सभी मूल मूल्य ऐसे टैग किए गए संघ | टाइप-टैग किए गए कंटेनरों में रहते हैं।
इस आधारिक कार्यक्षमता का उपयोग <code>GValue</code> को प्रयुक्त करने के लिए किया जाता है। एक प्रकार की सामान्य गणना जो टाइप प्रणाली द्वारा ज्ञात किसी भी प्रकार के मान को धारण कर सकती है। ऐसी गणना विशेष रूप से उपयोगी होती हैं जब गतिशील रूप से टाइप किए गए भाषा वातावरण के साथ अनुमान करते हैं जिसमें सभी मूल मान टाइप-टैग की गई गणना में रहते हैं।


=== मौलिक प्रकार ===
=== मौलिक प्रकार ===
वे प्रकार जिनमें कोई संबद्ध [[वर्ग (प्रोग्रामिंग)]] नहीं है, गैर-वर्गीकृत कहलाते हैं। ये प्रकार, सभी प्रकारों के साथ, जो मूल वर्ग के किसी न किसी रूप से मेल खाते हैं, मौलिक प्रकार के रूप में जाने जाते हैं: वे प्रकार जिनसे अन्य सभी प्रकार व्युत्पन्न होते हैं। ये एक अपेक्षाकृत बंद सेट बनाते हैं, लेकिन हालांकि औसत उपयोगकर्ता से अपने स्वयं के मौलिक प्रकार बनाने की उम्मीद नहीं की जाती है, संभावना मौजूद है और कस्टम [[वर्ग पदानुक्रम]] बनाने के लिए इसका शोषण किया गया है - अर्थात, वर्ग पदानुक्रम आधारित नहीं है <code>GObject</code> कक्षा।
वे प्रकार जिनमें कोई संबद्ध वर्ग नहीं होता है उन्हें गैर-वर्गीकृत कहा जाता है। ये प्रकार उन सभी प्रकारों के साथ जो मूल वर्ग के किसी न किसी रूप से अनुरूप हैं, मौलिक प्रकार के रूप में जाने जाते हैं। वे प्रकार जिनसे अन्य सभी प्रकार प्राप्त होते हैं ये एक अपेक्षाकृत संवृत समुच्चय बनाते हैं। हालांकि औसत उपयोगकर्ता से अपने स्वयं के मौलिक प्रकार बनाने की संभावना नहीं की जाती है और कस्टम क्लास पदानुक्रम बनाने के लिए इसका लाभ प्राप्त किया गया है अर्थात क्लास पदानुक्रम जीओब्जेक्ट क्लास पर आधारित नहीं हैं।


जीएलआईबी 2.9.2 के अनुसार,<ref>{{cite web|url=https://developer.gnome.org/gobject/stable|title=GObject Reference Manual - Stable}}</ref> गैर-वर्गीकृत अंतर्निर्मित मौलिक प्रकार हैं:
जीएलआईबी 2.9.2 के अनुसार,<ref>{{cite web|url=https://developer.gnome.org/gobject/stable|title=GObject Reference Manual - Stable}}</ref> गैर-वर्गीकृत अंतर्निर्मित मौलिक प्रकार हैं:
* एक खाली प्रकार, सी के अनुरूप <code>void</code> (<code>G_TYPE_NONE</code>);
* एक रिक्त प्रकार, जो C के शून्य<code>void</code> (<code>G_TYPE_NONE</code> के अनुरूप है।
* सी के हस्ताक्षरित और अहस्ताक्षरित प्रकार के अनुरूप <code>char</code>, <code>int</code>, <code>long</code>, और 64-बिट पूर्णांक (<code>G_TYPE_CHAR</code>, <code>G_TYPE_UCHAR</code>, <code>G_TYPE_INT</code>, <code>G_TYPE_UINT</code>, <code>G_TYPE_LONG</code>, <code>G_TYPE_ULONG</code>, <code>G_TYPE_INT64</code>, और <code>G_TYPE_UINT64</code>);
*सी प्रोग्रामिंग के हस्ताक्षरित और अहस्ताक्षरित प्रकार <code>char</code>, <code>int</code>, <code>long</code>, और 64-बिट पूर्णांक (<code>G_TYPE_CHAR</code>, <code>G_TYPE_UCHAR</code>, <code>G_TYPE_INT</code>, <code>G_TYPE_UINT</code>, <code>G_TYPE_LONG</code>, <code>G_TYPE_ULONG</code>, <code>G_TYPE_INT64</code>, और <code>G_TYPE_UINT64</code>) के अनुरूप है।
* एक बूलियन प्रकार (<code>G_TYPE_BOOLEAN</code>);
* एक बूलियन प्रकार (<code>G_TYPE_BOOLEAN</code>) है।
* एक गणना प्रकार और एक "झंडे" प्रकार, दोनों सी के अनुरूप <code>enum</code> प्रकार, लेकिन इसमें भिन्नता है कि बाद वाले का उपयोग केवल [[बिट फ़ील्ड]] के लिए किया जाता है (<code>G_TYPE_ENUM</code> और <code>G_TYPE_FLAGS</code>);
* गणना प्रकार और फ्लैग प्रकार दोनों सी के <code>enum</code> प्रकार के अनुरूप हैं, लेकिन इसमें भिन्नता है कि उत्तरार्द्ध का उपयोग केवल [[बिट फ़ील्ड|बिट क्षेत्र]] (<code>G_TYPE_ENUM</code> और <code>G_TYPE_FLAGS</code>) के लिए किया जाता है।
* सी के अनुरूप सिंगल- और डबल-परिशुद्धता [[आईईईई फ्लोट]] के लिए प्रकार <code>float</code> और <code>double</code> (<code>G_TYPE_FLOAT</code> और <code>G_TYPE_DOUBLE</code>);
* सी प्रोग्रामिंग के अनुरूप एकल और दोहरा परिशुद्धता [[आईईईई फ्लोट]] के लिए <code>float</code> और <code>double</code> या (<code>G_TYPE_FLOAT</code> और <code>G_TYPE_DOUBLE</code>) है।
* एक स्ट्रिंग प्रकार, सी के अनुरूप <code>char *</code> (<code>G_TYPE_STRING</code>);
* एक स्ट्रिंग प्रकार, जो C के <code>char *</code> (<code>G_TYPE_STRING</code>) के अनुरूप है।
* एक अपारदर्शी सूचक प्रकार, सी के अनुरूप <code>void *</code> (<code>G_TYPE_POINTER</code>).
* एक अपारदर्शी सूचक प्रकार, जो C के <code>void *</code> (<code>G_TYPE_POINTER</code>) के अनुरूप है।


वर्गीकृत अंतर्निहित मौलिक प्रकार हैं:
वर्गीकृत अंतर्निहित मौलिक प्रकार हैं:
* के उदाहरणों के लिए एक आधार वर्ग प्रकार <code>GObject</code>, मानक वर्ग वंशानुक्रम वृक्ष की जड़ (<code>G_TYPE_OBJECT</code>)
* <code>GObject</code>के उदाहरणों के लिए एक आधार क्लास प्रकार मानक क्लास उत्तराधिकारिक मूल (<code>G_TYPE_OBJECT</code>) है।
* एक बेस इंटरफ़ेस प्रकार, बेस क्लास प्रकार के अनुरूप लेकिन मानक इंटरफ़ेस इनहेरिटेंस ट्री की जड़ का प्रतिनिधित्व करता है (<code>G_TYPE_INTERFACE</code>)
* आधारिक इंटरफ़ेस प्रकार आधार क्लास प्रकार के अनुरूप लेकिन मानक इंटरफ़ेस उत्तराधिकारिक मूल <code>G_TYPE_INTERFACE</code> का प्रतिनिधित्व करता है।
* [[बॉक्सिंग प्रकार]] की संरचनाओं के लिए एक प्रकार, जिसका उपयोग संदर्भ-गणना "बक्से" में साधारण मूल्य वस्तुओं या विदेशी वस्तुओं को लपेटने के लिए किया जाता है (<code>G_TYPE_BOXED</code>)
* [[बॉक्सिंग प्रकार|बॉक्सिंग]] संरचनाओं के लिए एक प्रकार, जिसका उपयोग साधारण मान वाली वस्तुओं या विदेशी वस्तुओं को संदर्भ-गणित "बॉक्स" <code>G_TYPE_BOXED</code>) में प्रयुक्त करने के लिए किया जाता है।
* "पैरामीटर विनिर्देश ऑब्जेक्ट्स" के लिए एक प्रकार, जिसका उपयोग GObject में ऑब्जेक्ट गुणों के लिए [[ मेटा डेटा ]] का वर्णन करने के लिए किया जाता है (<code>G_TYPE_PARAM</code>).
* "पैरामीटर विनिर्देश वस्तु" के लिए एक प्रकार, जिसका उपयोग वस्तु गुणों <code>G_TYPE_PARAM</code> के लिए मेटाडेटा का वर्णन करने के लिए जीओब्जेक्ट में प्रयोग किया जाता है।


टाइप सिस्टम द्वारा स्वचालित रूप से इंस्टेंट किए जा सकने वाले प्रकारों को इंस्टेंटेबल कहा जाता है। इन प्रकारों की एक महत्वपूर्ण विशेषता यह है कि किसी भी उदाहरण के पहले बाइट्स में हमेशा उदाहरण के प्रकार से जुड़े वर्ग संरचना (आभासी तालिका का एक रूप) के लिए सूचक होता है। इस कारण से, किसी भी तात्कालिक प्रकार को वर्गीकृत किया जाना चाहिए। विपरीत रूप से, कोई भी गैर-वर्गीकृत प्रकार (जैसे पूर्णांक या स्ट्रिंग) गैर-तात्कालिक होना चाहिए। दूसरी ओर, अधिकांश वर्गीकृत प्रकार तात्कालिक होते हैं, लेकिन कुछ, जैसे कि इंटरफ़ेस प्रकार, नहीं होते हैं।
वे प्रकार जिन्हें टाइप प्रणाली द्वारा स्वचालित रूप से त्वरित किया जा सकता है तात्कालिक प्रकार कहलाते हैं। इन प्रकारों की एक महत्वपूर्ण विशेषता यह है कि किसी भी उदाहरण के पहले बाइट्स में सदैव उदाहरण के प्रकार से संबद्ध वर्ग संरचना (वर्चुअल तालिका का एक रूप) के लिए एक संकेतक होते है। इस कारण से किसी भी तात्कालिक प्रकार को वर्गीकृत किया जाना चाहिए। विरोधाभासी रूप से कोई भी गैर-वर्गीकृत प्रकार (जैसे पूर्णांक या स्ट्रिंग) गैर-तात्कालिक होना चाहिए। दूसरी ओर अधिकांश वर्गीकृत प्रकार तात्कालिक होते हैं, लेकिन कुछ, जैसे इंटरफ़ेस प्रकार तात्कालिक प्रकार नहीं होते हैं।


=== व्युत्पन्न प्रकार ===
=== व्युत्पन्न प्रकार ===
अंतर्निहित GObject मौलिक प्रकारों से प्राप्त होने वाले प्रकार गिरते हैं
अंतर्निहित जीओब्जेक्ट मौलिक प्रकारों से प्राप्त प्रकार सामान्यतः चार श्रेणियों में आते हैं:
मोटे तौर पर चार श्रेणियों में:
; सूचीबद्ध प्रकार और फ्लैग प्रकार: सामान्यतः प्रत्येक सूचीबद्ध प्रकार और प्रत्येक पूर्णांक-आधारित बिटफील्ड प्रकार (अर्थात, प्रत्येक <code>enum</code> प्रकार) जिसे कोई किसी प्रकार से उपयोग करना चाहता है जो वस्तु प्रणाली से संबंधित है उदाहरण के लिए वस्तु विशेषता के प्रकार के रूप में पंजीकृत होना चाहिए। प्रकार प्रणाली के साथ सामान्यतः प्रारम्भिक कोड जो इन प्रकारों को पंजीकृत करने का ध्यान रखता है, <code>glib-mkenums</code> नामक एक स्वचालित उपकरण द्वारा उत्पन्न किया जाता है और एक अलग फ़ाइल में संग्रहीत किया जाता है।<ref>{{cite web|url=https://developer.gnome.org/gobject/stable/glib-mkenums.html|title=glib-mkenums, GObject Reference Manual}}</ref>
; प्रगणित प्रकार और "झंडे" प्रकार: सामान्य तौर पर, प्रत्येक गणना प्रकार और प्रत्येक पूर्णांक-आधारित बिटफ़ील्ड प्रकार (अर्थात, प्रत्येक <code>enum</code> प्रकार) जिसे कोई किसी तरह से उपयोग करना चाहता है जो ऑब्जेक्ट सिस्टम से संबंधित है - उदाहरण के लिए, ऑब्जेक्ट प्रॉपर्टी के प्रकार के रूप में - टाइप सिस्टम के साथ पंजीकृत होना चाहिए। आमतौर पर, इनिशियलाइज़ेशन कोड जो इन प्रकारों को पंजीकृत करने का ध्यान रखता है, एक स्वचालित उपकरण द्वारा उत्पन्न होता है जिसे कहा जाता है <code>glib-mkenums</code><ref>{{cite web|url=https://developer.gnome.org/gobject/stable/glib-mkenums.html|title=glib-mkenums, GObject Reference Manual}}</ref> और एक अलग फ़ाइल में संग्रहीत।
; बॉक्सिंग प्रकार: कुछ डेटा संरचनाएँ जो पूर्ण श्रेणी प्रकार (सभी ओवरहेड व्यय के साथ) बनाने के लिए बहुत सरल हैं, उन्हें अभी भी टाइप प्रणाली के साथ पंजीकृत करने की आवश्यकता हो सकती है। उदाहरण के लिए हमारे पास एक वर्ग हो सकता है जिसमें हम <code>background-color</code> जोड़ना चाहते हैं, जिसका मान एक संरचना का उदाहरण होना चाहिए जो {{code|2=c|1=struct color { int r, g, b; <nowiki>}</nowiki> }}. जीओब्जेक्ट को उपवर्गित करने से बचने के लिए हम इस संरचना का प्रतिनिधित्व करने के लिए एक बॉक्स प्रकार बना सकते हैं। प्रतिलिपि बनाने और मुक्त करने के लिए जीओब्जेक्ट फ़ंक्शन प्रदान कर सकते हैं। जीओब्जेक्ट सरल GLib डेटा प्रकारों को एकत्र बॉक्स प्रकार के साथ संयुक्त करता है। बॉक्सिंग प्रकारों के लिए एक अन्य उपयोग विदेशी वस्तुओं को एक टैग की गई गणना में प्रयुक्त करने के तरीके के रूप में है। जिसे टाइप सिस्टम पहचान सकता है और जान लेगा कि कैसे अनुकरण और मुक्त करना है।
; बॉक्स्ड प्रकार: कुछ डेटा संरचनाएँ जो बहुत सरल हैं जिन्हें पूर्ण वर्ग प्रकार (सभी उपरिव्यय के साथ) बनाया जा सकता है, उन्हें अभी भी टाइप सिस्टम के साथ पंजीकृत होने की आवश्यकता हो सकती है। उदाहरण के लिए, हमारे पास एक वर्ग हो सकता है जिसमें हम जोड़ना चाहते हैं <code>background-color</code> संपत्ति, जिसका मूल्य एक संरचना का उदाहरण होना चाहिए जो दिखता है {{code|2=c|1=struct color { int r, g, b; } }}. उपवर्ग करने से बचने के लिए <code>GObject</code>, हम इस संरचना का प्रतिनिधित्व करने के लिए एक बॉक्सिंग प्रकार बना सकते हैं, और प्रतिलिपि बनाने और मुक्त करने के लिए कार्य प्रदान कर सकते हैं। GObject सामान्य जीएलआईबी डेटा प्रकारों को लपेटने वाले मुट्ठी भर बॉक्सिंग प्रकारों के साथ आता है। बॉक्स किए गए प्रकारों के लिए एक अन्य उपयोग एक टैग किए गए कंटेनर में विदेशी वस्तुओं को लपेटने का एक तरीका है जिसे टाइप सिस्टम पहचान सकता है और जानता है कि कैसे कॉपी और मुक्त करना है।
; अपारदर्शी सूचक प्रकार: कभी-कभी, उन वस्तुओं के लिए जिन्हें न तो प्रतिलिपि करने, न ही संदर्भ-गणना करने और न ही मुक्त करने की आवश्यकता होती है। यहां तक ​​कि एक बॉक्स प्रकार भी अतिविस्तार होगा। जबकि ऐसी वस्तुओं को केवल अपारदर्शी पॉइंटर्स <code>G_TYPE_POINTER</code> के रूप में मानकर जीओब्जेक्ट में उपयोग किया जा सकता है। प्रायः एक व्युत्पन्न पॉइंटर प्रकार बनाना एक अच्छा विचार है। इस तथ्य का दस्तावेजीकरण करते हुए कि पॉइंटर्स को एक विशेष प्रकार की वस्तु का संदर्भ देना चाहिए, यद्यपि इसके विषय में और कुछ नही कहा जा सकता है।
; अपारदर्शी सूचक प्रकार: कभी-कभी, उन वस्तुओं के लिए जिन्हें न तो कॉपी करने की आवश्यकता होती है और न ही संदर्भ-गणना और न ही मुक्त करने की आवश्यकता होती है, यहां तक ​​कि एक बॉक्सिंग प्रकार भी [[ ओवरकिल (अवधि) ]] होगा। जबकि ऐसी वस्तुओं का उपयोग गोब्जेक्ट में केवल अपारदर्शी पॉइंटर्स के रूप में किया जा सकता है (<code>G_TYPE_POINTER</code>), अक्सर एक व्युत्पन्न पॉइंटर प्रकार बनाना एक अच्छा विचार है, इस तथ्य का दस्तावेजीकरण करते हुए कि पॉइंटर्स को किसी विशेष प्रकार की वस्तु का संदर्भ देना चाहिए, भले ही इसके बारे में और कुछ नहीं कहा गया हो।
; वर्ग और इंटरफ़ेस प्रकार: <code>GObject</code> एप्लिकेशन में अधिकांश प्रकार मूल वर्ग जीओब्जेक्ट से प्रत्यक्ष या अप्रत्यक्ष रूप से प्राप्त शब्द के सामान्य वस्तु उन्मुख अर्थ में कक्षाएं होती है। ऐसे इंटरफ़ेस भी हैं, जिनमें क्लासिक जावा-शैली इंटरफ़ेस के विपरीत कार्यान्वित प्रकार सम्मिलित हो सकते हैं। इस प्रकार जीओब्जेक्ट इंटरफेस को मिक्सिन के रूप में वर्णित किया जा सकता है।
; वर्ग और इंटरफ़ेस प्रकार: GObject एप्लिकेशन में अधिकांश प्रकार वर्ग होंगे - शब्द के सामान्य वस्तु-उन्मुख अर्थ में - रूट क्लास से प्रत्यक्ष या अप्रत्यक्ष रूप से व्युत्पन्न, <code>GObject</code>. ऐसे इंटरफेस भी हैं, जो क्लासिक [[ जावा (प्रोग्रामिंग भाषा) ]] -स्टाइल [[ इंटरफ़ेस (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) ]] के विपरीत, कार्यान्वित तरीके शामिल कर सकते हैं। GObject इंटरफेस को [[ mixin ]]्स के रूप में वर्णित किया जा सकता है।


== मैसेजिंग सिस्टम ==
== मैसेजिंग प्रणाली ==
GObject मैसेजिंग सिस्टम में दो पूरक भाग होते हैं: क्लोजर और सिग्नल।
<code>GObject</code> मैसेजिंग प्रणाली में दो पूरक भाग क्लोजर और संकेत होते हैं।
; क्लोजर: एक गोब्जेक्ट क्लोजर [[ कॉलबैक (कंप्यूटर विज्ञान) ]] का एक सामान्यीकृत संस्करण है। सी और सी ++ में लिखे गए क्लोजर के साथ-साथ मनमानी भाषाओं (जब बाइंडिंग प्रदान की जाती है) के लिए समर्थन मौजूद है। यह (उदाहरण के लिए) पायथन और जावा में लिखे गए कोड को GObject क्लोजर के माध्यम से लागू करने की अनुमति देता है।
; क्लोजर: <code>GObject</code> क्लोजर कॉलबैक का एक सामान्यीकृत संस्करण है। C और सी++ में लिखे गए क्लोजर के साथ-साथ अपेक्षाकृत भाषाओं (जब बाइंडिंग प्रदान की जाती है) के लिए समर्थन उपस्थित है। यह (उदाहरण के लिए) पायथन और जावा में लिखे गए कोड को जीओब्जेक्ट क्लोजर के माध्यम से प्रयुक्त करने की स्वीकृति देता है।
; सिग्नल: सिग्नल प्राथमिक तंत्र हैं जिसके द्वारा बंद किया जाता है। ऑब्जेक्ट टाइप सिस्टम के साथ सिग्नल श्रोताओं को पंजीकृत करते हैं, दिए गए सिग्नल और दिए गए क्लोजर के बीच मैपिंग निर्दिष्ट करते हैं। एक पंजीकृत सिग्नल के उत्सर्जन पर, उस सिग्नल के बंद होने का आह्वान किया जाता है। जीटीके में, सभी मूल जीयूआई घटनाएं (जैसे माउस गति और कीबोर्ड क्रियाएं) श्रोताओं के लिए संभावित रूप से कार्य करने के लिए गोब्जेक्ट सिग्नल उत्पन्न कर सकती हैं।
; संकेत: संकेत प्राथमिक तंत्र है जिसके द्वारा क्लोजर प्रयुक्त किया जाता है। वस्तु संकेत श्रोताओं को टाइप प्रणाली के साथ पंजीकृत करते हैं, किसी दिए गए संकेत और दिए गए क्लोजर के बीच मैपिंग निर्दिष्ट करते हैं। एक पंजीकृत संकेत के उत्सर्जन पर उस संकेत का स्थगित होना प्रयुक्त हो जाता है। जीटीके में सभी मूल जीयूआई घटनाएं (जैसे माउस गति और कीबोर्ड क्रियाएं) श्रोताओं के लिए संभावित रूप से कार्य करने के लिए जीओब्जेक्ट संकेत उत्पन्न कर सकती हैं।


== वर्ग कार्यान्वयन ==
== वर्ग कार्यान्वयन ==
प्रत्येक GObject वर्ग को कम से कम दो संरचनाओं द्वारा कार्यान्वित किया जाता है: वर्ग संरचना और उदाहरण संरचना।
प्रत्येक जीओब्जेक्ट वर्ग को कम से कम दो संरचनाओं, वर्ग संरचना और अनुरोध संरचना द्वारा कार्यान्वित किया जाता है।
; वर्ग संरचना: वर्ग संरचना C++ वर्ग की व्यवहार्यता से मेल खाती है। इसे सुपरक्लास की वर्ग संरचना से शुरू होना चाहिए। उसके बाद, यह फ़ंक्शन पॉइंटर्स का एक सेट रखेगा - कक्षा के प्रत्येक वर्चुअल विधि के लिए एक। वर्ग-विशिष्ट चर का उपयोग वर्ग के सदस्यों का अनुकरण करने के लिए किया जा सकता है।
; वर्ग संरचना: वर्ग संरचना सी++ वर्ग की व्यवहार्यता के अनुरूप है। इसका प्रारम्भ उच्च क्लास की वर्ग संरचना से होनी चाहिए। इसके बाद यह फ़ंक्शन पॉइंटर्स का एक समूह रखेगा और क्लास की प्रत्येक वर्चुअल विधि के लिए एक वर्ग-विशिष्ट चर का उपयोग वर्ग के सदस्यों का अनुकरण करने के लिए किया जा सकता है।
; द इंस्टेंस स्ट्रक्चर: इंस्टेंस स्ट्रक्चर, जो प्रति ऑब्जेक्ट इंस्टेंस की एक कॉपी में मौजूद होगा, को [[ सुपरक्लास (कंप्यूटर विज्ञान) ]] के इंस्टेंस स्ट्रक्चर से शुरू होना चाहिए (यह सुनिश्चित करता है कि सभी इंस्टेंसेस क्लास स्ट्रक्चर के लिए एक पॉइंटर के साथ शुरू होते हैं, क्योंकि सभी मौलिक तात्कालिक प्रकार इस संपत्ति को साझा करते हैं)। सुपरक्लास से संबंधित डेटा के बाद, संरचना C ++ सदस्य चर के अनुरूप कोई भी उदाहरण-विशिष्ट चर रख सकती है।
; अनुरोध संरचना
अनुरोध संरचना जो प्रति वस्तु अनुरोध अनुकरण में सम्मिलित होती है। जिसे सुपरक्लास की अनुरोध संरचना से प्रारम्भ होना चाहिए (यह सुनिश्चित करता है कि सभी अनुरोध क्लास संरचना के लिए एक पॉइंटर से प्रारम्भ होते हैं, क्योंकि सभी मौलिक तात्कालिक प्रकार इस विशेषता को साझा करते हैं। सुपरक्लास से संबंधित डेटा के बाद संरचना सी++ सदस्य चर के अनुरूप किसी भी उदाहरण-विशिष्ट चर को धारण कर सकती है।


GObject ढांचे में एक वर्ग को परिभाषित करना जटिल है, बड़ी मात्रा में बॉयलरप्लेट (पाठ) # बॉयलरप्लेट कोड कोड की आवश्यकता होती है, जैसे टाइप कास्टिंग मैक्रोज़ की मैन्युअल परिभाषाएं और अस्पष्ट प्रकार पंजीकरण मंत्र। इसके अलावा, चूंकि सी संरचना में "सार्वजनिक", "संरक्षित", या "निजी" जैसे एक्सेस संशोधक नहीं हो सकते हैं, इसलिए एनकैप्सुलेशन (कंप्यूटर प्रोग्रामिंग) प्रदान करने के लिए वर्कअराउंड का उपयोग किया जाना चाहिए। एक दृष्टिकोण निजी डेटा के लिए एक सूचक को शामिल करना है - जिसे पारंपरिक रूप से कहा जाता है <code>_priv</code> - उदाहरण संरचना में। निजी संरचना को सार्वजनिक शीर्षलेख फ़ाइल में घोषित किया जा सकता है, लेकिन केवल कार्यान्वयन फ़ाइल में परिभाषित किया जा सकता है, इस प्रभाव से कि निजी डेटा उपयोगकर्ताओं के लिए अपारदर्शी है, लेकिन कार्यान्वयनकर्ता के लिए पारदर्शी है। अगर निजी संरचना जीटीईपी के साथ पंजीकृत है, तो यह स्वचालित रूप से ऑब्जेक्ट सिस्टम द्वारा आवंटित की जाएगी। दरअसल, इसमें शामिल करना भी जरूरी नहीं है <code>_priv</code> सूचक, अगर कोई भस्म का उपयोग करने को तैयार है <code>G_TYPE_INSTANCE_GET_PRIVATE</code> हर बार निजी डेटा की जरूरत होती है।
<code>GObject</code> फ्रेमवर्क में एक वर्ग को परिभाषित करना जटिल होता है, जिसके लिए बड़ी मात्रा में बॉयलरप्लेट कोड जैसे टाइप कास्टिंग मैक्रोज़ की मैन्युअल परिभाषा और अस्पष्ट प्रकार पंजीकरण की आवश्यकता होती है। इसके अतिरिक्त सी संरचना में "सार्वजनिक", "संरक्षित" या "निजी" जैसे एक्सेस संशोधक नहीं हो सकते हैं। स्पष्टीकरण प्रदान करने के लिए वर्कअराउंड का उपयोग किया जाना चाहिए। एक दृष्टिकोण निजी डेटा के लिए एक सूचक को सम्मिलित करना है। जिसे पारंपरिक रूप से अनुरोध संरचना में <code>_priv</code> कहा जाता है। निजी संरचना को सार्वजनिक हेडर फ़ाइल में घोषित किया जा सकता है, लेकिन केवल कार्यान्वयन फ़ाइल में परिभाषित किया जा सकता है, जिसका प्रभाव यह है कि निजी डेटा उपयोगकर्ताओं के लिए अपारदर्शी है, लेकिन कार्यान्वयनकर्ता के लिए पारदर्शी है। यदि निजी संरचना जीटाइप के साथ पंजीकृत है, तो इसे वस्तु प्रणाली द्वारा स्वचालित रूप से आवंटित किया जा सकता है। वास्तव में यदि कोई निजी डेटा की आवश्यकता होने पर प्रत्येक बार <code>G_TYPE_INSTANCE_GET_PRIVATE</code> का उपयोग करने को तैयार है, तो <code>_priv</code> पॉइंटर को सम्मिलित करना भी आवश्यक नहीं होता है।


इन जटिलताओं में से कुछ को संबोधित करने के लिए, कई उच्च-स्तरीय भाषाएं मौजूद हैं जो स्रोत-से-स्रोत संकलक | स्रोत-से-स्रोत सी में GObject के लिए संकलित करती हैं। वाला (प्रोग्रामिंग भाषा) सी शार्प (प्रोग्रामिंग भाषा) का उपयोग करती है। सी#-शैली सिंटैक्स और [[वेनिला (कंप्यूटिंग)]] सी कोड में पूर्व-संसाधित है। GObject बिल्डर, या [https://www.jirka.org/gob.html GOB2], जावा (प्रोग्रामिंग भाषा) की याद दिलाने वाला एक टेम्पलेट सिंटैक्स प्रदान करता है।
इनमें से कुछ जटिलताओं को संबोधित करने के लिए कई उच्च-स्तरीय भाषाएँ सम्मिलित हैं जो स्रोत से स्रोत C में जीओब्जेक्ट को संकलित करती हैं। जावा प्रोग्रामिंग भाषा C शैली का उपयोग करती है और [[वेनिला (कंप्यूटिंग)]] C कोड में पूर्व-संसाधित होती है। जीओब्जेक्ट या [https://www.jirka.org/gob.html जीओबी-2], जावा की मेमोरी मे एक टेम्पलेट विश्लेषण प्रदान करता है।


== गोब्जेक्ट आत्मनिरीक्षण ==
== गोब्जेक्ट आत्मनिरीक्षण ==
* [https://wiki.gnome.org/Projects/GObjectIntrospection GObject आत्मनिरीक्षण] (संक्षिप्त GIR<ref>{{cite web |title=आत्मनिरीक्षण, सारांश|url=https://developer.gnome.org/documentation/guidelines/programming/introspection.html |website=Gnome Developer, Programming Guidelines - Specific How-Tos |access-date=9 August 2020}}</ref>) सी पुस्तकालयों (जीओब्जेक्ट का उपयोग करके) और भाषा बाइंडिंग, सीएफ के बीच एक [[विदेशी फ़ंक्शन इंटरफ़ेस]] मिडलवेयर परत है। [[जीटीके के लिए भाषा बंधनों की सूची]]
* [https://wiki.gnome.org/Projects/GObjectIntrospection GObject आत्मनिरीक्षण] संक्षिप्त जीआईआर<ref>{{cite web |title=आत्मनिरीक्षण, सारांश|url=https://developer.gnome.org/documentation/guidelines/programming/introspection.html |website=Gnome Developer, Programming Guidelines - Specific How-Tos |access-date=9 August 2020}}</ref> C लाइब्रेरी जीओब्जेक्ट का उपयोग करके और भाषा बाइंडिंग सीएफ [[जीटीके के लिए भाषा बंधनों की सूची|जीटीके]] के लिए भाषा बाइंडिंग की सूची के बीच एक विदेशी फ़ंक्शन इंटरफ़ेस मध्य परत है।


== उपयोग ==
== उपयोग ==
सी और गोब्जेक्ट के संयोजन का उपयोग कई सफल मुफ्त सॉफ्टवेयर परियोजनाओं में किया जाता है, जैसे कि गनोम डेस्कटॉप, जीटीके टूलकिट और जीआईएमपी इमेज मैनीपुलेशन प्रोग्राम।
सी और गोब्जेक्ट के संयोजन का उपयोग कई सफल मुक्त सॉफ्टवेयर जैसे कि गनोम डेस्कटॉप, जीटीके टूलकिट और जीआईएमपी छवि मैनीपुलेशन प्रोग्राम परियोजनाओं में किया जाता है।


हालाँकि कई GObject एप्लिकेशन पूरी तरह से C में लिखे गए हैं, GObject सिस्टम कई अन्य भाषाओं के देशी ऑब्जेक्ट सिस्टम में अच्छी तरह से मैप करता है, जैसे C ++, Java (प्रोग्रामिंग लैंग्वेज), [[ रूबी प्रोग्रामिंग भाषा ]], पायथन (प्रोग्रामिंग लैंग्वेज), [[ सामान्य लिस्प ]] और .NET फ्रेमवर्क | नेट/[[मोनो (सॉफ्टवेयर)]]। नतीजतन, आमतौर पर GObject ढांचे का उपयोग करने वाले अच्छी तरह से लिखित पुस्तकालयों के लिए भाषा बाइंडिंग बनाने के लिए अपेक्षाकृत दर्द रहित होता है।
हालाँकि कई जीओब्जेक्ट एप्लिकेशन पूरी तरह से C में लिखे गए हैं, जीओब्जेक्ट सिस्टम कई अन्य भाषाओं जैसे सी++, जावा, रूबी, पायथन, सामान्य लिस्प और डॉटनेट/मोनो के मूल ऑब्जेक्ट सिस्टम में अच्छी तरह से मैप करता है। जिसके परिणामस्वरूप जीओब्जेक्ट फ्रेमवर्क का उपयोग करने वाले अच्छी तरह से लिखित लाइब्रेरी के लिए भाषा बाइंडिंग बनाना सामान्यतः अपेक्षाकृत दोष रहित होता है।


सी में GObject कोड लिखना, हालांकि, अपेक्षाकृत वर्बोज़ है। लाइब्रेरी को सीखने में काफी समय लगता है, और उच्च-स्तरीय ऑब्जेक्ट-ओरिएंटेड भाषाओं में अनुभव वाले प्रोग्रामर अक्सर C में GObject के साथ काम करना थोड़ा कठिन पाते हैं। <code>GObject</code>) को बड़ी मात्रा में [[बॉयलरप्लेट कोड]] लिखने और/या कॉपी करने की आवश्यकता हो सकती है।<ref>{{cite web|title=एक नया गोब्जेक्ट कैसे परिभाषित और कार्यान्वित करें|url=https://developer.gnome.org/gobject/stable/howto-gobject.html|work=gnome.org|access-date=27 July 2013}}</ref> हालाँकि, Vala (प्रोग्रामिंग भाषा) का उपयोग करना, एक ऐसी भाषा जिसे मुख्य रूप से GObject के साथ काम करने के लिए डिज़ाइन किया गया है और जो C में परिवर्तित हो जाती है, GObject के साथ काम करने या GObject आधारित लाइब्रेरी लिखने को बेहतर बनाने की संभावना है।
हालाँकि सबसे पहले C में जीओब्जेक्ट कोड लिखना अपेक्षाकृत क्रियात्मक है। लाइब्रेरी को सीखने में काफी समय लगता है और उच्च-स्तरीय वस्तु-उन्मुख भाषाओं में अनुभव वाले प्रोग्रामर को प्रायः C में जीओब्जेक्ट के साथ कार्य करना अपेक्षाकृत कठिन लगता है। उदाहरण के लिए एक उपवर्ग (यहां तक ​​कि जीओब्जेक्ट का एक उपवर्ग भी) बनाना संभव हो सकता है। बड़ी मात्रा में [[बॉयलरप्लेट कोड]] लिखने या कॉपी करने की आवश्यकता होती है।<ref>{{cite web|title=एक नया गोब्जेक्ट कैसे परिभाषित और कार्यान्वित करें|url=https://developer.gnome.org/gobject/stable/howto-gobject.html|work=gnome.org|access-date=27 July 2013}}</ref> हालाँकि जावा का उपयोग करना एक ऐसी भाषा जो मुख्य रूप से जीओब्जेक्ट के साथ कार्य करने के लिए डिज़ाइन की गई है और जो C में परिवर्तित होती है और जीओब्जेक्ट के साथ कार्य करने या जीओब्जेक्ट आधारित लाइब्रेरी लिखने को अच्छा बनाने की संभावना है। हालाँकि वे वास्तव में [[प्रथम श्रेणी की वस्तु|प्रथम श्रेणी की वस्तुए]] नहीं हैं (जीटाइप में कोई वास्तविक मेटाटाइप नहीं हैं), कक्षाएं और इंटरफेस जैसे मेटाऑब्जेक्ट रनटाइम पर जीओब्जेक्ट अनुप्रयोगों द्वारा बनायी जाती हैं और [[आत्मनिरीक्षण (कंप्यूटर विज्ञान)]] के लिए अच्छा समर्थन प्रदान करती हैं। आत्मनिरीक्षण क्षमताओं का उपयोग भाषा बाइंडिंग और ग्लेड जैसे उपयोगकर्ता इंटरफ़ेस डिज़ाइन अनुप्रयोगों द्वारा किया जाता है ताकि एक साझा लाइब्रेरी को प्रयुक्त करने जैसी वस्तुओ को करने की स्वीकृति प्राप्त हो सके जो एक जीओब्जेक्ट क्लास प्रदान करता है जो सामान्यतः ग्लेड की स्थिति में कुछ प्रकार का विजेट प्रदान करता है और फिर क्लास के सभी गुणों की एक सूची प्राप्त करता है। इस प्रकार की जानकारी और दस्तावेज़ीकरण स्ट्रिंग्स के साथ पूर्ण होता है।
 
हालांकि वे वास्तव में [[प्रथम श्रेणी की वस्तु]]एं नहीं हैं (जीटीईपी में कोई वास्तविक मेटाटाइप नहीं हैं), कक्षाएं और इंटरफेस जैसे [[metaobject]] रनटाइम पर गोब्जेक्ट अनुप्रयोगों द्वारा बनाए जाते हैं, और [[आत्मनिरीक्षण (कंप्यूटर विज्ञान)]] के लिए अच्छा समर्थन प्रदान करते हैं। [[ग्लेड इंटरफेस डिजाइनर]] जैसे भाषा बाइंडिंग और उपयोगकर्ता इंटरफ़ेस डिज़ाइन अनुप्रयोगों द्वारा आत्मनिरीक्षण क्षमताओं का उपयोग किया जाता है ताकि एक साझा लाइब्रेरी को लोड करने की अनुमति दी जा सके जो एक GObject क्लास प्रदान करता है - आमतौर पर किसी प्रकार का [[वेब विजेट]], ग्लेड के मामले में - और फिर एक सूची प्राप्त करता है वर्ग के सभी गुण, प्रकार की जानकारी और प्रलेखन के साथ पूर्ण
तार।


== अन्य ऑब्जेक्ट सिस्टम से तुलना ==
== अन्य ऑब्जेक्ट सिस्टम से तुलना ==
Line 100: Line 97:
{{Unreferenced section|date=November 2018}}
{{Unreferenced section|date=November 2018}}


चूँकि GObject C के लिए अधिकतर पूर्ण ऑब्जेक्ट सिस्टम प्रदान करता है{{citation needed|date=November 2018}}, इसे C-व्युत्पन्न भाषाओं जैसे C++ और [[Objective-C]] के विकल्प के रूप में देखा जा सकता है। (हालांकि दोनों अपने संबंधित ऑब्जेक्ट सिस्टम से परे कई अन्य सुविधाएं भी प्रदान करते हैं।) सी ++ और गोब्जेक्ट के बीच एक आसानी से देखा जाने वाला अंतर यह है कि गोब्जेक्ट (जावा की तरह) एकाधिक विरासत का समर्थन नहीं करता है।<ref>{{Cite web|url=https://stackoverflow.com/questions/9747468/why-was-the-gobject-system-created/9747627|title=c++ - Why Was the GObject System Created?|website=Stack Overflow|access-date=2019-11-16}}</ref>
<code>GObject</code> सी प्रोग्रामिंग के लिए प्रायः पूर्ण वस्तु प्रणाली प्रदान करता है।{{citation needed|date=November 2018}} इसे C-व्युत्पन्न भाषाओं जैसे सी++ और वैकल्पिक-सी प्रोग्रामिंग के विकल्प के रूप में देखा जा सकता है। हालांकि दोनों अपनी-अपनी वस्तु प्रणाली के अतिरिक्त कई अन्य सुविधाएं भी प्रदान करती हैं। सी++ और जीओब्जेक्ट के बीच एक आसानी से देखा जाने वाला अंतर यह है कि जीओब्जेक्ट (जावा की तरह) कई भाषाओ का समर्थन नहीं करता है।<ref>{{Cite web|url=https://stackoverflow.com/questions/9747468/why-was-the-gobject-system-created/9747627|title=c++ - Why Was the GObject System Created?|website=Stack Overflow|access-date=2019-11-16}}</ref>
GObject के GLib के g_[[malloc]] () मेमोरी एलोकेशन फ़ंक्शन के उपयोग से प्रोग्राम बिना शर्त मेमोरी थकावट से बाहर निकल जाएगा, C लाइब्रेरी के मॉलोक (), C ++ के नए (C ++) और अन्य सामान्य मेमोरी एलोकेटर के विपरीत जो प्रोग्राम को पूरी तरह से सामना करने की अनुमति देता है बस क्रैश किए बिना आउट-ऑफ़-मेमोरी स्थितियों से पुनर्प्राप्त करें।<ref>{{Cite web|url=https://developer.gnome.org/glib/stable/glib-Memory-Allocation.html#g-malloc|title=Memory Allocation: GLib Reference Manual|website=developer.gnome.org|access-date=2019-11-16}}</ref> यह सॉफ्टवेयर में GObject को शामिल करने के खिलाफ काम करता है जहां सीमित मेमोरी के सामने लचीलापन महत्वपूर्ण है, या जहां बहुत अधिक या बहुत बड़ी वस्तुओं को आमतौर पर संभाला जाता है। G_try_new() का उपयोग तब किया जा सकता है जब स्मृति आवंटन विफल होने की अधिक संभावना होती है (उदाहरण के लिए एक बड़ी वस्तु के लिए), लेकिन यह अनुमति नहीं दे सकता है कि आवंटन कोड में कहीं और विफल नहीं होगा।<ref>{{Cite web|url=https://developer.gnome.org/glib/stable/glib-Memory-Allocation.html#g-try-new|title=Memory Allocation: GLib Reference Manual|website=developer.gnome.org|access-date=2019-11-17}}</ref>
एक अन्य महत्वपूर्ण अंतर यह है कि जबकि C++ और Objective-C अलग-अलग भाषाएं हैं, GObject पूरी तरह से एक लाइब्रेरी है और इस तरह कोई नया सिंटैक्स या कंपाइलर इंटेलिजेंस पेश नहीं करता है। उदाहरण के लिए, GObject-आधारित C ​​कोड लिखते समय, स्पष्ट कास्ट (कंप्यूटर विज्ञान) करना अक्सर आवश्यक होता है।{{citation needed|date=November 2018}} इसलिए, "C with GObject", जिसे प्लेन C से अलग भाषा के रूप में माना जाता है, प्लेन C का एक सख्त सुपरसेट है - ऑब्जेक्टिव C की तरह, लेकिन C++ के विपरीत।


उन प्लेटफार्मों पर जहां कोई मानक [[अनुप्रयोग बाइनरी इंटरफ़ेस]] नहीं है जो सभी सी ++ कंपाइलर्स में काम करता है (जो आम तौर पर मामला नहीं है, क्योंकि आमतौर पर इटेनियम एबीआई या माइक्रोसॉफ्ट एबीआई का पालन किया जाता है), एक सी ++ कंपाइलर के साथ संकलित लाइब्रेरी हमेशा सक्षम नहीं होती है एक पुस्तकालय को एक अलग से संकलित करें।{{citation needed|date=November 2018}} यदि ऐसी अनुकूलता की आवश्यकता है, तो C++ विधियों को सादे C फ़ंक्शंस के रूप में निर्यात किया जाना चाहिए, जो आंशिक रूप से C++ ऑब्जेक्ट सिस्टम के उद्देश्य को पराजित करता है।{{citation needed|date=November 2018}} समस्या भाग में होती है क्योंकि सभी निर्यात किए गए प्रतीकों की विशिष्टता सुनिश्चित करने के लिए विभिन्न C++ कंपाइलर विभिन्न प्रकार के नाम प्रबंधन का उपयोग करते हैं। (यह आवश्यक है क्योंकि, उदाहरण के लिए, दो अलग-अलग वर्गों में समान नाम वाले सदस्य फ़ंक्शन हो सकते हैं, एक फ़ंक्शन का नाम कई बार विधि ओवरलोडिंग हो सकता है, या अलग-अलग [[नामस्थान]]ों में समान रूप से नामित फ़ंक्शन दिखाई दे सकते हैं, लेकिन [[ वस्तु कोड ]] में इन ओवरलैप्स की अनुमति नहीं है।){{citation needed|date=November 2018}} इसके विपरीत, चूँकि C किसी भी प्रकार के ओवरलोडिंग या नामस्थान का समर्थन नहीं करता है, C पुस्तकालयों के लेखक अपने निर्यात किए गए नामों की वैश्विक विशिष्टता सुनिश्चित करने के लिए विशेष रूप से स्पष्ट उपसर्गों का उपयोग करेंगे। {{citation needed|date=November 2018}} इसलिए, ऑब्जेक्ट-ओरिएंटेड होने के बावजूद, C में लिखी गई एक GObject-आधारित लाइब्रेरी हमेशा समान बाहरी प्रतीक नामों का उपयोग करेगी चाहे किसी भी कंपाइलर का उपयोग किया गया हो।
<code>GObject</code> द्वारा GLib के g_[[malloc]] () मेमोरी आवंटन फ़ंक्शन के उपयोग से प्रोग्राम मेमोरी नष्ट होने पर बिना किसी कारण के यह बाहर निकल निकल जाता है। C लाइब्रेरी के Malloc(), सी++ के नए और अन्य सामान्य मेमोरी आवंटन के विपरीत जो किसी प्रोग्राम मे एसका सामना करने या यहां तक ​​कि पूरी तरह से पुनर्प्राप्त करने की स्वीकृति देता है। बस दुर्घटनाग्रस्त हुए बिना मेमोरी की स्थितियाँ<ref>{{Cite web|url=https://developer.gnome.org/glib/stable/glib-Memory-Allocation.html#g-malloc|title=Memory Allocation: GLib Reference Manual|website=developer.gnome.org|access-date=2019-11-16}}</ref> इस सॉफ्टवेयर में जीओब्जेक्ट को सम्मिलित करने के विपरीत कार्य करती है जहां सीमित मेमोरी के सामने नम्यता महत्वपूर्ण है या जहां बहुत अधिक या बहुत बड़ी वस्तुओं को सामान्यतः नियंत्रित किया जाता है। G_try_new() का उपयोग तब किया जा सकता है उदाहरण के लिए जब एक बड़ी वस्तु के लिए मेमोरी आवंटन विफल होने की अधिक संभावना होती है लेकिन यह स्वीकृति नहीं दे सकता है कि आवंटन कोड में कहीं और विफल नहीं हो सकता है।<ref>{{Cite web|url=https://developer.gnome.org/glib/stable/glib-Memory-Allocation.html#g-try-new|title=Memory Allocation: GLib Reference Manual|website=developer.gnome.org|access-date=2019-11-17}}</ref>


शायद सबसे गहरा अंतर GObject का [[सिग्नल प्रोग्रामिंग]] पर जोर है (जिसे अन्य भाषाओं में [[घटना-संचालित प्रोग्रामिंग]] कहा जाता है)।{{citation needed|date=November 2018}} यह जोर इस तथ्य से निकला है कि GObject को विशेष रूप से GUI टूलकिट की जरूरतों को पूरा करने के लिए डिज़ाइन किया गया था। जबकि अधिकांश वस्तु-उन्मुख भाषाओं के लिए सिग्नल लाइब्रेरी हैं, GObject के मामले में इसे ऑब्जेक्ट सिस्टम में बनाया गया है। इस वजह से, एक विशिष्ट GObject एप्लिकेशन एक गैर-GObject एप्लिकेशन की तुलना में बहुत अधिक सीमा तक संकेतों का उपयोग करेगा, जिससे GObject घटक-आधारित सॉफ़्टवेयर इंजीनियरिंग सादे C++ या Java का उपयोग करने वालों की तुलना में बहुत अधिक जानकारी छुपाने और पुन: प्रयोज्य बनाने में सक्षम होंगे।{{citation needed|date=November 2018}}{{According to whom|date=November 2018}} यदि [[glibmm]]/[[gtkmm]] का उपयोग कर रहे हैं, तो क्रमशः Glib/GTK के लिए आधिकारिक C++ रैपर, सिबलिंग प्रोजेक्ट [[libsigc++]] मानक C++ का उपयोग करके अंतर्निहित GObject संकेतों के आसान उपयोग की अनुमति देता है। बेशक, संकेतों के अन्य कार्यान्वयन लगभग सभी प्लेटफार्मों पर उपलब्ध हैं, हालांकि कभी-कभी एक अतिरिक्त पुस्तकालय की आवश्यकता होती है, जैसे C++ के लिए Boost.Signals2।
इसका एक और महत्वपूर्ण अंतर यह है कि जबकि सी++ और वैकल्पिक-सी प्रोग्रामिंग अलग-अलग भाषाएं हैं तो जीओब्जेक्ट पूरी तरह से एक लाइब्रेरी है और इस प्रकार कोई नया विश्लेषण या कंपाइलर बुद्धिमत्ता प्रस्तुत नहीं करता है। उदाहरण के लिए <code>GObject</code>आधारित C ​​कोड लिखते समय, स्पष्ट कास्टिंग करना प्रायः आवश्यक होता है।{{citation needed|date=November 2018}} इसलिए "<code>GObject</code> के साथ C" जिसे साधारण C से अलग भाषा के रूप में माना जाता है। वैकल्पिक C की तरह साधारण C का एक जटिल उच्च समूह सी++ है।


{{See also|IBM System Object Model#Comparison of support for compiled class libraries|l1=Comparison with COM, Objective-C, SOM, Windows Runtime, XPCOM}}
उन प्लेटफ़ॉर्म पर जहां कोई मानक एबीआई नहीं है जो सभी सी++ कंपाइलरों पर कार्य करता है जो सामान्यतः स्थित नहीं है, क्योंकि सामान्यतः इटेनियम एबीआई या माइक्रोसॉफ्ट एबीआई का अनुसरण किया जाता है। एक सी++ कंपाइलर के साथ संकलित लाइब्रेरी सदैव कॉल करने में सक्षम नहीं होती है लाइब्रेरी को किसी भिन्न लाइब्रेरी के साथ संकलित किया गया है। सभी निर्यातित प्रतीकों की विशिष्टता सुनिश्चित करने के लिए संकलक विभिन्न प्रकार के नाम प्रबंधन का उपयोग करते हैं। यह आवश्यक है क्योंकि, उदाहरण के लिए, दो अलग-अलग वर्गों में समान नाम वाले सदस्य फ़ंक्शन हो सकते हैं, एक फ़ंक्शन नाम कई बार ओवरलोड हो सकता है या समान नाम वाले फ़ंक्शन अलग-अलग नामस्थानों में दिखाई दे सकते हैं, लेकिन वैकल्पिक कोड में इन ओवरलैप्स की स्वीकृति नहीं है। {{citation needed|date=November 2018}} इसके विपरीत, चूंकि सी किसी भी प्रकार के ओवरलोडिंग या नेमस्पेसिंग का समर्थन नहीं करता है, सी लाइब्रेरी के लेखक सामान्यतः अपने निर्यातित नामों की वैश्विक विशिष्टता सुनिश्चित करने के लिए स्पष्ट उपसर्गों का उपयोग करते है।{{citation needed|date=November 2018}} इसलिए, वस्तु-उन्मुख होने के अतिरिक्त C में लिखी गई <code>GObject</code>आधारित लाइब्रेरी सदैव समान बाहरी प्रतीक नामों का उपयोग करती है फिर चाहे किसी भी कंपाइलर का उपयोग किया गया हो।
 
लगभग अधिक अंतर संकेतों पर जीओब्जेक्ट का महत्व है जिसे अन्य भाषाओं में घटनाएँ कहा जाता है।{{citation needed|date=November 2018}} यह महत्व इस तथ्य से लिया गया है कि जीओब्जेक्ट को विशेष रूप से जीयूआई टूलकिट की आवश्यकताओ को पूरा करने के लिए डिज़ाइन किया गया था। जबकि अधिकांश वस्तु-उन्मुख भाषाओं के लिए संकेत लाइब्रेरी उपस्थित हैं, जीओब्जेक्ट की स्थिति में इसे वस्तु प्रणाली में बनाया गया है। इसी कारण से एक सामान्य जीओब्जेक्ट एप्लिकेशन गैर-<code>GObject</code> एप्लिकेशन की तुलना में बहुत अधिक स्थिति तक संकेत का उपयोग करता है। जिससे जीओब्जेक्ट घटकों को साधारण सी++ या जावा का उपयोग करने वाले घटकों की तुलना में बहुत अधिक स्पष्टीकरण और पुन: प्रयोज्य बना दिखाई देता है।{{citation needed|date=November 2018}}{{According to whom|date=November 2018}} यदि [[glibmm|<code>glibmm</code>]]<code>/[[gtkmm]]</code>, ग्लिब/जीटीके के लिए आधिकारिक प्रोग्रामिंग क्रमशः सी++ का उपयोग किया जाता है, तो साधारण libsigc++ मानक सी++ का उपयोग करके अंतर्निहित जीओब्जेक्ट संकेतों के आसान उपयोग की स्वीकृति देता है। यद्यपि संकेत के अन्य कार्यान्वयन लगभग सभी प्लेटफार्मों पर उपलब्ध हैं। हालांकि कभी-कभी एक अतिरिक्त लाइब्रेरी जैसे सी++ के लिए बूस्ट संकेत-2 की आवश्यकता होती है।
 
{{See also|आईबीएम प्रणाली वस्तु मॉडल#संकलित वर्ग लाइब्रेरी के लिए समर्थन की तुलना|l1=सीओएम, वैकल्पिक-सी, एसओएम, विंडोज रनटाइम, एक्सपीकॉम के साथ तुलना}}


== यह भी देखें ==
== यह भी देखें ==
{{Portal|Free and open-source software}}
{{Portal|Free and open-source software}}
* वाला (प्रोग्रामिंग भाषा) - C_Sharp_(programming_language)|C#-जैसी सिंटैक्स वाली GObject-आधारित प्रोग्रामिंग भाषा। सोर्स-टू-सोर्स कंपाइलर टू सी (प्रोग्रामिंग लैंग्वेज)।
* वैला [[जिन्न (प्रोग्रामिंग भाषा)|(प्रोग्रामिंग भाषा)]]- <code>GObject</code>-आधारित प्रोग्रामिंग भाषा जिसमें C जैसा वाक्य विन्यास स्रोत कंपाइलर है।
* [[जिन्न (प्रोग्रामिंग भाषा)]] - पायथन (प्रोग्रामिंग भाषा) -स्टाइल वैला कंपाइलर के लिए वैकल्पिक सिंटैक्स पार्सर
* [[जिन्न (प्रोग्रामिंग भाषा)]] - पायथन-शैली वैला कंपाइलर के लिए वैकल्पिक वाक्य विन्यास स्रोत है।


==संदर्भ==
==संदर्भ==
Line 120: Line 119:


==बाहरी संबंध==
==बाहरी संबंध==
* [https://developer.gnome.org/gobject/stable/ The GObject Reference Manual (and tutorial)]
* [https://developer.gnome.org/gobject/stable/ The जीओब्जेक्ट Reference Manual (and tutorial)]
* [https://web.archive.org/web/20170202012725/http://article.gmane.org/gmane.comp.gnome.gtk%2B.devel.general/6329 GObject Tutorial Aug 2004]
* [https://web.archive.org/web/20170202012725/http://article.gmane.org/gmane.comp.gnome.gtk%2B.devel.general/6329 GObject Tutorial Aug 2004]
* [https://www.jirka.org/gob.html GOB2 &mdash; the GObject Builder]
* [https://www.jirka.org/gob.html GOB2 &mdash; the जीओब्जेक्ट Builder]
* [https://wiki.gnome.org/Projects/Vala Vala Homepage]
* [https://wiki.gnome.org/Projects/Vala Vala Homepage]


Line 129: Line 128:
<!-- Interlang -->
<!-- Interlang -->


{{DEFAULTSORT:Gobject}}[[Category: सी (प्रोग्रामिंग भाषा) पुस्तकालय]] [[Category: मुफ्त कंप्यूटर पुस्तकालय]] [[Category: सी में मुफ्त सॉफ्टवेयर प्रोग्राम किया गया]] [[Category: फ्रीडेस्क्टॉप.ऑर्ग]] [[Category: गनोम पुस्तकालय]] [[Category: जीटीके]]
{{DEFAULTSORT:Gobject}}
 
 


[[Category: Machine Translated Page]]
[[Category:All articles needing additional references|Gobject]]
[[Category:Created On 14/06/2023]]
[[Category:All articles that may contain original research|Gobject]]
[[Category:All articles with specifically marked weasel-worded phrases|Gobject]]
[[Category:All articles with unsourced statements|Gobject]]
[[Category:Articles needing additional references from November 2018|Gobject]]
[[Category:Articles that may contain original research from December 2011|Gobject]]
[[Category:Articles with hatnote templates targeting a nonexistent page|Gobject]]
[[Category:Articles with invalid date parameter in template|Gobject]]
[[Category:Articles with specifically marked weasel-worded phrases from November 2014|Gobject]]
[[Category:Articles with specifically marked weasel-worded phrases from November 2018|Gobject]]
[[Category:Articles with unsourced statements from November 2018|Gobject]]
[[Category:Collapse templates|Gobject]]
[[Category:Created On 14/06/2023|Gobject]]
[[Category:Machine Translated Page|Gobject]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists|Gobject]]
[[Category:Pages with empty portal template|Gobject]]
[[Category:Pages with script errors|Gobject]]
[[Category:Portal templates with redlinked portals|Gobject]]
[[Category:Sidebars with styles needing conversion|Gobject]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready|Gobject]]
[[Category:Templates generating microformats|Gobject]]
[[Category:Templates that are not mobile friendly|Gobject]]
[[Category:Templates using TemplateData|Gobject]]
[[Category:Wikipedia metatemplates|Gobject]]
[[Category:गनोम पुस्तकालय|Gobject]]
[[Category:जीटीके|Gobject]]
[[Category:फ्रीडेस्क्टॉप.ऑर्ग|Gobject]]
[[Category:मुफ्त कंप्यूटर पुस्तकालय|Gobject]]
[[Category:सी (प्रोग्रामिंग भाषा) पुस्तकालय|Gobject]]
[[Category:सी में मुफ्त सॉफ्टवेयर प्रोग्राम किया गया|Gobject]]

Latest revision as of 10:14, 30 June 2023

जीऑब्जेक्ट
Developer(s)गनोम परियोजना
Initial release11 March 2002; 23 years ago (2002-03-11)
Written inसी
Operating systemक्रॉस-प्लेटफॉर्म
Available inबहुभाषी[which?]
Typeसॉफ्टवेयर लाइब्रेरी
Licenseजीएनयू एलजीपीएल
Websitedeveloper.gnome.org/gobject/stable/
चूंकि जीएनयू सी लाइब्रेरी लिनक्स कर्नेल सिस्टम कॉल के लिए एक रैपर के रूप में कार्य करती है, इसलिए जीएलआईबी (जीओब्जेक्ट, जीएलआईबी, जीमॉड्यूल, जीटीएचड और जीआईओ (सॉफ्टवेयर)) में एकत्र किए गए लाइब्रेरी अपने विशिष्ट फंक्शन के लिए आगे के रैपर के रूप में कार्य करती हैं।

जीएलआईबी ऑब्जेक्ट सिस्टम या जीओब्जेक्ट, एक मुक्त सॉफ्टवेयर लाइब्रेरी है जो पोर्टेबल ऑब्जेक्ट (वस्तु) सिस्टम और पारदर्शी अनुप्रस्थ-भाषा अंतर प्रचालनीयता प्रदान करती है। जीओब्जेक्ट को वस्तु-उन्मुख सी प्रोग्रामिंग आधारित एपीआई प्रदान करने के लिए सी प्रोग्राम में प्रत्यक्ष रूप मे उपयोग के लिए और पारदर्शी अनुप्रस्थ-भाषा अंतर प्रचालनीयता प्रदान करने के लिए अन्य भाषाओं में बाइंडिंग प्रोग्रामिंग के माध्यम से PyGObjectको डिज़ाइन किया गया है।

इतिहास

GLibऔर libcपर निर्भर करते हुए, जीओब्जेक्ट GNOME का आधार है। इसका उपयोग जीटीके, पंगो, अभिगम्यता टूलकिट और अधिकांश उच्च-स्तरीय जीनोम लाइब्रेरी जैसे GStreamerऔर अनुप्रयोगों में किया जाता है। GTK+ 2.0 से पहले जीओब्जेक्ट के समान कोड जीटीके कोडबेस का एक भाग था। यह "GObject" नाम अभी तक उपयोग में नहीं था, सामान्य आधारित क्लास को GtkObject कहा जाता था।

GTK+ 2.0 के प्रारम्भ होने पर इसकी सामान्य उपयोगिता के कारण वस्तु प्रणाली को एक अलग लाइब्रेरी में निकाला गया था। इस प्रक्रिया में GtkObject वर्ग के अधिकांश गैर-जीयूआई विशिष्ट भागों को जीओब्जेक्ट के नए सामान्य आधारित क्लास में ले जाया गया था। 11 मार्च 2002 (GTK+ 2.0 की प्रकाशन तिथि) से एक अलग लाइब्रेरी के रूप में अस्तित्व में आने के बाद जीओब्जेक्ट लाइब्रेरी का उपयोग अब कई गैर-जीयूआई प्रोग्रामों जैसे कमांड लाइन और सर्वर (कंप्यूटिंग) अनुप्रयोगों द्वारा किया जाता है।

जीएलआईबी से संबंध

हालाँकि जीओब्जेक्ट के पास दस्तावेज़ीकरण का अपना अलग समूह है[1] और सामान्यतः इसे अपनी साझा लाइब्रेरी फ़ाइल में संकलित किया जाता है। जीओब्जेक्ट का स्रोत कोड GLib स्रोत ट्री में रहता है और GLib के साथ वितरित किया जाता है। इस कारण से जीओब्जेक्ट GLib संस्करण संख्याओं का उपयोग करता है और सामान्यतः GLib के साथ पैक किया जाता है। उदाहरण के लिए डेबियन जीओब्जेक्ट को अपने libglib2.0 पैकेज समूह में रखता है।

टाइप प्रणाली

जीओब्जेक्ट फ्रेमवर्क के सबसे आधारिक स्तर पर एक सामान्य और गतिशील प्रकार की प्रणाली निहित है जिसे GTypeकहा जाता है। जीटाइप प्रणाली सभी ऑब्जेक्ट्स का रनटाइम विवरण रखता है जो ग्लू-कोड को कई भाषा बाइंडिंग की सुविधा प्रदान करता है। जीटाइप प्रणाली गैर-वर्गीकृत प्रकारों जैसे अपारदर्शी पॉइंटर्स, स्ट्रिंग और विभिन्न आकार के पूर्णांक और फ़्लोटिंग पॉइंट संख्याओं के अतिरिक्त किसी भी एकल विशेषता वाली वर्ग संरचना का संरक्षण करती है।

टाइप प्रणाली किसी भी पंजीकृत प्रकार से संबंधित मानों को आयोजित करना और नष्ट करना जानती है। यह पूर्णांक जैसे प्रकारों के लिए अपेक्षाकृत सामान्य है, लेकिन कई जटिल वस्तुओ की संदर्भ के लिए गणना की जाती हैं, जबकि कुछ वस्तुएँ जटिल हैं लेकिन उनकी संदर्भ-गणना नहीं की जाती हैं। जब टाइप प्रणाली किसी संदर्भ-गणित वस्तु का अनुकरण करता है तो यह सामान्यतः केवल इसकी संदर्भ संख्या को बढ़ाता है जबकि एक जटिल गैर संदर्भ गणना वाली वस्तु (जैसे कि एक स्ट्रिंग) की प्रतिलिपि बनाते समय यह सामान्यतः मेमोरी आवंटित करके एक वास्तविक प्रतिलिपि बनाता है।

इस आधारिक कार्यक्षमता का उपयोग GValue को प्रयुक्त करने के लिए किया जाता है। एक प्रकार की सामान्य गणना जो टाइप प्रणाली द्वारा ज्ञात किसी भी प्रकार के मान को धारण कर सकती है। ऐसी गणना विशेष रूप से उपयोगी होती हैं जब गतिशील रूप से टाइप किए गए भाषा वातावरण के साथ अनुमान करते हैं जिसमें सभी मूल मान टाइप-टैग की गई गणना में रहते हैं।

मौलिक प्रकार

वे प्रकार जिनमें कोई संबद्ध वर्ग नहीं होता है उन्हें गैर-वर्गीकृत कहा जाता है। ये प्रकार उन सभी प्रकारों के साथ जो मूल वर्ग के किसी न किसी रूप से अनुरूप हैं, मौलिक प्रकार के रूप में जाने जाते हैं। वे प्रकार जिनसे अन्य सभी प्रकार प्राप्त होते हैं ये एक अपेक्षाकृत संवृत समुच्चय बनाते हैं। हालांकि औसत उपयोगकर्ता से अपने स्वयं के मौलिक प्रकार बनाने की संभावना नहीं की जाती है और कस्टम क्लास पदानुक्रम बनाने के लिए इसका लाभ प्राप्त किया गया है अर्थात क्लास पदानुक्रम जीओब्जेक्ट क्लास पर आधारित नहीं हैं।

जीएलआईबी 2.9.2 के अनुसार,[2] गैर-वर्गीकृत अंतर्निर्मित मौलिक प्रकार हैं:

  • एक रिक्त प्रकार, जो C के शून्यvoid (G_TYPE_NONE के अनुरूप है।
  • सी प्रोग्रामिंग के हस्ताक्षरित और अहस्ताक्षरित प्रकार char, int, long, और 64-बिट पूर्णांक (G_TYPE_CHAR, G_TYPE_UCHAR, G_TYPE_INT, G_TYPE_UINT, G_TYPE_LONG, G_TYPE_ULONG, G_TYPE_INT64, और G_TYPE_UINT64) के अनुरूप है।
  • एक बूलियन प्रकार (G_TYPE_BOOLEAN) है।
  • गणना प्रकार और फ्लैग प्रकार दोनों सी के enum प्रकार के अनुरूप हैं, लेकिन इसमें भिन्नता है कि उत्तरार्द्ध का उपयोग केवल बिट क्षेत्र (G_TYPE_ENUM और G_TYPE_FLAGS) के लिए किया जाता है।
  • सी प्रोग्रामिंग के अनुरूप एकल और दोहरा परिशुद्धता आईईईई फ्लोट के लिए float और double या (G_TYPE_FLOAT और G_TYPE_DOUBLE) है।
  • एक स्ट्रिंग प्रकार, जो C के char * (G_TYPE_STRING) के अनुरूप है।
  • एक अपारदर्शी सूचक प्रकार, जो C के void * (G_TYPE_POINTER) के अनुरूप है।

वर्गीकृत अंतर्निहित मौलिक प्रकार हैं:

  • GObjectके उदाहरणों के लिए एक आधार क्लास प्रकार मानक क्लास उत्तराधिकारिक मूल (G_TYPE_OBJECT) है।
  • आधारिक इंटरफ़ेस प्रकार आधार क्लास प्रकार के अनुरूप लेकिन मानक इंटरफ़ेस उत्तराधिकारिक मूल G_TYPE_INTERFACE का प्रतिनिधित्व करता है।
  • बॉक्सिंग संरचनाओं के लिए एक प्रकार, जिसका उपयोग साधारण मान वाली वस्तुओं या विदेशी वस्तुओं को संदर्भ-गणित "बॉक्स" G_TYPE_BOXED) में प्रयुक्त करने के लिए किया जाता है।
  • "पैरामीटर विनिर्देश वस्तु" के लिए एक प्रकार, जिसका उपयोग वस्तु गुणों G_TYPE_PARAM के लिए मेटाडेटा का वर्णन करने के लिए जीओब्जेक्ट में प्रयोग किया जाता है।

वे प्रकार जिन्हें टाइप प्रणाली द्वारा स्वचालित रूप से त्वरित किया जा सकता है तात्कालिक प्रकार कहलाते हैं। इन प्रकारों की एक महत्वपूर्ण विशेषता यह है कि किसी भी उदाहरण के पहले बाइट्स में सदैव उदाहरण के प्रकार से संबद्ध वर्ग संरचना (वर्चुअल तालिका का एक रूप) के लिए एक संकेतक होते है। इस कारण से किसी भी तात्कालिक प्रकार को वर्गीकृत किया जाना चाहिए। विरोधाभासी रूप से कोई भी गैर-वर्गीकृत प्रकार (जैसे पूर्णांक या स्ट्रिंग) गैर-तात्कालिक होना चाहिए। दूसरी ओर अधिकांश वर्गीकृत प्रकार तात्कालिक होते हैं, लेकिन कुछ, जैसे इंटरफ़ेस प्रकार तात्कालिक प्रकार नहीं होते हैं।

व्युत्पन्न प्रकार

अंतर्निहित जीओब्जेक्ट मौलिक प्रकारों से प्राप्त प्रकार सामान्यतः चार श्रेणियों में आते हैं:

सूचीबद्ध प्रकार और फ्लैग प्रकार
सामान्यतः प्रत्येक सूचीबद्ध प्रकार और प्रत्येक पूर्णांक-आधारित बिटफील्ड प्रकार (अर्थात, प्रत्येक enum प्रकार) जिसे कोई किसी प्रकार से उपयोग करना चाहता है जो वस्तु प्रणाली से संबंधित है उदाहरण के लिए वस्तु विशेषता के प्रकार के रूप में पंजीकृत होना चाहिए। प्रकार प्रणाली के साथ सामान्यतः प्रारम्भिक कोड जो इन प्रकारों को पंजीकृत करने का ध्यान रखता है, glib-mkenums नामक एक स्वचालित उपकरण द्वारा उत्पन्न किया जाता है और एक अलग फ़ाइल में संग्रहीत किया जाता है।[3]
बॉक्सिंग प्रकार
कुछ डेटा संरचनाएँ जो पूर्ण श्रेणी प्रकार (सभी ओवरहेड व्यय के साथ) बनाने के लिए बहुत सरल हैं, उन्हें अभी भी टाइप प्रणाली के साथ पंजीकृत करने की आवश्यकता हो सकती है। उदाहरण के लिए हमारे पास एक वर्ग हो सकता है जिसमें हम background-color जोड़ना चाहते हैं, जिसका मान एक संरचना का उदाहरण होना चाहिए जो struct color { int r, g, b; }. जीओब्जेक्ट को उपवर्गित करने से बचने के लिए हम इस संरचना का प्रतिनिधित्व करने के लिए एक बॉक्स प्रकार बना सकते हैं। प्रतिलिपि बनाने और मुक्त करने के लिए जीओब्जेक्ट फ़ंक्शन प्रदान कर सकते हैं। जीओब्जेक्ट सरल GLib डेटा प्रकारों को एकत्र बॉक्स प्रकार के साथ संयुक्त करता है। बॉक्सिंग प्रकारों के लिए एक अन्य उपयोग विदेशी वस्तुओं को एक टैग की गई गणना में प्रयुक्त करने के तरीके के रूप में है। जिसे टाइप सिस्टम पहचान सकता है और जान लेगा कि कैसे अनुकरण और मुक्त करना है।
अपारदर्शी सूचक प्रकार
कभी-कभी, उन वस्तुओं के लिए जिन्हें न तो प्रतिलिपि करने, न ही संदर्भ-गणना करने और न ही मुक्त करने की आवश्यकता होती है। यहां तक ​​कि एक बॉक्स प्रकार भी अतिविस्तार होगा। जबकि ऐसी वस्तुओं को केवल अपारदर्शी पॉइंटर्स G_TYPE_POINTER के रूप में मानकर जीओब्जेक्ट में उपयोग किया जा सकता है। प्रायः एक व्युत्पन्न पॉइंटर प्रकार बनाना एक अच्छा विचार है। इस तथ्य का दस्तावेजीकरण करते हुए कि पॉइंटर्स को एक विशेष प्रकार की वस्तु का संदर्भ देना चाहिए, यद्यपि इसके विषय में और कुछ नही कहा जा सकता है।
वर्ग और इंटरफ़ेस प्रकार
GObject एप्लिकेशन में अधिकांश प्रकार मूल वर्ग जीओब्जेक्ट से प्रत्यक्ष या अप्रत्यक्ष रूप से प्राप्त शब्द के सामान्य वस्तु उन्मुख अर्थ में कक्षाएं होती है। ऐसे इंटरफ़ेस भी हैं, जिनमें क्लासिक जावा-शैली इंटरफ़ेस के विपरीत कार्यान्वित प्रकार सम्मिलित हो सकते हैं। इस प्रकार जीओब्जेक्ट इंटरफेस को मिक्सिन के रूप में वर्णित किया जा सकता है।

मैसेजिंग प्रणाली

GObject मैसेजिंग प्रणाली में दो पूरक भाग क्लोजर और संकेत होते हैं।

क्लोजर
GObject क्लोजर कॉलबैक का एक सामान्यीकृत संस्करण है। C और सी++ में लिखे गए क्लोजर के साथ-साथ अपेक्षाकृत भाषाओं (जब बाइंडिंग प्रदान की जाती है) के लिए समर्थन उपस्थित है। यह (उदाहरण के लिए) पायथन और जावा में लिखे गए कोड को जीओब्जेक्ट क्लोजर के माध्यम से प्रयुक्त करने की स्वीकृति देता है।
संकेत
संकेत प्राथमिक तंत्र है जिसके द्वारा क्लोजर प्रयुक्त किया जाता है। वस्तु संकेत श्रोताओं को टाइप प्रणाली के साथ पंजीकृत करते हैं, किसी दिए गए संकेत और दिए गए क्लोजर के बीच मैपिंग निर्दिष्ट करते हैं। एक पंजीकृत संकेत के उत्सर्जन पर उस संकेत का स्थगित होना प्रयुक्त हो जाता है। जीटीके में सभी मूल जीयूआई घटनाएं (जैसे माउस गति और कीबोर्ड क्रियाएं) श्रोताओं के लिए संभावित रूप से कार्य करने के लिए जीओब्जेक्ट संकेत उत्पन्न कर सकती हैं।

वर्ग कार्यान्वयन

प्रत्येक जीओब्जेक्ट वर्ग को कम से कम दो संरचनाओं, वर्ग संरचना और अनुरोध संरचना द्वारा कार्यान्वित किया जाता है।

वर्ग संरचना
वर्ग संरचना सी++ वर्ग की व्यवहार्यता के अनुरूप है। इसका प्रारम्भ उच्च क्लास की वर्ग संरचना से होनी चाहिए। इसके बाद यह फ़ंक्शन पॉइंटर्स का एक समूह रखेगा और क्लास की प्रत्येक वर्चुअल विधि के लिए एक वर्ग-विशिष्ट चर का उपयोग वर्ग के सदस्यों का अनुकरण करने के लिए किया जा सकता है।
अनुरोध संरचना

अनुरोध संरचना जो प्रति वस्तु अनुरोध अनुकरण में सम्मिलित होती है। जिसे सुपरक्लास की अनुरोध संरचना से प्रारम्भ होना चाहिए (यह सुनिश्चित करता है कि सभी अनुरोध क्लास संरचना के लिए एक पॉइंटर से प्रारम्भ होते हैं, क्योंकि सभी मौलिक तात्कालिक प्रकार इस विशेषता को साझा करते हैं। सुपरक्लास से संबंधित डेटा के बाद संरचना सी++ सदस्य चर के अनुरूप किसी भी उदाहरण-विशिष्ट चर को धारण कर सकती है।

GObject फ्रेमवर्क में एक वर्ग को परिभाषित करना जटिल होता है, जिसके लिए बड़ी मात्रा में बॉयलरप्लेट कोड जैसे टाइप कास्टिंग मैक्रोज़ की मैन्युअल परिभाषा और अस्पष्ट प्रकार पंजीकरण की आवश्यकता होती है। इसके अतिरिक्त सी संरचना में "सार्वजनिक", "संरक्षित" या "निजी" जैसे एक्सेस संशोधक नहीं हो सकते हैं। स्पष्टीकरण प्रदान करने के लिए वर्कअराउंड का उपयोग किया जाना चाहिए। एक दृष्टिकोण निजी डेटा के लिए एक सूचक को सम्मिलित करना है। जिसे पारंपरिक रूप से अनुरोध संरचना में _priv कहा जाता है। निजी संरचना को सार्वजनिक हेडर फ़ाइल में घोषित किया जा सकता है, लेकिन केवल कार्यान्वयन फ़ाइल में परिभाषित किया जा सकता है, जिसका प्रभाव यह है कि निजी डेटा उपयोगकर्ताओं के लिए अपारदर्शी है, लेकिन कार्यान्वयनकर्ता के लिए पारदर्शी है। यदि निजी संरचना जीटाइप के साथ पंजीकृत है, तो इसे वस्तु प्रणाली द्वारा स्वचालित रूप से आवंटित किया जा सकता है। वास्तव में यदि कोई निजी डेटा की आवश्यकता होने पर प्रत्येक बार G_TYPE_INSTANCE_GET_PRIVATE का उपयोग करने को तैयार है, तो _priv पॉइंटर को सम्मिलित करना भी आवश्यक नहीं होता है।

इनमें से कुछ जटिलताओं को संबोधित करने के लिए कई उच्च-स्तरीय भाषाएँ सम्मिलित हैं जो स्रोत से स्रोत C में जीओब्जेक्ट को संकलित करती हैं। जावा प्रोग्रामिंग भाषा C शैली का उपयोग करती है और वेनिला (कंप्यूटिंग) C कोड में पूर्व-संसाधित होती है। जीओब्जेक्ट या जीओबी-2, जावा की मेमोरी मे एक टेम्पलेट विश्लेषण प्रदान करता है।

गोब्जेक्ट आत्मनिरीक्षण

  • GObject आत्मनिरीक्षण संक्षिप्त जीआईआर[4] C लाइब्रेरी जीओब्जेक्ट का उपयोग करके और भाषा बाइंडिंग सीएफ जीटीके के लिए भाषा बाइंडिंग की सूची के बीच एक विदेशी फ़ंक्शन इंटरफ़ेस मध्य परत है।

उपयोग

सी और गोब्जेक्ट के संयोजन का उपयोग कई सफल मुक्त सॉफ्टवेयर जैसे कि गनोम डेस्कटॉप, जीटीके टूलकिट और जीआईएमपी छवि मैनीपुलेशन प्रोग्राम परियोजनाओं में किया जाता है।

हालाँकि कई जीओब्जेक्ट एप्लिकेशन पूरी तरह से C में लिखे गए हैं, जीओब्जेक्ट सिस्टम कई अन्य भाषाओं जैसे सी++, जावा, रूबी, पायथन, सामान्य लिस्प और डॉटनेट/मोनो के मूल ऑब्जेक्ट सिस्टम में अच्छी तरह से मैप करता है। जिसके परिणामस्वरूप जीओब्जेक्ट फ्रेमवर्क का उपयोग करने वाले अच्छी तरह से लिखित लाइब्रेरी के लिए भाषा बाइंडिंग बनाना सामान्यतः अपेक्षाकृत दोष रहित होता है।

हालाँकि सबसे पहले C में जीओब्जेक्ट कोड लिखना अपेक्षाकृत क्रियात्मक है। लाइब्रेरी को सीखने में काफी समय लगता है और उच्च-स्तरीय वस्तु-उन्मुख भाषाओं में अनुभव वाले प्रोग्रामर को प्रायः C में जीओब्जेक्ट के साथ कार्य करना अपेक्षाकृत कठिन लगता है। उदाहरण के लिए एक उपवर्ग (यहां तक ​​कि जीओब्जेक्ट का एक उपवर्ग भी) बनाना संभव हो सकता है। बड़ी मात्रा में बॉयलरप्लेट कोड लिखने या कॉपी करने की आवश्यकता होती है।[5] हालाँकि जावा का उपयोग करना एक ऐसी भाषा जो मुख्य रूप से जीओब्जेक्ट के साथ कार्य करने के लिए डिज़ाइन की गई है और जो C में परिवर्तित होती है और जीओब्जेक्ट के साथ कार्य करने या जीओब्जेक्ट आधारित लाइब्रेरी लिखने को अच्छा बनाने की संभावना है। हालाँकि वे वास्तव में प्रथम श्रेणी की वस्तुए नहीं हैं (जीटाइप में कोई वास्तविक मेटाटाइप नहीं हैं), कक्षाएं और इंटरफेस जैसे मेटाऑब्जेक्ट रनटाइम पर जीओब्जेक्ट अनुप्रयोगों द्वारा बनायी जाती हैं और आत्मनिरीक्षण (कंप्यूटर विज्ञान) के लिए अच्छा समर्थन प्रदान करती हैं। आत्मनिरीक्षण क्षमताओं का उपयोग भाषा बाइंडिंग और ग्लेड जैसे उपयोगकर्ता इंटरफ़ेस डिज़ाइन अनुप्रयोगों द्वारा किया जाता है ताकि एक साझा लाइब्रेरी को प्रयुक्त करने जैसी वस्तुओ को करने की स्वीकृति प्राप्त हो सके जो एक जीओब्जेक्ट क्लास प्रदान करता है जो सामान्यतः ग्लेड की स्थिति में कुछ प्रकार का विजेट प्रदान करता है और फिर क्लास के सभी गुणों की एक सूची प्राप्त करता है। इस प्रकार की जानकारी और दस्तावेज़ीकरण स्ट्रिंग्स के साथ पूर्ण होता है।

अन्य ऑब्जेक्ट सिस्टम से तुलना

GObject सी प्रोग्रामिंग के लिए प्रायः पूर्ण वस्तु प्रणाली प्रदान करता है।[citation needed] इसे C-व्युत्पन्न भाषाओं जैसे सी++ और वैकल्पिक-सी प्रोग्रामिंग के विकल्प के रूप में देखा जा सकता है। हालांकि दोनों अपनी-अपनी वस्तु प्रणाली के अतिरिक्त कई अन्य सुविधाएं भी प्रदान करती हैं। सी++ और जीओब्जेक्ट के बीच एक आसानी से देखा जाने वाला अंतर यह है कि जीओब्जेक्ट (जावा की तरह) कई भाषाओ का समर्थन नहीं करता है।[6]

GObject द्वारा GLib के g_malloc () मेमोरी आवंटन फ़ंक्शन के उपयोग से प्रोग्राम मेमोरी नष्ट होने पर बिना किसी कारण के यह बाहर निकल निकल जाता है। C लाइब्रेरी के Malloc(), सी++ के नए और अन्य सामान्य मेमोरी आवंटन के विपरीत जो किसी प्रोग्राम मे एसका सामना करने या यहां तक ​​कि पूरी तरह से पुनर्प्राप्त करने की स्वीकृति देता है। बस दुर्घटनाग्रस्त हुए बिना मेमोरी की स्थितियाँ[7] इस सॉफ्टवेयर में जीओब्जेक्ट को सम्मिलित करने के विपरीत कार्य करती है जहां सीमित मेमोरी के सामने नम्यता महत्वपूर्ण है या जहां बहुत अधिक या बहुत बड़ी वस्तुओं को सामान्यतः नियंत्रित किया जाता है। G_try_new() का उपयोग तब किया जा सकता है उदाहरण के लिए जब एक बड़ी वस्तु के लिए मेमोरी आवंटन विफल होने की अधिक संभावना होती है लेकिन यह स्वीकृति नहीं दे सकता है कि आवंटन कोड में कहीं और विफल नहीं हो सकता है।[8]

इसका एक और महत्वपूर्ण अंतर यह है कि जबकि सी++ और वैकल्पिक-सी प्रोग्रामिंग अलग-अलग भाषाएं हैं तो जीओब्जेक्ट पूरी तरह से एक लाइब्रेरी है और इस प्रकार कोई नया विश्लेषण या कंपाइलर बुद्धिमत्ता प्रस्तुत नहीं करता है। उदाहरण के लिए GObjectआधारित C ​​कोड लिखते समय, स्पष्ट कास्टिंग करना प्रायः आवश्यक होता है।[citation needed] इसलिए "GObject के साथ C" जिसे साधारण C से अलग भाषा के रूप में माना जाता है। वैकल्पिक C की तरह साधारण C का एक जटिल उच्च समूह सी++ है।

उन प्लेटफ़ॉर्म पर जहां कोई मानक एबीआई नहीं है जो सभी सी++ कंपाइलरों पर कार्य करता है जो सामान्यतः स्थित नहीं है, क्योंकि सामान्यतः इटेनियम एबीआई या माइक्रोसॉफ्ट एबीआई का अनुसरण किया जाता है। एक सी++ कंपाइलर के साथ संकलित लाइब्रेरी सदैव कॉल करने में सक्षम नहीं होती है लाइब्रेरी को किसी भिन्न लाइब्रेरी के साथ संकलित किया गया है। सभी निर्यातित प्रतीकों की विशिष्टता सुनिश्चित करने के लिए संकलक विभिन्न प्रकार के नाम प्रबंधन का उपयोग करते हैं। यह आवश्यक है क्योंकि, उदाहरण के लिए, दो अलग-अलग वर्गों में समान नाम वाले सदस्य फ़ंक्शन हो सकते हैं, एक फ़ंक्शन नाम कई बार ओवरलोड हो सकता है या समान नाम वाले फ़ंक्शन अलग-अलग नामस्थानों में दिखाई दे सकते हैं, लेकिन वैकल्पिक कोड में इन ओवरलैप्स की स्वीकृति नहीं है।[citation needed] इसके विपरीत, चूंकि सी किसी भी प्रकार के ओवरलोडिंग या नेमस्पेसिंग का समर्थन नहीं करता है, सी लाइब्रेरी के लेखक सामान्यतः अपने निर्यातित नामों की वैश्विक विशिष्टता सुनिश्चित करने के लिए स्पष्ट उपसर्गों का उपयोग करते है।[citation needed] इसलिए, वस्तु-उन्मुख होने के अतिरिक्त C में लिखी गई GObjectआधारित लाइब्रेरी सदैव समान बाहरी प्रतीक नामों का उपयोग करती है फिर चाहे किसी भी कंपाइलर का उपयोग किया गया हो।

लगभग अधिक अंतर संकेतों पर जीओब्जेक्ट का महत्व है जिसे अन्य भाषाओं में घटनाएँ कहा जाता है।[citation needed] यह महत्व इस तथ्य से लिया गया है कि जीओब्जेक्ट को विशेष रूप से जीयूआई टूलकिट की आवश्यकताओ को पूरा करने के लिए डिज़ाइन किया गया था। जबकि अधिकांश वस्तु-उन्मुख भाषाओं के लिए संकेत लाइब्रेरी उपस्थित हैं, जीओब्जेक्ट की स्थिति में इसे वस्तु प्रणाली में बनाया गया है। इसी कारण से एक सामान्य जीओब्जेक्ट एप्लिकेशन गैर-GObject एप्लिकेशन की तुलना में बहुत अधिक स्थिति तक संकेत का उपयोग करता है। जिससे जीओब्जेक्ट घटकों को साधारण सी++ या जावा का उपयोग करने वाले घटकों की तुलना में बहुत अधिक स्पष्टीकरण और पुन: प्रयोज्य बना दिखाई देता है।[citation needed][according to whom?] यदि glibmm/gtkmm, ग्लिब/जीटीके के लिए आधिकारिक प्रोग्रामिंग क्रमशः सी++ का उपयोग किया जाता है, तो साधारण libsigc++ मानक सी++ का उपयोग करके अंतर्निहित जीओब्जेक्ट संकेतों के आसान उपयोग की स्वीकृति देता है। यद्यपि संकेत के अन्य कार्यान्वयन लगभग सभी प्लेटफार्मों पर उपलब्ध हैं। हालांकि कभी-कभी एक अतिरिक्त लाइब्रेरी जैसे सी++ के लिए बूस्ट संकेत-2 की आवश्यकता होती है।

यह भी देखें

संदर्भ

  1. "GObject Reference Manual".
  2. "GObject Reference Manual - Stable".
  3. "glib-mkenums, GObject Reference Manual".
  4. "आत्मनिरीक्षण, सारांश". Gnome Developer, Programming Guidelines - Specific How-Tos. Retrieved 9 August 2020.
  5. "एक नया गोब्जेक्ट कैसे परिभाषित और कार्यान्वित करें". gnome.org. Retrieved 27 July 2013.
  6. "c++ - Why Was the GObject System Created?". Stack Overflow. Retrieved 2019-11-16.
  7. "Memory Allocation: GLib Reference Manual". developer.gnome.org. Retrieved 2019-11-16.
  8. "Memory Allocation: GLib Reference Manual". developer.gnome.org. Retrieved 2019-11-17.


बाहरी संबंध