Objective C nasce da un idea di Brad Cox e Tim Love a metà degli anni '80, presso la StepStone Corporation, con l'idea di aggiungere al C le caratteristiche di SmallTalk (il primo linguaggio a oggetti).
Cox rilasciò il linguaggio nel 1986 ma non ebbe molto successo, fino a quando Steve Jobs, dopo aver lasciato Apple (1985), fondò la NeXT Computer e lo adottò come ambiente di sviluppo per il sistema operativo NeXTSTEP.
Anche se i prodotti Next Computer non ebbero un grande successo commerciale, il suo sistema operativo era all'avanguardia per il suo tempo. Per questo Jobs si concentrò sulla sola commercializzazione di NeXTSTEP, trasformando NeXT in una software house.
NeXTSTEP fu molto apprezzato sopratutto in ambienti accademici e scientifici. È su NeXTSTEP che nasce il primo server Web sui computer del CERN (1990). La carenza di software, comunque, decretò il fallimento commerciale anche di NeXTSTEP.
Nel frattempo anche le vendite dei computer Apple stavano crollando: il loro sistema, MACOS9, non era al passo con la tecnologia di allora e i progetti fatti per migliorarlo non portavano a nulla di buono. In questo frangente il ritorno di Jobs in Apple salvò sia NeXT dalla bancarotta, sia la mela dal declino: grazie a questo connubio Apple poté utilizzare NeXTSTEP per rimpiazzare il vecchio MacOS9.
Dalla modifica di NextSTEP applicato ad una base BSD Mach nacque il nuovo sistema operativo della mela : MacOS X (la X sta appunto per 10 in numeri romani). Con OSX, Apple cambiò completamente sistema operativo scegliendo con coraggio la discontinuità con il passato.
La storia ha dato ragione a Jobs ed oggi, grazie all'eredità di NeXTSTEP, utilizziamo Objective C per sviluppare sulla piattaforma MacOS X, e sui diversi dispositivi Apple, come iPhone.
Lavorando, come faremo in questa nostra guida, su Objective C, possiamo trovare alcune tracce dell'eredità di NeXTSTEP. Nei nomi delle classi principali, ad esempio, troviamo il prefisso NS (NSObject
, NSArray
, NSSet
, ect.) che serviva a distinguere le classi di sistema, in assenza di namespace.
Anche nei file nib
di Interface Builder, la N iniziale sta appunto per NextSTEP. Questo anche se adesso, pure continuando a chiamarsi "file nib", hanno formato xml
e non binario ed hanno estensione xib
e non più nib
.
Un linguaggio dinamico
L'Objective C è un linguaggio di programmazione orientato agli oggetti, dinamico, non fortemente tipizzato, che, come abbiamo detto, deriva da SmallTalk, il celeberrimo capostipite di molti linguaggi Object Oriented, e da C, con il quale mantiene una completa compatibilità.
È dinamico perché posticipa a runtime la maggior parte delle azioni sugli oggetti. La conoscenza di come trattare a runtime gli oggetti deriva dal Runtime: una libreria che viene staticamente linkata ad ogni programma ObjectiveC. In sostanza il Runtime agisce come una specie macchina virtuale in cui "vivono" gli oggetti ObjectiveC.
Il Runtime mette a disposizione delle API che consentono ad esempio di conoscere per ogni oggetto a quale classe appartiene, i metodi e le proprietà che possiede ect.; queste caratteristiche avvicinano più Objective C a linguaggi tipo il Ruby o Python piuttosto che C++.
Essendo, quindi, un superset di C in Objective C si possono tranquillamente utilizzare tutti i metodi e le funzioni del C in maniera nativa.