-
I protocolli in Objective C sono molto simili alle interfacce di Java
Nel linguaggio Objective C sono presenti i protocolli. In parole povere un protocollo è la stessa cosa di quello che in Java ed altri linguaggi come ad esempio Actionscript si chiama interfaccia.
Vediamo in termini più formali una definizione di protocollo: è un insieme di metodi che vengono dichiarati come entità a se stanti e che vengono usati dalle classi per prendersi degli impegni su come devono comportarsi.
Come si dichiara un protocollo
Si dichiara all’interno della coppia @protocol / @end.
Come nel caso delle interfacce, all’interno di un protocollo sono presenti esclusivamente le signatures dei metodi.
La classe che adotta un protocollo si prenderà l’impegno di attribuire un corpo ai metodi specificati nel protocollo.
Se una classe adotta un determinato protocollo, anche le sue sottoclassi automaticamente lo adotteranno.
Perché si usano i protocolli?
Perché adottando un protocollo una classe informa i propri utilizzatori del fatto che è capace di rispondere ad un’insieme di metodi senza porre dei limiti sull’ereditarietà.
Differenza rispetto a Java /AS
C’è una sottile ma importante differenza. Se in Java/AS dichiariamo che una certa classe implementa un’interfaccia e poi ci dimentichiamo di mettere il codice per un metodo, il compilatore si blocca e non genera l’eseguibile. Mentre in Objective C il compilatore ci da un warning, quindi produce ugualmente un eseguibile. Se in fase di runtime chiamiamo il metodo che manca, l’applicazione inevitabilmente si bloccherà.
Questo impone una maggior attenzione da parte del programmatore ai messaggi di warning restituiti dal compilatore.
Esempio
@protocol Print
- (void) print
@end
@interface MyClass : NSObject <Print>
{
...
}
@implementation MyClass
- (void) print { .... }
@endNell’esempio abbiamo definito un protocollo di nome Print che contiene la signature di un metodo print.
Nella parte dichiarativa di una classe (@interface) oltre a definire il nome della classe (MyClass) e la classe da cui MyClass eredita (NSObject), tra parentesi angolari indichiamo che MyClass adotta il protocollo Print.Attenzione che in altri linguaggi come ad esempio Java le parentesi angolari hanno un altro significato: in genere indicano l’uso di programmazione generica, qui invece significa che la classe adotta un determinato protocollo.
Implementare più protocolli
Una classe può implementare più protocolli:
Quando dichiariamo una variabile o creiamo un metodo possiamo dire che quella variabile implementa un protocollo:
- (void) draggingEnded: (id <NSDraggingInfo> ) sender;Questo ci permette in fase di compilazione di controllare se il parametro che sto passando è conforme al protocollo indicato.
Protocolli con metodo opzionali
E’ possibile utilizzare la keyword @optional per indicare che alcuni metodi specificati nel protocollo sono opzionali. Esiste anche la keyword @required per marcare il fatto che l’implementazione di un metodo è obbligatoria.
@protocol MyProtocol
-(void) requiredMethod;
@optional
- (void) anOptionalMethod;
@endLa presenza di metodi opzionali solleva un potenziale problema nel momento in cui si opera su un oggetto che dovrebbe essere conforme ad un dato protocollo e noi vogliamo utilizzare un metodo opzionale.
In questo caso non siamo sicuri che quel determinato oggetto lo implementi o meno. Bisogna verificare se quel metodo è implementato richiamando il metodo RespondsToSelectorid <MyProtocol> o;
if([o respondsToSelector: @selector (anOptionalMethod)]){
}Approfondimenti
Ecco tre brevi e semplici videocorsi sviluppati dai ragazzi di iMakeApps (http://www.imakeapps.it/video-corsi/ )
I Protocolli in Objective C – Parte 1
blahI Protocolli in Objective C – Parte 2
blahI Protocolli in Objective C – Parte 3
blah
Lascia un Commento
Link consigliati
Categorie
- Actionscript 3 – Trucchi e Segreti (9)
- Algoritmi e Programmazione Avanzata (3)
- Analisi di Basi di Dati (10)
- Assembler 8086 (2)
- Base di dati (1)
- Codifiche (1)
- Data Mining (4)
- E-learning (4)
- Flash (9)
- Grafica 3D (1)
- HTML5 (1)
- Intelligenza Artificiale (1)
- Lego Mindstorms NXT (6)
- Linguaggio C++ (1)
- Linux (8)
- Microsoft Office (7)
- news (1)
- Objective C (4)
- PHP (9)
- Progetti Politecnico (12)
- Programmazione ad Oggetti (Java) (1)
- Programmazione in C (16)
- Realtà Aumentata (1)
- Red5 (6)
- Seminari (3)
- SEO (3)
- Server (3)
- Sicurezza dei Sistemi Informatici (17)
- Siti Amici (1)
- Strategia e Innovazione (19)
- Tecnologie delle Basi di Dati (2)
- Utilità (11)
- web design (2)
Articoli Recenti
- Come creare una UILabel da codice senza utilizzare Interface Builder in Objective-c
- Tool per testare il codice PHP online
- LMS – An Elearning Platform with Online activation and 5 free users forever
- LMS – Piattaforma di E-learning gratis per i primi 5 utenti….
- Gli Active Record di Yii: un design pattern per rappresentare le tabelle del database in un modo orientato agli oggetti.
- Come creare un pulsante dinamicamente in Objective-c – Iphone SDK
- Actionscript 3 versus Objective-C: vediamo le principali differenze a livello di sintassi del codice
- Firewall: IP Tables un esempio su Linux
- Una piccola introduzione al framework php Yii (Yes It Is!) – installazione e creazione di una semplice applicazione web 2.0
- NetBeans IDE: JVM Creation Failed vediamo come risolverlo
- I sistemi esperti basati su regole
- I protocolli in Objective C sono molto simili alle interfacce di Java
- 19 – Strategia e Innovazione – Benefici della diversificazione: matrice BGC
- 18 – Strategia e Innovazione – Scelta del tempo di ingresso nel mercato – I FIRST MOVER
- 17 – Strategia e Innovazione – I mercati “WINNER TAKE ALL”
Tags
Acrobat Writer Gratis
Actionscript 3
addEventListener
API disegno flash
appunti del corso di strategia e innovazione
AS3
Audio Streaming
Cancellare un'immagine da un PDF
cicli ed iterazioni in c
context free grammar
esercitazioni svolte in linguaggio c
esercitazioni svolte sui trigger oracle
esercizi svolti assembler 8086
eventi in actionscript 2
eventi in actionscript 3
file system linux
Formati Video HTML5
forward-chaining
gestione della memoria dinamica in c
gestione delle liste in c
getURL
Guida Visual Basic For Application - VBA
HTML5
indicizzare un sito sui motori
jflex
LEGO MINDSTORMS NXT 2.0 - BLUETOOTH - C#
linguaggi e traduttori
Modificare un file PDF
moveTo
navigateToURL
Oracle Database 10g Express Edition
Primo programma in c
programmare robot
root
scelte ed alternative in c
setChildIndex
streaming real time
swapDepths
TextField buttonMode
vettori in c
video in as2
video in as3
Video Streaming
XML
XMLList