sto guardando questa forma uno sfondo Objective-C in modo da essere gentile. L'esperimento sembra questo:Pharo Smalltalk - Come posso verificare se un messaggio è conforme a un protocollo definito nella classe di un altro oggetto?
Object1 ha una variabile di istanza denominata delegato.
L'oggetto 1 riceve un messaggio e il ricavato per verificare se il delegato implementa un protocollo specifico (il cui nome è noto in precedenza), se lo fa, verifica se il messaggio è tra i metodi implementati del protocollo. Prende quindi una decisione su come interagire con il delegato e così via.
In Objective-C si deve definire protocolli chiari, generalmente memorizzati in file differenti, e conforme al protocollo è controllato dal compilatore. In Pharo non riesco a trovare il modo di verificare questo tipo di informazioni anche se il browser ha un'intera colonna dedicata ai protocolli e, a parte i metodi di raggruppamento, sembra che facciano molto poco.
Non conosco molto dei "protocolli" in Objective-C, ma hai ragione, in Smalltalk non sono molto più di un modo per raggruppare i metodi (a.k.a. "categorie"). Ci sono convenzioni su come definire questi protocolli e quali metodi tipicamente vanno in quale protocollo, ma sono solo, bene, convenzioni. Puoi chiedere a una classe di '#allMethodsInCategory:', ma a meno che non ti fraintenda, non penso che sia quello che cerchi, perché sembra che siano qualcosa di completamente diverso in Objective-C. La risposta di Leandro offre alcune opzioni per verificare a quali metodi risponde un oggetto. –
@ AmosM.Carpenter Era esattamente quello che stavo cercando, l'ho trovato io stesso mentre cercavo qualcos'altro. C'era un metodo #allMethodsInCategory: che è stato deprecato in Pharo 3.0 e successivamente in favore di #allSelectorsInProtocol: che fa quello che voglio. Vedi http://stackoverflow.com/questions/2990966/how-can-i-get-all-the-methods-in-a-protocol Alcuni altri dialetti hanno metodiInProtocol: tutti uguali. – unmircea