Objective-C
L'Objective C, spesso citato anche come ObjC o Objective-C o Obj-C, è un linguaggio di programmazione riflessivo orientato agli oggetti, sviluppato da Brad Cox alla metà degli anni '80 presso la Stepstone Corporation.
Come lo stesso nome suggerisce, l'Objective C è un'estensione a oggetti del linguaggio C. Esso mantiene la completa compatibilità col C (a differenza di quanto avviene, per esempio, nel caso del C++). Tra l'altro, anche a causa di questa compatibilità, Objective C non è dotato di forte tipizzazione (caratteristica che invece esibiscono, tra gli altri, sia C++ che Java).
Le estensioni a oggetti con cui Objective C arricchisce il modello semantico del C sono ispirate al linguaggio Smalltalk, in particolar modo alla gestione dei messaggi. Le caratteristiche del runtime system collocano l'Objective C tra i linguaggi ad oggetti dinamici. Sono supportati tutti gli elementi classici della programmazione a oggetti; ma non mancano concetti innovativi anche su questo fronte, come il meccanismo delle categorie e strumenti legati alla riflessione.
La sua diffusione è principalmente legata al framework OpenStep di NeXT e al suo successore Cocoa, presente nel sistema operativo Mac OS X di Apple. A NeXT si deve il supporto dell'Objective C nel compilatore gcc di GNU.
Storia
Le origini
Nei primi anni '80, la pratica comune dell'ingegneria del software era basata sulla programmazione strutturata. Questa modalità era stata sviluppata per poter suddividere programmi di grandi dimensioni in parti più piccole, principalmente per facilitare il lavoro di sviluppo e di manutenzione del software. Ciononostante, col crescere della dimensione dei problemi da risolvere, la programmazione strutturata divenne sempre meno utile, dato che conduceva alla stesura di un numero sempre maggiore di procedure, ad uno spaghetti code e ad uno scarso riuso del codice sorgente.
Venne ipotizzato poi che la programmazione orientata agli oggetti potesse essere una potenziale soluzione al problema. In effetti Smalltalk aveva già affrontato molte di queste questioni ingegneristiche, pur con lo svantaggio di necessitare di una macchina virtuale che interpretava un oggetto in memoria chiamato immagine contenente tutti gli strumenti necessari. L'immagine Smalltalk era molto grossa, usava tendenzialmente un'enorme quantità di memoria per l'epoca e girava molto lentamente anche per la mancanza di un supporto specifico dell'hardware alle macchine virtuali.
L'Objective C fu creato principalmente da Brad Cox e Tom Love all'inizio degli anni '80 ala Stepstone. Entrambi erano stati introdotti a Smalltalk durante la loro permanenza al Programming Technology Center della ITT Corporation nel 1981. Cox aveva iniziato ad interessarsi ai problemi legati alla riusabilità del software e si accorse che un linguaggio simile a Smalltalk sarebbe stato estremamente valido per costruire potenti ambiente di sviluppo per i progettisti di ITT. Cox iniziò così a modificare il compilatore C per aggiungere alcune delle caratteristiche di Smalltalk. Ottenne così ben presto una implementazione funzionante di una estensione ad oggetti del linguaggio C che chiamò OOPC (Object-Oriented Programming in C). Nel frattempo Love fu assunto da Schlumberger Research nel 1982 ed ebbe l'opportunità di acquisire la prima copia commerciale di Smalltalk-80 che influenzò in seguito lo sviluppo della loro creatura.
Per dimostrare che il linguaggio costituiva un reale progresso, Cox mostrò che per realizzare componenti software intercambiabili erano necessari pochi adattamenti pratici agli strumenti già esistenti. Nello specifico, era necessario supportare gli oggetti in modo flessibile con un insieme di librerie software che fossero usabili e consentissero al codice sorgente (e ad ogni risorsa necessaria al codice) di essere raccolto in un solo formato multipiattaforma.
Cox e Love formarono infine una nuova impresa, la Productivity Products International (PPI), per commercializzare il loro prodotto che accoppiava un compilatore Objective C con una potente classe di librerie.
Nel 1986 Cox pubblicò la sua descrizione dell'Objective C nella sua forma originale nel libro Object-Oriented Programming, An Evolutionary Approach. Sebbene fosse attento a puntualizzare che la questione della riusabilità del software non poteva essere esaurita dal linguaggio di programmazione, l'Objective C si trovò spesso ad essere confrontato, caratteristica per caratteristica, con gli altri linguaggi
NeXT
Nel 1998, NeXT, la compagnia fondata da Steve Jobs dopo Apple, ottenne la licenza dell'Objective C da Stepstone (allora proprietaria del marchio) e realizzò il proprio compilatore Objective C e le librerie sulle quali basò l'interfaccia utente di NeXTSTEP. Sebbene le workstation NeXTSTEP non riuscirono ad avere un forte impatto sul mercato, i loro strumenti vennero ampliamente apprezzati dall'industria del settore. Ciò portò NeXTstep ad abbandonare la produzione di hardware ed a focalizzarsi sugli strumenti software, vendendo NeXTSTEP (e OpenStep) come piattaforma per la programmazione.
In seguito il progetto GNU iniziò a lavorare sul clone gratuito che chiamò GNUstep, basato sullo standard OpenStep. Dennis Glatting scrisse il primo run-time gnu-objc nel 1992 e Richard Stallman lo seguì subito dopo con un secondo. il run-time GNU Objective C, che è usato dal 1993, è stato sviluppato da Kresten Krab Thorup mentre era studente universitario in Danimarca.
Apple
Dopo aver acquisito NeXT nel 1996, Apple ha usato OpenStep come base per il suo nuovo sistema operativo Mac OS X. Questo gli consentì di includere l'Objective C di NeXT ed il suo sistema di sviluppo Project Builder (in seguito rinominato Xcode). La maggior parte delle attuali API di Apple (API Cocoa) sono basate sugli oggetti d'interfaccia di OpenStep e costituiscono il più significativo ambiente di sviluppo basato su Objective C attualmente usato.
Interfaccia ed implementazione
L'objective c funziona grazie ad un'interfaccia (scritta in un file ".h") ed una implementazione (scritta in un file ".m"). In alcuni casi queste due parti vengono scritte nello stesso script separate dai tag @interface e @implementation.
Esempi di codice
Interfaccia di una classe
// file NomeClasse.h
#import "NomeSuperclasse.h"
@interface NomeClasse : NomeSuperclasse
{
// variabili d'istanza
float v1;
int v2;
BOOL v3;
}
// dichiarazione metodi della classe
+(id)allocInit;
// dichiarazione metodi delle istanze
-(id)init;
-(void)logTo:(FILE*)destinazione;
@end
Implementazione di una classe
// file NomeClasse.m
#import <stdio.h>
#import "NomeClasse.h"
@implementation NomeClasse
+(id)allocInit
{
return [[NomeClasse alloc] init];
}
-(id)init
{
self=[super init];
v1=0; v2=0; v3=YES;
return self;
}
-(void)logTo:(FILE*)destinazione
{
sprintf(destinazione,"v1=%f v2=%d v3=%s\n", v1, v2, v3?"YES":"NO");
}
@end
Bibliografia
- Object Oriented Programming: An Evolutionary Approach, Brad J. Cox - Addison Wesley (1991)
Altri progetti
- Wikibooks contiene testi o manuali su Objective C
- Wikimedia Commons contiene immagini o altri file su Objective C
Collegamenti esterni
- {en} Introduction to The Objective-C Programming Language (Apple Developer Connection)
- {en} The Objective-C Programming Language, PDF download from Apple
- {en} Object-Oriented Programming and The Objective-C Language
- {en} The Objective-C++ Front End
- {en} Beginner’s Guide to Objective-C
- {en} ObjectiveLib: variant of a Standard Template Library
- {en} Objective-C by Brad Cox
- {en} Object Oriented Programming in Objective-C
- {en} Objective-C FAQ
- {en} comp.lang.objective-C FAQ
- {en} Objective-C: Links, Resources, Stuff
- {en} Objective-C A beginners tutorial
- {en} Objective-C mailing list
- {en} UML for Objective-C (PDF)