Tutoriel pour apprendre la programmation orientée objet

Outil web artEoz

Martine Gautier

L'outil artEoz permet au débutant en programmation objet de se familiariser avec les constructions spécifiques aux langages objet comme la création d'objets, la notion d'appel de fonction/méthode avec receveur ou encore la liaison dynamique.

Pour réagir au contenu de ce tutoriel, un espace de dialogue vous est proposé sur le forum Commentez . ♪

- Titre : Tutoriel pour apprendre la programmation orientée objet

- Auteur : Martine Gautier

- Parution : 20 novembre 2017

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2016 Martine Gautier. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. À qui s'adresse artEoz ? Quel est son intérêt ?

- II. Une alternative à artEoz ?

- III. Prise en main de artEoz

- III-A. Pour commencer, avec des entiers

- III-B. Les erreurs

- III-C. En mode pas à pas

- III-D. Avec des objets

- III-E. Avec des structures de données

- IV. Écrire ses propres exemples

- V. Les options de artEoz

- VI. artEoz pour faire la chasse aux bogues

- VII. Le tuto de artEoz

- VIII. Une vie après artEoz ?

- IX. Qui se cache derrière artEoz ?

- X. Remerciements

I - À qui s'adresse artEoz ? Quel est son intérêt ?

Cet outil entièrement gratuit s'adresse principalement aux programmeurs Java débutants ; il est disponible sur le Web sept jours sur sept. Il n'est pas question ici d'apprendre la syntaxe du langage Java, mais plutôt sa sémantique, ou autrement dit apprendre l'effet des différentes instructions que l'on peut écrire dans un programme Java.

Comprendre ce qui se passe en mémoire lors de la création d'un objet ou d'une affectation, par exemple, est indispensable au débutant pour acquérir de solides compétences en programmation.

L'objectif principal de artEoz est donc de mettre en images les paradigmes de la programmation objet, allant de la simple déclaration de variables à l'instanciation et à l'appel de fonctions/méthodes, tout en restant beaucoup plus facile d'accès qu'un outil classique de débogage, inaccessible à un débutant.

artEoz s'adresse aussi aux équipes pédagogiques qui accompagnent les débutants dans l'apprentissage du langage Java.

Cet outil peut être utilisé par l'enseignant pour illustrer différentes notions, cours après cours. Les schémas sont clairs et instructifs. L'enseignant peut également proposer à ses élèves d'utiliser artEoz dans le cadre de travaux pratiques, en complément ou en support de ses propres exercices.

II - Une alternative à artEoz ?

artEoz s'intègre dans la catégorie des outils de visualisation de programmes. Ce domaine est vaste, actif depuis plus de trente ans, et regroupe une multitude de logiciels. Cependant, seule une petite partie d'entre eux sont des outils dédiés à la pédagogie et parmi ceux-là, peu sont encore actifs et distribués aujourd'hui. Le lecteur intéressé peut consulter un catalogue de logiciels à télécharger.

Parmi les logiciels de visualisation dynamique de programmes orientés objet, citons BlueJ ou encore Python TutorJ dont l'ergonomie, la modélisation de l'exécution d'un programme et les objectifs s'apparentent le plus à ceux de artEoz.

III - Prise en main de artEoz

artEoz est accessible à partir de la page artEoz, dans un navigateur qui ne peut pas être Safari. Un clic sur le schéma ouvre une fenêtre composée de deux parties principales : à gauche un éditeur de texte permet la saisie de quelques instructions Java, et à droite, une image.

III-A - Pour commencer, avec des entiers

Une bonne solution consiste à choisir un exemple tout fait dans la liste déroulante à gauche : on peut choisir un exemple avec des entiers, avec des chaînes de caractères ou encore avec des objets plus compliqués comme les ArrayList.

On peut commencer par choisir l'exemple avec des entiers, le texte correspondant s'affiche alors dans la fenêtre de gauche. Dans la fenêtre de droite, s'affiche une vue synthétique de la mémoire après exécution des instructions de l'exemple.

Cela permet de comprendre qu'une variable de type int contient la valeur de l'entier. Il est possible de modifier/compléter cet exemple simple dans la fenêtre de texte ou encore d'effacer complètement le texte pour écrire soi-même quelques instructions, selon son inspiration.

Par exemple :

1. int zz = 78 ;

2. int yy = zz - 1 ;

3. zz ++ ;

4. yy -- ;

5. int a = zz - yy ;

Le dessin se fait à la demande en cliquant sur l'icône qui affiche l'état de la mémoire à la fin de l'exécution ou bien sur l'icône qui affiche l'état de la mémoire après l'exécution de la première instruction seulement.

III-B - Les erreurs

Il peut arriver que le texte saisi contienne des erreurs ; le dessin ne peut donc se faire et un message d'erreur est affiché en bas de la fenêtre. Si vous utilisez un écran de petite taille, il est possible que vous soyez obligé de faire défiler la fenêtre pour le voir.

III-C - En mode pas à pas

En pratique, le schéma mémoire final n'est pas suffisant pour bien comprendre ce qui se passe. Dans ce cas, on peut exécuter les instructions pas à pas, de sorte que le schéma soit actualisé à chaque instruction. L'exécution pas à pas se fait en utilisant les flèches au-dessus du schéma : cela permet de comprendre l'effet de chaque instruction, l'une après l'autre, de revenir en arrière si le besoin s'en fait sentir. Car finalement, ce n'est pas tant le schéma mémoire en lui-même que sa dynamique de construction, instruction par instruction, qui est instructive.

III-D - Avec des objets

Il est indispensable d'étudier un exemple plus compliqué, comme celui avec des chaînes de caractères (String). En sélectionnant ce nouvel exemple, l'exemple précédent est effacé et remplacé par une suite d'instructions qui instancie des chaînes. On constate qu'une variable de type String contient l'adresse d'un objet étiqueté String ; l'un de ces champs est un tableau contenant les caractères de la chaîne.

Il est encore possible de modifier/compléter/effacer cet exemple dans la fenêtre de texte pour écrire un autre exemple, comme :

1. String s1 = "Bonjour le monde " ;

2. String s2 = s1 ;

3. int h = 8 ;

4. s2 += "Il est "+ h + "heures" ;

III-E - Avec des structures de données

D'autres exemples plus compliqués sont à disposition.

Les deux captures d'écran ci-dessous montrent deux exemples proposés, le premier avec une ArrayList, le second, plus compliqué avec une HashMap.

Ces exemples permettent de comprendre la représentation mémoire de ces structures de données complexes, et ainsi de se familiariser avec l'usage que l'on peut en faire.

IV - Écrire ses propres exemples

Les exemples ne sont là que pour faire les premiers pas guidés. Mais dans la fenêtre de texte, on peut écrire à peu près n'importe quoi. Toutefois, on n'écrit que des instructions, pas de clause import, pas de clause package, pas de déclaration de classe ni de fonction.

Il est d'usage de n'écrire que quelques courtes séquences d'instructions, à l'instar de ce que l'on écrirait dans une fonction main simple. Il n'est pas question ici de recopier l'ensemble de ses propres classes ou une séquence dépassant la taille de l'écran. Il faut garder en mémoire le fait que l'objectif est principalement pédagogique ; artEoz est fait pour illustrer des points précis qui permettront d'asseoir une meilleure connaissance du langage.

La taille du schéma mémoire doit rester suffisamment raisonnable, pour que l'on puisse en retirer une information utile (même si on peut zoomer sur une partie) : un schéma qui ne tient pas sur l'écran ou qui contient trop de variables et d'objets n'a aucun intérêt, sauf esthétique peut-être.

Les instructions peuvent utiliser les classes de la bibliothèque Java, sans qu'il soit nécessaire de les importer. Il est toutefois déconseillé d'utiliser les classes des packages Swing et Awt ; les objets créés sont en effet très gros et l'affichage du schéma risque de ne présenter que peu d'intérêt.

V - Les options de artEoz

L'affichage du schéma mémoire est régi par quelques options, accessibles par sur la droite de la fenêtre.

En voici quelques-unes possibles :

- l'option Objets morts permet d'afficher les objets morts qui ne sont donc plus accessibles par aucune variable. Cela permet d'appréhender les problèmes de gestion de la mémoire ;

- l'option Champs hérités permet d'inclure dans le schéma mémoire les champs des objets issus de classes héritées. C'est l'occasion d'apprendre que les champs d'un objet ne sont pas tous déclarés dans la même classe ;

- l'option Pile visualise la pile des appels de fonctions, avec pour chaque appel, la liste des variables concernées (le receveur de l'appel this, les paramètres et les variables locales si besoin).

Dans l'exemple ci-dessous, le schéma affiche des objets morts (en gris), issus de la création d'une liste avec une capacité initiale trop faible : trois tableaux d'Object sont ainsi créés, seul le dernier est accessible.

Cet exemple simple permet de comprendre qu'une mauvaise gestion de la mémoire peut être à l'origine d'une efficacité déplorable. Il suffirait de corriger la capacité initiale de la collection fixée lors de l'instanciation pour que plus aucun objet mort n'apparaisse.

VI - artEoz pour faire la chasse aux bogues

artEoz est bien pratique aussi pour dénicher des bogues dans ses propres applications. Qui n'en fait pas ?

Pour cela, il faut importer ses propres ressources, des classes ou des archives Java, en utilisant l'icône . Une fois l'importation réussie, les classes peuvent être instanciées comme celles de la bibliothèque. Ne pas oublier de rester raisonnable dans la complexité des instructions écrites dans la fenêtre. Ce n'est pas le moment d'inclure votre application de 300 classes avec une fonction main de 100 lignes ! Le schéma risque d'être long à dessiner et même si artEoz a le dos solide, vous n'apprendrez rien…

VII - Le tuto de artEoz

Il est nécessaire d'être un peu guidé dans l'utilisation d'artEoz, pour pouvoir mettre le doigt sur les points importants. Le menu de gauche propose un mode tuto via l'item Tutoriel artEoz.

Ce tuto offre une quinzaine de pages, de thèmes différents, accessibles par la barre horizontale colorée.

Les exercices proposés peuvent servir de support à des travaux pratiques, mais sont suffisamment détaillés pour être utilisés en autonomie. Ils illustrent différents points délicats comme la liaison dynamique ou la mise en évidence des objets morts. Un survol de affiche la réponse à la question posée.

VIII - Une vie après artEoz ?

Quand vous aurez fait le tour du potentiel d'artEoz, il vous restera à vous féliciter d'avoir lu ce tutoriel et à constater que cet outil se décline en anglais si besoin. Si vous êtes observateur, vous trouverez aussi un mode Python, qui fonctionne selon le même principe, avec un potentiel supplémentaire : on peut écrire des fonctions dans la fenêtre de texte et du coup, la pile à l'exécution prend tout son sens. Un vrai bonheur pour qui veut enfin comprendre comment on calcule factorielle 10 !

En cherchant bien, si vous êtes très curieux, vous trouverez aussi asae, le dernier-né de la famille. Ce nouvel outil permet de dessiner un schéma mémoire à la mode artEoz. Il permet à un étudiant par exemple de dessiner son propre schéma mémoire sans outil de dessin classique, mais plutôt en le décrivant avec une syntaxe assez simple. Là encore, l'objectif est purement pédagogique : cela permet à l'étudiant de se faire sa propre idée du schéma mémoire, de le dessiner et de comparer son schéma avec celui dessiné par artEoz. La comparaison est, pour l'instant, laissée à la discrétion de l'utilisateur. Mais asae n'a pas dit son dernier mot.

IX - Qui se cache derrière artEoz ?

artEoz est le fruit d'une expérience pédagogique de 25 ans au sein de l'Université de Lorraine, dont il est la propriété. Il a été conçu et développé par Martine Gautier et Brigitte Wrobel-Dautcourt. Il est régulièrement utilisé par les étudiants de Licence Informatique de l'Université de Lorraine et de l'école d'ingénieurs Télécom Nancy, étudiants que nous remercions au passage pour avoir essuyé les plâtres des premières versions de cet outil qui manquait.

Vous pouvez nous contacter pour un retour d'expérience, une suggestion ou une critique ou un peu de chaque. Profitez de la discussion forum associée à ce tutoriel pour laisser vos remarques.

X - Remerciements

Nous tenons à remercier jacques_jean pour la relecture orthographique de cet article et Mickael Baron pour la mise au gabarit.