• Català
  • Castellano
  • English


Enllaçament Dinàmic


La diferentcia fonamental entre les crides a funcions i els missatges són que un funció i els seus arguments estan junts en el codi compilat, però un missatge i un objecte que el rebi no s'ajunten fins que el programa està executant-se i s'envia el missatge. Per tant, el mètode exacte que s'invoca per respondre a un missatge només pot determinar-se en temps d'execució, no quan el codi és compilat.

El mètode precís que un missatge invoca depen del receptor. Diferents receptors poden tenir diferents implementacions de mètodes per al mateix nom de mètode (polimorfisme). Per qué el compilador trobi la implementació del mètode correcte pel missatge, podria haver de conneixer quin tipus d'objecte és el receptor -- quina classe té. Aquesta és informació que el receptor és capaç de revelar a l'execució quan rep un missatge (de definició de tipus dinàmic), però no està disponibe per les declaracions de tipus trobades en el codi font.

La sel·lecció d'una implementació de mètode succeeix en temps d'execució. Quan un missatge s'envia, una rutina de missatgeria en temps d'execució observa el receptor i el mètode anomenat en el missatge. Aquest localitza la implementació del mètode del receptor que tenene noms equivalents, "crida" el mètode, i li passa un punter a la variable d'instància del receptor. (Per saber-ne més d'aquesta rutina, mireu "How Messaging Works").

El nom del mètode en un missatge serveix per "sel·leccionar" una implementació de mètode. Per aquesta raó, els noms de mètodes en missatges sovint es refereixen com a selectors.

Aquest enllaçament dinàmic de mètodes a missatges treballa mà a mà amb el polimorfisme que dona a la programació orientada a objectes molta de la seva flexibilitat i poder. Des de que cada objecte pot tenir la seva pròpia versió d'un mètode, un programa pot aconseguir una varietat de resultats, no modificant els missatge ells mateixos, sinó variant l'objecte que rep el missatge. Axiò pot fer-se quan el programa corre; els receptors poden decidir-se "al vol" i poder fer-se depenent de factors externs com les accions dels usuaris.

Quan executem codi basat en el Kit d'Aplicació, per exemple, els usuaris determinen quins objectes reben els missatges des de les comandes com Tallar, Copiar, Enganxar. El missatge va a qualsevol objecte que control a la sel·lecció actual. Un objecte que mostra un text podria reaccionar a un missatge copia de forma diferent que un objecte que mostra imatges. Un objecte que representa un conjunt de formes podria respondre diferents que un Rectangle. Des del missatges no sel·leccionene mètodes (els mètodes no estan lligats als missatges) fins a l'hora d'executar-se, aquestes diferencies són aïllades en els mètodes que responen al missate. El codi que envia el missatge no cal que estigui relacionat amb ells; això ofereis innumerables possibilitats. Cada aplicació pot crear els seus pròpis objectes que responen de la seva pròpia forma els missatges copia.

L'Objective-C agafa l'enllaçament dinàmic un cop comprovat i permet que el missatge que s'envia (el mètode sel·lector) sigui una variable que es determinada en temps d'execució. Això es discuteix en la secció "Com Treballa la Missatgeria".