Vous êtes sur la page 1sur 29

Chapitre 2 

: Classes et Objets

Cours Programmation Orientée Objets

2020/2021

Anis HAJ SAID – anishajsaid@isima.u-monastir.tn


I- Classe - Défnition

Classe: moule pour fabriquer des objets


Objet: élément concret produit par le moule

Définition de classe:

class NomClasse { class Personne {


Attributs; String nom;
Méthodes; int AnneeNaissance;
} public int age() {

}
}
2
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
I- Classe - Défnition

Une classe comporte des attributs et des méthodes qui décrivent


un objet.

Les attributs sont des variables qui peuvent être :


• D’un type de base de Java (int, double, boolean,…) ou
• Des objets de classes prédéfinies (String, Scanner, ….) ou
• Des objets de classes définies par le développeur.

Les méthodes sont des fonctions qui peuvent avoir une valeur de
retour et peuvent prendre des paramètres.

3
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
I- Classe - Visibilité

Classes
Une classe peut avoir la visibilité publique (en précédant sa
déclaration avec le mot clé public) ou la visibilité par défaut
(package private)


class Personne : visible seulement par les classes du même
package (pour simplifier, se trouvant dans le même dossier)


public class Personne : visible et accessible par n’importe
quelle classe

4
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
I- Classe - Visibilité

Méthodes et attributs
Une méthode ou un attribut peuvent être déclarés comme private, protected ou
public


private : les attributs et les méthodes privés ne sont accessibles qu’au sein de la
classe elle même.


protected : les attributs et les méthodes privés ne sont accessibles qu’au sein de
la classe elle même ou par ses classes filles (voir chap. 3 Héritage)


public : les attributs et les méthodes publiques sont visibles et accessibles par
n’importe quelle autre classe.


package private : c’est le niveau de visibilité par défaut. Il ne faut rien spécifier
lors de la déclaration. Les attributs et les méthodes sont accessibles par la classe
elle même et les classes se trouvant dans le même package.
5
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
I- Classe – Attributs

• Les attributs représentent les propriétés des objets qui seront instanciés à partir
de la classe.

• Les attributs peuvent être des constantes, des variables de base ou des objets

• Les types de variables de base sont : short , int , long , char , float , double,
boolean.
public int x = 5;
public String s = "Bonjour";

• Une constante peut être de type de base ou un objet, il faut précéder sa


déclaration avec le mot clé final
public final int x = 5;
public final String s = "Bonjour";
 
Il est impossible d’effectuer une affectation à une constante (une erreur
de compilation est générée).

6
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
I- Classe – Méthodes

Syntaxe générale
<visibilité> <valeur de retour> nom_fonction (<paramètres>) {

code;
}
• visibilité : public, private, protected, ou rien de tout (package private)
• valeur de retour : type de base ou objet ou vide (void) ou rien de
tout (constructeur)
• nom_fonction : identificateur de la fonction, par convention
commence par une minuscule, s’il est un mot composé, chaque mot
qui le compose doit commencé par une majuscule.
• paramètres : une fonction peut prendre 0 ou plusieurs paramètres de
type de base et/ou objets)

7
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
I- Classe – Méthodes
Fonction Principale main

Méthode principale main


Syntaxe

public static void main (String [] args){

code;
}
• Dans java, un programme exécutable est une classe comportant
obligatoirement une fonction principale « main ». C’est cette fonction qui
est exécutée quand on exécute la commande java.
• Une classe ne contenant pas de fonction main est une simple définition, elle
n’est pas exécutable.
• L’entête de la fonction main s’écrit comme ci-dessus. c’est une fonction qui
doit être publique (public), statique (static), son type de retour est void, et
prend un paramètre qui est un tableau de chaîne de caractères (String[]).
8
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
I- Classe – Méthodes
Constructeurs

Constructeurs :

• Les constructeurs sont des méthodes particulières destinées à


initialiser tout ou une partie des attributs d’un objet.

• Le nom des méthodes constructeurs est le même ce qui diffèrent


est le nombre et/ou le type de paramètres.

• Le nom d’un constructeur est identique à celui de la classe.

• Un constructeur n’a pas de valeur de retour.

9
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
I- Classe – Méthodes
Constructeurs

Constructeur qui ne prend


public class Personne { pas de paramètre qui
initialise l’age à une valeur
String nom ; par défaut 20. nom et
String prenom ;
int age ; prenom ne sont pas
initialisées et sont égales à
public Personne(){ null
age=20 ;
}

public Personne(String a, String b, int x)


{
nom=a ;
prenom=b ; Constructeur qui prend
age=x ; 3 paramètres et
} initialise les attributs de
la classe Personne par
} les paramètres reçus.

10
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
I- Classe – Méthodes
Constructeurs

• Il est possible de ne pas écrire de constructeur. Dans ce cas, java


utilisera un constructeur par défaut qui ne prend pas de paramètres.
• Si au moins un constructeur est écrit par le développeur alors java
n’ajoute pas de constructeur par défaut.
public class Personne {

String nom ; Le code du constructeur


String prenom ; par défaut java ressemble
int age ; à ce code. Mais réellement
ce constructeur ne fgurera
public Personne(){ pas dans la classe.
}
}

• Un constructeur est invoqué lors de l’instanciation (création)


d’un objet
11
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
I- Classe – Méthodes
Constructeurs

Constructeur par recopie


• Le constructeur par recopie a pour objectif d’initialiser les attributs d’un
objet à partir des valeurs des attributs d’un autre objet de même type.
• Le constructeur par recopie prend un paramètre qui est un objet de même
type.
• Son code contient une affectation des valeurs des attributs de l’objet pris en
paramètre aux attributs de l’objet lui même, attribut par attribut.
public class Personne {

String nom ;
String prenom ;
int age ;
/*constructeur par recopie*/
public Personne(Personne a){
nom=a.nom ;
prenom=a.prenom ;
age=a.age
}
}
12
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
I- Classe – Méthodes
Constructeurs

Constructeur par recopie ( p et a sont différents, mais ont les mêmes valeurs des
attributs)

p a
Dupont
@ @
Jean

prenom prenom
@ nom @
@ nom
@
age age @
24 24

13
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
I- Classe – Méthodes
Accesseurs & Modifcateurs

• Il est recommandé de déclarer les attributs d’une classe comme


étant privés ou protected dans le cas d’héritage (voir chap. 3).

• L’objectif est d’éviter la visibilité public pour que les attributs ne


soient pas modifiables par n’importe quelles classes. Les
modifications des attributs doivent être effectuées seulement par la
classe elle même.

• Si nous voulons donner un accès en lecture à un attributs on lui crée


une fonction accesseur ou aussi appelée sa méthode get.

• Si nous voulons donner un accès en écriture à un attribut on lui crée


une fonction modificateur ou aussi appelée sa méthode set.

14
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
I- Classe – Méthodes
Accesseurs & Modifcateurs

• La méthode accesseur retourne la valeur de l’attribut (type de retour


est le type de l’attribut) et ne prend aucun argument

• Généralement une méthode accesseur doit être déclarée comme


publique. Par convention, l’identificateur d’une fonction accesseur à
un attribut commence par get suivi de l’identificateur de l’attribut.

Exemple :

private double solde;

public double getSolde(){

return solde;
}
15
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
I- Classe – Méthodes
Accesseurs & Modifcateurs

• La méthode modificateur d’un attribut permet d’affecter une valeur prise


en paramètre à cet attribut. Elle retourne void.

• Généralement une méthode accesseur doit être déclarée comme


publique.Par convention,l’identificateur d’une fonction accesseur à un
attribut commence par set suivi de l’identificateur de l’attribut.

Exemple :

private double solde;

public void setSolde(double x){

solde = x;
}
16
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
I- Classe – Méthodes
Accesseurs & Modifcateurs

public class Personne {


private String nom ;
private String prenom ;
private age ;

public Personne(){
age=20 ;
}
public Personne(String a, String b, int x){
nom=a ; Modificateur : modifie la valeur
prenom=b ; de l’attribut par le paramètre
age=x ;
} donné. Retourne void.

public void setAge(int x){


age=x ;
}
public int getAge(){ Accesseur : retourne la valeur
return age ;
} de l’attribut et ne prend pas de
} paramètre.

17
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
II- Objet - Défnition


Un objet est une instance d’une classe.


Une classe est une définition ou un moule, les objets sont crées à partir de
ce moule.


Un objet est une entité dynamique alors qu’une classe est une entité
statique.


Un objet peut être déclaré sans qu’il ne soit crée (ou instancié).


L’instanciation d’un objet se fait par l’opérateur new suivi par l’un des
constructeurs de la classe à partir de laquelle l’objet sera instancié.
18
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
II- Objet
Déclaration & Instanciation


Déclaration : un objet peut être déclaré sans qu’il ne soit crée (ou
instancié).
Personne p;


Instanciation : se fait par l’opérateur new suivi par l’un des
constructeurs de la classe à partir de laquelle l’objet sera instancié.
Personne p;
p = new Personne("Jean", "Dupont", 24);


Déclaration & Instanciation : ces deux opérations peuvent être
effectuées dans une même instruction.
Personne p = new Personne("Jean", "Dupont", 24);

19
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
II- Objet
Déclaration & Instanciation


Après l’opérateur new, on choisi l’un des constructeurs (déclarés dans la classe
d’instanciation) selon l’initialisation des attributs qu’on veut faire.
Personne a = new Personne("Jean", "Dupont", 24);
Personne b = new Personne();
Personne c = new Personne(58);


Instancier un objet plusieurs fois : Il est possible d’instancier un objet autant
qu’on le veux dans un programme. Il suffit de réécrire l’instruction permettant
de la faire. Cela permettra de recréer et de réinitialiser l’objet.
Personne a = new Personne(32);
a = new Personne();
a = new Personne("Jean", "Dupont", 24);
a = new Personne("Jean", "Dupont", 32);

20
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
II- Objet
Déclaration & Instanciation

Mais que ce passe t-il en mémoire?? Comment un objet est-il


représenté en mémoire??

– L’identificateur d’un objet comporte une adresse mémoire dans laquelle


l’objet est enregistré.

– Lors de sa déclaration, l’identificateur de l’objet ne comporte aucune


adresse. Il comporte la valeur null.

– Lors de l’instanciation, l’opérateur new permet d’allouer un espace


nécessaire pour sauvegarder l’objet. Cette adresse est enregistrée dans
l’identificateur de l’objet. Les attributs sont initialisés en mémoire par le
constructeur appelé.

21
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
II- Objet
Déclaration & Instanciation

Personne p; p

null

L’identificateur p, qui désigne un
objet de type Personne, est censé
comporter une adresse d’un objet
de type Personne.

Lors d’une simple déclaration, p
contient null. Le compilateur java
n’acceptera pas une utilisation de p
sans qu’il ne soit initialisé.

22
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
II- Objet
Déclaration & Instanciation

Personne p = new Personne();


p

@

new permet d’allouer un espace
mémoire pour un objet (dans notre
exemple de type Personne). L’adresse
de cet espace mémoire est enregistré prenom
dans l’identificateur de l’objet (p). null
nom

L’initialisation des attributs de l’objet age null
(Personne) est réalisée par le
constructeur appelé de l’objet. 20

23
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
II- Objet
Déclaration & Instanciation

Personne p = new Personne("Jean", "Dupont", 24);

p
Dupont
@

Dans ce cas, l’adresse mémoire de


l’objet Personne est enregistré dans p. Jean
prenom
Le constructeur initialise tous les
attributs de p. Puisque prenom et nom @ nom
sont des String (donc des objets de
type String), par conséquent ils vont age @
contenir eux aussi des adresses
24
mémoires.

L’attribut age de p est de type int (type


de base) donc elle contient la valeur
qui est initialisée à 24

24
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
II- Objet
Accès aux éléments

L’accès aux éléments d’un objet se fait en spécifiant


l’identificateur de l’objet suivi par un point « . » ensuite
l’identificateur de l’attribut ou de la méthode voulu.

Exemples
Personne p = new Personne("Jean", "Dupont", 24);
Personne q = new Personne("Jacques", "Dupont", 54);
p.age = q.age;
Accès à l’age de q
System.out.println ( p.getNom() );

Accès à l’age de p Accès à la méthode


getNom() de l’objet p

25
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
II- Objet
Pointeur « this »


Chaque objet possède un attribut par défaut qui est l’attribut this.

this contient l’adresse de l’objet lui même.
Exemple d’utilisation 1 : Aucune contrainte n’interdit de
donner à des paramètres d’une
public class Personne { méthode les mêmes
private String nom ; identificateurs que des attributs.
private String prenom ;
private age ;

public Personne(String nom, String prenom){ Les paramètres sont


nom = nom ; des variables locales
prenom = prenom ; aux fonctions. En cas
age = 20 ;
} Ici age désigne l’attribut de l’objet d’identificateurs
semblables avec
public Personne(String nom, String prenom, int age){ d’autres variables
nom = nom ; globales, seulement les
prenom = prenom ;
age = age ; variables locales seront
} visibles
Ici age désigne la variable prise en paramètre
}
26
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
II- Objet
Pointeur « this »

public class Personne { En précédant les identificateurs


des attributs par this, nous
private String nom ; désignons l’attribut de l’objet lui
private String prenom ;
private age ; même. Ainsi, il n’y aura plus de
confusion avec les variables
public Personne(String nom, String prenom){ locales ayant un même
this.nom = nom ; identificateur.
this.prenom = prenom ;
this.age = 20 ;
}
public Personne(String nom, String prenom, int age){
this.nom = nom ;
this.prenom = prenom ;
this.age = age ;
}

}
Il est recommandé d’utiliser le pointeur this à chaque fois qu’on
veut spécifier un attribut ou une méthode de l’objet lui même

27
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
II- Objet
Pointeur « this »

Exemple d’utilisation 2 :
public class Personne {
private String nom ;
private String prenom ;
private age ;

public Personne(String nom, String prenom){


this.nom = nom ;
this.prenom = prenom ;
this.age = 20 ;
}
public Personne(String nom, String prenom, int age){
this(nom,prenom)
this.age = age ;
}

}
this (<paramètres>) désigne un appel à un constructeur de l’objet lui même.
Dans cet exemple lors de la construction d’un objet par le constructeur Personne
(String,String,int), l’objet fait appel à son constructeur Personne(String,String) qui
permet d’initialiser ses attributs nom et prenom.

28
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
II- Objet - Défnition


Finalement, la classe Personne peut s’écrire comme suit :
public class Personne { public void setAge(int age){
this.age=age ;
private String nom ; }
private String prenom ;
private age ; public int getAge(){
return this.age ;
public Personne(){ }
this.age=20 ;
} public String getNom(){
return this.nom ;
public Personne(String nom, String prenom){ }
this.nom = nom ;
this.prenom = prenom ; public void setNom(String a){
} this.nom=a ;
}
public Personne(String a, String b, int x){
this(a , b) ; public String getPrenom(){
this.age=x ; return this.prenom ;
} }
public Personne(Personne a){ public void setPrenom(String a){
/*this(a.nom,a.prenom,a.age) ;*/ this.prenom=a ;
this.nom = a.nom ; }
this.prenom = a.prenom ; /*ajout d’une fonction main ici */
this.age=a.age ;
} }
29
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)

Vous aimerez peut-être aussi