Cacao

Cocoa (din  engleză  -  „ cocoa ”) este un API orientat pe obiecte pentru sistemul de operare macOS de la Apple . Este unul dintre cele cinci API-uri principale disponibile în Mac OS X - Cocoa, Carbon , Toolbox (pentru rularea aplicațiilor mai vechi Mac OS 9 ), POSIX și Java . Limbi precum Perl , Python și Ruby nu sunt considerate limbi majore, deoarece nu există încă multe aplicații serioase pentru Mac OS X scrise în ele.

Aplicațiile care folosesc Cocoa sunt de obicei dezvoltate folosind mediul de dezvoltare Xcode de la Apple (numit anterior Project Builder ) și Interface Builder folosind limbaje de programare : C , Objective-C și Swift . Cu toate acestea, mediul Cocoa este disponibil și atunci când se dezvoltă în alte limbi, cum ar fi Ruby , Python și Perl , folosind bibliotecile de link ( MacRuby , PyObjC și , respectiv, CamelBones ). De asemenea, este posibil să scrieți programe Objective-C Cocoa într-un editor de text obișnuit și să le compilați manual folosind GCC sau GNUstep makescripts .

Din punctul de vedere al utilizatorului final , aplicațiile Cocoa sunt aplicații scrise folosind mediul de programare Cocoa. Astfel de aplicații au, de obicei, un aspect și o senzație distinctă, deoarece acest mediu face mult mai ușoară suportarea Ghidurilor Apple pentru interfața umană.

Istoria cacaoului

Cocoa este o continuare a mediilor software NeXTSTEP și OPENSTEP care au fost dezvoltate de NeXT la sfârșitul anilor 1980. Apple a achiziționat NeXT în decembrie 1996 și a început să lucreze la sistemul de operare Rhapsody , care urma să fie succesorul direct al OPENSTEP. Trebuia să includă așa-numita „Blue Box” ( Blue Box ), pentru a oferi emularea aplicațiilor Mac OS . Baza bibliotecii și suportul pentru formatul de fișier executabil OPENSTEP s-a numit „Yellow Box” ( Yellow Box ). Rhapsody a evoluat în Mac OS X și Yellow Box a devenit Cocoa. Ca rezultat, numele claselor Cocoa încep cu literele NS (pentru NeXTStep [1] ): NSString, NSArray etc.

Majoritatea codului scris pentru OPENSTEP a intrat în Cocoa și Mac OS X, dar există unele diferențe. De exemplu, NeXTSTEP și OPENSTEP au folosit tehnologia Display PostScript pentru a afișa text și grafică pe ecran , în timp ce Cocoa folosește sistemul Quartz de la Apple (care folosește același model de imagine ca PDF ). În plus, Cocoa are suport pentru Internet, cum ar fi clasa NSURL și clasele WebKit pentru lucrul cu HTML , în timp ce OPENSTEP avea doar suport limitat pentru lucrul cu conexiuni de rețea folosind clasa NSFileHandle și socket-urile Berkeley.

Anterior, numele de marcă „Cocoa” era folosit ca denumire a unei aplicații care permite copiilor să creeze proiecte multimedia. Cunoscută inițial ca KidSim , această aplicație este acum deținută de o terță parte și este marcată ca Stagecast Creator . Încetarea suportului pentru program a fost realizată în conformitate cu raționalizarea care a urmat revenirii lui Steve Jobs la Apple. Vechea denumire a fost refolosită pentru a evita o nouă întârziere în înregistrarea mărcii comerciale , iar Stagecast a fost de acord să dezvolte fostul Cocoa sub noul nume.

Managementul memoriei

Una dintre caracteristicile mediului Cocoa este un mecanism de gestionare a memoriei alocate dinamic. Clasa NSObject, din care sunt derivate majoritatea claselor Cocoa, atât standard, cât și personalizate, implementează un mecanism de numărare a referințelor pentru gestionarea memoriei . Obiectele derivate din NSObject răspund la mesaje retainși releasestochează numărul de referințe, care poate fi găsit prin trimiterea unui mesaj către obiect retainCount. Un obiect nou creat folosind metodele allocsau copyare un număr de referințe de unu. Trimiterea unui mesaj către un obiect retaincrește numărul de referințe, iar trimiterea unui mesaj release îl scade. Când numărul de referințe ajunge la zero, obiectul este șters și memoria pe care a ocupat-o este eliberată (dealocarea memoriei pentru obiectele Objective-C  este aceeași cu apelarea destructorului pentru obiectele C++. Metoda deallocface la fel ca destructorul în C++. apelul nu este garantat.). Această abordare de numărare a referințelor este foarte asemănătoare cu COM Microsoft cu interfața sa IUnknown . IUnknown oferă funcționalități similare atât cu .retainreleaseAddRefRelease

Pe lângă numărarea referințelor, programatorii pot profita de pool-urile de eliberare automată. Trimiterea unui mesaj către autoreleaseun obiect înregistrează obiectul în cel mai apropiat grup de eliberare automată a firului curent pentru lansare viitoare. Când grupul de eliberare automată în sine este eliberat, acesta trimite un mesaj releasepentru fiecare mesaj trimis anterior autorelease. Pool-urile dealocate automat sunt de obicei create și dealocate la începutul și la sfârșitul unei bucle de mesaje, asigurându-se că execuția programului iese din blocul în care obiectele au fost înregistrate pentru autodealocare. Aceasta înseamnă că aplicația rulează previzibil și eliberează memorie în mod transparent pentru utilizator, în timp ce utilizând colectarea automată a gunoiului, în majoritatea cazurilor, programul încetează brusc să răspundă la acțiunile utilizatorului când pornește.

Colectarea automată a gunoiului în Cocoa a fost acceptată încă de la Objective-C 2.0 când a fost dezvoltat în Xcode 3.0, inclus cu Mac OS X 10.5 Leopard. Programatorul are acum opțiunea de a alege între manipularea automată și manuală a memoriei. Părerile sunt împărțite cu privire la cel mai eficient mod de a gestiona memoria. Unii programatori susțin că numărarea referințelor este mai bună, deoarece permite dezvoltatorului să aibă un control fin asupra momentului în care obiectele sunt dealocate, fără a necesita alocarea manuală a memoriei pentru fiecare obiect care este utilizat în program și nu provoacă întârzierile de performanță asociate cu pentru automate. colectarea gunoiului. Alții spun că toată această schemă este inutilă, că colectarea automată a gunoiului în stil Java  este cea mai bună soluție, deoarece reduce foarte mult probabilitatea erorilor programatorului atunci când lucrează cu memorie. Colectarea gunoiului în Cocoa nu încalcă compatibilitatea cu programele inverse, este folosită numai pentru proiectele special compilate cu acesta.

Este, de asemenea, posibilă combinarea acestor două abordări. Colectatorii moderni de gunoi își permit adesea să fie porniți și opriți în mijlocul unei sarcini, permițând unei aplicații să controleze cantitatea de timp alocată apelurilor de sistem. Combinarea acestei abordări cu pool-urile AppKit care sunt lansate automat la sfârșitul buclei de mesaje pare să ofere cel mai bun compromis. Un sistem similar a fost implementat cu succes în GNUstep , analogul GNU care poate fi distribuit gratuit, al OpenStep .

Cadre principale

Cocoa constă în principal din două biblioteci de obiecte Objective-C numite Frameworks . Framework-urile sunt aproximativ aceleași cu bibliotecile dinamice . Sunt obiecte compilate care sunt încărcate în spațiul de adresă al unui program în timpul rulării, dar dincolo de aceasta, cadrele includ resurse, fișiere antet și documentație. Cocoa include și un sistem de control al versiunilor care previne problemele întâlnite în Microsoft Windows (așa-numitul „ DLL hell ”).

Un element cheie al arhitecturii Cocoa este modelul de vedere. În exterior, este organizat ca un cadru obișnuit, dar implementat folosind PDF pentru toate operațiunile de desen oferite de Quartz . Acest lucru permite programatorului să deseneze orice dorește folosind comenzile unui limbaj de tip PostScript . În plus, oferă automat posibilitatea de a imprima orice vizualizare. Deoarece Cocoa se ocupă de tăierea, derularea, scalarea și alte sarcini obișnuite de randare a graficelor, programatorul este scutit de nevoia de a implementa infrastructura de bază și se poate concentra pe aspectele unice ale aplicației în curs de dezvoltare.

Model-View-Behavior

Echipele de programatori Smalltalk de la Xerox PARC au dezvoltat în cele din urmă o filozofie care le-a permis să simplifice dezvoltarea și să crească semnificativ cantitatea de cod reutilizabil. Cunoscut ca paradigma Model-View-Behavior (MVC), acest concept împarte o aplicație în trei seturi de clase care interacționează. Clasele de model reprezintă date precum documente, fișiere de setări sau obiecte din memorie. Vizualizările, după cum sugerează și numele, afișează date (adesea vizual). Clasele de comportament conțin logica care leagă modelele la vizualizările lor respective și le menține sincronizate.

În arhitectura Cocoa, principiile MVC sunt respectate cu strictețe. În OpenStep, majoritatea claselor erau fie reprezentări de nivel înalt (clase AppKit) fie clase de model relativ la nivel scăzut (cum ar fi NSString). În comparație cu sisteme MVC similare, OpenStep nu avea o bază de model puternică. De exemplu, nu exista o clasă de bază care să reprezinte un document. În timpul tranziției la Cocoa, baza de model a fost incredibil de extinsă pentru a include mai multe clase gata de utilizare care au oferit funcționalități comune pentru majoritatea aplicațiilor utilizatorilor.

În Mac OS X 10.3, Apple a introdus NSController, o familie de clase MVC care oferă funcționalitate standard de comportament. Aceste clase sunt considerate parte a sistemului Cocoa Bindings , care utilizează pe scară largă protocoale precum Codarea valorii cheie și Observarea valorii cheie . Termenul de legare înseamnă legarea a două obiecte, adesea o vedere și un comportament. Cocoa Bindings permit dezvoltatorului să se concentreze pe descrierea relațiilor dintre obiecte, în loc să descrie în detaliu comportamentul programului.

Odată cu lansarea Mac OS X 10.4, Apple a extins și mai mult clasele de bază prin introducerea cadrului Core Data , care automatizează urmărirea modificărilor în modele și salvarea acestora (de exemplu, într-un fișier). Acest cadru simplifică foarte mult lucrul cu datele într-o aplicație, oferind suport automat pentru citirea documentelor dintr-un fișier și salvarea lor într-un fișier, precum și arhitecturi pentru anularea și revenirea modificărilor.

Prin furnizarea de cadre care să susțină toate cele trei straturi ale MVC, scopul Apple este de a reduce cantitatea de cod „lipici” pe care dezvoltatorii trebuie să o scrie și, astfel, să-și elibereze timp pentru a scrie caracteristici specifice aplicației.

Legare tardivă

În limbajele orientate pe obiecte, cum ar fi Java sau C++ , apelurile de metodă sunt reprezentate fizic în memorie ca pointeri. Acest lucru limitează proiectarea aplicației deoarece numele metodei care trebuie apelată trebuie cunoscut în prealabil. În timp ce Cocoa păstrează această abordare în cea mai mare parte, legarea tardivă în Objective-C permite mai multă flexibilitate.

În Objective-C, metodele sunt reprezentate de un selector , care este un șir care descrie metoda invocată. Când un mesaj este trimis către un obiect, mediul Objective-C primește selectorul pe care îl găsește și apoi apelează metoda necesară. Deoarece selectorul este un șir de text, acesta poate fi salvat într-un fișier, transmis printr-o rețea sau între procese sau procesat într-un alt mod. Căutarea codului care este executat atunci când o metodă este apelată se face în timpul execuției, nu în timpul compilării programului. Acest lucru încetinește doar puțin performanța, dar permite totuși aceluiași selector să indice diferite implementări ale metodei.

În mod similar, Cocoa are o tehnologie cu obiecte cuprinzătoare numită Key-Value Coding (KVC). Vă permite să accesați un element de date sau o proprietate a unui obiect, precum și să îl modificați în timpul execuției după nume - numele proprietății acționează ca o cheie pentru valoarea sa. KVC duce la o flexibilitate extremă a designului - nu trebuie să cunoașteți tipul unui obiect, dar oricare dintre proprietățile acestuia poate fi obținută folosind KVC. În plus, tehnologia Cocoa numită Key-Value Observing (KVO) sincronizează automat proprietățile obiectelor care sunt legate între ele.

Obiecte bogate în caracteristici

Unul dintre cele mai utile lucruri despre Cocoa este puternicele „obiecte de bază” oferite de sistem. Ca exemplu, consultați Fundația NSStringși clasele NSAttributedString, care oferă suport pentru șiruri Unicode și sistemul NSTextdin AppKit care permite programatorului să afișeze șiruri într-o GUI.

NSTextși clasele înrudite sunt folosite pentru afișarea și editarea șirurilor. Aceste obiecte vă permit să implementați orice în aplicație, de la cel mai simplu câmp de introducere a textului cu o linie până la un sistem de aspect care acceptă paginarea și mai multe coloane, precum și caracteristici tipografice profesionale, cum ar fi kerning , ligaturi , împachetarea textului în jurul oricăror forme, text. rotații, suport complet pentru Unicode și netezirea fonturilor . Proprietățile paragrafului pot fi controlate atât programatic, cât și de către utilizator folosind obiectul riglă, care poate fi atașat la orice vizualizare care afișează text. Verificarea ortografică se poate face și în mod automat, folosind un singur dicționar pentru toate aplicațiile și „sublinierea ondulată” lansată de Microsoft (în Cocoa arată ca o linie punctată roșie). Există suport încorporat pentru undo și redo nelimitat. Folosind doar funcționalitatea încorporată, este posibil să scrieți un editor de text în 13 linii de cod . Cu noile obiecte controler, acest număr de rânduri poate fi redus la zero. Acest lucru este în contrast puternic cu API-ul TextEdit găsit în versiunile anterioare de Mac OS.

Objective-C facilitează extinderea funcționalității claselor existente. Acceptă așa-numitele categorii , care vă permit să modificați clasele existente „în loc”. Cu ajutorul categoriilor, puteți adăuga funcționalitatea necesară fără a le face modificări și chiar fără a avea acces la codul sursă al claselor existente. În alte limbaje mai comune, acest lucru ar necesita programatorului să creeze o nouă clasă care să accepte funcționalități suplimentare și apoi să înlocuiască cu minuțiozitate toate obiectele utilizate ale clasei părinte cu aceasta nouă.

Implementări

Cadrele Cocoa sunt scrise în Objective-C , motiv pentru care acest limbaj este limbajul ales pentru scrierea aplicațiilor Cocoa. Este disponibil și un pachet pentru limbajul Java (Cocoa-Java Bridge), care, totuși, nu este deosebit de popular în rândul dezvoltatorilor. Mai mult, utilizarea legăturii tardive înseamnă că multe caracteristici cheie ale Cocoa nu pot fi utilizate în Java. În 2005, Apple a anunțat că Cocoa-Java va fi retras. Cu alte cuvinte, funcțiile adăugate la Cocoa în versiunile de Mac OS X după 10.4 nu vor fi adăugate la interfața Cocoa-Java.

AppleScript Studio , inclus cu Xcode Tools, face posibilă scrierea aplicațiilor simple Cocoa în AppleScript . Există, de asemenea, un limbaj de scriptare terță parte, F-Script , pentru Cocoa, care permite accesul direct la obiectele Cocoa și oferă un set de instrumente GUI pentru urmărirea stării acestora.

Pachetele de la terți sunt disponibile și pentru alte limbi: [2]

În plus, există implementări gratuite ale părților de bază ale Cocoa care permit dezvoltarea de aplicații pe mai multe platforme (inclusiv Windows ):

Există proiecte care traduc aplicațiile Cocoa scrise în Objective -C în aplicații web JavaScript :

Vezi și

Note

  1. Explicația apariției prefixului NS Arhivat 23-02-2011 .  (engleză) pe Apple Developer Connection
  2. F-Script Links Arhivat 16 iulie 2007.

Literatură

Link -uri