7 - Introduction à Java

Petit résumé

C est un langage populaire (une partie du cours IFT 1810, langage du IFT 1969). C++ (cours IFT 1166, IFT 1169) est une extension du langage C qui est plus populaire que C. Ses nouveautés rendent plus agréable le C et permettent aussi de faire la programmation orientée objet (POO).

JAVA (IFT 1810, IFT 1170, IFT 1176) utilise surtout la syntaxe du C++. De plus, Java est un langage purement orienté objet.

Dans le cours IFT 1810, on introduit à la programmation orientée objet (POO), à l’aperçu du langage JAVA sans aller dans les détails. Le but de ce résumé est de vous permettre de saisir des explications en classe au lieu de copier des programmes écrits au tableau. Les exemples expliqués en classe et disponibles sur le site Web du cours utilisent l’environnement JCreator.

Quelques mots sur la POO :

Dans notre vie quotidienne, on travaille très souvent avec des objets :

Un tableau est un objet. Il dispose de champs d’informations (des attributs) : materiel, couleur, largeur, hauteur :

On peut fabriquer (construire, instancier) un tableau par plusieurs manières :

  • matériel : en bois, en métal, en plastique dur, . . .

  • couleur : noire, blanche, . . .

  • largeur : 4.2 mètre, 3.8 mètre, . . .

  • hauteur : 2.3 mètre, 1.90 mètre, . . .

Il faut que le tableau existe (soit construit, instancié) avant de pouvoir travailler avec un tableau.

Que peut-on faire avec un tableau ?

En français, on est habitude avec l’action :

  • écrire au tableau

  • effacer le tableau

  • laver le tableau

  • etc …

En POO, on écrit souvent sous la forme :

  • tableau.écrire(. . .) appliquer la méthode écrire sur l’objet tableau

  • tableau.effacer(. . .) appliquer la méthode effacer sur l’objet tableau

  • etc . . .

Une porte est un autre objet.

On peut construire une porte par plusieurs manières : en bois, en métal, en pailles, . . .

Que peut-on faire avec une porte ?

  • ouvrir la porte

  • fermer la porte

  • etc …

C’est la même chose en programmation orientée objet (POO) :

Quelles sont les caractéristiques (champs, attributs) d’un objet ? Comment construire un objet ? Quelles sont les méthodes qu’on peut appliquer sur l’objet ?

Une classe en POO est une unité comportant très souvent : des champs d’informations, des méthodes spéciales s’appelant constructeurs pour construire (instancier) des objets de la classe, des méthodes pour appliquer sur ses objets, des clauses d’accès (privée, publique), etc . . .

Exemple : Concevoir la classe cercle en sachant qu’un cercle est déterminé par son champ rayon. On peut calculer la surface, le périmètre d’un cercle, etc …

Réponse :

class Cercle
{    // l’accès au champ rayon est privé, dans le corps
     // de la classe Cercle seulement 
	private double rayon;

     // un constructeur
	public Cercle(double r)
	{
		rayon = r;
	}

     // un autre constructeur  
	public Cercle()
	{
		rayon = 1.234; // valeur par défaut, par exemple
	}

     // méthode calculante et retournant le périmètre
     // d’un cercle où périmètre = 2 x PI x rayon
     // et en Java,  Math.PI fournit le champ PI valant
     // 3.14159
	public double perimetre()
	{
		return 2 * Math.PI * rayon;
	}
     // méthode calculante la surface
	public double surface()
	{
		return  Math.PI * rayon * rayon;
	}
     . . .  etc . . .
} // fin de la classe Cercle

On apprendra plus tard, les détails de la conception d’une classe. Par contre, on utilisera assez tôt, quelques classes du langage Java :

  • String : classe des chaînes de caractères

  • Integer : classe associée au type int

  • Double : classe associée au type double (Le type double est aussi pour les réels mais plus de chiffres significatifs que le type float ).

Affichage à l’écran : appliquer la méthode printf sur l’objet out du System (l’objet sortie du System est l’écran).

System.out.printf("Périmètre : %.2f ", c.perimetre());
                    ;     
System.out.printf("Bon succès en POO!\n); ");

Notions de base de Java vs C :

if, switch, do … while, while, for : comme le C (plus tard, on verra une autre forme de for en Java).

Des opérateurs : pareils en C

Pour les réels : Dans IFT 1810, en Java, on utilise couramment le type double au lieu du type float (double pour réel en double précision).

Commentaire en ligne : une des nouveautés en Java

   //  contenu du commentaire

Exemple :

final double TAUX_TPS = 0.05; // 5 % pour taxe TPS

TAUX_TPS est de type réel, sa valeur est 0.05 et cette valeur est finale, on ne change plus, ne modifie plus. C’est une constante.

Flexibilité de déclaration : on peut mélanger des déclarations avec des instructions.

Exemples :

for(int n = 1; n <= 5; n++)
  System.out.printf("Bonjour!\n");

int  somme = 0;
for (int n = 1; n <= 5; n += 2)
  somme += n ;

Autres nouveautés : à venir

Exemples simples :

Exemple1 : Allure d’un programme très simple en Java

Écrire un programme Java permettant de déclarer et d’initialiser quelques informations d’une étudiante du nom Lachance Pascale. On affiche ses informations ainsi que quelques messages de souhait.

// Fichier Ex0.java
public class Ex0 {


 public static void main(String[] args) {

   String nomPre = "Lachance Pascale" ;

   int age = 21 , nbCafe = 2 ; // 2 tasses de café par jour
   double taille = 1.67, poids = 65.4;

   System.out.printf("Bienvenue au Java et à la POO\n");

   System.out.printf("\nInformations de cette étudiante : \n");
   System.out.printf("Nom et prénom : %s\n", nomPre);
   System.out.printf("Age           : %d an(s)\n", age);
   System.out.printf("Café          : %d tasse(s)par jour\n", 
                               nbCafe);
   System.out.printf("Sa taille     : %.2f mètre\n", taille);
   System.out.printf("Son poids     : %.1f kg\n", poids);

   System.out.printf("\nBon succès en Java!\n\n");
 }
}

Exécution :

---------------Configuration: <Default>--------------------
Bienvenue au Java et à la POO

Informations de cette étudiante :
Nom et prénom : Lachance Pascale
Age           : 21 an(s)
Café          : 2 tasse(s)par jour
Sa taille     : 1,67 mètre
Son poids     : 65,4 kg

Bon succès en Java!
Process completed.

Exemple2 : Allure d’un programme très simple en Java

Écrire un programme Java permettant de déterminer et d’afficher les diviseurs de 6, de 20 puis de 17 selon le format ci-dessous.

Pour ce programme, on n’utilise pas de sous-programmes autres que main (un sous-programme est une fonction en C, une méthode en Java) :

Les diviseurs de 6 sont :
  1)        1
  2)        2
  3)        3
  4)        6

Les diviseurs de 20 sont :
  1)        1
  2)        2
  3)        4
  4)        5
  5)       10
  6)       20

Les diviseurs de 17 sont :
  1)        1
  2)       17
// Fichier Ex1.java
public class Ex1 {


public static void main(String[] args) {

   // declaration de 3 constantes
   final int NOMBRE1 =  6,
             NOMBRE2 = 20,
             NOMBRE3 = 17;
   int rang;

   // afficher les diviseurs de 6 :
    rang = 0;
    System.out.printf("Les diviseurs de %d sont : \n", NOMBRE1);
    for(int candidat = 1 ; candidat <= NOMBRE1 ; candidat++)
    	if (NOMBRE1 % candidat == 0)
    	{
    		rang++;
    		System.out.printf("%3d) %8d\n", rang, candidat);
    	}
    System.out.printf("\n");

    // afficher les diviseurs de 20 :
    rang = 0;
    System.out.printf("Les diviseurs de %d sont : \n", NOMBRE2);
    for(int candidat = 1 ; candidat <= NOMBRE2 ; candidat++)
    	if (NOMBRE2 % candidat == 0)
    	{
    		rang++;
    		System.out.printf("%3d) %8d\n", rang, candidat);
    	}
    System.out.printf("\n");

    // afficher les diviseurs de 17
    rang = 0;
    System.out.printf("Les diviseurs de %d sont : \n", NOMBRE3);
    for(int candidat = 1 ; candidat <= NOMBRE3 ; candidat++)
    	if (NOMBRE3 % candidat == 0)
    	{
    		rang++;
    		System.out.printf("%3d) %8d\n", rang, candidat);
    	}
    System.out.printf("\n");
}
}

Veuillez noter que les 5 lignes du genre :

if (NOMBRE1 % candidat == 0)
    	{
    		rang++;
    		System.out.printf("%3d) %8d\n", rang, candidat);
    	}

peuvent se remplacer par les 2 lignes comme suit :

if (NOMBRE1 % candidat == 0)
     System.out.printf("%3d %8d\n", ++rang, candidat);

Exécution :

-------------Configuration: <Default>--------------
Les diviseurs de 6 sont :
  1)        1
  2)        2
  3)        3
  4)        6

Les diviseurs de 20 sont :
  1)        1
  2)        2
  3)        4
  4)        5
  5)       10
  6)       20

Les diviseurs de 17 sont :
  1)        1
  2)       17

Process completed.

Exemple 3 : Allure d’un programme en Java

Refaites l’exemple 1 en écrivant un programme Java avec méthode d’une classe :

En-tête : static . . . ( . . . )

Appel : Classe.méthode static ( . . . )

Ou

méthode static ( . . . )

La méthode est écrite dans la classe

// Fichier Ex3.java
public class Ex2 
{

  // méthode static de la classe Ex2 permettant 
  // d’afficher les diviseurs d’un nombre donné
	static void afficherDiv(int nombre)
	{
      int rang = 0;
      System.out.printf("Les diviseurs de %d sont : \n", 
                           nombre);
      for(int candidat = 1 ; candidat <= nombre ; 
                                             candidat++)
    	if (nombre % candidat == 0)
    		System.out.printf("%3d) %8d\n", ++rang, 
                                  candidat);

      System.out.printf("\n");

	}


public static void main(String[] args) {

   final int NOMBRE1 =  6,
             NOMBRE2 = 20,
             NOMBRE3 = 17;


   Ex2.afficherDiv(NOMBRE1);
   Ex2.afficherDiv(NOMBRE2);
   Ex2.afficherDiv(NOMBRE3);
}
} // fin de classe Ex2

Exécution :

----------------Configuration: <Default>-----------------
Les diviseurs de 6 sont :
  1)        1
  2)        2
  3)        3
  4)        6

Les diviseurs de 20 sont :
  1)        1
  2)        2
  3)        4
  4)        5
  5)       10
  6)       20

Les diviseurs de 17 sont :
  1)        1
  2)       17


Process completed.

Convention des identificateurs en Java :

Pour le nom d’une classe :

Début de chaque mot en majuscule.

Exemples :

Cercle, Ex0, Ex1, Integer, Double, String, StringTokenizer, etc …

Pour le nom d’une constante : tous en majuscules.

Exemples :

final int MAX_AGE = 132 ;
final double BAR_FINAL = 0.40; // 40 % pour le final

Pour le nom d’une variable, d’un objet, d’une méthode :

Le 1er mot en tous minuscules, début d’un nouveau mot en majuscule.

Exemples :

static void afficherDiv(int nombre)
. . .
int age, cafe, nbPieds, nbPouces;
Cercle c1, c2;
String nomPre = Tremblay Nicole,
       codePerm = TREN12619407;

Quelques éléments de programmation

Type

Java et C Java et C

La sélection simple avec if

if   (   condition    )                            
          instruction A                                                                                            
else                                                    
          instruction B                                                                                                

Java et C Java et C

Fonctionnement

Si la condition vaut vraie, on exécute les instructions sous if.

Dans le cas contraire (sinon), et, si la clause else se présente, on effectue les instructions sous else.

La sélection multiple avec switch …

switch   (   expression    )                            
 {  case cte1 : instructions 1;                            
     case cte2 : instructions 2;                                       
     . . .                                                             
     case ctek : instructions k;                                        
     default  : instructions    ;                      
   }

Pour quitter le suivant que (switch), la dernière instruction de “l’instructions n” est souvent l’instruction break (voir exemples). L’instructions n peut être vide.

Exemple avec Java :

switch   (   rang  )
{ // du lundi à jeudi :
  case 2 :
  case 3 :
  case 4 :
  case 5 : System.out.printlf"On travaille très fort\n");
           break;
  // cas de vendredi
  case 6 : System.out.printf ("Fin de semaine s'en vient\n ");
           break;
  // cas de samedi ou dimanche
  case 1 :
  case 7 : System.out.printf ("Youppi! C'est la fin de semaine\n");
           break;
  default: System.out.printf ("Rang erroné!\n");   
  // break ; n'est pas nécessaire
}

Boucle de répétition avec tant que (while):

while (  condition  )                            
   instruction                                      

Java et C Java et C

Fonctionnement :

Étape 1 : vérifier d’abord la condition

Étape 2 : si la condition vaut vraie alors

  • On effectue les instructions à répéter

  • On revient à l’étape 1 si non, on quitte la boucle

Il faut assurer que la condition soit bien définie avant d’exécuter la boucle while. La condition est une expression booléenne en Java (pas une expression entière comme en C, C++).

Exemple simple: Calcul de S = 5 + 15 +… + 105

final int BORNE1 = 5, BORNE2 = 105, LE_PAS = 10 ; 
int somme = 0, valeur = BORNE1;
while (valeur <= BORNE2) {
     somme += valeur ;
     valeur += LE_PAS; 
} 
System.out.printf("somme = %d\n", somme);

Boucle de répétition avec pour (for . . .) :

for ( exp1 ; exp2; exp3  )                 
    instruction                                                  

Java et C Java et C

Fonctionnement classique:

Initialiser la variable de contrôle de la boucle:

variable = valeur de départ

Tant que Variable <= valeur d’arrivée Faire

  • Effectuer les instructions à répéter

  • Ajuster la valeur de la variable de contrôle variable = variable + lePas

Domaines d’utilisation:

On utilise la boucle for quand on sait à l’avance le nombre de fois qu’on répète le même traitement. C’est le cas des valeurs dont le pas est une constante entre deux bornes données. On l’utilise également pour parcourir les indices d’un tableau.

Calcul de S = 10 + 15 + 20 + 25 + … + 150

int somme = 0 ;
for ( int valeur = 10 ; valeur <= 150; valeur += 5)
     somme += valeur ;
System.out.printf("S = %d\n", somme);

OU

int somme = 0 ;
for ( int valeur = 150 ; valeur >= 10; valeur -= 5)
     somme += valeur ;
System.out.printf("S = %d\n", somme);

Boucle de répétition avec do . . . while

do                                                       
    instruction                                       
while  ( condition pour continuer ) ;          

Java et C Java et C

Exemple 1 : Calcul de P = 10 * 15 * 20 * … * 45

int produit = 1, valeur = 10;
do {
   produit *= valeur ;
   valeur += 5 ;
} while (valeur <= 45);
System.out.printf("P = %d", produit) ;

Exemple 2 : Calcul la somme des diviseurs de 100

final int NOMBRE = 100;
int somDivi = 0, candidat = 1 ;
do {  
    if (NOMBRE % candidat == 0)
    	somDivi += candidat ;
    candidat++;    
} while (candidat <= NOMBRE);
System.out.printf("somme des diviseurs de %d est %d",                 
                     NOMBRE, somDivi);

Exercices :

Exercice 1

Écrire un programme Java permettant d’utiliser de méthodes static permettant de déterminer puis afficher les 3 lignes suivantes :

Les 4 diviseurs de  6 sont :   1   2   3   6
Les 6 diviseurs de 20 sont :   1   2   4   5  10  20
Les 2 diviseurs de 17 sont :   1  17

Solution :

// Fichier Exercice1.java (page 17, document java_01.doc)
public class Exercice1 
{

   // méthode static de la classe Exercice1 comptant et retournant
   // le nombre de diviseurs d’un entier nombre > 0
static int nbDiv(int nombre){
     int n = 0;
     for(int candidat = 1 ; candidat <= nombre ; candidat++)
         if (nombre % candidat == 0)
              n++;
     return n;
}

static void afficherDiv(int nombre){
    System.out.printf("Les %d diviseurs de %2d sont : ", nbDiv(nombre),nombre);
    for(int candidat = 1 ; candidat <= nombre ; candidat++)
         if (nombre % candidat == 0)
              System.out.printf("%3d ", candidat);

    System.out.printf("\n");

}

public static void main(String[] args) {

   final int NOMBRE1 =  6,
             NOMBRE2 = 20,
             NOMBRE3 = 17;


   Exercice1.afficherDiv(NOMBRE1);
   afficherDiv(NOMBRE2);
   afficherDiv(NOMBRE3);
}
} // fin de la classe Exercice1

Exécution :

--------------------Configuration: <Default>--------------------
Les 4 diviseurs de  6 sont :   1   2   3   6
Les 6 diviseurs de 20 sont :   1   2   4   5  10  20
Les 2 diviseurs de 17 sont :   1  17

Process completed.

Exercice 2

Écrire un programme Java permettant d’utiliser des méthodes static permettant de déterminer puis afficher les 2 blocs de lignes suivantes :

1 3 5 7 9
1 3 5 7
1 3 5
1 3
1

1 3 5
1 3
1

Solution :

// Fichier Exercice2.java (page 18, document java_01.doc)
public class Exercice2 {


    static void afficher(int nombre){
       for(int fin = nombre ; fin >= 1 ; fin -= 2){
      	  for(int debut = 1; debut <= fin ; debut += 2)
      	      System.out.printf("%3d ", debut);
      	System.out.printf("\n");
       }

       System.out.printf("\n");

    }


    public static void main(String[] args) {

       final int NOMBRE1 =  9,
                 NOMBRE2 =  5;

       afficher(NOMBRE1);
       afficher(NOMBRE2);
    }
}

Exécution :

--------------------Configuration: <Default>--------------------
  1   3   5   7   9
  1   3   5   7
  1   3   5
  1   3
  1

  1   3   5
  1   3
  1


Process completed.