Кіріспе
MacOS фреймворкі
Cocoa – Apple компаниясының десктоптық операциялық жүйесі macOS үшін жасалған, нысанға бағытталған қолданбалық бағдарламалау интерфейсі (API). Cocoa құрамына Foundation Kit, Application Kit және Core Data фреймворктері кіреді, олар Cocoa.h хэдер файлында және оларда қамтылған кітапханалар мен фреймворктерде, мысалы C стандартты кітапханасы мен Objective C орындалу ортасында ұсынылған. Cocoa қолданбалары әдетте Apple ұсынған әзірлеу құралдарын, атап айтқанда Xcode (бұрынғы Project Builder) және Interface Builder (қазіргі Xcode құрамында) пайдалана отырып, Objective C немесе Swift бағдарламалау тілдерінде әзірленеді. Дегенмен, Cocoa бағдарламалау ортасына басқа құралдар арқылы да қол жеткізуге болады. Сондай-ақ, Objective C Cocoa бағдарламаларын қарапайым мәтіндік редакторда жазып, оларды командалық жолдан немесе makefile-дан GNU Compiler Collection (GCC) немесе Clang арқылы қолмен құрастыруға болады. Соңғы пайдаланушылар үшін Cocoa қолданбалары – Cocoa бағдарламалау ортасын пайдаланып жазылған қолданбалар. Мұндай қолданбалар көбінесе таныс интерфейске ие, себебі Cocoa бағдарламалау ортасы көптеген стандартты UI элементтерін (мысалы, батырмалар, прокрутка тақталары және т.б.) ұсынады және Apple-дің адам-машина интерфейсі талаптарына сәйкес келу үшін қолданбаның көптеген аспектілерін автоматтандырады. iOS, iPadOS, tvOS және watchOS үшін Cocoa Touch деп аталатын ұқсас API бар, ол қол жестілерін тану, анимация және басқа графикалық басқару элементтерін қамтиды. Ол iPhone, iPod Touch, iPad, Apple TV және Apple Watch сияқты Apple құрылғылары үшін қолданбаларда қолданылады.
Тарих
Cocoa NeXT-тің 1980 және 1990 жылдары жасаған NeXTSTEP және OpenStep бағдарламалау орталарынан бірнеше бағдарламалық құралдардың (негізінен App Kit және Foundation Kit) дәстүрін жалғастырады. Apple компаниясы NeXT-ті 1996 жылдың желтоқсанында сатып алды, содан кейін OpenStep-тің тікелей мұрагері болатын Rhapsody операциялық жүйесін жасауға кірісті. Бұл классикалық Mac OS қолданбалары үшін Blue Box деп аталған эмуляция базасын қамтуы тиіс еді. OpenStep кітапханаларының базасы мен бинарлық қолдауы Yellow Box деп аталды. Rhapsody Mac OS X-ке айналды, ал Yellow Box Cocoa-ға айналды. Сондықтан, Cocoa кластары NS әріптерімен басталады, мысалы NSString немесе NSArray. Бұл OpenStep фреймворкіне арналған бастапқы, эксклюзивті NeXTSTEP атауына сілтеме жасайды. OpenStep-ті дамытуға жұмсалған көптеген жұмыстар Mac OS X-ті дамытуға қолданылды, Cocoa осы процестің ең көрінетін бөлігі болды. Дегенмен, айырмашылықтар бар. Мысалы, NeXTSTEP және OpenStep мәтін мен графиканы экранға шығару үшін Display PostScript-ті пайдаланды, ал Cocoa Apple-дің Quartz-қа тәуелді (ол Portable Document Format (PDF) бейнелеу моделін қолданады, бірақ оның негізгі технологиясы емес). Cocoa-да NSURL және WebKit HTML кластары сияқты интернеттік қолдау деңгейі бар, ал OpenStep-те NSFileHandle кластары және Berkeley сокеттері арқылы басқарылатын желілік қосылымдарға қарапайым қолдау ғана болды. API құралдар жиынтығы бастапқыда "Сары қорап" деп аталды және Apple-дің тіркелген тауарлық белгісі болып табылатын Cocoa деп қайта аталды. Apple-дің Cocoa тауарлық белгісі балаларға арналған мультимедиалық жобаларды жобалауға арналған бағдарламаның атауы ретінде пайда болды. Атау веб-беттерге енгізілгендіктен, "жас Java" дегенді білдіруі тиіс еді. Бастапқы "Cocoa" бағдарламасы Стив Джобс Apple-ге оралғаннан кейін тоқтатылды. Ол кезде Java компания үшін маңызды бағыт болды, сондықтан "Cocoa" "Сары қораптың" жаңа атауы ретінде таңдалды, себебі ол жергілікті Objective-C қолданысына қоса, көпірлік қабат арқылы Java-дан да қолжетімді болды. Apple Cocoa Java көпіріне қолдауды тоқтатқанмен, атау қолданыла берді және тіпті Cocoa Touch API үшін де пайдаланылды.
Жадты басқару
Cocoa ортасының бір ерекшелігі — динамикалық түрде бөлінген жадты басқару мүмкіндігі. Foundation Kit-тің NSObject класы, одан көптеген кластар, сатушылар және пайдаланушылар шығарылады, жадты басқару үшін сілтемелік санау схемасын іске асырады. NSObject түбір класынан алынған нысандар retain және release хабарламаларына жауап береді және retain санын сақтайды. retainCount деп аталатын әдіс бар, бірақ оның атауына қарамастан, әдетте нысанның нақты retain санын қайтармайды. Ол негізінен жүйелік деңгейдегі мақсаттар үшін қолданылады. Apple оны қолмен шақыруды ұсынбайды. alloc немесе copy арқылы жаңадан құрылған нысанның retain саны біреуге тең болады. Осы нысанға retain хабарламасын жіберу retain санын арттырады, ал release хабарламасын жіберу retain санын азайтады. Нысанның retain саны нөлге жеткенде, ол C++ деструкторына ұқсас процедура арқылы босатылады. dealloc шақырылатынына кепілдік жоқ. Objective C 2.0 нұсқасынан бастап, Objective C орындалу ортасы міндетті емес және Автоматты Сілтемелік Санау (ARC) пайдасына ескірген қоқыс жинаушыны іске қосты. Бұл модельде, "retain" және "release" сияқты Cocoa сілтемелік санау операциялары операциясыз күйге келтірілді. Objective C 2.0-ның iOS нұсқасында қоқыс жинаушы жоқ. Objective C-дегі қоқыс жинау төмен приоритеттік фонондық жинақта жұмыс істейді және пайдаланушы тәжірибесін жауапты ету мақсатында Cocoa пайдаланушы оқиғаларында тоқтатылуы мүмкін. Ескі қоқыс жинаушы Mac OS X 10.13 нұсқасында әлі де қолжетімді, бірақ Apple ұсынған ешбір қолданба оны пайдаланбайды. 2011 жылы LLVM компиляторы Автоматты Сілтемелік Санауды (ARC) енгізді, ол дәстүрлі қоқыс жинаушының орнын Objective C бастапқы кодының статикалық талдауын жүргізу және қажет болған жағдайда retain және release хабарламаларын қосу арқылы алмастырады.
Негізгі жүйелер
Cocoa үш Objective C объект кітапханасынан – фреймворктерден тұрады. Фреймворктер функциялық тұрғыдан ортақ кітапханаларға ұқсас, олар бағдарламаның адрестік кеңістігіне орындалу кезінде динамикалық түрде жүктелетін компиляцияланған объектілер, бірақ фреймворктерге қосымша ресурстар, бас файлдар және құжаттама да кіреді. Cocoa фреймворктері белгілі бір типтегі жиынтық ретінде іске асырылады, онда жоғарыда аталған элементтер стандартты орындарда орналасқан. Foundation Kit (Foundation) алғаш рет Enterprise Objects Framework-те NeXTSTEP 3-те пайда болды. Ол OpenStep жұмысының бөлігі ретінде әзірленді және кейіннен 1994 жылы бұл жүйе шығарылғанда OpenStep AppKit-тің негізіне айналды. macOS жүйесінде Foundation Core Foundation-ға негізделген. Foundation – бұл жалпы нысанға бағытталған кітапхана, ол жолдар мен мәндерді өңдеу, контейнерлер мен итерация, үлестірілген есептеулер, оқиға циклдары (жүргізу циклдары) және графикалық пайдаланушы интерфейсіне тікелей байланысты емес басқа да функцияларды қамтиды. Фреймворктегі барлық сыныптар мен тұрақтылар үшін қолданылатын "NS" префиксі, NeXT және Sun Microsystems бірлесіп әзірлеген Cocoa-ның OPENSTEP мұрасынан шыққан. Application Kit (AppKit) түпнұсқа NeXTSTEP Application Kit-тен тікелей тараған. Ол графикалық пайдаланушы интерфейстерін құру және олармен өзара әрекеттесу үшін қолданылатын кодты қамтиды. AppKit Foundation-ның үстіне салынған және сол NS префиксін пайдаланады. Core Data – Foundation және Cocoa-да кездесетін объектінің тұрақтылығын қамтамасыз ететін жүйе. h. бірақ кеш байланыс бір таңдауыштың әртүрлі іске асырылымдарға сілтеме жасауына мүмкіндік береді. Осыған ұқсас, Cocoa негізгі құндылықты кодтау (KVC) деп аталатын деректерді өңдеудің кең таралған әдісін ұсынады. Бұл объектінің деректерін немесе қасиеттерін аты бойынша орындалу кезінде іздеуге немесе өзгертуге мүмкіндік береді. Қасиеттің аты құндылықтың кілті ретінде әрекет етеді. Дәстүрлі тілдерде мұндай кеш байланыс мүмкін емес. KVC дизайнның үлкен икемділігіне әкеледі. Объектінің түрін білудің қажеті жоқ, бірақ KVC көмегімен оның кез келген қасиетін табуға болады. Сонымен қатар, осы жүйені кеңейту арқылы, Cocoa терминдерімен негізгі құндылықты бақылау (KVO) арқылы автоматты түрде қайтару және кері қайтару қолдауы қамтамасыз етіледі. Кештік статикалық байланыс – статикалық және динамикалық байланыс арасындағы байланыстың бір түрі. Бағдарламаны іске қосу алдында атауларды байланыстыру статикалық (ерте) деп аталады; бағдарлама іске қосылған кезде орындалатын байланыстар динамикалық (кеш немесе виртуалды) болып табылады.
Бай заттар
Коконың ең пайдалы мүмкіндіктерінің бірі – жүйе ұсынатын қуатты базалық объектілер. Мысал ретінде, Unicode тізбектерін қамтамасыз ететін NSString және NSAttributedString Foundation кластарын, сондай-ақ AppKit-тегі NSText жүйесін қарастырайық, ол бағдарламашыға GUI-ге тізбек объектілерін орналастыруға мүмкіндік береді. NSText және оған қатысты кластар тізбектерді көрсету және өңдеу үшін қолданылады. Бұл объектілер жиынтығы қолданбаға қарапайым біржолды мәтіндік енгізу жолынан бастап, толық көп беттік, көп бағанды мәтіндік макет схемасын жасауға мүмкіндік береді, сонымен қатар кернинг, лигатуралар, кез келген пішінге қарай мәтінді орналастыру, бұру, толық Unicode қолдауы және антиалиастингпен глифтерді көрсету сияқты толық кәсіби типографиялық мүмкіндіктерге ие болады. Абзацтардың макетін автоматты түрде немесе пайдаланушы кез келген мәтін көрінісіне тіркелетін кіріктірілген "сызық өлшегіш" объектісі арқылы басқаруға болады. Емле тексеру жүйелік тілдік сөздіктерді пайдаланып автоматты түрде жүзеге асырылады. Шексіз кері қайтару/қайта жасау мүмкіндігі орнатылған. Тек кіріктірілген мүмкіндіктерді пайдаланып, 10 жол кодтан аспайтын мәтіндік редактор бағдарламасын жазуға болады. Жаңа басқарушы объектілермен бұл көрсеткіш нөлге жуық болуы мүмкін. Егер кеңейту қажет болса, Cocoa-ның Objective-C-ді пайдалануы осы міндетті оңайлатады. Objective-C "санаттар" тұжырымын қамтиды, ол қолданыстағы класты өзгертуге мүмкіндік береді. Функционалдылықты бастапқы кластарға ешқандай өзгеріс енгізбей, тіпті оның бастапқы кодына қол жеткізбестен, бір категорияда жүзеге асыруға болады. Басқа көптеген бағдарламалау тілдерінде осы міндетті орындау үшін қосымша мүмкіндіктерді қолдайтын жаңа кіші класс құру және бастапқы кластың барлық экземплярларын жаңа кіші кластың экземплярларымен ауыстыру қажет.
Орындау және міндетті түрде жүзеге асыру
Cocoa фреймворктері Objective-C тілінде жазылған. Cocoa фреймворктері үшін Java байланыстары (Java көпірі деп аталады) Objective-C тілін көбірек таралған тілмен алмастыру мақсатымен ұсынылды, бірақ бұл байланыстар Cocoa әзірлеушілерінің арасында кең қолданыс таппады, ал Cocoa-ның хабар алмасу семантикасы Java сияқты статикалық түрде терілген тілге тиімді аударылмады. Cocoa-ның орындалу кезінде байланыс жасау қажеттігі Cocoa-ның көптеген маңызды мүмкіндіктері Java-да қолжетімді болмайтынын білдіреді. 2005 жылы Apple Java көпірінің қолданудан шығарылатынын хабарлады, яғни macOS-тың 10.4 нұсқасынан кейін Cocoa-ға қосылған жаңа мүмкіндіктер Cocoa Java бағдарламалау интерфейсіне енгізілмейді. 2014 жылғы Apple Worldwide Developers Conference (WWDC) конференциясында Apple Objective-C тілін алмастыруға бағытталған Swift деп аталатын жаңа бағдарламалау тілін таныстырды.
AppleScriptObjC дегеннің атауы
Бастапқыда AppleScript Studio қарапайым Cocoa қолданбаларын жасауға қолданылуы мүмкін еді. Бірақ, Snow Leopard нұсқасынан бастап ол қолданудан тоқтатылды. Оның орнына AppleScriptObjC келді, ол AppleScript тілінде бағдарламалауға және Cocoa фреймворктерін пайдалануға мүмкіндік береді.
Басқа байланыстар
Какао бағдарламалау ортасына PasCocoa, PyObjC, CamelBones, RubyCocoa және D/Objective C Bridge сияқты көпірлер арқылы басқа құралдармен де қол жеткізуге болады. Басқа тілдер үшін үшінші тараптан қолжетімді байлаулар: AppleScript, Clozure CL, Monobjc және NObjective (C#), Cocoa# (CLI), Cocodao, D/Objective C Bridge, LispWorks, Object Pascal, CamelBones (Perl), PyObjC (Python), FPC PasCocoa (Lazarus және Free Pascal), RubyCocoa (Ruby). Бұрын Apple компаниясы MacRuby деп аталатын Ruby тілінің нұсқасын жасады, ол көпірге мұқтаж болмайды. Nu тілі болса, Objective C объект моделін тікелей пайдаланатын Lisp-ке ұқсас тіл, сондықтан Cocoa фреймворктерін байлаусыз қолдана алады.
Басқа іске асырулар
Сонымен қатар, Cocoa framework-тің маңызды бөліктерінің ашық кодты нұсқалары бар, мысалы GNUstep және Cocotron, олар Cocoa қолданбаларын жасауға мүмкіндік береді және оларды Microsoft Windows және Linux сияқты басқа операциялық жүйелерде де қолдануға болады. Бұл платформааралық әзірлеуді қамтамасыз етеді.