Académique Documents
Professionnel Documents
Culture Documents
o Exemple Objets
Objets
Classe Classe partner
etudiant1 4566A3
naciri Voiture noire
Etudiant ahmed 1250 Kg
22 immatriculation
nom couleur 80 Km/h
prenom genie logiciel
poids
age vitesse
option clio
etudiant2 accélérer() 1232R4
assisterCours() rasdi freiner() bleue
validerModule() ali 950 Kg
23 70 Km/h
management
Les attributs
o Ils représentent les propriétés et les caractéristiques d’un objet.
o Couleur et poids sont des attributs des objets relatifs à Voiture.
o Les objets instances de la même classe doivent avoir les mêmes
attributs.
o les attributs sont définis par des variables.
o Chaque attribut a une valeur pour chaque objet.
• Pour l’objet clio instance de la classe voiture on a: couleur porte la
valeur bleue et poids porte la valeur 950 Kg.
• Pour l’objet partner instance de la classe voiture on a: couleur porte la
valeur noire et poids porte la valeur 1250 Kg.
3
Les méthodes
o Une méthode est une fonction ou une transformation qui peut être
appliquée aux objets ou par les objets dans une classe.
o Définit le comportement d'un objet et ce qui doit se passer lorsque
cet objet est créé, et les différentes tâches que l'objet peut effectuer
pendant sa durée de vie.
o Un étudiant (instance de la classe Etudiant) peut assister au cours et
peut valider un module.
o Une voiture ( instance de la classe Voiture) peut accélérer et peut
freiner.
4
Objet et référence
o Ainsi on dit que le nouveau objet créé est référencé par clio.
6
2 b 4
a
5 9
7
2
b 5
a==b retourne true
a==b retourne false a!=b retourne false
a!=b retourne true
8
Voiture clio = new Voiture(); //création d’un objet clio de type Voiture
• Classe X{
Public X()
{ n=3;} // initialisation tardive , tout les objets de type X auront la même valeur du champ n
Private final int n;
}
• Classe X{
Public X(int nn)
{n=nn;}// les instances de A peuvent avoir des valeurs différentes cette fois
Private final int n;
}
12
Méthodes particulières
o Accesseurs et mutateurs (getters et setters)
D’après ce qu’on a vu, les attributs sont déclarés avec le mot clé private
(principe d’encapsulation). Donc les attributs ne sont pas accessibles depuis
toute autre classe, en particulier la classe de test.
Afin d’accéder à un attribut pour changer sa valeur (en écriture) ou pour
récupérer sa valeur (en lecture) on utilise:
• Accesseur (getter) pour récupérer la valeur de l’attribut vitesse d’un objet de type Voiture:
public int getVitesse(){
return this.vitesse;
} // le type de retour du getter est le même que celui de l’attribut ( dans ce cas c’est int )
• Mutateur (setter) pour changer la valeur de l’attribut vitesse d’un objet de type Voiture:
public void setVitesse(int vitesse){
this.vitesse = vitesse; /*this c’est pour dire que this.vitesse c’est l’attribut vitesse de
l’objet courant et non pas l’argument vitesse de la méthode setVitesse()*/
} // le setter ne retourne rien donc le type de retour d’un setter est toujours void
14
Méthodes particulières
o Notion de Constructeur
Un constructeur est une méthode qui va se charger de créer un
objet et, le cas échéant, d'initialiser ses variables. Cette méthode a
pour rôle de réserver de l'allocation mémoire pour notre futur objet
et par la suite d’en réserver pour tous ses attributs.
Les instructions de cette méthode s’exécutent au moment de
l’instanciation du nouveau objet.
• Les constructeurs doivent avoir le même nom que la classe.
• Les constructeurs n’ont pas un type de retour.
• Les instructions qui y existent décrivent le comportement de l’objet
lors de la création.
• Une classe peut posséder plusieurs constructeurs !!
15
Méthodes particulières
o Constructeur (Suite)
• Exemple 1:
Public Voiture() {
}
//exemple de constructeur qui ne contient pas d’instructions
• Exemple 2:
Public Voiture() {
this.couleur = "bleue";
this.vitesse=60;
}
//exemple de constructeur qui initialise la couleur et la vitesse d’un
// objet au moment de l’instanciation.
16
Types de variables
o Variable d’instance
Ce sont les attributs non static d’une classe, ils ont des valeurs
propres à chaque objet.
• Exemple: couleur et poids dans la classe Voiture.
nom et prénom dans la classe Etudiant.
o Variable de classe
C’est une variable commune entre toutes les instances, elle a la
même valeur pour tous les objets.
Les variables de classe sont déclarées static.
• Exemple d’utilisation: calcul du nombre d’instanciations.
21
Types de variables
o Variable de classe (suite)
Par exemple, si nous définissons :
class B
{ static int n ;
float y ;
}
B a1 = new B(), a2 = new B() ;
Types de variables
o Variable de classe (suite)
Exp:
Class Obj {public Obj (){
Nb++;}
Private static ont Nb=0;}
Public class Test {
Public static void main ()
{ Obj a= new Obj();}
}
Une méthode de classe ne peut pas agir sur un champ
d’instance (erreur)
23
Exercice 1
o Construire une classe qui représente un point, Chaque instance (objet) de
cette classe appelée Point possède 2 attributs privés x et y qui représentent
les coordonnées du point. Les cordonnées peuvent être fixer pendant la
construction du point, sinon on peut les changer après à l’aide des getters
et des setters. Proposer une méthode changerCoordonnées(int x, int y) qui
change à la fois les attributs x et y d’un point.
o Construire une deuxième classe qui représente un cercle, chaque instance
de cette classe possède 2 attributs privés o et r qui représentent
successivement le centre (de type point) et le rayon du cercle. On définit
lors de la construction le rayon r du cercle, puis on définit un getter et un
setter pour les deux attributs.
o Dans la classe de test, construire (instancier) un objet o de type Point (en
fixant x et y pendant la construction) et un objet cercle de type Cercle.
Puis définir o comme le centre de cercle. Ensuite utiliser le getter de cercle
pour afficher les cordonnées de o.
29
Les tableaux
Les tableaux
Déclaration d’une référence à un tableau de int :
int[ ] tab; // ou int tab[ ];
Allocation d’un tableau et liaison à la référence déclarée
précédemment :
tab = new int[4];
Allocation par initialiseur :
int[ ] tab = {10, 20, 30, 40};
tab = new int[ ] {1, 2, 3};
Remarque :
Si un tableau n’est pas initialisé lors de son allocation, les
éléments seront automatiquement initialisés à une valeur
par défaut en fonction de leur type :
31
Les tableaux
Les tableaux
Remarques :
• Un accès a un élément d'un tableau qui dépasse sa capacité, lève une exception
du type java.lang.arrayIndexOutOfBoundsException.
Les tableaux
Passage de tableaux en paramètre
Exemple :
t = new int [2][3];
t 3 4 5
class TrianglePascal
{
public static void main(String[] args)
{
int[ ][ ] triangle = new int [5][ ];
for( int i = 0; i < triangle.length; i++)
{
triangle [i]= new int [i+1];
triangle[i][0] = 1;
triangle[i][i] = 1;
for( int j = 1; j < triangle[i].length - 1; j++)
triangle[i][j] = triangle[i-1][j-1]+ triangle[i-1][j];
}
}
37
Les Packages
Un package (ou paquetage) est un
regroupement de classes qui sont fortement
liées du point de vu fonctionnel (même
domaine, même fonctionnalité).
Les packages permettent d'organiser les
librairies de classes Java et d'éviter d'éventuels
conflits de noms.
Un package peut contenir des sous-packages.
Les classes de la librairie standard Java sont
organisées en packages :
java.lang : rassemble les classes de base Java (Object,
System, String, Math, …)
java.util : rassemble les classes utilitaires (Vector,
Calendar, Date, Random, Scanner, …)
java.io : entrées/sorties
…
38
Instruction package
Compiler :
Se placer dans le répertoire racine des packages (src)
Spécifier tout le chemin pour désigner la classe
…\src> javac -d ../bin ma/emsi/graphics/*.java
Exécuter :
Se placer dans le répertoire racine des packages (bin)
Spécifier la classe en utilisant un nom complet
…\bin> java ma.emsi.graphics.Main
45
46
Héritage et polymorphisme
Héritage
o L'héritage est un mécanisme qui permet à une classe d'hériter de
l'ensemble des comportements et des attributs d'une autre classe.
o Grâce à l'héritage, une classe peut disposer immédiatement de
toutes les fonctionnalités d'une classe existante. De ce fait, pour
créer la nouvelle classe, il suffit d'indiquer dans quelle mesure elle
diffère de la classe existante.
o Une classe qui hérite d'une autre classe est appelée sous-classe ou
classe dérivée, et la classe qui offre son héritage à une autre est
appelée super-classe, classe de base ou classe mère.
47
Héritage et polymorphisme
Héritage
o On dit que les classes Chien et Oiseau héritent
de la classe Animal. Ceci dit qu’elle possèdent
les mêmes propriétés et comportements que
Animal. Ainsi:
Héritage et polymorphisme
Héritage
o Dans la pratique, cela signifie que si la super-
classe possède un comportement et des attributs
dont vous avez besoin, il ne sera pas nécessaire
de la redéfinir ou d'en copier le code pour
disposer du même comportement et des mêmes
attributs dans votre classe. Votre classe recevra,
en effet, automatiquement ces éléments de sa
super-classe.
49
Héritage et polymorphisme
Héritage
o La partie supérieure de la hiérarchie de
classes est occupée par la classe Object; toutes
les classes héritent des attributs et du
comportement de cette super-classe. La classe
Object est la classe la plus générale de la
hiérarchie. Cette classe est implicite, elle existe
systématiquement. Elle définit le comportement
et les attributs dont héritent toutes les classes de
la bibliothèque de classes de Java.
o On dit que toutes les classes java héritent de
la classe Object.
o Conséquence: en java tout est objet !!
50
Héritage et polymorphisme
Syntaxe
51
Héritage et polymorphisme
Exercice 2
o Nous allons voir comment mettre en œuvre l'héritage en Java, à partir
d'un exemple simple de classe ne comportant pas encore de constructeur.
Supposez que nous disposions de la classe Point suivante:
public class Point {
private int x,y;
public void initialise (int x, int y) {this.x = x; this.y = y; }
public void deplace (int x, int y) {this.x += x; this.y += y; }
public void affiche(){
System.out.println("je suis en "+this.x+" "+this.y); }
}
Héritage et polymorphisme
Exercice 2 (Suite)
o Il s'avère bien qu’un point coloré n’est qu’un point ayant une
couleur, donc un point coloré possède toutes les propriétés d’un
point plus une autre propriété qui s’appelle couleur.
o Ainsi, construire une classe PointCol qui hérite de la classe Point,
en ajoutant à la classe PointCol l’attribut couleur, et la méthode
colorer pour attribuer une couleur aux points colorés.
53
Héritage et polymorphisme
Héritage et polymorphisme
Héritage et polymorphisme
Héritage et polymorphisme
Héritage et polymorphisme
Héritage et polymorphisme
Dérivations successives :
o Jusqu'ici, nous n'avons raisonné que sur deux classes à la fois et
nous parlions généralement de classe de base et de classe dérivée.
En fait, comme on peut s'y attendre :
• d'une même classe peuvent être dérivées plusieurs classes différentes;
• les notions de classe de base (classe mère) et de classe dérivée (classe
fille) sont relatives puisqu'une classe dérivée peut, à son tour, servir
de classe de base pour une autre.
o Autrement dit, on peut très bien rencontrer des situations telles
que celle représentée par l'arborescence suivante :
59
Héritage et polymorphisme
Héritage et polymorphisme
Héritage multiple:
o Contrairement au C++, Java ne gère pas les héritages multiples :
une classe dérivée (ou encore classe fille) ne peut hériter que d'une
seule classe mère !
o Vous n'aurez donc JAMAIS ce genre de classe :
61
Héritage et polymorphisme
Redéfinition de méthodes:
o Soient Point et PointCol deux classes telles que:
Héritage et polymorphisme
Héritage et polymorphisme
Héritage et polymorphisme
Héritage et polymorphisme
Héritage et polymorphisme
Héritage et polymorphisme
Héritage et polymorphisme
Héritage et polymorphisme
Le polymorphisme
o Le terme polymorphisme décrit la caractéristique d'un élément qui
peut prendre plusieurs formes, comme l'eau qui se trouve à l'état
solide, liquide ou gazeux.
o En programmation Objet, le polymorphisme signifie que la même
opération peut se comporter différemment sur différentes classes
de la hiérarchie.
• Exemple
Le traitement de la méthode affiche() diffère selon l’objet sur laquelle
elle est appliquée. Pour un objet de type Point elle affiche les valeurs
des attributs x et y, mais pour un objet de type PointCol elle affiche
les valeurs des attributs x et y ainsi que celle de l’attribut couleur !!
70
Héritage et polymorphisme
Héritage et polymorphisme
Héritage et polymorphisme
Héritage et polymorphisme
Héritage et polymorphisme
Héritage et polymorphisme
Héritage et polymorphisme
Héritage et polymorphisme
Point p ;
PointCol pc1 = new PointCol(2,5,"bleu");
PointCol pc2 ;
...
p = pc1 ; //p contient la référence à un objet de type PointCol
...
pc2 = p ; //refusé en compilation
Héritage et polymorphisme
Héritage et polymorphisme
Héritage et polymorphisme
Héritage et polymorphisme
Héritage et polymorphisme
Héritage et polymorphisme
Exemple :
String str1= new String("Java");
String str2 = "Java";
char[] data = {'J', 'a', 'v', 'a'};
String str3 = new String(data);
String str4 = new String(str1);
86
Les classes de bases: La classe String
Concaténation :
public String concat(String str)
Les opérateurs « + » et « += »
Exemple :
String str1 = "C++";
String str2 = "Java";
String str3 = str1.concat(" & ").concat(str2);
String str4 = str1 + " & " + str2;
str1 += " & " + str2;
Longueur d’une chaîne :
int length()
Exemple :
String str = "Java";
System.out.print( str.length() );
87
Les classes de bases: La classe String
Comparaisons lexicographiques :
• public int compareTo(String anotherString)
• public int compareToIgnoreCase(String str)
• public boolean startsWith(String prefix)
• public boolean endsWith(String suffix)
• public boolean equals(Object anObject)
• public boolean equalsIgnoreCase(String anotherString)
Exemple :
String str1 = "java";
String str2 = "Java";
if(str1.compareTo(str2) > 0) System.out.println(true);
System.out.println( str1.startsWith(str2) );
System.out.println( str1.endsWith(str2) );
System.out.println( str1.equals(str2) );
88
Les classes de bases: La classe
String
Recherche la position de la première occurrence d’un
caractère ou d’une chaîne de caractères :
• public int indexOf(int ch)
• public int indexOf(int ch, int fromIndex)
• public int indexOf(String str)
• public int indexOf(String str, int fromIndex)
Exemple :
String texte = "une chaîne de caractères";
int index = texte.indexOf('e') ;
while (index != -1) {
System.out.println(" « e » en position " + index) ;
index = texte.indexOf("e", index + 1) ; }
89
Les classes de bases: La classe String
Exemple :
String msg = "Chaîne de caractères";
System.out.println(msg.charAt(0));
System.out.println(msg.substring(7));
System.out.println(msg.substring(0, 6));
Exemple :
int i = 20;
boolean b=true;
String str1 = String.valueOf( i );
String str2 = String.valueOf( b );
91
Les classes de bases: Les classes
enveloppes
Les classe enveloppes (Wrappers) sont des classes qui
encapsulent les données de type primitif, afin de pouvoir les
utiliser comme des objets ordinaires. Depuis Java 5, les
opérations de conversion d'un type primitif vers un objet d'une
classe enveloppe, et la conversion inverse sont devenues
automatique : boxing et unboxing. Les classes enveloppes
sont immuables.
Type primitif Classe enveloppe
boolean Boolean
char Character
byte Byte
short Short
int Integer
long Long
float Float
double Double
92
Les classes de bases: Les classes
enveloppes
Les constructeurs :
Les constantes :
• public static final typeSimple MIN_VALUE
• public static final typeSimple MAX_VALUE
95
Les classes de bases: Les classes
enveloppes
Exemple
Integer i1 = new Integer(10);
Integer i2 = 10; // boxing
Integer i3 = Integer.valueOf( 10 );
Integer i4 = i2 * i3;
Integer i5 = Integer.valueOf( i2.intValue() * i3.intValue() );
String s = Integer.toString( 10 );
int i8 = Integer.valueOf( s ).intValue();
int i9 = Integer.parseInt( s );
System.out.println( Integer.toBinaryString(15) );
96
Les classes de bases: Les classes
enveloppes
Exemple :
System.out.println("\n" + str.toUpperCase() );
97
Les classes de bases: La classe
Scanner
La classe Scanner a été introduite à partir de la version java
5. Elle simplifie la lecture de données sur l’entrée standard
(clavier).
stdin.nextLine();
System.out.print("Entrez une chaine : ");
str = stdin.nextLine();
stdin.nextLine();
System.out.print("Entrez un réel : ");
d = stdin.nextDouble();
100
101
A a = new B(...) ; // OK
104
Quelques règles
o Dès qu'une classe comporte une ou plusieurs méthodes abstraites, elle est
abstraite, et ce même si l'on n'indique pas le mot clé abstract devant sa
déclaration (ce qui reste quand même vivement conseillé). Ceci est
correct :
public class A {
public abstract void f ( ); // OK
}
Malgré tout, A est considérée comme abstraite et une expression telle que
new A(..) sera rejetée.
o Une méthode abstraite ne doit pas être final, ce qui est logique puisque sa
vocation est d'être redéfinie dans une classe dérivée.
o Une classe dérivée d'une classe abstraite n'est pas obligée de redéfinir
toutes les méthodes abstraites de sa classe de base.
105
Intérêt
o Le recours aux classes abstraites facilite largement la
Conception Orientée Objet. En effet, on peut placer dans une
classe abstraite toutes les fonctionnalités dont on souhaite
disposer pour toutes ses descendantes.
soit sous forme d'une implémentation complète de méthodes (non
abstraites) et de champs (privés ou non) lorsqu'ils sont communs à
toutes ses descendantes;
soit sous forme d'interface de méthodes abstraites dont on est alors sûr
qu'elles existeront dans toute classe dérivée instanciable.
106
Les interfaces
o Les interfaces sont des classes abstraites contenant uniquement des
définitions de constantes et des déclarations de méthodes, sans leur
définition (autrement dit, les méthodes indiquées dans les
interfaces ne comportent que le prototype sans le corps).
o La déclaration d'une interface se présente comme celle d'une
classe. On utilise simplement le mot clé interface à la place de
class :
interfcace I {
// liste des constantes
// liste des prototypes de méthodes (méthodes abstraites)
}
Toutefois, comme la notion d’accès direct n’a de sens que pour un flux
connecté à un fichier, les constructeurs de la classe RandomAccesFile
requièrent tous un fichier. On y précise le nom, ainsi que le mode d’accès
; il s’agit d’une chaîne ayant l’une des deux valeurs "r" (lecture seule) ou
"rw" (lecture et écriture). Voici un exemple de construction d’un tel objet :
RandomAccesFile entree = new RandomAccessFile ("donnees.dat", "r") ;
Accès direct à un fichier binaire
Par ailleurs, la classe RandomAccessFile dispose d’une méthode
spécifique seek permettant d’agir sur le "pointeur de fichier". Ce dernier
correspond au rang du prochain octet à lire ou à écrire (le premier octet
portant le numéro 0).
Soit un programme qui lit des nombres entiers au clavier et qui, pour chacun
d’entre eux, écrit une ligne d’un fichier texte contenant le nombre fourni
accompagné de son carré, sous la forme suivante :
12 a pour carrre 144
On convient que l’utilisateur fournira la valeur 0 pour signaler qu’il n’a plus de
valeurs à entrer.
Exemple
import java.io.* ;
public class Crftxt1
{ public static void main (String args[]) throws IOException
{ String nomfich ;
int n ;
System.out.print ("Donnez le nom du fichier a creer : ") ;
nomfich = Clavier.next() ;
PrintWriter sortie = new PrintWriter (new FileWriter (nomfich)) ;
do
{ System.out.print ("donnez un entier : ") ;
n = Clavier.nextInt() ;
if (n != 0)
{ sortie.println (n + " a pour carre " + n*n) ; } }
while (n != 0) ; sortie.close () ;
System.out.println ("*** fin creation fichier ***");}}
Accès aux lignes d’un fichier texte
il n’existe pas de classe jouant le rôle symétrique de PrintWriter. Il faut se
contenter de la classe FileReader, symétrique de FileWriter. En la couplant avec
la classe Buffered-Reader qui dispose d’une méthode readLine, nous allons
pouvoir lire chacune des lignes de notre fichier
avec FileReader seule, on ne pourrait accéder qu’à des caractères, et il nous
faudrait prendre en charge la gestion de la fin de ligne). Nous créons donc un
objet entree de la façon suivante :