mercredi 16 novembre 2016

[Java] [BlueJ] Commencer avec Java sans passer par les Classes

Apprendre un premier langage de programmation n'est pas (toujours) une tâche facile. Il est important de saisir :

  • Les notions de la programmation comme les variables, les constantes et les structures de contrôle.
  • Les notions liées au langage utilisé. En effet, il est rare de trouver un langage qui respecte à la lettre les propositions théoriques sans avoir des caractéristiques particulières.

Dans ce sens, l'apprentissage de Java est lié, dans la majorité des universités (au moins Algériennes) à l'apprentissage de la programmation Orientée Objet. Les étudiants doivent assimiler des notions liées à la programmation Orientée Objet comme "la classe", "l'objet" et "l'instantiation", comme ils doivent saisir les notions liées au langage Java comme la fameuse fonction :


public static void main(String args[]){
}

Cette fonction qui doit faire part d'une classe.
Ainsi, il sera difficile, suivant cette approche, de séparer les notions de la programmation Orientée Objet des notions propres au langage Java.
La pratique suivie aujourd'hui est de demander aux étudiants de commencer par un exemple (le fameux "Hello World") sans chercher à comprendre les différents mots-clés utilisés, alors, l'étudiant va réussir à écrire un programme et de l'exécuter sans vraiment comprendre :

  • public : et les principes d'encapsulation,
  • static : et la différence entre des méthodes propres à la classe et des méthodes propres aux objets, et pour comprendre cette différence, il faut comprendre la notion d'instanciation et du mot-clé "new".
  • String agrs[] : "pourquoi ce tableau est en paramètre? Quel est son rôle?"
  • System.out.println : "pourquoi tous ces points? Est-ce un enregistrement?"

Ce problème peut être évité avec d'autres langages. En effet, si on veut créer le fameux Hello World dans le langage Pascal, il suffit d'écrire :

Program HelloWorld;
Begin
 WriteLn('Hello World');
End.

Dans ce cas, il n'est pas très difficile d'expliquer ou de justifier les quatre (04) mots-clés cités : Program, Begin, Write et End.

Une solution : BlueJ

Pendant les premiers chapitres, ce qui est demandé des étudiants est d'écrire des programmes pour manipuler les types des données, les variables et les structures de contrôle en modifiant à chaque fois le corps de la méthode main sans y toucher. La question qui se pose est : existe-t-il un outil qui permet de prendre un bout de code et de l'insérer dans une méthode main (ou autre) et de l'exécuter d'une manière transparente par rapport à l'apprenant? La réponse est, heureusement, Oui. BlueJ peut le faire.
BlueJ est un éditeur Java open source. Il permet de créer des projets Java, de les compiler et de générer la Javadoc. Il donne aussi la possibilité de faire une édition graphique des classes et de leurs dépendances en manipulant un diagramme des classes (proche de celui en UML).
Parmi les fonctionnalités offertes, nous trouvons un espace particulier appelé le Code Pad. En l'utilisant, nous pouvons exécuter des bouts de code Java sans se méfier de la création d'une classe et d'une méthode main là-dedans.



Il est ainsi possible de se concentrer sur les mots-clés et les notions de base avant de passer vers les notions plus complexes de la programmation Orientée Objet. En plus, la console est affichée dans une fenêtre séparée mais propre à l'éditeur ce qui évite de faire appel à des éditeurs plus lourds ou bien d'utiliser la ligne de commande.


Il est possible de créer, localement, des variables. Dans cet exemple, nous créons un entier nommé (x) qui prend la valeur 10 :



Chaque ligne est exécutée en la validant, malgré cela, il est possible de créer des bloques. Il suffit de ne pas valider la ligne par la touche "Entrée" et de faire un retour à la ligne par la combinaison "Shift+Entrée".



Il est possible de manipuler des objets de l'API standard. Pour cela, il faut mettre la déclaration complète vu qu'il n'est pas possible de faire un "import".



BlueJ permet aussi une manipulation visuelle des objets. Nous présenterons ces fonctionnalités dans un autre article.