Survol rapide de JAVA

Jean Vaucher
(v.1.1: 15 sept 1998)

Notions preliminaires

La syntaxe de Java est copiée sur C et C++. Ceci a les consequences suivantes:

Classes et programme

Java se veut un langage tout-objet et les unites de base d'un programme Java sont des classes - descripteurs d'objets. Tout element d'un programme, instruction ou declaration, doit etre place dans une classe et un programme Java est une fonction "main" inseree dans une class [ Notez, par contre que les classes ne peuvent pas etre imbriquees ].
Exemple: Pgm1.java
class Pgm1 {

     public static void main ( String arg [] ) {
          System.out.println ("Allo");
     }
}
Selon les concepts etablis de l'approche objet, une classe sert de description pour des ensembles quelconques d'objets de meme nature (on dit aussi des instances) , p.e. des employes ou des transactions. Dans le cas de Pgm1, ci-dessus, le but de la classe n'est certainement pas de servir de modele a une multitude d'instances. La classe Pgm1 agit comme un module unitaire qui regroupe le programme principal avec des procedure et des variables globales.

On note donc qu'il peut y avoir 2 sortes de classes: 1) des classes classiques qui decrivent des objets (par exemple une classe employe) et 2) des classe modules qui regroupent des variables et operations globales pour un domaine (par exemple, une classe paye).

Dans Java, rien ne distingue une classe module d'une classe prototype. C'est au niveau des elements definis dans une classe qu'on separe les deux roles: les elements du module sont declares static et ceux destines aux instances d'objets n'ont pas ce specificateur. Formellement, on decrit les static comme des attributs de classe et les autres comme des attributs d'instance.

Certaines des classes predefinies de Java, agissent domme des modules. Un exemple typique est la classe Math qui regroupe des fonctions mathematiques comme sin ou exp et des constantes comme PI. D'autres classes, comme HashTable qui decrit des Dictionnaires, sont conforme au modele classique d'une classe.

Certaines classes melangent les deux roles. En particulier, String qui decrit les attributs des chaines de caracteres. Par contre, cette classe comporte aussi un grand nombre de fonctions globales comme valueOf qui convertit une valeur de type quelconque en String. Exemples:

	String S = "abcdef";
	
	int i = S.length();           // length  est une fonction d'instance
	S = String.valueOf( 123.5 );  // valueOf est une fonction de classe

Dans vos programmes, il est recommande de ne pas melanger les deux roles.

Types et déclarations

Taille
(octets)
Integer Float
1 byte
2 char
short
4 int float
8 long double

On peut ausi combiner l'initialisation avec la déclaration

		int    i, j=1, k;
		double x = 3.1416 ;
		char   c;
		
	[ Note: j et x sont juste initialisés...pour déclarer des constantes,
	       on utilise les mot-clés static final ]
	
Constantes:

	static final float  PI = 3.14159265 ;
	static final int    TAILLE = 500 ;
Par convention, on écrit les constantes en lettre majuscules. Notez que la constante Math.PI est pré-déclarée.

Affectation

Attention, en JAVA c'est le symbole = et non le := comme en Simula ou Pascal.
Exemple:
	i = 123;  x = 3E-4;

Priorite des operateurs

Priorité Opérateurs Catégories
1
     []  indexation
     .  acces a des champs
2
    ++ -- (increment/decrement) 
     +   -  
     !       NOT logique
Operateur unaires
3
    new 
    (...)    cast
4
    *   /
    %    (mod)
Operateurs multiplicatifs
5
    + -  addition, soustraction
    +    concatenation de String
Operateurs additifs
6
>
<
>=
<=
instanceof
Precedence
7
==
!=
Egalite
8
&&
AND
8
||
OR
9
= += -= ...
Affectation

L'énoncé conditionnel: IF

	if ( condition )  statement ;   
	if ( condition )  statement ;  else statement
La syntaxe de Java copie celle de C.
	if (age > 50 )      t = "vieux" ;
	else if (age > 30 ) t = "mur"   ;
	else                t = "jeune" ;
	
	if (a > b) {
	   tmp = a; a = b; b = tmp;
	}

Enoncés de boucle: WHILE

	while ( condition )  statement    
	do statement  while ( condition )  ; 
	
Exemple: multiplication par addition successives

	while (a > 0) {
	   res += b;
	   a--;
	} 

Enoncés de boucle: FOR

	for ( initialisation; test; incrementation )  statement ;   

Ceci est equivalent a la boucle while suivante:

		initialisation;
		while ( test ) {
			statement ;
			incrementation;
		}

Exemple: impression des carres et cubes

	for (i=1 ; i<= 10; i++)
		System.out.println( "" + i + "\t" + i*i + "\t" + i*i*i ); 

Fonctions et procedures

Pour declarer une fonction (ou procedure), Java n'utilise pas de mot-cle comme procedure. C'est la presence de parentheses qui distingue une fonction d'une variable. La declaration de la fonction recursive fact ci-dessous illustre et la declaration et l'appel de fonction.
	static int fact (int n); {
	   if ( n > 0) 
	         return  n * fact(n-1);
	   else  return 1;
	}
On specifie la valeur retournee avec l'instruction return qui provoque en meme temps un retour immediat au point d'appel. Pour une procedure, on doit specifier void comme type ... et ne pas employer return.

Notez que la fonction fact a ete specifiee globale (static). Ceci veut dire qu'elle n'a pas acces aux attributs locaux des instances de la classe dans laquelle elle a ete declaree.

La liste des parametres donne et le type et le nom. On ne specifie pas de mode de passage car tout est passe par valeur (par reference pour les objets)

Voici maintenant 2 exemples de procedures avec differents nombres de parametres:

	static void header() 
	   { System.out.println("Liste des ventes"); }
	
	void trace( String s, int i, int j) {
	   System.out.println(s + ": " + i + ", " + j) ;
	   System.out.println("Attributs:" + x + "-" + y) ;  
	         // on suppose X et Y sont des variables d'instances 
	                                                   
	}