PDF Archive

Easily share your PDF documents with your contacts, on the Web and Social Networks.

Share a file Manage my documents Convert Recover PDF Search Help Contact



4 ProgObjJava .pdf



Original filename: 4-ProgObjJava.pdf
Title: Microsoft PowerPoint - 4-ProgObjJava.pptx
Author: Christine

This PDF 1.5 document has been generated by PScript5.dll Version 5.2.2 / Acrobat Distiller 9.5.5 (Windows), and has been sent on pdf-archive.com on 05/04/2017 at 14:44, from IP address 80.12.x.x. The current document download page has been viewed 155 times.
File size: 284 KB (15 pages).
Privacy: public file




Download original PDF file









Document preview


http://docs.oracle.com/javase/8/docs/api/

INTRODUCTION
• Java est un langage purement orienté objets

10

 tout le code Java est contenu dans des classes
 pas de fonctions globales définies en dehors
d'une classe

LA PROGRAMMATION OBJET EN JAVA
INTRODUCTION

• Toutes les classes dérivent de la méta-classe
Object

• Les packages regroupent des classes de
l'application liées logiquement

ils permettent de contrôler l'accès aux classes
(visibilité, accessibilité) et d'importer les classes
133

JAVA - © Christine Bonnet

134

DÉFINITION D'UNE CLASSE

JAVA - © Christine Bonnet

EXEMPLE

Client
String nomClient
int codePostalClient
float soldeClient

[indic] class NomClasse [extends NomSuperClasse][implements
NomInterface, NomInterface,…] {
[indic_acces] [static] type attribut1;

float getSolde (String)

Déclaration

public class Client {

[indic_acces] [static] type attribut2;

// variables d'instance



private String nomClient;
private int codePostalClient;

[indic_acces] [static] typeRetourne methode1(liste_param) {


private float soldeClient;




// méthodes d'instance
public float getSolde (String cli) {

}
[indic_acces] [static] typeRetourne methode2(liste_param) {

}





}
}

} // fin définition classe
135

JAVA - © Christine Bonnet

Méthode
d'instance





Variable
d'instance

136

JAVA - © Christine Bonnet

Définition d'une classe : INDICATEURS D'ACCÈS
et autres déclarations
[indic] class NomClasse …

• public : la classe est visible à l'extérieur du package
(par toutes les classes)

Définition des membres de la classe :
INDICATEURS D'ACCÈS
Membres d'une classes = attributs et méthodes

• public : accès possible partout où sa classe est
accessible

• Par défaut une classe n'est visible que pour les
classes du même package (package-private)

• abstract : la classe est abstraite (principe de
délégation-polymorphisme)

• final : la classe ne peut pas être dérivée

• Par défaut : accès possible depuis toutes les classes
du même package (package-private)

• protected : accès possible depuis toutes les classes
du même paquetage et depuis les classes dérivées
(qu'elles appartiennent ou non au même package)

• private : accès restreint à la classe où est faite la
Combinaisons : public abstract, public final
137

JAVA - © Christine Bonnet

déclaration
138

CRÉATION D'UN OBJET

LES OBJETS
• Un objet est une instance d'une classe créée par
un constructeur

• Tous les objets d'une classe ont les mêmes

attributs et le même comportement (méthodes)

JAVA - © Christine Bonnet

• Déclaration d'une variable référence d'objet
NomClasse nomObjet;

• Création d'une instance : opérateur new
nomObjet = new NomClasse();
new

• Un objet est identifié par une référence  permet

de distinguer des objets ayant les mêmes valeurs
d'attributs

139

JAVA - © Christine Bonnet

 alloue de la mémoire pour le nouvel objet
 appelle un constructeur pour initialiser les
valeurs des attributs de l'objet
 renvoie (dans nomObjet) une référence sur le
nouvel objet créé qui pointe sur l'emplacement
de l'objet en mémoire
140

JAVA - © Christine Bonnet

CRÉATION D'UN OBJET (suite)

AFFECTATION DE RÉFÉRENCES

OU

• Combinaison de la déclaration de la référence d'objet et de la
création de l'objet

Affectation d'une référence à une autre

NomClasse nomObjet = new NomClasse();

 deux références pour un même objet
Film film1;

Film film1 = new Film();

La variable d'objet est initialisée à null

OU

film1
titre : null
categorie : null

Film film1 = new Film();
Film film2 = film1;
film1 = new Film();

film2

new  la variable d'objet pointe sur un objet
141

JAVA - © Christine Bonnet

142

JAVA - © Christine Bonnet

VARIABLES D'INSTANCE

LES ATTRIBUTS

[indic_acces] [final] type nomVariable [= valeur];

Deux types :

• Variables utilisées par les objets d'une classe

 Variables d'instance
 Variables de classe

• Propres à chaque instance de la classe

DÉCLARATION D'UNE VARIABLE :
[indic_acces] [static] [final] type nomVariable [= valeur];

143

JAVA - © Christine Bonnet

• Décrivent l'état de l'objet (attributs)

144

JAVA - © Christine Bonnet

VARIABLES D'INSTANCE - suite
[indic_acces] [final] type nomVariable [= valeur];

• Accès :

VARIABLES D'INSTANCE ET ENCAPSULATION
• L'encapsulation est un concept clé en programmation
orienté objets

 variables définies private : par les méthodes de sa

classe uniquement (accès par nomAttribut)
 variables définies protected : par les méthodes de

sa classe, de ses sous-classes (nomAttribut) et des
classes du même paquetage (opérateur "." :
nomObjet.nomAttribut)
 variables définies public : par toutes les méthodes

(nomObjet.nomAttribut)partout où sa classe est
accessible
145

JAVA - © Christine Bonnet

INITIALISATION DES VARIABLES D'INSTANCE
• A la création d'un objet  initialisation par défaut de
toutes les variables d'instance

('\u0000' pour les variables de type char, 0 pour byte, short,int et long, false pour
boolean, 0.0 pour float et double, null pour les références d'objet)

• Initialisations explicites : les variables d'instance peuvent
être initialisées dans les déclarations

– Implémentation ignorée
– Utilisation des objets par l'intermédiaire de la partie
"interface" d'une classe
 Permet d'utiliser des objets sans savoir comment ceuxci fonctionnent (par exemple un lecteur DVD, un guichet
automatique de banque, etc.)

• Respect de l'encapsulation :
 Les variables d'instance doivent être déclarées privées
(Seules les méthodes d'une classe peuvent avoir accès aux
variables d'instance privées de cette classe)
146

VARIABLES DE CLASSE (static)
[indic_acces] static [final] type nomVariable [= valeur];

• Variables partagées par tous les objets d'une classe
(identiques pour tous les objets de la classe)

• Information à propos des instances
• Non créées dans les instances
public class Film {

public class Film {
private String titre;
private String categorie = "C";
private int nbDeCesars;

• Les constructeurs permettent des initialisations plus

private static double prixMin
prixMinmin ;
private String titre, categorie;

prixMin

complexes

classe Film
147

JAVA - © Christine Bonnet

JAVA - © Christine Bonnet

148

titre
categorie

// var. de classe
// var. d'instance

titre
categorie

titre
categorie

objets Film
JAVA - © Christine Bonnet

DÉFINITION D'UNE MÉTHODE

• Initialisées à la déclaration ou par une méthode de classe
Exemples :

private static int capacite = 10;
private static varType maVar = initialiseVarClasse();
public static varType initialiseVarClasse() {
// code d'initialisation …
}

• Accès depuis l'extérieur de la classe (si la variable est

déclarée public) par NomClasse.nomVariableStatic

• Si la variable de classe est une constante :
private static final type NOM = valeur;

Exemple : public static final double PI (constante pi
de la classe Math)
149

Toujours dans la définition d'une classe
[indic_acces] [static] typeRetourné nomMethode
([arguments]) <bloc_de_code java>

• Les méthodes privées ne sont pas héritées
• Les méthodes final ne peuvent pas être substituées
• typeRetourné: nécessaire dans toutes les définitions
de méthodes (excepté les constructeurs)
 type primitif
 type classe
 void

• Le nombre d'arguments est fixe pour une méthode

JAVA - © Christine Bonnet

150

JAVA - © Christine Bonnet

MÉTHODES DE CLASSE (static)
[indic_acces] static typeRetourné nomMethode
([arguments]) { … }

• Deux types de méthodes :

• Méthode partagée par toutes les instances de la classe à
 Méthodes de classe (static)

laquelle elle appartient

• N'a accès directement qu'aux variables de classe et aux

 Méthodes d'instance

méthodes de classe de sa classe. N'opère pas sur un
seul objet

• Appel d'une méthode de classe :
NomClasse.nomMethodeClasse(liste_arguments);
OU
nomObjet.nomMethodeClasse(liste_arguments);

151

JAVA - © Christine Bonnet

152

JAVA - © Christine Bonnet

EXEMPLES D'UTILISATION


MÉTHODES D'INSTANCE

public static void augmentePrixMin(double aug) {
prixMin += aug;

• Décrivent le comportement d'un objet

}

• main()

• Méthodes d'accès aux variables d'instances (attributs)
d'un objet

public class Film {
public static void augmentePrixMin(double augmentation) {
… }

 Elles fournissent les fondations de l'encapsulation

public static void main(String[] args) {
Film.augmentePrixMin(.20);
}

• Appel d'une méthode d'instance : opérateur "."

}

• Math.sqrt()

nomObjet.nomMethode([arguments …]);

La classe Math fournit des méthodes de classe pour réaliser des fonctions
mathématiques et des constantes de classe comme E (2.71828…) et PI
(3.1415926…)
153

JAVA - © Christine Bonnet

154

EXEMPLE

OBJET THIS
• Les méthodes d'instance reçoivent un argument
implicite appelé this qui fait référence à l'objet
courant

JAVA - © Christine Bonnet

public class Film {
public void setCategorie(String categorie
nvlCategorie)
) {
this.categorie = categorie
nvlCategorie;
; this
}

void uneMethode() {
Film film1 = new Film();
Film film2 = new Film();
film1.setCategorie("C"); …

• this utilisé
– lorsque le nom d'un attribut est identique à
l'argument formel d'une méthode d'instance
– pour passer la référence de l'objet courant en
argument d'une autre méthode

film1

titre = null
categorie = "C"

film2

titre = null
categorie = null

public void setCategorie (String nvlCat) {
categorie = nvlCat; // this inutile
Remarque : les méthodes de classe ne peuvent pas utiliser la référence this

155

JAVA - © Christine Bonnet

}

156

JAVA - © Christine Bonnet

PASSAGE DES PARAMÈTRES

• Argument de type référence d'objet (ou tableau) :
l'argument fait référence à l'objet lui-même

• Argument de type primitif : passage par valeur
(une copie de la valeur est générée)

Film film1 =
new Film("Les
visiteurs");
film1.setCategorie("CD");
unObj.uneMethode(film1);

film1

titre: "Les Visiteurs"
categorie : "C"

ref2

public void uneMethode
uneMethod(Film
(Film
ref2)
ref2)
{
ref2.setCategorie("C");
}

 Une méthode peut modifier l'état d'un objet passé
en argument à travers les méthodes publiques de
cet objet
157

JAVA - © Christine Bonnet

158

VALEUR RETOURNÉE PAR UNE MÉTHODE
• Instruction return pour sortir d'une méthode et

JAVA - © Christine Bonnet

EXEMPLE 1
public float getmontantDu (String codeCli) {

retourner une valeur, une référence à un objet ou
un tableau

// variables locales de la méthode
int nombreDeJours;
float aPayer;

public class Film {

float final fraisRetard = 1.5f;

private String categorie;

public String getCategorie () {
return categorie;
}

// corps de la méthode
nombreDeJours = this.getJoursRetardPaiement();
aPayer = nombreDeJours * fraisRetard;
return aPayer;

}

}

• void: pas de valeur de retour

159

JAVA - © Christine Bonnet

NB : une variable locale / un paramètre peut être déclaré final
 sa valeur ne peut pas être modifiée par la méthode
160

JAVA - © Christine Bonnet

EXEMPLE 2 : la méthode String toString()
public String toString(): héritée de Object
- représentation d'un objet sous forme de chaîne de caractères
(exemple : Film@130c19b)
- affichage des caractéristiques d'un objet avec
System.out.println et une redéfinition de toString()
dans la classe :

LES CONSTRUCTEURS
• Un constructeur est appelé par l'opérateur new à la
création d'un objet

• Le compilateur fournit un constructeur par défaut sans
argument, qui ne fait rien (mais qui permet la création
d'objets !)

• Une classe peut fournir un ou plusieurs constructeurs


System.out.println(nomObjetCompte); // Appel de toString()

}

• Constructeur d'une classe :

@Override

– habituellement déclaré public

public String toString(){
return "\n Compte de numéro:"+numCompte+ "\n Client:"
+nomPersonne;
}
161

JAVA - © Christine Bonnet

• Un constructeur peut appeler un autre constructeur de la
même classe en utilisant this comme nom :

private String catégorie;

appel d'un autre
constructeur

public Film() {
this("C");
}
public Film(String nvlCatégorie){
catégorie = nvlCatégorie;
}

L'appel à this() doit être la
première instruction du
constructeur
Les arguments de this()
doivent correspondre à ceux
du constructeur appelé

}
 la catégorie par défaut pour tout film est "C"

163

– porte le même nom que celui de la classe
– ne spécifie pas de type retourné
162

JAVA - © Christine Bonnet

SURCHARGE D'UNE MÉTHODE / D'UN
CONSTRUCTEUR
• Plusieurs méthodes dans une classe peuvent
avoir le même nom

public class Film {
private String titre;

(surcharge). Dans ce cas, il n'y a plus de constructeur
par défaut

JAVA - © Christine Bonnet

• Ces méthodes doivent avoir des signatures
différentes

Signature d'une méthode : nom de la méthode, nombre
et type de ses paramètres (le type retourné n'en fait pas
partie)

• Les constructeurs peuvent être surchargés
• Résolution à la compilation : les paramètres

effectifs sont comparés aux paramètres formels
des méthodes/constructeurs portant le même nom
dans la définition de la classe
164

JAVA - © Christine Bonnet

EXEMPLES


Film
String titre
String catégorie
float prix

public class Film {
public void setPrix() {

void setPrix ()
void setPrix (float)

prix = 7.25f;
7.25;
}
public void setPrix(float nouveauPrix) {
prix = nouveauPrix ; Film film1 = new Film();
} …
film1.setPrix();
}



SUBSTITUTION D'UNE MÉTHODE
(POLYMORPHISME)

mov1.setPrix(7.5);
film1.
.setPrix(8.5f);

Recherche d'informations sur un client à partir de son
numéro ou de son nom  deux méthodes
getClientParNumero(num) et getClientParNom(nom)

• Dans une hiérarchie de classes, plusieurs

méthodes peuvent avoir la même signature 
méthode redéfinie (ou substituée)

• Résolution à l'exécution : le choix de la méthode à
exécuter se fait en fonction de la classe de l'objet
récepteur du message
Compléments voir chapitre 12

 Avec la surcharge une seule méthode : getClient, une
avec le paramètre num et l'autre avec le paramètre nom
Intérêt de la surcharge  apparence uniforme de la classe vis-à-vis de l'extérieur
165

JAVA - © Christine Bonnet

MÉTHODE final
• Une méthode marquée final ne peut pas être
redéfinie (polymorphisme) dans une sous-classe

166

JAVA - © Christine Bonnet

LE RAMASSE-MIETTES (GARBAGE COLLECTOR)
• Dès qu'un objet n'est plus référencé par aucune

variable ou aucun objet, le gestionnaire de mémoire le
détruit et récupère l'espace mémoire qu'il occupait

 Le programmeur n'a plus besoin (comme en C++
public final boolean checkPassword(String p) {

par exemple) de s'occuper de détruire les objets



• Un objet peut être marqué pour le gestionnaire de

}

mémoire en supprimant toutes les références à cet
objet (en les positionnant à null)

 Sécurité

• Cette gestion de la mémoire est automatique

Néanmoins le programmeur n'a aucun contrôle sur le
moment de son exécution

167

JAVA - © Christine Bonnet

168

JAVA - © Christine Bonnet


Related documents


2 basesjavadebut
4 progobjjava
java test
5 progobjjavasuite
6 genericitecollections
1 introjava


Related keywords