Vous êtes sur la page 1sur 56

Université de Jendouba

Institut Supérieur d’Informatique du Kef

LATRI - Licence Appliquée en technologies des Réseaux Informatiques


1ere année LATRI Groupe : A+B

Programmation Orientée Objet (P.O.O.)

Mlle Houda ZOUHAIER (Houda.zouhaier@gmail.com)

Année Universitaire 2017-2018


Chapitre 3 : Les classes et les
objets en Java

2
Plan

1 : Les classes,
2 : Les objets,
3 : Les méthodes,
4 : Les modificateurs d’accès.

3
1: Les classes

4
Le concept de classe

Une classe est un ensemble d’attributs et de méthodes regroupées dans


une même entité.

Une classe est une description abstraite (modèle) d'un objet.

Instancier une classe consiste à créer un objet en utilisant le modèle de


la classe.

Pour utiliser une classe il faut en déclarer une instance (objet) de classe.

5
Déclaration d’une classe

Une classe se compose en deux parties : une en-tête et un corps.

• l’en-tête: modificateur + Nom de la classe,

• le corps: peut être divisé en 2 sections :

− la déclaration des variables et des constantes

− la définition des méthodes

6
Syntaxe de déclaration d’une classe

[Modificateur_de_classe] class Nom_de_la_classe [extends


Nom_classe_mere] [implements Nom(s)_interface(s)] {
− Attributs: variables + constantes
− Méthodes
}

Le mot clé extends permet de préciser la relation d’héritage entre la fille et


la classe mère.

Le mot clé implements permet de spécifier une ou des interfaces que la


classe implémente. Cela permet de récupérer quelques avantages de
l'héritage multiple.

L'ordre des méthodes dans une classe n'a pas d'importance.


7
Syntaxe de déclaration d’une classe

Exemple:

public class Addition { /**Entête de la classe**/

// Attributs: variables et constantes


int a, b, x;

//Méthodes
public int somme (int a, int b){
x= a + b ; /**Corps de la classe**/
return (x);
}
}

8
2: Les objets

9
Rappel
Une classe peut être réutilisée pour instancier plusieurs objets.
Une instance de classe = Un Objet
public Class Personne { Objets ou instances
public int CIN; CIN: 06987456
Nom : YOUSFI
public String Nom;
Prenom : Ali
public String Prenom; Age : 24
public int Age; instanciation CIN: 78654349
Nom : JABALLAH
public Personne(int C, Sring N, String P, int A) { Prenom : Mohamed
CIN = C; Age : 26
Nom = N;
Perenom = P; CIN: 45678987
Age = A; Nom : JBALI
} Prenom : Ines
} Age : 22 10
Création d’un objet (instancier une classe)
Il est nécessaire de déclarer une variable ayant le type de l'objet désiré.

Déclaration une instance (Objet) :

nom_de_classe nom_de_variable;

Exemple:
− Personne p1;
− Point P;

L'opérateur new se charge de créer une instance de la classe et de l'associer à


la variable déclarée.

− Personne p1;
− p1 = new Personne(07897456, "ALOUI","Rania",21);
11
Création d’un objet (instancier une classe)
Il est possible de tout réunir en une seule déclaration.

Exemple:

Personne p1 = new Personne(07897456, "ABIDI","Ali","Homme",21);

L'opérateur new permet d'instancier des objets et d'appeler une méthode


particulière de cet objet : le constructeur.

Chaque instance d'une classe nécessite sa propre variable.


Plusieurs variables peuvent désigner un même objet.

Exemple:

Si P2 désigne un objet de type Personne, l'instruction P2 = P1 ne définit pas un


nouvel objet mais P1 et P2 désignent tous les deux le même objet.
12
Durée de vie d’un objet
Les objets ne sont pas des éléments statiques et leur durée de vie ne
correspond pas forcément à la durée d'exécution du programme [10].

La durée de vie d'un objet passe par 3 étapes :

1. la déclaration de l'objet et l'instanciation grâce à l'opérateur new,

2. l'utilisation de l'objet en appelant ces méthodes,

3. La suppression de l'objet : elle est automatique en Java grâce à la machine


virtuelle (JVM).

Un ramasse-miettes (en anglais : garbage collector) est un dispositif qui libère


automatiquement la mémoire des objets qui inutilisée par le programme.
13
Les références et la comparaison d’objets
Les variables de type objet que l'on déclare ne contiennent pas un objet mais
une référence vers cet objet.

Lorsque l'on écrit c1 = c2 (c1 et c2 sont des objets), on copie la référence de


l'objet c2 dans c1 : c1 et c2 réfèrent au même objet.

Pour comparer l'égalité des variables de deux instances, il faut utiliser la


méthode prédéfini equals() de la classe Object dont toutes les classes héritent.

Pour s'assurer que deux objets sont de la même classe, il faut utiliser la
méthode prédéfini getClass() de la classe Object.

14
Les références et la comparaison d’objets

Exemple 1:

if (obj1.equals(obj2))

System.out.println("obj1 et obj2 sont égaux");

Exemple 2:

if (obj1.getClass().equals(obj2.getClass())

System.out.println("obj1 et obj2 sont deux instances d’une même classe");

15
Variable de classe

Une variable de classe est la même pour tous les objets de ta classe.

Elles ne sont définies qu'une seule fois quel que soit le nombre d'objets
instanciés de la classe.

La déclaration d’une variable de classe est accompagnée du mot clé static .

Exemple:

public class MaClasse() {


static int x = 0;
}

16
Variable de classe
Exemple:

public class Voiture{


public static int NbRoues=4; //Variable de classe
public String marque=null;
public Voiture (String m){
marque = m;}
}
public class Test{
public static void main( String [] args){
// 1ère instance de Voiture nommée v1
Voiture v1= new Voiture ("Ford");
System.out.println("Nombre de roues de V1 ="+ v1.NbRoues);
// 2ème instance de Voiture nommée v2
Voiture v2= new Voiture (" Peugeot");
System.out.println("Nombre de roues de V2 ="+ v2.NbRoues);
}
17
}
Variable de classe
Si on modifie la valeur de la variable NbRoues de v1 alors la variable NbRoues
de v2 prendra cette même valeur.

NbRoues ne dépend pas de l'instance de Voiture auquel elle est rattachée


mais de façon générale à la classe Voiture : c'est une variable de classe.

L'appartenance des variables de classe à une classe entière et non à un objet


spécifique permet de remplacer le nom de la variable par le nom de la classe.

syntaxe:

<Nom de la classe>.<Nom de la variable de classe>

Exemple: Voiture.NbRoues =6;

18
La variable this

1. this est une variable qui sert à référencer dans une méthode l'instance de
l'objet en cours d'utilisation.

Exemple:

int x,y; int x,y;


public Point(int abs, int ord) public Point(int x, int y)
{ {

}
x = abs ;
y = ord ; = }
this.x = x ;
this.y = y ;

Cette démarche permet d’employer des noms d’arguments identiques aux


noms d’attributs de la classe.
19
La variable this
Le mot-clé this peut être utilisé pour passer une référence à l'instance elle-
même (comme paramètre d'une méthode).

Exemple :
…..
JButton button1 = new JButton("Quitter");
….
button1.addActionListener(this); // Ecouteur d’évènement
….

20
L’opérateur instanceof
L'opérateur instanceof permet de déterminer la classe de l'objet qui lui
est passé en paramètre.

La syntaxe est: Nom_objet instanceof Nom_classe

Exemple:

void testClasse(Object A) {

if (A instanceof MaClasse )
System.out.println(" A est une instance de la classe MaClasse ");
else
System.out.println(" A n'est pas un objet de la classe MaClasse ");
}
21
3: Les méthodes

22
Syntaxe de déclaration

Les méthodes sont des procédures et des fonctions qui implémentent les
traitements de la classe.

La syntaxe de la déclaration d'une méthode est :

modificateur type_retourné nom_méthode ( arg1, ... ) {


variables locales…
Instructions...
}

Le type retourné peut être simple (int, float, double, …) ou correspondre à un


objet.

Si la méthode ne retourne rien, alors on utilise void.


23
Appel d’une méthode
La syntaxe d'appel d'une méthode est :

nom_objet.nom_méthode(parametre, ... ) ;

Exemple:

− P1.setNom("ABIDI"); /***Met à jour le nom de P1***/


− P1.getNom(); /***Retourne le nom de P1***/
− E1.AfficherInfs(); /***Affiche les infos de E1***/
− E1.CalculerMoyenne(); /***Calcule la moyenne de E1***/

Une méthode peut être avec ou sans paramètres.

24
Surcharge de méthodes
On appelle surcharge le fait d’avoir plusieurs méthodes qui ont le même
nom au sein de la même classe.

Les exemplaires de la méthode ont des paramètres différents.

Ils peuvent avoir le même type de retour.

Par contre, il est impossible d’avoir des types de retour différents pour les
mêmes paramètres.

25
Surcharge de méthodes
Exemple:

public class Additionneur {


public static int somme(int a, int b) // 1
{
return (a+b);
}
public static int somme(int a, int b, int c) // 2
{
return (a+b+c);
}
public static float somme(float a, float b) // 3
{
return (a+b);
}
public static float somme(int a, int b) // interdit à cause de 1
{
return ((float)a+(float)b);
}
}
26
Constructeurs
Lors de la création d’un objet (instanciation d'une classe), on fait
automatiquement appel à une méthode générique appelée constructeur.

Cette méthode permet généralement d‘affecter des valeurs aux variables


définies dans la classe.

Cette méthode respecte des règles particulières :

• un constructeur doit toujours être une méthode publique,


• le constructeur porte toujours le même nom que la classe,
• un constructeur ne retourne rien,
• vous ne devez pas mettre de void, même si le constructeur ne retourne
rien.

27
Constructeurs
Une classe peut posséder 0, un ou plusieurs constructeurs.

Exemple:

public class Personne {


//Attributs
int CIN;
String nom;
String prenom;

//Constructeur de la classe personne


public Personne (int CIN, String nom, String prenom){
this. CIN = CIN;
this. nom = nom;
this. prenom = prenom;
}
} 28
Destructeurs

Un destructeur est une méthode qui permet de libérer l'espace mémoire


occupé par l'objet.

La libération de la mémoire (variables, constantes et objets) inutilisée est prise


en charge par le ramasse-miettes.

Les destructeurs sont aussi appelés finaliseurs (en anglais : finalizers), sont
automatiquement appelés par le ramasse-miettes.

Pour créer un finaliseur, il faut redéfinir la méthode finalize() héritée de la


classe Object.

Remarque : Java dispose d'un ramasse-miettes intégré, d'où l'inutilité des


destructeurs.
29
Accesseurs
Définition:

Un accesseur est une méthode qui permet d'accéder en lecture ou en


écriture à la valeur d'un attribut.

Par convention, le rôle des accesseurs se limite à:

• La lecture: retourner la valeur de l'attribut concerné,


ou
• L’ écriture : modifier la valeur de l'attribut concerné.

Les accesseurs portent le nom de get (lecture) ou set (écriture) suivi du nom
de l'attribut concerné.

30
Accesseurs

Exemple:

public class TestAccesseurs {

public int valeur = 13;

//Accesseur en lecture
public int getValeur(){
return(valeur);
}

//Accesseur en écriture
public void setValeur(int val) {
valeur = val;
}
}
31
4: Les modificateurs d’accès

32
Les modificateur d’accès

Ils se placent avant le type de l'objet.

Ils s'appliquent aux classes et/ou aux méthodes et/ou aux attributs.

Ils ne peuvent pas être utilisés pour qualifier des variables locales : seules les
variables d'instances et de classes peuvent en profiter.

Ils assurent le contrôle des conditions d'héritage, d'accès aux éléments et de


modification de données par les autres objets.

33
Le modificateur public
Une variable, méthode ou classe déclarée public est visible par tout.

Le modificateur private
C'est le niveau de protection le plus fort.

Les variables et les méthodes déclarées private sont visibles qu'à l'intérieur
de la classe ou elles sont déclarées.

Les méthodes déclarées private ne peuvent pas être en même temps


déclarée abstract car elles ne peuvent pas être redéfinies dans les classes
filles
On ne peut pas qualifier une classe avec private.

34
sans modificateur
Cette déclaration permet à une entité (classe, méthode ou variable) d'être
visible par toutes les classes du même package.

Le modificateur protected
Si une méthode ou une variable est déclarée protected , seules les
méthodes présentes dans le même package que cette classe ou ses sous
classes pourront y accéder.

On ne peut pas qualifier une classe avec protected.

35
Le modificateur abstract
Le modificateur abstract indique qu’une classe ou méthodes est abstraite.

Une classe déclarée abstract contient une ou des méthodes abstraites, qui
n'ont pas de définition explicite.

Le modificateur final
Une variable déclarée final est une constante.

La redéfinition d’une méthode déclarée final lors de l'héritage est


interdite.

Une classes déclarée final ne peut pas avoir de classes filles (sa redéfinition
grâce à l'héritage est interdite). 36
Le modificateur static
Attribut appartient simultanément à tous les objets de la classe (Variable
de classe).

Le modificateur static indique, pour une méthode, qu'elle peut être


appelée sans instancier sa classe (syntaxe : Classe.methode() au lieu de
Objet.méthode()).

Une méthode statique ne peut accéder qu'à des attributs et des méthodes
statiques.

Une méthode statique ne doit être contenir le mot clé this.

On ne peut pas qualifier une classe avec static.

37
Visibilité des classes

Même Sous classe Même extérieur


classe package
public Oui Oui Oui Oui

protected Oui Oui Oui Non

private Oui Non Non Non

par défaut
(sans Oui Non Oui Non
modificateur )

38
Exemple
1. Ecrire une classe nommée Personne qui permet de gérer un individu. Sachant
qu’une personne est caractérisée par les informations suivantes : CIN, nom,
prénom, sexe, nombre de diplômes et email (un attribut optionnel).

1.1. Créer la classe Personne avec les attributs nécessaires,


1.2. Ajouter le/ les constructeur(s) nécessaire(s),
1.3. Ajouter les méthodes suivantes :

- une méthode nommée afficherInfos qui affiche les informations d’une


personne.
- une méthode nommée getEmail qui retourne l’email d’une personne.
- une méthode nommée setEmail qui modifie l’email d’une personne.
- une méthode nommée plusQualifiée qui compare la personne appelante
avec la personne fourni en paramètre et qui retourne : true si la personne
appelante est plus qualifiée, false sinon.

39
Exemple
2. Ecrire une classe nommée TestPersonne qui contient le programme
principal et qui permet de :

1.1. déclarer 2 variables de type Personne nommées P1 et P2,


2.2. créer 2 instances (objets) de la classe Personne pour les affecter dans les
variables.

Sachant que :

- La personne P1 est un homme appelé Kais ALOUI qui a 4 diplômes et le


numéro de CIN : 78596543.

- La personne P2 est une femme appelée Wafa KHAZRI, elle a 2


diplômes, son numéro de CIN est 98765432 et son e_mail est :
wafa.khazri@yahoo.fr

40
Exemple
2.3. afficher les informations des personnes P1 et P2.
2.4. afficher l’email de la personne P2.
2.5. Modifier l’email de la personne P2.
2.6. Afficher l’email de la personne P2 avec la mise à jour effectuée.
2.7. Comparer et afficher laquelle est plus qualifiée entre P1 et P2.

41
Classe Personne

42
Classe Personne

43
Classe Personne

44
Classe TestPersonne

45
Classe TestPersonne

46
Exécution

78596543 ALOUI Kais est un/une : Homme, il/elle a :4 dipômes.,


Email: null

98765432 KHAZRI Wafa est un/une : Femme, il/elle a :2 dipômes.,


Email: wafa.khazri@yahoo.fr

L'email de P2 avant MAJ est :wafa.khazri@yahoo.fr

L'email de P2 après MAJ est :KH_wafa@gmail.com

P1 est plus qualifié(e) que P2:true

47
4. Rappel sur les méthodes
( Procédures et fonctions)

48
Définitions
Procédure:

Une procédure ne retourne rien au programme principal. Elle est de type void.

Fonction:

Une fonction renvoie une valeur après son exécution.

Le type de cette valeur est déclaré avec la fonction.

La valeur retournée est spécifiée à l'aide du mot réservé return.

49
Procédures sans paramètre(s)
Exemple 1:

Déclaration dans la public void affiche(){


classe
System.out.println ("Bonjour");

Appel dans le // Appel de la procédure void affiche()


programme principal
affiche();

50
Procédures sans paramètre(s)
Exemple 2:

Déclaration dans la public class Personne{


classe …
public void affiche(){

System.out.println ("Bonjour" + nom);

}
}
Appel dans le Personne P1= new Personne("ABIDI", "Ryma" ,1990);
programme
principal // Appel de la procédure void affiche()

P1.affiche();

51
Procédures avec paramètre(s)
Exemple 1:

Déclaration dans la public void somme(int a, int b){


classe int s = a + b;
System.out.println ("La somme est: " + s);
}

int x =2;
int y = 5;
Appel dans le
programme principal // Appel de la procédure void somme(int a, int b)
somme(x,y);

// Appel de la procédure void somme(int a, int b)


somme(3,6);
52
Procédures avec paramètre(s)
Exemple 2:

Déclaration dans la public class Personne{


classe …
public void affiche( Personne P){

System.out.println ("Bonjour" + P.nom);

}
}
Appel dans le Personne P1= new Personne("ABIDI", "Ryma" ,1990);
programme principal
// Appel de la procédure void affiche(Personne P)

affiche(P1);

53
Fonction sans paramètre(s)

Déclaration dans la public int carre (){


classe
// Saisie d’un entier au clavier

System.out.println ("Entrez un entier:" );

int n= Clavier.lireInt();

return (n*n);
}

Appel dans le
programme principal // Appel de la fonction carre()
int x= carre();

54
Fonction avec paramètre(s)

Déclaration dans la public int somme(int a, int b){


classe int s = a + b;
return(s);
}

Appel dans le int x =2;


programme principal int y = 5;

// Appel de la fonction int somme(int a, int b)


int z = somme(x,y);

// Appel de la fonction int somme(int a, int b)


int k= somme(3,6);

55
Fin du chapitre 3

56

Vous aimerez peut-être aussi