Annexe E Aide-mémoire de programmation
En complément de la progression du cours, où ces différentes constructions
sont introduites, et de la table des mots clés donnée à
l'annexe D, nous vous proposons une illustration par
l'exemple des principales constructions de Java. Ces exemples n'ont
aucune prétention d'exhaustivité, ni même d'utilité pratique, mais pourraient
être utiles lorsque vous avez besoin de vous rafraîchir la
mémoire sur la manière de réaliser telle ou telle construction.
Dans la même logique d'exemples, je ne donne que très peu de commentaires
et d'explications complémentaires, et vous invite à vous reporter aux pages
correspondantes (cf. table des mots clés par exemple), le cas échéant.
E.1 Constructions conditionnelles
La construction habituelle (cf. § 2.7.1) s'écrit :
if (<condition>) {
<bloc-1>
}
else {
<bloc-2>
}
la partie else étant facultative. Voici un exemple :
if (monnaie < prix) {
System.out.println("Paiement insuffisant - veuillez ajouter des pièces");
}
else {
System.out.println("Voici votre café");
livraisonCafé();
double rendu = prix - monnaie;
if (rendu > 0) {
System.out.println("Rendu = " + rendu);
}
}
Une autre construction, moins souvent utilisée, permet de représenter un
aiguillage par cas (cf. p. ??) :
switch(<expression>) {
case <label-1>:
<instructions>
break;
case <label-2>:
<instructions>
break;
...
default:
<instructions>
}
Voici un exemple :
switch(sélection) {
case 'c':
System.out.println("Café");
break;
case 't':
System.out.println("Thé");
break;
case 'b':
System.out.println("Bière");
break;
case 'w':
System.out.println("Whisky");
break;
default:
System.out.println("Choix invalide");
}
E.2 Constructions itératives
La construction itérative la plus simple est la construction
"tant-que", qui s'écrit (voir § 2.7.2):
while (<condition>) {
<bloc>
}
Une variante -- la seule différence est que le bloc s'exécute au moins une
fois avant le test -- s'écrit :
do {
<bloc>
} while (<condition>);
Voici des exemples de ces deux constructions :
boolean faim = true;
while (faim) {
manger();
faim = getEtatEstomac();
}
int x = Utils.lireEntier("Donnez un nombre");
do {
x += 3;
}
while (x < 100);
L'autre construction itérative, bien adaptée aux énumérations ou aux parcours de
tableaux, est la suivante :
for (<initialisation> ; <condition de poursuite> ; <passage au suivant>) {
<bloc>
}
Et voici un exemple :
int[] tab = new int[30];
// ...
int somme = 0;
for (int i = 0 ; i < 30 ; i++) {
somme += tab[i];
}
E.3 Définition et appel d'une fonction
Quand on définit une fonction, on donne son type, son nom, et le type de
ses paramètres, puis son corps, et on n'oublie pas de retourner un résultat :
[public] [static] <type> <fonction> (<type-1> <param-1>, ..., <type-n> <param-n>) {
<corps>
return <résultat à retourner>;
}
Voici un exemple :
public static double consommation(double nbKilomètres, double nbLitres) {
return nbLitres * 100.0 / nbKilomètres;
}
La fonction s'utilise ensuite de la manière suivante :
double km = 458;
double l = Utils.lireDouble("Litres consommés ?");
double c = consommation(km, l);
System.out.println("Consommation = " + c + "litres aux 100 km");
E.4 Définition et appel d'une procédure
Une procédure est définie quasiment de la même manière ; la différence est
dans le fait qu'elle ne "retourne" rien, ce qui est indiqué par le
mot clé void:
public static void imprimerLaCommande(String[] articlesCommandés) {
for (int i = 0 ; i < articlesCommandés.length ; i ++) {
System.out.println(articlesCommandés[i]);
}
}
Voici un exemple d'appel de procédure :
String[] commande = new String[3];
commande[0] = "Ordinateur";
commande[1] = "Imprimante";
commande[2] = "Scanner";
imprimerLaCommande(commande);
E.5 Définition d'une classe
public class Point {
// variables d'instance
protected double x;
protected double y;
// constructeur
Point(double unX, double unY) {
x = unX;
y = unY;
}
// méthodes d'accès en lecture
public double getX() {
return x;
}
public double getY() {
return y;
}
// méthodes d'accès en écriture
public void setX(double unX) {
x = unX;
}
public void setY(double unY) {
y = unY;
}
// autres méthodes
public double getRho() {
return Math.sqrt(x * x + y * y);
}
// etc.
}
E.6 Instanciation d'une classe et accès aux méthodes
double x1 = 3.4;
double y1 = 2.6;
double x2 = Utils.lireRéel("Abscisse = ");
double y2 = Utils.lireRéel("Ordonnée = ");
Point p1 = new Point(x1, y1);
Point p2 = new Point(x2, y2);
System.out.println("P1 : (" + p1.getX() + "," + p1.getY() + ")");
p1.setX(5.6);
p1.setY(p2.getX());
double rho = p1.getRho();
// etc.
E.7 Récupération d'une exception
PileEntiers maPile = new PileEntiers();
// ...
try {
System.out.println("Je dépile " + maPile.depiler());
}
catch(EmptyStackException ese) {
System.out.println("Attention, la pile est vide");
}