कोको (एपीआई)

Cocoa, Apple Inc. की नेटिव ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग | ऑब्जेक्ट-ओरिएंटेड अप्लिकेशन प्रोग्रामिंग अंतरफलक (API) है, जो इसके डेस्कटॉप कंप्यूटर ऑपरेटिंग सिस्टम macOS के लिए है।

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

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

आईओएस, ipadओएस, tvOS और वॉचओएस के लिए कोको टच नामक एक समान एपीआई मौजूद है, जिसमें इशारा पहचान, एनिमेशन और ग्राफिकल नियंत्रण तत्वों का एक अलग सेट शामिल है। इसका उपयोग Apple उपकरणों जैसे iPhone, iPod Touch, iPad, Apple TV और Apple Watch के लिए एप्लिकेशन सॉफ़्टवेयर में किया जाता है।

इतिहास
Cocoa 1980 और 1990 के दशक में NeXT द्वारा विकसित NeXTSTEP और OpenStep प्रोग्रामिंग वातावरण से कई सॉफ्टवेयर ढांचा (मुख्य रूप से ऐप किट और फाउंडेशन किट) के वंश को जारी रखता है। Apple ने दिसंबर 1996 में NeXT का अधिग्रहण किया, और बाद में Rhapsody (ऑपरेटिंग सिस्टम) ऑपरेटिंग सिस्टम पर काम करना शुरू कर दिया, जो OpenStep का प्रत्यक्ष उत्तराधिकारी था। ब्लू बॉक्स नामक क्लासिक मैक ओएस अनुप्रयोगों के लिए इसका अनुकरण आधार होना था। पुस्तकालयों और बाइनरी समर्थन के ओपनस्टेप आधार को येलो बॉक्स कहा गया। रैप्सोडी मैक ओएस एक्स में विकसित हुआ, और येलो बॉक्स कोको बन गया। इस प्रकार, कोको कक्षाएं एनएस अक्षरों से शुरू होती हैं, जैसे एनएसएसटींग या एनएसएआरएआरई। ये OpenStep फ्रेमवर्क, NeXTSTEP के लिए मूल स्वामित्व शब्द के लिए हैं। OpenStep को विकसित करने में किए गए अधिकांश कार्य Mac OS X को विकसित करने के लिए लागू किए गए थे, कोको सबसे अधिक दिखाई देने वाला भाग था। हालाँकि, मतभेद मौजूद हैं। उदाहरण के लिए, नेक्स्टस्टेप और ओपनस्टेप ने टेक्स्ट और ग्राफिक्स के ऑन-स्क्रीन डिस्प्ले के लिए पोस्टस्क्रिप्ट प्रदर्शित करें का इस्तेमाल किया, जबकि कोको एप्पल के क्वार्ट्ज (ग्राफिक्स परत) पर निर्भर करता है (जो संवहन दस्तावेज़ स्वरूप (पीडीएफ) इमेजिंग मॉडल का उपयोग करता है, लेकिन इसकी अंतर्निहित तकनीक का नहीं)। कोको में इंटरनेट समर्थन का एक स्तर भी है, जिसमें NSURL और WebKit HTML कक्षाएं और अन्य शामिल हैं, जबकि OpenStep के पास NSFileHandle क्लासेस और बर्कले सॉकेट्स के माध्यम से प्रबंधित नेटवर्क कनेक्शन के लिए केवल अल्पविकसित समर्थन था।

परिणामी सॉफ्टवेयर ढांचे को शीघ्रता के लिए कोको नाम मिला, क्योंकि नाम पहले से ही Apple द्वारा ट्रेडमार्क किया गया था। नाम के इस वर्तमान उपयोग से पहले कई वर्षों तक, Apple के कोको ट्रेडमार्क की उत्पत्ति बच्चों के लिए एक मल्टीमीडिया प्रोजेक्ट डिज़ाइन एप्लिकेशन के नाम के रूप में हुई थी। एप्लिकेशन किडसिम नाम के तहत Apple उन्नत प्रौद्योगिकी समूह में स्टेजकास्ट क्रिएटर # इतिहास था, और फिर इसका नाम बदल दिया गया और कोको के रूप में ट्रेडमार्क किया गया। पीटर जेन्सेन द्वारा गढ़ा गया नाम, जिसे Apple के लिए कोको विकसित करने के लिए काम पर रखा गया था, का उद्देश्य बच्चों के लिए जावा को विकसित करना था, क्योंकि यह वेब पेजों में एम्बेडेड था। इस सॉफ़्टवेयर ढांचे के लिए एक नया ट्रेडमार्क पंजीकृत करते समय होने वाली देरी से बचने के लिए ट्रेडमार्क, और इस प्रकार कोको नाम का पुन: उपयोग किया गया था। स्टीव जॉब्स की एप्पल में वापसी के बाद हुए एक युक्तिकरण (अर्थशास्त्र) में से एक में मूल कोको कार्यक्रम को एप्पल में बंद कर दिया गया था। इसके बाद इसे तीसरे पक्ष को लाइसेंस दिया गया और 2014 तक स्टेजकास्ट निर्माता के रूप में विपणन किया गया।

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

के साथ बनाई गई एक नई आवंटित वस्तु  या   एक की गिनती बरकरार है। उस वस्तु को भेजना a   मैसेज भेजने के दौरान रिटेन काउंट बढ़ा देता है a   संदेश रिटेन काउंट को घटाता है। जब किसी ऑब्जेक्ट की रिटेन काउंट शून्य तक पहुँच जाता है, तो इसे C++ डिस्ट्रक्टर के समान प्रक्रिया द्वारा हटा दिया जाता है।   बुलाए जाने की गारंटी नहीं है।

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

2011 में, एलएलवीएम कंपाइलर ने ऑटोमैटिक रेफरेंस काउंटिंग (एआरसी) की शुरुआत की, जो ऑब्जेक्टिव-सी सोर्स कोड का स्थिर विश्लेषण करके और आवश्यकतानुसार संदेशों को बनाए रखने और जारी करने के लिए पारंपरिक कचरा कलेक्टर को बदल देता है।

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


 * फाउंडेशन किट (फाउंडेशन), पहली बार NeXTSTEP 3 पर एंटरप्राइज़ ऑब्जेक्ट फ्रेमवर्क में दिखाई दिया। इसे OpenStep कार्य के हिस्से के रूप में विकसित किया गया था, और बाद में OpenStep के AppKit के लिए आधार बन गया जब वह सिस्टम 1994 में जारी किया गया था। macOS पर, Foundation Core Foundation पर आधारित है। फाउंडेशन एक सामान्य वस्तु-उन्मुख पुस्तकालय है जो स्ट्रिंग (कंप्यूटर विज्ञान) और मूल्य हेरफेर, कंटेनर (डेटा संरचना) और पुनरावृत्ति, वितरित कंप्यूटिंग, घटना पाश (रन लूप) और अन्य फ़ंक्शन प्रदान करता है जो सीधे ग्राफिकल यूज़र इंटरफ़ेस से बंधे नहीं हैं। एनएस उपसर्ग, सभी वर्गों और ढांचे में स्थिर (प्रोग्रामिंग) के लिए उपयोग किया जाता है, कोको की ओपेनस्टेप विरासत से आता है, जिसे नेक्स्ट और सन माइक्रोसिस्टम्स द्वारा संयुक्त रूप से विकसित किया गया था।
 * एप्लिकेशन किट (AppKit) सीधे मूल NeXTSTEP एप्लिकेशन किट से ली गई है। इसमें कोड प्रोग्राम शामिल हैं जिनका उपयोग ग्राफिकल यूजर इंटरफेस बनाने और बातचीत करने के लिए किया जा सकता है। ऐपकिट फाउंडेशन के शीर्ष पर बनाया गया है, और उसी एनएस उपसर्ग का उपयोग करता है।
 * कोर डेटा फाउंडेशन और कोको के साथ शामिल ऑब्जेक्ट पर्सिस्टेंस फ्रेमवर्क है और Cocoa.h में पाया जाता है।

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

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


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

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

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

Mac OS X 10.4 के आगमन के साथ, Apple ने कोर डेटा फ्रेमवर्क की शुरुआत करके इस नींव को और आगे बढ़ाया, जो मॉडल परत में परिवर्तन ट्रैकिंग और दृढ़ता को मानकीकृत करता है। असल में, ढांचा एप्लिकेशन डेटा में परिवर्तन करने की प्रक्रिया को बहुत सरल करता है, जब आवश्यक हो तो परिवर्तनों को पूर्ववत करता है, डेटा को डिस्क में सहेजता है, और इसे वापस पढ़ता है।

सभी तीन MVC डोमेन के लिए फ्रेमवर्क समर्थन प्रदान करने में, Apple का लक्ष्य बॉयलरप्लेट या ग्लू कोड की मात्रा को कम करना है, जिसे डेवलपर्स को एप्लिकेशन-विशिष्ट सुविधाओं पर समय बिताने के लिए संसाधनों को मुक्त करके लिखना है।

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

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

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

लेट स्टैटिक बाइंडिंग स्टैटिक और डायनेमिक बाइंडिंग के बीच कहीं बाइंडिंग का एक प्रकार है। प्रोग्राम चलाने से पहले नामों की बाइंडिंग को स्टेटिक (प्रारंभिक) कहा जाता है; प्रोग्राम रन के रूप में निष्पादित बाइंडिंग गतिशील (देर से या वर्चुअल) हैं।

समृद्ध वस्तुएं
कोको की सबसे उपयोगी विशेषताओं में से एक शक्तिशाली आधार वस्तु है जो सिस्टम आपूर्ति करता है। उदाहरण के तौर पर, फाउंडेशन कक्षाओं पर विचार करें  और , जो यूनिकोड स्ट्रिंग (कंप्यूटर विज्ञान) प्रदान करते हैं, और   AppKit में सिस्टम, जो प्रोग्रामर को GUI में स्ट्रिंग ऑब्जेक्ट रखने की अनुमति देता है।

और इसके संबंधित वर्गों का उपयोग स्ट्रिंग्स को प्रदर्शित करने और संपादित करने के लिए किया जाता है। शामिल वस्तुओं का संग्रह एक आवेदन को एक साधारण एकल-पंक्ति पाठ प्रविष्टि क्षेत्र से पूर्ण बहु-पृष्ठ, बहु-स्तंभ पाठ लेआउट स्कीमा में पूर्ण पेशेवर टाइपोग्राफी सुविधाओं जैसे कर्निंग, लिगचर (टाइपोग्राफी), चलने वाले पाठ के साथ कुछ भी लागू करने की अनुमति देता है। मनमाने आकार के आसपास, ROTATION, पूर्ण यूनिकोड समर्थन, और स्थानिक एंटी-अलियासिंग | एंटी-अलियास ग्लिफ़ रेंडरिंग। अनुच्छेद लेआउट स्वचालित रूप से या उपयोगकर्ता द्वारा नियंत्रित किया जा सकता है, एक अंतर्निहित शासक वस्तु का उपयोग करके जिसे किसी भी पाठ दृश्य से जोड़ा जा सकता है। भाषा शब्दकोशों के सिस्टम-वाइड सेट का उपयोग करते हुए, वर्तनी जाँच स्वचालित है। असीमित पूर्ववत/फिर से करें समर्थन अंतर्निहित है। केवल अंतर्निहित सुविधाओं का उपयोग करके, कोड की 10 पंक्तियों के रूप में एक पाठ संपादक एप्लिकेशन लिख सकता है। नए कंट्रोलर ऑब्जेक्ट के साथ, यह शून्य की ओर गिर सकता है। जब एक्सटेंशन की आवश्यकता होती है, तो कोको का ऑब्जेक्टिव-सी का उपयोग इसे एक सीधा काम बनाता है। ऑब्जेक्टिव-सी में की अवधारणा शामिल है कैटेगरी, जो मौजूदा क्लास को इन-प्लेस संशोधित करने की अनुमति देता है। ढांचे में मूल कक्षाओं में किसी भी बदलाव के बिना, या यहां तक ​​​​कि इसके स्रोत तक पहुंच के बिना किसी श्रेणी में कार्यक्षमता को पूरा किया जा सकता है। अन्य सामान्य भाषाओं में, इसी कार्य के लिए अतिरिक्त सुविधाओं का समर्थन करने के लिए एक नया उपवर्ग प्राप्त करने की आवश्यकता होती है, और फिर मूल वर्ग के सभी उदाहरणों को नए उपवर्ग के उदाहरणों से बदलना पड़ता है।

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

Apple वर्ल्डवाइड डेवलपर्स कॉन्फ्रेंस (WWDC) 2014 में, Apple ने स्विफ्ट (प्रोग्रामिंग लैंग्वेज) नाम की एक नई प्रोग्रामिंग लैंग्वेज पेश की, जिसका उद्देश्य ऑब्जेक्टिव-सी को बदलना है।

ऐप्पलस्क्रिप्टओबीजेसी
मूल रूप से, AppleScript Studio का उपयोग सरल कोको अनुप्रयोगों को विकसित करने के लिए किया जा सकता था। हालाँकि, हिम तेंदुए के रूप में, इसे पदावनत कर दिया गया है। इसे AppleScriptObjC से बदल दिया गया, जो कोको फ्रेमवर्क का उपयोग करते हुए AppleScript में प्रोग्रामिंग की अनुमति देता है।

अन्य बंधन
कोको प्रोग्रामिंग वातावरण को PasCocoa, पीओओबीजेसी, कैमलबोन्स, RubyCocoa, और डी (प्रोग्रामिंग भाषा) / ऑब्जेक्टिव-सी ब्रिज जैसे भाषा बंधन की सहायता से अन्य उपकरणों का उपयोग करके एक्सेस किया जा सकता है।

अन्य भाषाओं के लिए उपलब्ध तृतीय-पक्ष बाइंडिंग में AppleScript, Clozure CL, Monobjc और NObjective (C Sharp (प्रोग्रामिंग भाषा)|C#), Cocoa Sharp|Cocoa# (CLI), Cocodao and D (प्रोग्रामिंग भाषा)/Objective-C ब्रिज शामिल हैं। LispWorks, Object Pascal, CamelBones (Perl), PyObjC (Python (प्रोग्रामिंग भाषा)), FPC PasCocoa (Lazarus (IDE) और Free Pascal), RubyCocoa (रूबी (प्रोग्रामिंग भाषा))। MacRuby नाम की एक रूबी भाषा का कार्यान्वयन, जो एक पुल तंत्र की आवश्यकता को दूर करता है, पूर्व में Apple द्वारा विकसित किया गया था, जबकि Nu (प्रोग्रामिंग भाषा) एक लिस्प (प्रोग्रामिंग भाषा) जैसी भाषा है जो ऑब्जेक्टिव-सी ऑब्जेक्ट मॉडल का सीधे उपयोग करती है, और इस प्रकार बंधन की आवश्यकता के बिना कोको ढांचे का उपयोग कर सकते हैं।

अन्य कार्यान्वयन
कोको ढांचे के प्रमुख हिस्सों के खुले स्रोत कार्यान्वयन भी हैं, जैसे जीएनयूस्टेप और कोकोट्रॉन, जो Microsoft Windows और Linux जैसे अन्य ऑपरेटिंग सिस्टम को लक्षित करने के लिए क्रॉस-प्लेटफॉर्म कोको एप्लिकेशन डेवलपमेंट की अनुमति देता है।

यह भी देखें
• Carbon (API)

• GNUStep

• Objective-C

• Xcode

• iOS SDK

• Interface Builder

• Aqua (user interface)

• Rosetta (software)

• XNU

• Quartz (graphics layer)

• X11

• QuickDraw

• SIMBL

• Swift (programming language)

ग्रन्थसूची

 * Aaron Hillegass: Cocoa Programming for Mac OS X, Addison-Wesley, 3rd Edition 2008, Paperback, ISBN 0-321-50361-9.
 * Stephen Kochan: Programming in Objective-C, Sams, 1st Edition 2003, Paperback, ISBN 0-672-32586-1.
 * Michael Beam, James Duncan Davidson: Cocoa in a Nutshell, O'Reilly, 1st Edition 2003, Paperback, ISBN 0-596-00462-1.
 * Erick Tejkowski: Cocoa Programming for Dummies, 1st Edition 2003, Paperback, ISBN 0-7645-2613-8.
 * Paris Buttfield-Addison, Jon Manning: Learning Cocoa with Objective-C, O'Reilly, 3rd Edition 2012, Paperback, ISBN 978-1-4493-1849-9.
 * Scott Anguish, Erik M. Buck, Donald A. Yacktman: Cocoa Programming, Sams, 1st Edition 2002, Paperback, ISBN 0-672-32230-7.
 * Erik M. Buck, Donald A. Yacktman: Cocoa Design Patterns, Addison-Wesley Professional, 1st Edition 2009, Paperback, ISBN 978-0321535023
 * Bill Cheeseman: Cocoa Recipes for Mac OS X, Peachpit Press, 1st Edition 2002, Paperback, ISBN 0-201-87801-1.
 * Andrew Duncan: Objective-C Pocket Reference, O'Reilly, 1st Edition 2002, Paperback, ISBN 0-596-00423-0.
 * Andrew Duncan: Objective-C Pocket Reference, O'Reilly, 1st Edition 2002, Paperback, ISBN 0-596-00423-0.

बाहरी संबंध

 * Mac Developer Library, Cocoa Layer, Apple's documentation
 * iDevApps, Mac programming forum
 * Cocoa Dev Central
 * Cocoa Dev
 * Stack Overflow: Cocoa
 * Stack Overflow: Cocoa