Cosa e' Cocoa?
Cocoa e' un insieme di frameworks orientati agli oggetti che forniscono un ambiente di esecuzione per applicazioni Mac OS ed iPhone OS. Integrato con un ambiente di sviluppo altamente efficiente, Cocoa e' l'ambiente principe per lo sviluppo su Macintosh e l'unico per lo sviluppo su iPhone.

Come tutti gli ambienti applicativi, Cocoa presenta due aspetti; un aspetto di esecuzione ed un aspetto di sviluppo. L'aspetto esecutivo si occupa di fornire e gestire l'interfaccia utente, correlata con altre porzioni del sistema operativo. Su MacOS, questo significa Finder, Dock ed altre applicazioni; su iPhone, significa SpringBoard, MobilePhone ed altre applicazioni.

E' l'aspetto di sviluppo quello piu' interessante per noi programmatori. Cocoa e' costituito da un insieme di componenti ad oggetti - classi - che ci forniscono la possibilita' di creare rapidamente applicazioni dalle caratterstiche evolute per MacOS ed iPhone.
Queste classi sono riutilizzabili ed adattabili a tutti gli scopi; e' possibile utilizzarle cosi' come sono oppure estenderle per scopi specifici. Esistono classi Cocoa per tutte le necessita' di programmazione, dagli oggetti per la user interface agli oggetti per la formattazione dei dati. In ogni caso e' sempre possibile comporre ed estendere le classi base, per ottenere qualunque risultato voluto.

Sebbene Cocoa sia un ambiente estremamente flessibile con la possibilita' di legare le proprie primitive a vari linguaggi di programmazione, per sviluppare applicazioni con Cocoa Touch per iPhone e' necessario conoscere Objective-C.

Le librerie di Cocoa vengono fornite con due frameworks, uno per ciascuna piattaforma: Foundation ed Application Kit per Mac OS X e Foundation ed UIKit per iPhone OS. Come tutti i frameworks, questo significa non solo librerie esportabili dinamicamente, ma anche file di intestazione, documentazione e quant'altro serva per fornire un ambiente il piu' familiare possibile.

Entrambe le piattaforme supportano il framework Core Data, che e' importante tanto quanto i frameworks base.





Questo semplice grafico ci aiuta a capire dove ci troviamo. In realta', esso trascura importanti dettagli dell'architettura. Questa figura, invece:





Mostra una rappresentazione piu' accurata. Essa rappresenta una serie di strati che vanno da Darwin sino agli ambienti applicativi. Il diagramma suggerisce, inoltre, che un componente ad un determinato livello, generalmente, ha dipendenze con i layers sotto di esso.
Alla base di tutto c'e' Darwin. Ogni cosa in Mac OS X, incluso Cocoa, dipende da esso per poter funzionare correttamente.


Cocoa ed iPhone OS
Anche se l'infrastruttura di iPhone OS, dalla quale Cocoa dipende, e' molto simile a quella di Mac OS X, esistono significative differenze.



La figura sopra, rappresenta l'architettura di iPhone OS. Confrontandola con quella di MacOS, ci accorgiamo di alcune importanti differenze. Il diagramma di iPhone OS, mostra il software che supporta la sua piattaforma come una serie di strati che vanno da Core OS ad una serie di frameworks applicativi, il piu' critico dei quali e' il framework UIKit. Come nel diagramma di Mac OS, il diagramma di iPhone OS ha degli strati intermedi che rappresentano i frameworks dei servizi base e le librerie grafiche ed audio. Anche qui, tipicamente, ogni strato dipende da quelli sottostanti.

Generalmente, le librerie di sistema ed i frameworks di iPhone OS che supportano UIKit sono un sott'insieme delle librerie e dei frameworks di Mac OS. Ad esempio, non esiste l'ambiente Carbon su iPhone OS. Non esiste accesso a command-line, non ci sono servizi e frameworks per la stampa. Quicktime, inoltre risulta assente dalla piattaforma. Inoltre, data la natura delle periferiche supportate da iPhone OS, ci sono alcuni frameworks, pubblici e privati, che sono specifici per questa architettura.

CoreOS: Questo livello contiene il kernel, il file system, le primitive di rete e di sicurezza, la gestione delle risorse energetiche ed una serie di device drivers. Esso contiene, inoltre, la libreria libSystem, che supporta le specifiche POSIX/BSD 4.4 ed include primitive di sistema per svariati servizi.

Media: I frameworks e servizi in questo strato dipendono dai servizi di base (Core Services) e forniscono servizi grafici e multimediali allo strato Cocoa Touch. Essi includono Core Graphics, Open GL ES, Core Animation, Core Audio e video playback.

Cocoa Touch: I Frameworks in questo strato supportano direttamente le applicazioni basate su iPhone OS. Esse includono due frameworks Objective-C che sono particolarmente importanti per lo sviluppo su iPhone OS:

  • Il framework UIKit fornisce gli oggetti che le applicazioni mostrano nella user interface e definisce la struttura per il comportamento della nostra applicazione, inclusa la gestione degli eventi.

  • Il framework foundation fornisce i comportamenti base degli oggetti, stabilisce i meccanismi per la loro gestione e fornisce gli oggetti per i tipi di dati primitivi, collezioni e servizi del sistema operativo. Foundation e' essenzialmente un wrapper ad oggetti del framework Core Foundation.

Come per Cocoa su MacOS, le interfacce di programmazione di Cocoa su iPhone OS forniscono alle applicazioni l'accesso alle tecnologie sottostanti. Tipicamente, esiste sempre un metodo UIKit oppure una funzione Foundation corrispondente per una chiamata a basso livello. Anche qui, se la nostra applicazione richiede caratteristiche che non sono esposte attraverso le API oppure se abbiamo bisogno di un controllo piu' dettagliato sulle nostre azioni, e' sempre possibile scegliere di usare i frameworks sottostanti direttamente. Ad esempio, UIKit utilizza il WebKit per disegnare il testo; potremmo decidere di voler disegnare il nostro testo attraverso il framework Core Graphics, perche' esso ci permette di ottenere un controllo piu' capillare per il nostro obiettivo finale. Utilizzare questi frameworks a basso livello, non e' un problema perche' le interfacce di programmazione di quasi tutti i frameworks sono scritte in ANSI C, dal quale Objective-C deriva.


Il nostro primo esempio - MVC








Riferimenti

- iPhone Reference Library: What is Cocoa?
- Programming in Objective-C: Capitolo 1, Capitolo 2



    lap1