Dr. HAJJI
Séances: 2, 3 et 4
Objectifs
• Exercices de révisions
• Constructeur
• Généralité sur la syntaxe de JAVA
• Tableaux
Exercice 1
Définissez une classe Point permettant de manipuler un
point du plan.
Cette classe contiendra :
– les méthodes d'accès et de modification des coordonnées,
– une méthode deplacer qui effectue une translation définie par
les arguments dx et dy,
– une méthode afficher qui affiche les coordonnées d'un point,
– une méthode toString qui transforme un point en une chaîne de
caractères (x,y).
On donnera un exemple d'utilisation avec une méthode
main
Exercice 2
• On veut faire un programme java qui fait la gestion des
stages de fin de formation pour les étudiants de la
cinquième année.
• Un stagiaire est encadré par un encadrant pédagogique
et par un tuteur à l'entreprise.
• Un stage est caractérisé par 4 séances d'encadrements
plus 3 types de documents: document de l'offre de stage
contient les informations sur le stage, document de
validation de stage et document d'évaluation de stage.
• On vous demande d’identifier les différentes classes qu’il
faut développer.
V. Notion de portée et de durée de vie des objets
Le concept de portée fixe simultanément la visibilité et la
durée de vie des noms définis dans cette portée. La
portée est fixée par les accolades { }.
Exemple:
{
int x=12; // seul x est accessible
{
int q=96; // x et q tous les deux sont accessibles
}
// seul x est accessible
// q est hors de portée
}
Attention: Ceci n’est pas permis en Java
{
int x=12;
{
int x=96; // illégale en Java, valable en C,
C++ }
}
Portée des objet: Considérons une classe nommée
A
{
A a=new A();
} // fin de portée
Remarque:
- Tous les caractères sont significatifs.
- On fait la différence entre les majuscules et les
minuscules.
- Mots clés: certains mots sont réservés par le langage et
ne peuvent pas être utilisés comme identificateur.
Mise en page des programmes
La mise en page d’un programme Java est libre.
- Une instruction peut être étendue sur plusieurs lignes.
- Une ligne peut comporter plusieurs instructions
I. Introduction
Un objet a
– une adresse en mémoire (identifie l’objet)
– un comportement (ou interface)
– un état interne (les valeurs des variables)
De manière générale on a:
objetQuiReçoitLeMessage.messageEnvoyé(paramètres);
a.initialise(1,1);
a.deplace(0,2);
public class TstPoint{
public static void main (String args[]) {
Point a;
a=new Point();
a.initialise(1,1);
a.deplace(2,0);
Point b=new Point();
b.initialise(2,3);
b.affiche();
}
}
Remarque:
- Pour chaque instance on appelle la méthode initialise
pour initialiser l’objet ainsi créer.
- Si on n’appelle pas la méthode initialise, l’objet de type
Point ainsi créer ne sera pas initialisé.
Créer un objet, ne garanti pas son initialisation
II. Définitions de Constructeur
On peut garantir l’initialisation d’un objet grâce à une
méthode spéciale appelée constructeur qui permet
d’automatiser le mécanisme d’initialisation d’un objet.
Exemple:
Prenons l’exemple de la classe point et transformons la
méthode initialise en un constructeur en la nommant
Point.
public class Point{
private int x; // abscisse
private int y; // ordonnée
public Point (int abs, int ord) { // Constructeur, remplace
initialise
x=abs;
y=ord;
}
public void deplace (int dx, int dy){
x+=dx;
y+=dy;
}
public void affiche (){
System.out.println(" abscisse : "+ x + " ordonnée : " + y);
}
}
Les instructions:
Point a=new Point();// dans ce cas ne marche pas!
a.initialise(1,1)
A a=new A();
Cela signifie que:
- Soit A ne possède pas de constructeur
- Soit A possède un constructeur sans arguments.
3.Un constructeur ne peut pas être appelé de la même manière
que les autres méthodes. Par exemple:
class A{
public A (…) {… } // Constructeur A
…
private int n=10;
private int p;
}
L’instruction suivante
A objA=new A(…);
Entraîne successivement
- l’initialisation implicite des champs n et p de l’objet
objA à 0
- L’initialisation (explicite) du champ n à la valeur figurant
dans sa déclaration, soit 10
- L’exécution des instruction du constructeur
Appel du constructeur
class Etudiant {
private String nom, prenom; // Variables d’instance
private int codeNatEtudiant;
public Etudiant(String n, String p) { // Constructeur
nom = n;
prenom = p;
}
public Etudiant(String n, String p, int cne) {// Constructeur
nom = n;
prenom = p;
codeNatEtudiant = cne;
}
}
public class TestEtudiant {
public static void main(String[] args) {
Etudiant e1, e2;
e1 = new Etudiant("Mohammed", "Ali");
e2 = new Etudiant("Ouardi", " fatima", 22564321);
}
}
V. Autoréférences: emploi de this
class A {
….
public void f(….) {
…… // ici l’emploi de this désigne la référence à l’objet
// ayant appelé la méthode f
}
}
Exemple 1:
class Point {
public Point (int abs, int ord){
x=abs; y=ord;
}
…
private int x, y;
}
Comme les identificateurs abs et ord sont des
arguments muets pour la méthode Point, alors on
peut les noter x et y qui n’ont rien avoir avec les
champs private x et y. Dans ce cas la classe Point
peut s’écrire comme suit:
class Point {
public Point (int x, int y){
this.x=x; //this.x permet d’accéder au champs x de l’objet
courant
this.y=y; //this.y permet d’accéder au champs y de l’objet
courant
}
…
private int x,y;
}
Exemple 2:
class Etudiant {
private String nom, prenom;
public Etudiant(String nom, String prenom) {
this.nom = nom;
this.prenom = prenom;
}
}
Exemple 3:
Deux objets de même classe Point coïncident si leurs
coordonnées sont identiques. On peut écrire la méthode
coïncide de la façon suivante:
class Point {
public Point (int abs, int ord){
x=abs; y=ord;
}
public Point( ) {
this (0,0);
}
…
private int x,y;
}
Point a = new Point (); // créer l’objet a et l’initialise à
l’origine,
// au point (0,0).
Point b = new Point (2,3); // créer l’objet b et l’initialise au point
(2,3).
public class feuille {
int i=0;
feuille increment () {
i++;
return this;
}
public static void main (String[] args ) {
feuille x=new feuille ();
System.out.println("ii = " + x.increment().increment().increment().i
);
}
}
Sortie:
i= 3
public class feuille {
int i=0;
feuille increment () {
i++;
return this;
}
void print () {
System.out.println(" i = " + i);
}
public static void main (String[] args ) {
feuille x=new feuille ();
x.increment().increment().increment().print( )
}
}
Sortie:
i= 3
Ch. III. Généralités sur les structures lexicales de Java
Types de variables
• Les variables d’instances
– sont déclarées en dehors de toute méthode
– conservent l’état d’un objet, instance de la classe
– sont accessibles et partagées par toutes les méthodes de la classe
• Les variables locales
– sont déclarées à l’intérieur d’une méthode
– conservent une valeur utilisée pendant l’exécution de la méthode
– ne sont accessibles que dans le bloc dans lequel elles ont été
déclarées
Identificateurs
Un identificateur Java est une chaîne de caractères
de longueur quelconque:
– Le premier caractère est une lettre Unicode
– Le reste de la chaîne peut contenir des lettres et/ou
des chiffres et/ou le caractère souligné « _ »
– Les minuscules et les majuscules sont différenciés
Exemple:
.567e2 // 5,67 de type double
5.123E-2F // 0,05123 type float
Type caractère
• permet de manipuler des caractères: Java représente un caractère sur 2 octets
• Une variable de type caractère est déclaré par: char c1,c2;
• Constante de type caractère: ‘a’ , ‘E’
int x = y + 5;
if (x % 2 == 0) {
type = 0;
x++;
}
else
type = 1;
Exemple:
int y = (x % 2 == 0) ? x + 1 : x;
est équivalent à
int y;
if (x % 2 == 0)
y = x + 1;
else
y = x;
Parenthèses pas indispensables
Distinction de cas suivant une valeur
switch(expression) {
case val1: instructions;
break; // Attention, sans break, les instructions du cas
suivant
// sont exécutées !
...
case valn: instructions;
break;
default: instructions;
}
expression est de type char, byte, short, ou int, ou de type
énumération
• S’il n’y a pas de clause default, rien n’est exécuté si expression ne
correspond à aucun case
Exemple de switch
char lettre;
int nbVoyelles = 0, nbA = 0,
nbT = 0, nbAutre = 0;
...
switch (lettre) {
case 'a' : nbA++;
case 'e' : // pas d’instruction !
case 'i' : nbVoyelles++;
break;
case 't' : nbT++;
break;
default : nbAutre++;
}
Répétitions « tant que »
while(expressionBooléenne)
bloc-instructions ou instruction
do bloc-instructions ou instruction
while(expressionBooléenne)
int somme = 0;
for (int i=0; i < n; i++) {
somme += tab[i];
}
System.out.println(somme);
Instructions liées aux boucles
• break sort de la boucle et continue après la
boucle
• continue passe à l’itération suivante
• break et continue peuvent être suivis d’un nom
d’étiquette qui désigne une boucle englobant la
boucle où elles se trouvent (une étiquette ne
peut se trouver que devant une boucle)
Etiquette de boucles
boucleWhile: while (pasFini) {
...
for (int i=0; i < n; i++) {
...
if (t[i] < 0)
continue boucleWhile;
...
}
...
}
Les tableaux
• En Java les tableaux sont considérés
comme des objets.
– les variables de type tableau contiennent
des références aux tableaux
– les tableaux sont créés par l’opérateur
new
– ils ont une variable d’instance (final) pour
désigner taille du tableau:
final int length
Déclaration et création des tableaux
• Déclaration : La taille n’est pas fixée à la déclaration
int[] tabNotes;
Ou
int tabNotes[]; // possible, mais non recommandé
Attention: En java il n'est pas possible de définir des tableaux de
taille statique à la déclaration.
int[10] tab; // ne compile pas
Taille du tableau
int[] tab = {10, 3*6, 4};
tabNotes = new int[8];
int l1 = tab.length; // l1 = 3
int l2 = tabNots.length; // l2 = 8
int e = tabNotes[8];
/* La compilation produit le message suivant :
ArrayIndexOutOfBoundsException */
Exemple de tableau de chaînes: Paramètres de la ligne de
commande
class TestArguments {
public static void main(String[] args) {
for (int i=0; i < args.length; i++)
System.out.println(args[i]);
}
}
$javac TestArguments
$ java TestArguments arg1 arg2
affichera
• arg1
• arg2
Tableaux d’objets
Les éléments d’un tableau peuvent être d’un type objet.
Attention: Il faut créer les objets avant de les utiliser. Considérons
l’exemple de la classe Etudiant.
etudianSMI[0].codeNatEtudiant = cne;
// Erreur: etudiantSMI[0] est objet de type Etudiant, donc il faut le créer avant de
l’utiliser
• Déclaration