Introduzione a Objective-C
INTRODUZIONE
Objective-C nasce a metà degli anni '80 presso la Stepstone Corporation per opera di Brad Cox, uno dei due cofondatori. La società per lungo tempo è stata attiva nello sviluppo di programmi per NeXT e OpenStep, ma dopo qualche anno aver venduto i diritti di Objective-C a NeXT dichiarò nel 2002 il fallimento.
L'idea originale di Cox era quella di permettere una facile riutilizzazione del codice (e ampiamente descritto nel libro "Object-Oriented Programming, an Evolutionary Approach [1996])
Objective-C è un linguaggio di programmazione orientato agli oggetti (avremo modo di scendere nei particolari tecnici più avanti) nato come estensione al C. Al contrario di C++ quindi, esso mantiene compatibilità all'indietro pur non consentendo una forte tipizzazione di dati.
ObjC è sostanzialmente un arricchimento del linguaggio Smalltalk (nato nel '70 presso lo Xerox PARC e preso ad esempio per alcuni concetti nello sviluppo software moderno, come ad esempio i design patterns, extreme programming, refactoring e soprattuto la gestione dei messaggi).
ObjC si compone di un runtime system dinamico che permette di collocarlo come un linguaggio dinamico (insieme al più famoso Java ma anche al Python e svariati altri).
La compatibilità garantita dal linguaggio permette di compilare facilmente software objective-c anche su altri sistemi operativi diversi dal NeXT e da MacOS. Attualmente ObjC è utilizzato principalmente su sistemi Apple ed è alla base di molte delle API di sistema (Cocoa e i vari kit di sviluppo).
CARATTERISTICHE PRINCIPALI DI OBJ-C
Le caratteristiche principali di Objective-C sono:
Dynamic Typing Come già detto in precedenza, al contrario di molti altri linguaggi, Objective-C non ha una forte tipizzazione. In poche parole questo significa che il tipo degli oggetti non è conosciuto fintanto che il programma non è in run time.
Dynamic Binding Metodi e classi possono essere aggiunte e cancellate in run time (la lista viene gestita tramite Dynmic Typing). Questo permette lo sviluppo di software più flessibili creati secondo uno schema a componenti, in cui ogni parte può essere aggiunta o tolta mentre esso è in esecuzione.
Dynamic Loading Le diverse parti del programma (compresi i framework) non sono caricate in memoria fintanto che non se ne ha bisogno: in questo modo l'utilizzo delle risorse è altamente ottimizzato e fa del linguaggio uno dei migliori nella storia informatica.
COMPONENTI DI OBJECTIVE-C
Come abbiamo già detto nell'introduzione, Objective-C è organizzato come una serie di aggiunte al linguaggio C. E' importante ricordare che Objective-C è basato sulla versione ANSI C. Possiamo quindi definire Objective-C come un framework sopra al C che permette di definire una struttura orientata agli oggetti altamente portabile. I componenti essenziali del linguaggio sono:
Metodi (Methods) Sono in sostanza le operazioni che possono essere effettuate sui dati (sono in sostanza le funzioni, con una sottile ma importante differenza).
Messaggi (Messages) I messaggi sono il modo principale con cui un istanza di un metodo può chiamare un'operazione definita all'interno di un altro metodo. Ad esempio [display refresh] chiederà a display di aggiornare il proprio contenuto.
Classi (Classes) Le classi definiscono la struttura degli oggetti. Le classi contengono il prototipo comprensivo di variabili e metodi che comporranno una istanza dell'oggetto definito. Le classi possono ereditare metodi e proprietà anche da altre classi (concetto di ereditarietà): ad esempio la classe Taxi può avere il concetto di metodi (avvia il motore, accendi fari...) e proprietà (colore...) in comune con la classe Auto (pur modificandone i valori).
Protocolli (Protocols) I protocolli sono utilizzati per aggiungere o ereditare metodi a una superclasse.
Messaggi Remoti (Remote Messages) I m.r. permettono ad ObjC di avere il supporto agli oggetti distribuiti, ovvero di far comunicare oggetti disponibili su threads di esecuzione differenti o su macchine remote (Le applicazioni distribuite sono una delle caratteristiche principali dell'architettura su cui è basato OpenStep).
Persistenza (Persistance) Gli oggetti e i loro dati possono essere abilitati "a sopravvivere" anche quando hanno terminato la loro esecuzione.
Nei linguaggi di programmazione tradizionali una funzione viene chiamata per eseguire un'operazione su di un dato. In Objective-C come in altri linguaggi OOP, un messaggio è inviato ad un particolare oggetto per chiedere di effettuare un'operazione su se stesso. Per capire meglio questa differenza portiamo ad esempio un filesystem. In un linguaggio di tipo procedurale, quale può essere il C, avremo funzioni come Open (per aprire un file), Close (per chiuderlo), Read/Write (per scrivere o leggere) etc. L'istruzione Open ritornerà un identificatore del file che potrà essere utilizzato per effettuare operazioni di Read,Write o Close sul file aperto.
In linguaggio OOP al contrario avremo un oggetto chiamato FileSystemItem che rappresenterà il file, e i diversi metodi di classe ad esso associati che permetteranno di eseguire operazioni su di esso.
Come vedremo più avanti la programmazione ad oggetti sposta il punto di vista dalle funzioni agli oggetti rendendo in molti la progettazione di un software più agevole e con meno problemi legati alla stabilità (lungi tuttavia da me elevarla a panacea di tutti i mali di progettazione).
About this page
You’re currently reading “Introduzione a Objective-C,” an entry on malcom
- Published:
- 9.25.06 / 6pm
- Category:
- Blog Cafe
No comments
Jump to comment form | comments rss | trackback uriShow / Hide Comments