Accueil > Les langages de scripting > Naviguer dans Cocoa avec F-Script

Naviguer dans Cocoa avec F-Script

Par Philippe Mougin, le 20/12/2001,

traduit par Pejvan BEIGUI le 30/09/2002.

Note de l’éditeur : F-Script créé par Philippe Mougin est une couche légère et orientée-objets qui fournit un accès interactif aux Frameworks Cocoa et aux objets personnalisés. Dans le premier article publié sur Mac DevCenter (et sa version française sur Project:Omega), “Scripter Cocoa avec F-Script”, Philippe a présenté aux lecteurs les joies du scriptage dans leurs projets Cocoa. Dans cet article, il nous montre un nouvel outil : le browser d’objets.

NdT : j’ai laissé le terme ‘browser’ et ses dérivés (le verbe ‘browser’ par exemple, car ce terme est passé dans le langage courant, et je n’ai pas trouvé de traduction aussi pleine de sens et transparente à la lecture).

Jusqu’à présent, si vous vouliez interagir directement avec des objets Cocoa/Objective-C, vous deviez utiliser un langage de programmation, que cela soit Objective-C lui-même, Java via le pont de compatibilité, ou F-Script. Mais maintenant, avec le browser d’objets F-Script, il existe une nouvelle option : accéder directement aux objets au travers d’une interface graphique.

Dans cet article, je vous présenterai F-Script pour Cocoa, qui inclus l’Object Browser et qui peut être téléchargé à partir de l’url suivante : www.fscript.org.

La version originelle d’Object Browser fut conçue par Philippe Mougin et Yannick Bessy, et fut d’abord prototypée et implémentée pour VisualWorks Smalltalk.

les Bases d’F-Script Browser

Le principe général gouvernant l’utilisation d’object browser est très simple :

  • Vous selectionnez un objet en cliquand dessus.
  • Une liste de toutes les méthodes de l’objet apparait dans le browser.
  • Vous selectionnez la méthode que vous voulez invoquer en cliquand dessus. Le browser vous demande les paramètres (si besoin) et invoque la méthode. Le résultat (un objet) est affiché dans une nouvelle colonne.
  • Vous pouvez alors manipuler l’objet résultant de la même manière.

Vous bénéficiez ainsi d’un accès graphique unifié et interactif aux objets — une façon pratique d’accéder aux objets — une façon très pratique d’explorer les frameworks, de tester les classes que vous développez, ou d’utiliser interactivement des objets commerciaux.

Menu
Fig. 1. l’object browser en action.

Ouvrir l’Object Browser

Si vous utilisez l’application fs, il y a un élément de menu “Open object browser” qui fait exactement ça et qui affiche tous les objets définis dans l’espace de travail de F-Script.

En tout cas, vous pouvez aussi ouvrir le browser en exécutant une simple instruction F-Script :

  • Le code F-Script sys browse va ouvrir le browser pour l’espace de travail courant.
  • Le code F-Scrip sys browse:anObject, dans lequel anObject peut être toute expression F-Script, ouvre le browser sur anObject.

Visualiser et Sélectionner des Objets

À son lancement, le browser affiche une description textuelle d’un objet ou d’une liste d’objets. Pour ce faire, le browser demande aux objets leur description en leur envoyant le message printString. Si vous êtes familier avec F-Script, vous savez que tous les objets répondent à ce message dont le comportement par défaut est d’appeler la méthode standard description d’ NSObject.

Quand vous browsez votre espace de travail, le nom de chaque variable est affiché à gauche de la description d’objet correspondant.

Une fois que vous avez identifié l’objet auquel vous allez envoyer un message, vous devez juste le sélectionner en lui cliquant dessus.

Visualiser des Méthodes

Quand vous sélectionnez un objet, le browser rempli la colonne à sa droite avec la liste des méthodes que l’objet implémente. Les méthodes sont groupées suivant la hiérarchie des classes de l’objet sélectionné : en premier les méthodes de l’objet-classe, ensuite les méthodes au niveau superclasse, et ainsi de suite. Dans chaque groupe, les méthodes sont affichées par ordre alphabétique. Dans la version acutelle, il est possible qu’une méthode soit présente dans plusieurs groupes, si elle a été redéfinie dans des sous-classes.

Invoquer une Méthode

Pour invoquer une méthode sur l’objet sélectionné, vous devez seulement cliquer sur le nom de la méthode. F-Script va alors invoquer la méthode et afficher le résultat dans une nouvelle colonne du browser.

Si la méthode prend des arguments, F-Script ouvre une fenêtre dans laquelle vous devrez les rentrer. Vous fournissez chaque argument en tapant une expression F-Script (qui peut être une expression arbitrairement complexe). Dans le futur, nous voudrions améliorer cette fonctionnalité en permettant le glisser-déposer d’objets.

Object Browser
Fig 2. l’object browser demande des arguments.

Si une erreur survient pendant l’évaluation des arguments ou l’invocation de la méthode, le browser ouvrira une fenêtre d’alerte pour vous en informer.

L’invocation de méthode suit les règles de F-Script. Notamment, si le résultat de la méthode Objective-C que vous avez appelée n’est pas un objet, il va être mappé dans un objet, en concordance avec les règles standards de F-Script (Note: ces règles sont décrites dans le manuel de F-Script).

Naviguer dans l’espace de travail

Un objet F-Script est toujours associé à un espace de travail F-Script (un espace de travail est tout simplement un jeu d’associations entre les noms et les objets). Vous pouvez examiner l’espace de travail courant et browser les objets qu’il contient en cliquant sur le bouton “Workspace“.

Même si vous n’avez pas assigné d’objets aux identifiants, vous pouvez trouver quelques objets prédéfinis dans votre espace de travail. Premièrement, il y a toujours l’objet sys, qui est un objet global standard utilisé pour l’interaction entre quelques uns des services des environnements d’execution de F-Script. Deuxièmement, il pourrait y avoir des tables contenant des objets des classes avion, Vol, et Pilote. Ils sont créés lors du lancement, pour leur utilisation avec le Tutoriel de F-Script (vous trouverez ce tutoriel (NdT: en anglais) dans le guide de F-Script).

Ajouter une Entrée à l’Espace de Travail

Vous pouvez assigner un nom dans l’espace de travail à l’objet actuellement sélectionné en cliquant sur le bouton “Name“, et en entrant le nom que vous avez choisi dans le feuillet. Cette opération est équivalente à l’instruction d’assignation := dans le langage F-Script.

Object Browser asking for name

Fig. 3. Un feuillet vous demande le nom pour l’objet.

Note: Si vous avez tapé sur le bouton sans faire exprès, appuyer sur la touche ‘retour’ de votre clavier sans taper quoique ce soit, cela va fermer le feuillet.

Browser toutes les Classes

Vous pouvez browser les classes liés à votre exécutable à partir duquel vous être en train d’utiliser l’Object Browser de F-Script (puisque F-Script est fourni avec un framework embarquable, vous pourriez vouloir l’utiliser à partir d’autres applications). Pour commencer à browser les classes, cliquez simplement sur le bouton “Classes“.

Browsing classes

Fig. 4. Browser les classes.

Vous pouvez manipuler les classes grâce au browser de la même manière que vous le faisiez pour les objets. Ceci en raison du fait que les classes Cocoa sont elles-mêmes des objets. En effet, chaque classe est elle aussi une instance d’une autre classe (appelée méta-classe) automatiquement créée par le système objet, et les méta-classes sont elles-mêmes des objets. Sachant que F-Script facilite tellement la consultation de ces différents niveaux, il peut être utile d’avoir une vue claire de la topologie du système de classes Cocoa. Nous illustrons ceci ci-dessous en prenant pour exemple la classe Cocoa NSBox.

Topology
Fig. 5. Topologie du système de classe de Cocoa.

Quelques remarques :

  • Dans ce schema, la classe d’une classe est dénotée en ajoutant (meta) au nom de la classe. Par exemple, la classe de la classe NSBox est dénotée par NSBox (meta).
  • Chaque objet (dont font partie les classes) dans le système est associé à un autre objet (sa classe) par la relation “est une instance de”. Notez que cette relation n’est pas transitive. Dans F-Script, vous envoyez le message classOrMetaclass à un objet pour obtenir sa classe.
  • La relation “hérite de” s’applique au niveau des classes. Essentiellement pour des raisons pratiques, cette relation peut être vue comme transitive. Vous pouvez la traverser en envoyer à l’objet le message superclass.
  • NSObject, la racine de la hierarchie des classes, n’hérite d’aucune autre classe. Lui envoyer le message superclass retourne ‘nil’.
  • Avec Cocoa, les méthodes de classe d’une classe A sont des méthodes d’instances A (meta).
  • Le fait que les meta-classes soient organisées en une hiérarchie similaire à la hierarchie des classes correspondantes montre bien pourquoi les méthodes de classe sont héritées.
  • Le fait que NSObject (meta) hérite de NSObject montre pourquoi les méthodes d’instance définies pour la classe racine sont aussi des méthodes de classe.
  • NSObject (meta) est la classe de toutes les meta-classes dans la hiérarchie: c’est la meta-meta-classe.

Il y a quelques rares classes que vous ne pouvez pas utiliser avec F-Script, et donc que vous ne pouvez pas browser. Ceci inclus les classes qui ne se conforment pas au protocole NSObject (comme ceux qui héritent de la “vieille” classe Object), et quelques classes systèmes spéciales, telles que NSFault et _NSZombie.

Envoyer le Message self

Tous les objets Cocoa répondent au message self. Il renvoie simplement le récepteur du message. Comme avec tout autre message, il peut être envoyé en utilisant le browser d’objets de la manière que nous avons déjà décrite. Mais l’envoi de ce message est (étonnament) tellement utile dans le contexte du browser d’objets qu’il a un raccourci sous la forme du bouton “self“. En cliquant dessus, vous envoyez le message self à l’objet sélectionné.

L’envoie de ce message est utile pour browser dans les collecteurs imbriqués, et pour recevoir une description à jour d’un objet.

Inspecter l’Objecté Sélectionné

Le bouton “inspect” ouvre un inspecteur pour l’objet sélectionné. Un inspecteur générique est fourni et quelques objet offrent des inspecteurs plus spécifiques (en implémentant la méthode inspect). Par exemple, inspecter un bloc va ouvrir un éditeur de code pour ce bloc.

Browser les Collecteurs

Le browser d’objets fourni une manière très pratique de browser les collecteurs d’objets tels que NSArray, NSSet, ou NSDictionary.

Quand vous browsez une collection, le browser vous affiche non seulement la collection comme une entité complète, mais il affiche aussi  et rend sélectionnable chaque élément de la collection. Ainsi, vous pouvez choisir la collection elle-même, ou sélectionner directement un de ses éléments.

Browsing
Fig. 6. Browser un NSArray de chaines de caractères.

Quand vous browsez les collections imbriquées, vous pouvez directement plonger dans ses sous-niveaux imbriqués en envoyer le message  self à un de ses éléments.

La Barre d’État

Quand vous déplacer le pointeur de la souris, la barre d’état, à la base du browser, affiche une description plus complète des objets et des méthodes que ce qui est affiché dans les colonnes, qui est parfois limité  par la taille de la colonne.

Status bar
Fig. 7. La barre d’état est utile !

Politique de Mise-à-Jour

Les objets affichés dans la colonne du browser ou par l’inspecteur générique peuvent être modifiés à tout moment d’un certain nombre de façons : events, callbacks, envoi de message avec effet de bord par le browser d’objet ou à partir du shell F-Script etc.

Il est important de savoir que le browser ne fait pas de mise à jour automatique de son affichage quand de telles modifications arrivent. Toutefois, sélectionner un objet et lui envoyer le message self ou ouvrir l’inspecteur générique correspondant vous permettra de voir une description mise à jour de l’objet.

Textes originaux en anglais sur O’Reilly : http://www.oreillynet.com/pub/au/767

pejvan Les langages de scripting , ,

  1. Pas encore de commentaire
  1. Pas encore de trackbacks
S'abonner aux commentaires de cet article