Objective-C: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m tag source deprecati, replaced: <source lang= → <syntaxhighlight lang= (33), </source> → </syntaxhighlight> (33) |
m Rimuovo dei wikilink errati. |
||
(19 versioni intermedie di 12 utenti non mostrate) | |||
Riga 2:
|nome = Objective-C
|autore = [[Brad Cox]] e [[Tom Love]] ([[Stepstone|Stepstone Corp.]])
|data =
|versione =
|utilizzo = linguaggio general-purpose
|paradigmi =
|tipizzazione = [[Tipo di dato|debole]], [[Tipo di dato#Tipizzazione statica e dinamica|dinamica]]
|specifiche =
|estensione =
|influenzato_da =
|ha_influenzato = [[C++]], [[Swift (linguaggio di programmazione)|Swift]], [[Java (linguaggio di programmazione)|Java]]
|implementazione_riferimento =
|sistema_operativo = [[Multipiattaforma]]
|lingua =
|licenza =
|sito_web =
}}
'''Objective-C''', spesso citato anche come '''Objective C''' o '''ObjC''' o '''Obj-C''', è un [[linguaggio di programmazione]] [[riflessione (informatica)|riflessivo]] [[Programmazione orientata agli oggetti|orientato agli oggetti]], sviluppato da [[Brad Cox]] alla metà degli [[Anni 1980|anni ottanta]] presso la [[Stepstone]] Corporation.▼
▲'''Objective-C'''
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 (linguaggio di programmazione)|Java]]).▼
▲Come lo stesso nome suggerisce, l'Objective
Le estensioni a oggetti con cui Objective C arricchisce il modello semantico del C sono ispirate al linguaggio [[Smalltalk]], in particolar modo alla [[comunicazione a scambio di messaggi|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|categorie]] e strumenti legati alla [[riflessione (informatica)|riflessione]].▼
▲Le estensioni a oggetti con cui Objective
La sua diffusione è principalmente legata al [[framework]] [[OpenStep]] di [[NeXT]] e al suo successore [[Cocoa (software)|Cocoa]], presente nel sistema operativo [[macOS]] di [[Apple]]. A [[NeXT]] si deve il supporto dell'Objective C nel compilatore [[gNU Compiler Collection|gcc]] di [[GNU]].▼
▲La sua diffusione è principalmente legata al [[framework]] [[OpenStep]] di [[NeXT]] e al suo successore [[Cocoa (software)|Cocoa]], presente nel sistema operativo [[macOS]] di [[Apple]]. A [[NeXT]] si deve il supporto dell'Objective
== Storia ==
Riga 77 ⟶ 83:
==== Portable Object Compiler ====
Oltre alle implementazioni [[GNU Compiler Collection|GCC]]/[[NeXT]]/[[Apple]], che hanno aggiunto diverse estensioni a quella originale di [[Stepstone]], esiste un'altra implementazione [[Open Source]] di Objective C che aggiunge un set di estensioni lievemente differente: il ''Portable Object Compiler''
== Sintassi ==
Riga 141 ⟶ 147:
...
}
{
// implementazione
Riga 206 ⟶ 212:
Le rappresentazioni interne di questi metodi possono variare con le diverse implementazioni di Objective C.
Se
In ogni caso i nomi interni delle funzioni sono usati raramente in maniera diretta e generalmente anche i messaggi inviati sono convertiti in funzioni definite in librerie di [[run-time]] e non accedono direttamente ai nomi interni. Ciò è dovuto anche al fatto che al momento della [[compilazione]] non sempre si conosce quale metodo sarà effettivamente chiamato, perché la classe del destinatario (l'oggetto a cui viene inviato il messaggio) potrebbe essere sconosciuta fino al run-time.
Riga 233 ⟶ 239:
=== Tipizzazione dinamica ===
Objective C (come Smalltalk) può usare la [[tipo di dato|tipizzazione dinamica]]; ovvero rende possibile, per aumentare la flessibilità, inviare ad un oggetto un messaggio non definito nella propria interfaccia. In Objective C un oggetto può "catturare" questo messaggio e può inviarlo ad un altro oggetto (che può rispondere correttamente o inviare a sua volta il messaggio ad un altro oggetto e così via). Questo comportamento è chiamato ''forwarding'' (in [[lingua italiana|italiano]]: ''inoltro'') o ''delega'' del messaggio (si veda [[#Forwarding|sotto]]). In alternativa, è possibile usare un gestore degli errori nel caso il messaggio non possa essere inoltrato. Nel caso l'oggetto non inoltri il messaggio, non
Informazioni di tipizzazione statica possono essere aggiunte eventualmente alle variabili. Tali informazioni sono controllate
<syntaxhighlight lang="objc">
- setMyValue:(id <aProtocol>) foo;
Riga 558 ⟶ 564:
== Altre caratteristiche ==
Objective C ha incluso sin dal suo apparire
* Delegare i metodi ad altri oggetti al [[run-time]] è banale. Basta semplicemente aggiungere una categoria comprendente le modifiche ad un metodo per implementare il forwarding al destinatario della delega.
Riga 577 ⟶ 583:
L'implementazione dell'Objective C usa un semplice [[run-time system]] scritto in [[linguaggio C]] che aumenta di poco la dimensione delle applicazioni. Al contrario, la maggior parte dei sistemi object-oriented esistenti quando fu creato (e [[Java (linguaggio di programmazione)|Java]] tuttora) usava una grossa [[macchina virtuale]] invasiva per l'intero sistema. I programmi scritti in Objective C tendono ad essere di poco più grandi delle dimensioni del loro [[codice oggetto]] e delle [[libreria software|librerie]] usate (che generalmente non devono essere incluse nel codice distribuito), al contrario ad esempio dei sistemi [[Smalltalk]] dove grandi quantità di memoria sono necessarie semplicemente per aprire una [[finestra (informatica)|finestra]].
Il linguaggio può essere implementato con un compilatore C (in [[GNU Compiler Collection|GCC]], prima come un [[preprocessore]] ed in seguito come un modulo del compilatore) piuttosto che con un nuovo compilatore. Ciò consente all'Objective C di sfruttare l'enorme mole di codice, librerie e strumenti già esistenti in C che può essere adattata in Objective C per fornire un'interfaccia object-oriented.
Le prime versioni di Objective C non supportavano la [[garbage collection]]. Al tempo questa scelta fu oggetto di discussioni e in molti (ai tempi di Smalltalk) la consideravano un lungo "tempo morto" in cui il sistema era reso non più utilizzabile. Anche se qualche implementazione di terze parti (principalmente [[GNUstep]]) aveva già aggiunto questa caratteristica, è stata implementata da [[Apple]] una tecnica simile tramite [[Automatic Reference Counting|ARC]] in [[Mac OS X Leopard]], ma non è disponibile per applicazioni implementate per versioni precedenti del [[sistema operativo]].<ref>{{Cita web | url=https://www.apple.com/macosx/developertools/xcode.html | titolo=Mac OS X Leopard – Xcode 3.0 | autore=Apple, Inc. | anno=22 agosto 2006 | sito=apple.com | accesso=22 agosto 2006 | lingua=en | urlarchivio=https://web.archive.org/web/20071024144921/http://www.apple.com/macosx/developertools/xcode.html | dataarchivio=24 ottobre 2007 | urlmorto=sì }}</ref>
Un'altra critica comunemente fatta all'Objective C è quella di non avere un supporto nativo per i [[namespace]]. I programmatori sono perciò costretti ad aggiungere
Dato che Objective C è uno stretto [[superinsieme]] del C, non tratta i tipi primitivi del C come [[first-class object]].
Riga 600 ⟶ 606:
== Bibliografia ==
*
== Altri progetti ==
{{interprogetto|preposizione=sull'}}
== Collegamenti esterni ==
* {{Collegamenti esterni}}
* {{FOLDOC}}
* {{cita web | 1 = http://programmazione.html.it/guide/leggi/183/guida-objective-c/ | 2 = Guida Objective C - HTML.it | accesso = 5 febbraio 2010 | dataarchivio = 23 luglio 2010 | urlarchivio = https://web.archive.org/web/20100723144028/http://programmazione.html.it/guide/leggi/183/guida-objective-c | urlmorto = sì }}
* {{cita web | 1 = http://www.devapp.it/wordpress/diventare-un-xcoder.html | 2 = Diventare un XCoder, guida introduttiva sullo sviluppo in Objective C per Mac OS X / iOS | accesso = 28 febbraio 2011 | urlarchivio = https://web.archive.org/web/20110223223634/http://www.devapp.it/wordpress/diventare-un-xcoder.html | dataarchivio = 23 febbraio 2011 | urlmorto = sì }}
* {{cita web|1=https://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/|2=Introduction to The Objective-C Programming Language (Apple Developer Connection)|lingua=en|accesso=3 maggio 2019|dataarchivio=4 luglio 2003|urlarchivio=https://web.archive.org/web/20030704024148/http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/ObjC.pdf|urlmorto=sì}}* {{en}}
* {{cita web|1=http://www.toodarkpark.org/computers/objc/|2=Object-Oriented Programming and The Objective-C Language|lingua=en|accesso=6 febbraio 2008|urlarchivio=https://web.archive.org/web/20041018235301/http://www.toodarkpark.org/computers/objc/|dataarchivio=18 ottobre 2004|urlmorto=sì}}
* {{cita web|https://developer.apple.com/documentation/ReleaseNotes/Cocoa/Objective-C++.html|The Objective-C++ Front End|lingua=en}}
Riga 615 ⟶ 625:
* {{cita web|http://www.faqs.org/faqs/computer-lang/Objective-C/faq/|Objective-C FAQ|lingua=en}}
* {{cita web|1=http://thaesofereode.info/clocFAQ/|2=comp.lang.objective-C FAQ|lingua=en|accesso=6 febbraio 2008|urlarchivio=https://web.archive.org/web/20090220060852/http://thaesofereode.info/clocFAQ/|dataarchivio=20 febbraio 2009|urlmorto=sì}}
* {{cita web|1=http://www.foldr.org/~michaelw/objective-c/|2=Objective-C: Links, Resources, Stuff|lingua=en|accesso=6 febbraio 2008|dataarchivio=15 giugno 2006|urlarchivio=https://web.archive.org/web/20060615145345/http://www.foldr.org/~michaelw/objective-c/|urlmorto=sì}}
* {{cita web|url=http://softtecharticles.com/mambo/index.php?option=com_content&task=view&id=32&Itemid=40|titolo=Objective-C A beginners tutorial|lingua=en|urlmorto=sì}}
* {{en}} [news://comp.lang.objective-c Newsgroup su Objective-C]
|