Processing – 1. Les données

Cette suite de tutoriels est pensée en collaboration avec Douglas Edric Stanley comme un complément à ses tutoriels. Pour éviter la redondance, je m’appuie donc sur les acquis qu’on pourrait avoir en les suivant, même s’il y a, par-ci et par-là, de petits rappels sur des points un peu épineux. Par moments, lorsqu’on apprend la programmation, on a vraiment du mal à conceptualiser certains aspects et il suffit d’un autre angle, et hop.

Mes exemples représentent un appui technique pour épauler les problématiques soulévées dans le cadre de mon de Studio Pratiques Algorithmiques mais j’espère qu’ils pourraient servir à d’autres! Etant donné qu’une partie importante de cet atelier est dédiée à la visualisation des données, ils sont orientés, au moins au début, autour de diverses techniques pour l’acquisition de données dans nos projets.

Dans un premier temps, il serait question de la récuperation, l’analyse et la manipulation du texte par le biais de méthodes appartenant à des variables (ou plus précisément des Objets) de type String et Array. En cours, nous avons commencé par une stratégie complétement “manuelle” , le hardcoding, en intégrant nos données (la valeur ou le contenu des variables) à l’intérieur du code source. (voir exercice 1 où il s’agissait de la météo sur 10 jours)

int[] minimale = {9, 13, 9, 9, 9, 11, 10, 10, 9, 9};
int[] maximale = {19, 18, 17, 16, 18, 19, 18, 17, 17, 17};

Les limites de cette approche – des données figées, une mise à jour pénible, une manque de souplesse – ont fait que certains étudiants cherchaient, dès le premier exercice, à faire rentrer leurs données depuis une source en dehors du programme.

L’externalisation des données
Il s’agit d’une des stratégies qui va nous permettre une plus grande réutilisabilité et souplesse de notre code, en glissant petit à petit vers la séparation de la forme de notre code de son contenu. (Pour le contrepied de cette tendence, regardez par exemple, le projet controversé walser.php du Project Gnutenberg). Cette orientation nous amenera vers la création de blocs de code qui ressembleront à de petites machines virtuelles et abstraites (voir le site de Douglas pour une refléxion théorique sur ce sujet). On verra plus bas que ces blocs de code se passent des données de l’un à l’autre, chacun executant une tâche précise.

Il ne faut pas perdre de vue que cette tendance est un des moteurs des nos sociétés contemporaines et participe d’un processus plus général d’abstraction. Il suffit de penser au taylorisme, ou plus récemment, aux industries de contenus et aux processus (post) industriels donnant lieu à la production des objets individualisés ou personalisables à la demande.

En jargon informatique, cette conception du code s’appelle une boîte noire. Une fois programmé, l’usage de ces boîtes noires ne nécessite pas une connaissance de l’écriture du code interne, mais simplement une compréhension de la fonction de ce code. Autrement dit, il suffit de savoir quel genre de transformation il permet d’opérer, et le type et l’ordre des données qu’acceptent les entrées et que produisent les sorties.

Black Box de Yoon-Ja et Paul Devautour, 1998

Les méthodes
Nous avons déjà eu un aperçu de ce phénomène avec les méthodes et nous le verrons plus en détail lorsque nous aborderons les Objets. Pour mieux comprendre les tutoriaux qui suivent un petit rappel sera utile. L’emploi des méthodes est expliqué dans les tutoriels de Douglas sur les méthodes et développé un peu plus dans celui sur les variables. Mais on va essayer de résumer le principe ici. Par exemple :

void setup() {
 
  String texte1 = franglais("walkie", "talkie");
  String texte2 = franglais("talkie", "walkie");
  println(texte1);
  println(texte2);
}
 
String franglais(String a, String b) {
  return a + "-" + b;
}

On obtient -

"walkie-talkie"
"talkie-walkie"

On parlera de la concaténation, le a + “-” + b dans notre code, dans le deuxième tutoriel. Ce qui est important ici c’est le fonctionnement de la méthode que nous avons créée, franglais, qui a deux entrées de type String et une sortie de type String.

Les entrées
Le a et le b de la méthode franglais sont des variables locales qui contiendront les valeurs reçues. On les appelle des arguments ou des paramètres de la méthode. Etre des variables locales signifie qu’elles ne seront utilisées et ne seront accessibles qu’à l’intérieur de la méthode franglais. Une fois utilisé par la méthode, elles disparaissent de la mémoire. Elles seront réinitialisées, avec de nouvelles valeurs, la prochaine fois qu’on appellera franglais.

En générale, l’utilisation des méthodes est basé sur un common accord ou protocole, qui est résumé ainsi : lorsqu’on appelle une méthode, on lui envoie le même nombre de valeurs, du même type (dans cet exemple de type String) et dans le bon ordre (la valeur de texte1 n’est pas la même chose que celle de texte2).

Les sorties
S’il y en a, elles sont indiquées de deux manières. Par le mot return qui permet de rendre le résultat, ici la concaténation, à la ligne de code qui l’a appelé. Dans notre exemple, il met les valeurs reçues dans les variables texte1 et texte2 :

  String texte1 = franglais("walkie", "talkie");
  String texte2 = franglais("talkie", "walkie");

Notons que le résultat dépend des valeurs rentrantes. Imaginons des méthodes plus complexes, des dixaines de lignes de code, et nous nous rendrons compte de l’utilité que représente le fait de pouvoir les appeler ainsi.

Deuxièmement, le String au début de la méthode qui remplace le void habituel, indique que le type de la sortie est un String. Par contre, void, comme par exemple au début de la méthode setup, veut dire qu’il n’y a pas de sortie (indiqué aussi par le manque du mot return). Selon le résultat de la transformation, on pourrait aussi utiliser d’autres types de variables en sortie, y compris des variables de type Array.

Du moment ou on connait la signature des entrées / sorties, on pourrait utiliser la méthode. Même si le programmeur décide de modifier le code à l’intérieur, par exemple pour améliorer la vitesse de l’opération, la méthode continuera de fonctionner si cette signature ne change pas.

Les machines
Pour reprendre la métaphore de la machine, c’est un peu comme une mixette audio. Tout en ignorant comment est fabriqué la mixette, on pourra brancher un câble pour lui envoyer un signal sonore et elle sortira un son différent après avoir opéré des transformations sur ce signal (amplitude, fréquence, etc.). Ou plus simple encore, un toaster. On lui donne de l’eléctricité en entrée et il le transforme en chaleur en sortie.

Ce rappel aidera, j’espère, à mieux comprendre le fonctionnement des méthodes appartenant à la classe String que nous allons aborder dans le tutoriel suivant. Il prépare aussi le terrain pour mieux concerptualiser la notion d’Objet que nous allons voir par la suite.

Jeff Guess (dérnière mise à jour oct 2010)