Keyboard shortcuts

Touchez ← ou → pour naviguer les chapitres

Touchez S ou / pour chercher dans le livre

Touchez ? pour afficher ce message

Touchez Esc pour masquer ce message

Accueil > Programmer avec Java >

SĂ©quence d’exĂ©cution avec le code modulaire

Survol et attentes

Définitions
Diagramme de sĂ©quence d’exĂ©cution
Un diagramme qui identifie les numĂ©ros de lignes des instructions selon l’ordre rĂ©elle d’exĂ©cution (et non l’ordre de dĂ©claration). Les appels de mĂ©thode sont indiquĂ©s par une flĂšche de la ligne de l’appel vers la ligne de la signature de la mĂ©thode appelĂ©e. Le retour (fin) de la mĂ©thode est indiquĂ© par une flĂšche de la ligne de la derniĂšre instruction de la mĂ©thode vers la ligne de l’appel.
Appel de procédure
Dans un diagramme de flux : un rectangle avec des lignes de cĂŽtĂ© doublĂ©es qui contient le nom de la mĂ©thode. Cette forme reprĂ©sente l’appel de la mĂ©thode.
Définition de procédure
Dans un diagramme de flux : commence par un ovale qui contient le nom de la mĂ©thode (au lieu de “dĂ©but”), continue avec les instructions de la mĂ©thode et finit par un autre ovale qui contient “fin de [nom de la mĂ©thode]” ou “retour”.

Objectifs d’apprentissage

À la fin de cette leçon vous devrez ĂȘtre en mesure de :

  • Suivre l’exĂ©cution d’un programme qui contient des appels de mĂ©thodes que nous avons dĂ©finies et le documenter dans un diagramme de sĂ©quence d’exĂ©cution.
  • Identifier des appels et des dĂ©finitions de mĂ©thodes dans un diagramme de flux, un diagramme de sĂ©quence d’appels et un programme Java.
  • Produire un diagramme de flux pour un algorithme simple qui contient des procĂ©dures.

CritĂšres de succĂšs

  • Je peux suivre l’exĂ©cution d’un programme qui contient des mĂ©thodes et le documenter avec un diagramme de sĂ©quence d’exĂ©cution.
  • Je peux lire des diagrammes de flux qui contiennent des procĂ©dures.

Le code modulaire

Commençons avec un exemple simple1 d’un programme dĂ©composĂ©, d’un programme modulaire.

Fichier : MainClass.java

void main() {
    welcome();
    doStuff();
    bye();
}

void welcome() {
    System.out.println("Bienvenue dans mon programme!");
}

void doStuff() {
    System.out.println("On fait des choses utiles ici...");
}

void bye() {
    System.out.println("Bye!");
}

Dans ce programme, comme dans tout programme Java, le programme principal est dans la mĂ©thode main. Dans ce cas-ci, le programme principal est trĂšs simple. Il appelle trois autres mĂ©thodes, welcome, doStuff et bye. On comprend trĂšs bien la structure globale du programme. Par la suite, tous les dĂ©tails du programme se trouvent dans les mĂ©thodes individuelles appelĂ©es par main. MĂȘme si ces dĂ©tails devenaient plus complexes, la mĂ©thode main resterait simple et facile Ă  lire.

Le diagramme de flux

Le mĂȘme programme est reprĂ©sentĂ© ci-dessous dans un diagramme de flux.

diagramme de flux avec modules

Notez qu’il y a plusieurs sĂ©quences d’instructions distinctes dans le diagramme de flux : une pour chaque mĂ©thode.

L’algorithme commence toujours avec l’ovale “DĂ©but” et se termine avec l’ovale “Fin”. Par contre, on a maintenant un nouveau type de bloc dans le diagramme - un appel de procĂ©dure :

appel dans un diagramme de flux

Ce bloc envoie l’exĂ©cution du programme Ă  la sĂ©quence d’instructions qui commence par le nom inscrit dans le bloc. Quand la sĂ©quence d’instructions de la mĂ©thode appelĂ©e est terminĂ©e, l’exĂ©cution est retournĂ©e au point de l’appel et continue le long des flĂšches.

On voit aussi que les ovales de début et de fin sont légÚrement différents pour les procédures :

  • le mot “DĂ©but” est remplacĂ© par le nom de la mĂ©thode
  • le mot “Fin” est remplacĂ© par “Fin de [nom de la mĂ©thode]” ou “Retourne”

Tracer la sĂ©quence d’exĂ©cution programme

Chaque appel d’une mĂ©thode envoie l’exĂ©cution du programme Ă  la signature de la mĂ©thode appelĂ©e et Ă  travers ses instructions. Quand la mĂ©thode appelĂ©e se termine, l’exĂ©cution est retournĂ©e au point de l’appel pour continuer avec le reste du programme.

On peut le voir et le représenter comme suit.

À partir du code

On peut utiliser l’outil Python Tutor pour visualiser l’exĂ©cution du programme Ă©tape par Ă©tape afin de mieux comprendre la mĂ©canique d’appel et de retour de mĂ©thodes.

Notez que le code est logiquement identique Ă  celui ci-dessus mais que la version de Java disponible (Java 8) ne permet pas les simplifications de la syntaxe qu’on a avec Java 22. On a donc la dĂ©claration explicite d’une classe et les mots clĂ©s static et public pour les mĂ©thodes.

Sans un tel outil, on peut tracer manuellement l’éxecution avec un diagramme de sĂ©quence d’exĂ©cution, soit :

  • une liste des numĂ©ros de ligne exĂ©cutĂ©s dans l’ordre d’exĂ©cution;
  • on indente vers la droite avec une flĂšche pour indiquer un appel de mĂ©thode et
  • on revient Ă  gauche avec une autre flĂšche pour indiquer le retour de la mĂ©thode.

Pour notre version de MainClass.java (avec la syntaxe simplifiĂ©e), le diagramme de sĂ©quence d’exĂ©cution serait :

1
2 -> 7  
     8
2 <- 9 
3 -> 11 
     12
3 <- 13 
4 -> 15 
     16
4 <- 17 
5 

Les lignes suivantes représentent des appels de méthodes :

Appel de welcome :

2 -> 7

Appel de doStuff :

3 -> 11

Appel de bye :

4 -> 15

Les lignes suivantes représentent les retours de méthodes :

Retour de welcome :

2 <- 9

Retour de doStuff :

3 <- 13

Retour de bye :

4 <- 17

Notez que l’appel et le retour reviennent Ă  la mĂȘme ligne dans le diagramme de sĂ©quence, soit 2 appel welcome et welcome retourne Ă  2, etc.

Dans Python Tutor, on sautait les lignes de signature durant l’appel et la ligne appelante lors du retour. C’est parce que nos procĂ©dures n’ont pas de paramĂštres et ne retournent pas de valeur en se terminant alors il n’y avait rien Ă  visualiser pour ces lignes. On voit les paramĂštres et les valeurs de retour dans une prochaine leçon.

Notez aussi que durant l’exĂ©cution des mĂ©thodes appelĂ©es, les numĂ©ros de ligne sont identĂ©es au mĂȘme niveau que la signature de la mĂ©thode afin de distinguer ces instructions des instructions de la mĂ©thode appelante.

À partir du diagramme de flux

On peut aussi tracer la sĂ©quence d’exĂ©cution Ă  partir du diagramme de flux. On y ajoute manuellement plus de flĂšches!

diagramme de flux avec modules

Encore une fois, comme avec le diagramme de sĂ©quence d’exĂ©cution, l’appel et le retour se font Ă  partir du mĂȘme bloc dans le diagramme de flux.

Exercices

đŸ› ïž Pratique

Travaillez dans le répertoire GitHub partagé par votre enseignant pour la pratique et les exercices

  1. Pour le programme ci-dessous dans un fichier nommé ModularSequence.java :
    1. CrĂ©ez le diagramme de sĂ©quence d’exĂ©cution dans un commentaire de bloc Ă  la fin du programme.
    2. Ajoutez un astĂ©risque (*) Ă  la fin de chaque ligne du diagramme de sĂ©quence d’exĂ©cution oĂč il y a une instruction d’affichage.
    3. Dans un deuxiĂšme commentaire de bloc Ă  la fin du programme, documentez ce que le programme affiche Ă  la console durant l’exĂ©cution. Comparez cette sortie avec le diagramme de sĂ©quence d’exĂ©cution et l’ordre des lignes avec des astĂ©risques. Est-ce que c’est cohĂ©rent? Si non, revoyez votre diagramme de sĂ©quence d’exĂ©cution pour trouver oĂč vous avez fait une erreur.
    4. Créez le diagramme de flux dans le dossier diagrammes dans un fichier nommé modular-flux.drawio.
    5. Créez le diagramme de dépendances (voir la leçon précédente) dans un fichier nommé modular-dependancy.drawio. Utilisez main comme le bloc de départ.

ModularSequence.java

void main() {
    System.out.println("Bienvenue!");
    a();
    b();
}

void a() {
    c();
    System.out.println("bleu");
}

void b() {
    System.out.println("blanc");
    a();
}

void c() {
    System.out.println("rouge");
}

  1. Exemple applicant les classes implicites et le main d’instance de JEP 463 (pleinement intĂ©grĂ© aux outils Java22+) ↩

© 2022-2025 David Crowley