Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Programmation Orientée
Orientée
Objet:
Objet: Java
Java
1
Plan
Les exceptions
Les Entrées/Sorties
Connexion Java et les bases de données: l’API JDBC
2
Héritage
Extension d’une classe
Intérêts
3
Héritage
PointGraphique
Hérite de Point
import java.awt.*; Elle possède les
variables
public class PointGraphique extends Point { Et méthodes définies
dans la classe Point
Color couleur ;
4
Héritage : Mécanismes
Utilisation de la classe
PointGraphique Comment cela se passe en mémoire
Attributs et méthodes concernant les
new créé un objet et retourne un
instances de la classe Point pointeur
s’appliquent aussi aux instances de
la classe PointGraphique
mémoire
p
PointGraphique p = new PointGraphique() ; isa
5
Héritage : mécanismes
Lien kind of
Partie statique
Structure de la classe PointGraphique
Color couleur
void dessine(…)
Partie dynamique
Structure des instances Lien isa
7
Héritage : terminologie
pour les étendre et définir ainsi une nouvelle classe F qui hérite de M
définies dans F
La relation d’héritage (kind-of ou sorte-de) peut être vue comme une relation
Eléphant
L’héritage doit être utilisé
Dans le sens « généralisation » pour abstraire en factorisant les
9
Héritage : Le test est-un
Le test Est-un une règle simple pour savoir si 2 classes doivent être liées par
une relation d’héritage : si A peut être liée à B, la phrase “A est-un B” devrait
avoir du sens. Par exemple :
un oiseau est un animal
un chat est un mammifère
une tarte aux pommes est une tarte
une fenêtre de texte est une fenêtre
une sphère est un objet graphique
un tableau d’entiers est un tableau
Par contre, les phrase suivantes sont inappropriées et donc l’héritage n’est pas
approprié :
un oiseau est un mammifère
une tarte au pomme est une pomme
un moteur est une voiture
un tableau d’entiers est un entier
10
Héritage…
La relation d’héritage est transitive : les méthodes et les variables
sont héritées à travers tous les niveaux (sans limitation du nombre
de niveaux)
Équipement
Caractéristiques Caractéristiques
communes à tous les nom supplémentaires pour
équipements fabriquant les citernes
poids
coût
11
Héritage…
public class A {
C objc = new C() ;
public void hello() {
System.out.println(« hello ») ; objc.hello() ;
} objc.bye();
} objc.oups();
public class B extends A {
12
Héritage…
Héritage simple
Une classe ne peut hériter que d’une seule autre classe
Object
Par défaut, une classe qui ne définit pas de clause extends hérite
de Object
13
Héritage…
Une sous-classe peut ajouter des variables et/ou des méthodes à celles
qu’elle hérite de sa super-classe.
Une sous-classe peut redéfinir (override) les méthodes dont elle hérite et
fournir ainsi des implémentations spécialisées pour celles-ci
Lorsqu’une méthode redéfinie par une classe est invoquée par un objet de
cette classe, c’est la nouvelle définition et non pas celle de la super-classe qui
est exécutée
14
Héritage…
public class A {
15
Héritage…
public class A {
public void methodeX(int i) {
}
}
surcharge redéfinition
16
Héritage…
avec réutilisation)
17
Héritage…
18
Héritage…
Color c;
19
Héritage : Chaînage des constructeurs
20
Héritage :chaînages des constructeurs
public object() { 3
…
} …
}
Ordre d’exécution
Ordre des appels
public class Point extends Object {
double x, y ;
public Point(double x, double y)
{ 2
super()
this.x = x ; this.y = y ;
}…
}
21
Héritage : constructeur par défaut
De corps vide
public object() {
…
} …
}
Constructeur par défaut
public class A extends Object { implicite
String nom ; Garantit le chaînage des
constructeurs
A () {
String getNom() { super() ;
return nom ; }
}
…
}
22
Héritage : constructeur par défaut…
Lorsqu’une sous classe définit une variable d’instance dont le nom est
identique à l’une des variable dont elle hérite, la nouvelle définition masque
la définition héritée (shadowed variables)
L’accès à la variable héritée se fait au travers de super
x instance de ClasseC
this.x ou x
public class ClasseC extends ClasseB {
float x ;
}
25
Héritage
Visibilité des variables et méthodes
26
Héritage :visibilité des classes
package A ;
public class ClasseA {
ClasseB b ;
package B ;
}
public class ClasseC {
ClasseA a ;
package A ;
class ClasseB extends ClasseA { ClasseB b ;
… }
27
Héritage : méthodes finales
Méthodes finales
public final void methodX(…) {…}
« verrouiller » la méthode pour interdire toute éventuelle redéfinition dans les sous-
classes
Augmente l’efficacité du code
quand le compilateur rencontre un appel à une méthode finale, il peut remplacer
l’appel habituel de méthode (empiler les arguments sur la pile, saut vers le code de la
méthode, retour au code appelant, dépilement des arguments, récupération de la
valeur de retour), par une copie du code du corps de la méthode (inline call).
si le corps de la méthode est trop gros, le compilateur est censé ne pas faire cette
optimisation qui serait contrebalancée par l’augmentation importante de la taille du
code.
Mieux vaut ne pas trop se reposer sur le compilateur :
– Utiliser final que lorsque le code n’est pas trop gros ou que l’on veut interdire toute
redéfinition
– Dans le cas des Classes membres (cf. cours GUI)
Méthodes private sont implicitement final (ne peuvent être redéfinies)
28
Héritage : Classes finales
Permet d’interdire tout héritage pour cette classe qui ne pourra être sous-
héritage.
29
Héritage : La classe Personne
abstract personne
#String nom
#String prénom
#String rue
#String ville
#static int nbpersonnes
+Personne( String nom, String prenom, String rue, String
ville)
+String toString()
+abstract void ecrirePersonne()
+static void nbPersonne()
+void modifierPersonne (String rue, String ville)
Enseignant Etudiant
Secretaire -String specialite -String diplomeEncours
-String numbureau
-static int nbEnseignants -static int nbEtudiants
-static int nbSeceratires +Enseignant( String nom, +Enseignant( String nom,
+Secretaire( String nom, String String prénom, String rue, String prénom, String rue,
prénom, String rue, String ville, String ville, String String ville, String
String numbureau) specialite) diplomeEncours)
+String toString() +String toString() +String toString()
+void ecrirePersonne() +void ecrirePersonne() +void ecrirePersonne()
+static int nbsecretaire() +static int nbenseignant() +static int nbetudiants()
30
La classe Personne: Implémentation
public String toString () {
abstract class Personne { // class
return nom + “ “ + prenom + “ “+ rue + “
abstraite, non instanciable “+ville; }
abstract void ecrirePersonne();
protected String nom;
static int nbpersonnes (){
protected String prenom; System.out.println(
“\n Nombre d’employés :“ + nbPersonnes
protected String rue;
+
protected String ville; “\n Nombre de secretaires : “ +
Secretaire.nbSecretaire() +
protected static int nbPersonnes=0; “\n Nombre d’enseignants : “ +
Personne (String nom, String prenom, Enseignant.nbEnseignant() +
“\n Nombre d’étudiants : “ +
String rue,String ville) Etudiant.nbEtudiant());
{this.nom=nom; }
void modifierPersonne (String rue,
this.prenom=prenom; String ville)
this.rue=ville; {this.rue=rue;
this.ville=ville;
this.ville=ville;
ecrirePersonne();}
nbpersonnes++;} }// fin Personne
31
La classe dérivée Secretaire: Implémentation
String toString () {
return super.toString()+ “\n Specialité : “ + specialite;}
void ecrirePersonne()
{System.out.println(“Enseignant : “+toString())};
String toString () {
Return super.toString()+ “\n diplôme En cours : “ + diplomeEncours;}
void ecrirePersonne()
{System.out.println(“Etudiant : “+toString())};
Surclassement et Ploymorphysme
Les exceptions
Les Entrées/Sorties
Connexion Java et les bases de données: l’API JDBC
37
Surclassement
super-classe :
Une classe B qui hérite de la classe A peut être vue comme un sous-
instance de la classe A.
38
Surclassement
Notez que le classe Object joue un rôle particulier car toute instance
39
Substitution de type
Obj = s ; surclassement
s = obj;
40
Substitution de type: d’une manière générale
41
Surclassement et substitution
e.nbInscriptions(); isa
es.nbInscriptions(); EtudiantSportif
Tounsi
String sportPratiqué;
es.bonusSportif(); …
Ali
e.bonusSportif(); 20 public EtudiantSportif(String n,
String p,int a …, String s, …)
42
Polymorphisme
Polymorphisme : possibilité d’affecter à une référence d’un type donné
(i.e. une classe) une valeur qui désigne un objet du type de la référence ou d’une
sous classe de ce type
A l’exécution, la référence peut désigner un objet qui prend des « formes »
43
Polymorphisme: Liens dynamiques
44
Polymorphisme: Liens dynamiques
ClasseA a;
A
for (int i=0 ; i<10; i++) {
public void affiche() { hasard = Math.random();
System.out.println(“Je suis un A”); if (hasard < 0.33)
}
a=new ClasseA();
else if (hasard < 0.66)
a = new ClasseB();
else
B a = new ClasseC();
46
Polymorphisme: Liens dynamiques
47
Polymorphisme : Intérêt
48
Polymorphisme
public class GroupeTd {
liste peut contenir Etudiant[] liste = new Etudiant[] ;
des étudiants de n’importe quel type int nbEtudiants = 0;
…
Etudiant public void ajouter (Etudiant e){
if(nbEtudiants < liste.length)
String nom ; liste[nbEtudiants++] = e;
String prénom ;
Int age ;
}
… public void afficherListe {
public void affiche() { for(int I=0; I<nbEtudiants; i++)
System.out.println( liste[I].affiche();
“Nom : ”+nom+“\n” }
+“Prénom”+prénom +“\n” }
+“Age : ”+age+…) ;} Code inchangé
49
Plan
Introduction au monde Objet
La langage Java: Introduction et caractéristiques
Syntaxe et structures de contrôle
Héritage
Surclassement et Ploymorphysme
Les classes abstraites : Héritage et abstraction
Les exceptions
Les Entrées/Sorties
Connexion Java et les bases de données: l’API JDBC
50
Classes Abstraites
Exemples introductifs
Un grand classique : les formes géométriques
On veut définir une application permettant de manipuler des formes
géométriques (triangles, rectangles, cercles,…).
Chaque forme est définie par sa position sur l’écran
largeur
v
r
hauteur
2
x,y
x,
x,y y v
1
Attributs : Attributs :
Attributs :
double x,y; //centre double x,y; // 1 sommet
double x,y; //coin inf-gauche
double r; // rayon double x1,y1; // v1
double largeur, hauteur;
Méthodes : double x2,y2; // v2
Méthodes :
déplacer(double dx,double dy) Méthodes :
déplacer(double dx,double dy)
double surface() déplacer(double dx,double dy)
double surface()
double périmètre() double surface()
double périmètre()
double périmètre()
Membres pouvant être factorisés
51
Classes Abstraites : Exemples introductifs…
largeur
v
r
hauteur
2
x,y
x,
x,y y v
1
class Forme { Forme
protected double x,y;
public void deplacer(double dx, double x,y;//centre du cercle
double dy) {
x += dx ; y += dy;
deplacer(double dx,double dy)
}
}
class Cercle extends Forme {
protected double r; Cercle Rectangle Triangle
public double surface(){ double largeur ; double x1,y1 ;
return Math.PI * r * r; double r;//rayon
double hauteur ; double x2,y2 ;
}
protected double périmetre() { double surface() double surface() double surface()
double périmetre() double périmetre() double périmetre()
return 2 * Math.PI * r;
}
}
52
Classes abstraites : Exemples introductif
import java.util.Vector;
class ListeDeFormes {
On veut pouvoir gérer des
Vector liste ; ensembles de formes
53
Classes abstraites
Utilité:
Définir des concepts (classes) incomplets qui devront être implémentés dans
}
54
Classes abstraites
55
Classes abstraites
Une classe abstraite est une description d’objets. Elle est destinée à
être héritée par des classes plus spécialisées.
Pour
être utile, une classe abstraite doit admettre des classes
descendantes concrètes
Une
classe abstraite permet de regrouper certaines caractéristiques
communes à ses sous-classes et définit un comportement minimal
commun.
56
Classes abstraites
Classe abstraite
FormeGéométrique
Méthode abstraite
Centre : Point
dessiner()
Elips …
Polygone
e
grandDiam :
Régulier : Boolean Vecteur
petitDiam : Vecteur
dessiner(
) Opération concrétisée
Polygone n’est utile que si spécialisée
57
Classes abstraites
Magnitude
Opérations abstraites
égalA(obj : Magnitude) : Boolean
{
inférieurA(obj : Magnitude) : Boolean
supérieurA(obj : Magnitude) :
Opérations concrètes
Boolean
(basées sur les deux
opérations abstraites)
Chaque sous-classe
concrète admet une Réel … Entier
implémentation différente
pour égalA() et inférieurA()
58
Plan
Introduction au monde Objet
La langage Java: Introduction et caractéristiques
Syntaxe et structures de contrôle
Héritage
Surclassement et Ploymorphysme
Les classes abstraites : Héritage et abstraction
Les interfaces
Les exceptions
Les Entrées/Sorties
Connexion Java et les bases de données: l’API JDBC
59
Interfaces : Intérêt
60
Interfaces : Exemple d’Intérêt
61
Interfaces : Intérêt
Elle est intéressante: elle permet de construire les objets une fois
pour toute sur une machine il n'est pas nécessaire de les
recopier sur tous les autres ordinateurs du réseau.
Attention toutefois, ces objets restent sur l'ordinateur où ils ont été
créés. Ce sont des objets distants qui fonctionnent en permanence,
et donc la seule possibilité de les solliciter est de passer par des
requêtes sur le réseau, et donc de passer par des interfaces qui
utilisent les méthodes appropriées.
62
Interfaces : Intérêt
63
Interfaces : Hiérarchies différentes
64
Interfaces : Hiérarchies différentes
65
Interfaces : Intérêt
un bouton de la souris.
66
Interfaces : Intérêt
Comme il est possible d'avoir n'importe quel objet (issu d'une hiérarchie
quelconque) comme écouteur d'événement, il est nécessaire de passer par le
système d'interface. En fait, un objet écouteur est une instance d'une classe
qui implémente l'interface spéciale appelée interface écouteur (listener
interface). Dans l'exemple ci-dessus, deux écouteurs ont été mis en oeuvre,
l'objet relatif à un élément du menu et l'objet boutonCercle (dans ce cas de
figure, ils sont à la fois source et écouteur). Ils sont représentés par l'interface
ActionListener, et lorsqu'un un événement se produit (correspondant à un clic
sur un bouton de la souris ou la validation par le clavier) la méthode
actionPerformed est exécutée.
67
Interfaces : Définition
Mais qu'est-ce qu'une interface ? Il s'agit essentiellement d'une
annonce (ou d'une promesse) indiquant qu'une classe
implémentera certaines méthodes. On utilise d'ailleurs le mot clé
implements pour signaler qu'une classe tiendra cette promesse.
Définition d'une interface : Les interfaces contiennent uniquement
des définitions de constante et des déclarations de méthodes, sans
leur définition (autrement dit, que le prototype, et pas le corps). La
définition d'une interface se présente comme celle d'une classe.
On utilise simplement le mot clé interface à la place de class
68
Interfaces : Définition
Par essence, les méthodes d'une interface sont abstraites (puisqu'on n'en
fournit pas de définition) et publiques (puisqu'elles devront être redéfinies
plus tard). Néanmoins, il n'est pas nécessaire de mentionner les mots clés
public et abstract (on peut quand même le faire).
Une interface peut être dotée des mêmes droits d'accès qu'une classe
69
Interfaces : Implémentation d'une
interface
Une classe peut "implémenter" une interface, ce qui se fait avec le mot
réservé implements ; on écrira par exemple :
Alors, la classe A :
dispose des constantes définies dans l'interface I.
71
Interfaces : Définition
72
Interfaces : Définition
73
Variables de type interface et
polymorphisme
Bien que la vocation d'une interface soit d'être implémentée par une
classe, on peut définir des variables de type interface :
Bien entendu, on ne pourra pas affecter à i une référence à quelque chose
de type I puisqu'on ne peut pas instancier une interface (pas plus qu'on ne
pouvait instancier une classe abstraite !). En revanche, on pourra affecter à
i n'importe quelle référence à un objet d'une classe implémentant
l'interface I :
74
Exemple
75
Exemple
76
Exemple2
77
Exemple2
78
Interfaces et constantes
79
Dérivation d'une interface
On peut définir une interface comme une généralisation d'une autre. On
utilise là encore le mot clé extends, ce qui conduit à parler d'héritage ou de
dérivation, et ce bien qu'il ne s'agisse en fait que d'emboîter simplement
des déclarations :
En fait, la définition de I2 est totalement équivalente à :
80
Interfaces: Typage
81
Interfaces: Classe ou interface ?
Les critères qui permettent de choisir entre la création d’une nouvelle classe ou
d’une interface. Pas de règles absolues, mais des principes :
Définition d’une nouvelle sorte d’objet ? (plutôt classe)
ActionListener
ItemListener
WindowListener
MouseListener
Etc.
82
Conclusion : Les formes d’héritage
Partage du code
faciles à utiliser
Prototypage rapide. Les programmes sont plus simples à écrire