Академический Документы
Профессиональный Документы
Культура Документы
Amlie Lambert
2014-2015
Amlie Lambert
2014-2015
1 / 82
Chapitre 5
Programmation oriente objet
Amlie Lambert
2014-2015
2 / 82
Plan du cours
Amlie Lambert
2014-2015
3 / 82
Analyse, conception et
programmation Oriente Objets
Amlie Lambert
2014-2015
4 / 82
Amlie Lambert
2014-2015
5 / 82
Amlie Lambert
2014-2015
6 / 82
Diagramme de classe
Ce diagramme est utilis pour prsenter les classes des systmes ainsi que
les diffrentes relations entre celles-ci.
Il doit dcrire le comportement et le type dun ensemble dobjets.
PolygoneRegulier
-nbCotes:int
-longueur:double
+perimetre():double
+surface():double
Amlie Lambert
2014-2015
7 / 82
Diagramme dobjet
Amlie Lambert
pr1 :PolygoneRegulier
nbCotes=4
longueur=12.8
2014-2015
8 / 82
Lassociation
Lagrgation
La composition simple ou multiple
Lhritage
Modles dynamique
Amlie Lambert
2014-2015
9 / 82
Lassociation
Amlie Lambert
2014-2015
10 / 82
Amlie Lambert
2014-2015
11 / 82
Amlie Lambert
2014-2015
12 / 82
Amlie Lambert
2014-2015
13 / 82
Lagrgation
Amlie Lambert
2014-2015
14 / 82
2014-2015
15 / 82
Association + Agrgation
Amlie Lambert
2014-2015
16 / 82
2014-2015
17 / 82
La composition
La composition est une variante plus forte de lagrgation.
En gnral, le cycle de vie des deux classes en relation est dpendant. Si la
classe contenante est dtruite, la classe subordonne est dtruite.
Elle est reprsente par un trait reliant les deux classes et dont lorigine
(classe contenante) se distingue par un losange noir de lautre extrmit
(classe subordonne).
Amlie Lambert
2014-2015
18 / 82
Amlie Lambert
2014-2015
19 / 82
La composition multiple
Amlie Lambert
2014-2015
20 / 82
Amlie Lambert
2014-2015
21 / 82
Lhritage
La relation dhritage indique que la "sous-classe" (classe fille) est
une spcification de la "super-classe" (classe mre).
La classe fille hrite de tous les attributs et mthodes de la classe mre, on
va du gnral au particulier.
Elle est reprsente par un trait reliant les deux classes et dont lorigine
(classe mre) se distingue de lautre extrmit (classe fille) par un triangle.
Amlie Lambert
2014-2015
22 / 82
public class Voiture extends Vehicule{ // lheritage est reprsent par le mot cl extends
...
}
public class Bateau extends Vehicule{
...
}
public class Train extends Vehicule{
...
}
public class Velo extends Vehicule{
...
}
Amlie Lambert
2014-2015
23 / 82
Association + Hritage
Il est possible de mixer association et hritage.
Amlie Lambert
2014-2015
24 / 82
2014-2015
25 / 82
Exercice 1 (1/5)
Des personnes dfinies par leur nom peuvent acheter une ou plusieurs
voitures (dfinies par leur modle).
Chaque voiture peut possder un autoradio (avec ou sans lecteur de CD).
Cet autoradio est extractible. Le propritaire de lautoradio est une
personne qui nest pas obligatoirement celui de la voiture.
1
Amlie Lambert
2014-2015
26 / 82
Exercice 1 (2/5)
Amlie Lambert
2014-2015
27 / 82
Exercice 1 (3/5)
public class Personne
{
private String nom;
private Vector<Radio> radios; // lassociation est reprsente par le vecteur radios
private boolean possede = false;
private Vector<Voiture> voitures; // lassociation est reprsente par le vecteur voitures
public Personne( String nom ){
this.nom = nom;
voitures = new Vector();}
public void possede( Radio radio ){
radios.addElement(radio);
possede = true;}
public boolean possedeRadio(){
return possede;}
public void achete( Voiture voiture ){
voitures.addElement( voiture );}
}
Amlie Lambert
2014-2015
28 / 82
Exercice 1 (4/5)
public class Voiture
{
private String modele;
private Radio radio = null; // lagregation est representee par le Radio radio
public Voiture( String modele ){
this.modele = modele; }
public void installe( Radio radio ){
if (!radio.getInstalle()){
this.radio = radio;
this.radio.setInstalle(true);
}}
public void desinstalle(){
if (this.installe !=null){
this.radio.setInstalle(false);
this.radio=null;
}}
public Radio getRadio(){
return radio; }
}
Amlie Lambert
2014-2015
29 / 82
Exercice 1 (5/5)
public class Radio
{
private boolean installe; // lagregation est representee par le boolean installe
public Radio(){
this.installe=false; }
public void setInstalle(boolean b){
this.installe = b; }
public boolean getInstalle(){
return this.installe; }
}
public class Client{
public static void main ( String[] args ){
Personne personne = new Personne( "Ledoux" );
Voiture voiture = new Voiture( "Renault" );
Radio radio = new Radio();
voiture.installe( radio );
personne.achete( voiture );
personne.possede(voiture.getRadio() );
}
}
Amlie Lambert
2014-2015
30 / 82
Lhritage
Amlie Lambert
2014-2015
31 / 82
Amlie Lambert
2014-2015
32 / 82
Amlie Lambert
2014-2015
33 / 82
Amlie Lambert
2014-2015
34 / 82
Amlie Lambert
2014-2015
35 / 82
2014-2015
36 / 82
Amlie Lambert
2014-2015
37 / 82
2014-2015
38 / 82
visibilit
autre classe du
mme package
sous classe dun
autre package
Amlie Lambert
private
non
par dfaut
oui
protected
oui
public
oui
non
non
oui
oui
2014-2015
39 / 82
Exercice 2 (1/4)
Nous revenons vers la classe Radio. On souhaite crer un nouveau modle
de radio capable de lire des CDs.
1
Amlie Lambert
2014-2015
40 / 82
Exercice 2 (2/4)
class Radio{
protected double[] stations = new double[5];
public Radio(){}
public Radio(double[] stations){
this.stations = stations;
}
public void preregler(int index, double frequence){
stations[index] = frequence;
}
public void ecouter(int index){
System.out.println("Ecoutedelastation:"+stations[index]+"Mhz");
}
public void ecouter(double frequence){
System.out.println("Ecoutedelastation:" + frequence+ "Mhz");
}
}
Amlie Lambert
2014-2015
41 / 82
Exercice 2 (3/4)
class RadioCD extends Radio{
private boolean cdIn = false;
public RadioCD(double[] stations){
super(stations);}
public void insererCD(){
cdIn = true;
System.out.println("\t>CDinsr");}
public void enleverCD(){
cdIn = false;
System.out.println("\t>CDenlev");}
public void ecouter(){
if(cdIn)
System.out.println("\t>lectureduCD");
else
System.out.println("\t>insrerunCDdabord");}
}
Amlie Lambert
2014-2015
42 / 82
Exercice 2 (4/4)
Amlie Lambert
2014-2015
43 / 82
La surcharge et la redfinition
Plusieurs mthodes dune mme classe peuvent avoir le mme nom
condition davoir des signatures diffrentes (nombre et/ou types
des paramtres diffrents). On dit quelles sont surcharges.
Exemple :
void afficher(String s);
void afficher(int i,Object o);
Le compilateur sappuie sur la signature des mthodes pour choisir
sans ambigut la mthode appliquer.
La surcharge est un mcanisme qui sapplique aussi aux constructeurs.
En revanche, lors de lhritage, une mthode redfinie possde la
mme signature et le mme type de retour que la mthode de
la super classe.
Une variable dinstance, une variable ou une mthode static ne
peuvent pas tre redfinies.
Amlie Lambert
2014-2015
44 / 82
2014-2015
45 / 82
compilation OK
Mais
A a = new A();
a.g(5,5);
Amlie Lambert
46 / 82
La notion de Sous-classement
Il est possible daffecter un objet de classe mre un objet de classe fille.
Supposons que la classe Hexagone (classe fille) hrite de la classe
PolygoneRegulier (classe mre).
PolygoneRegulier poly = new PolygoneRegulier(5,2.5);
Hexagone hexa = new Hexagone(4.67);
poly = hexa;
Cette affectation est lgale. Aprs affectation, poly contient une rfrence
un objet, instance dune sous-classe de PolygoneRegulier, or un
Hexagone est un PolygoneRegulier.
Pour la mme raison, et puisque tout est objet, il est tout aussi lgal
dcrire :
Object o = new Object();
o = hexa;
Amlie Lambert
2014-2015
47 / 82
Sous-typage
Dfinition :
Soit ST un sous-type de T, alors toute valeur de ST peut-tre utilise
en lieu et place dune valeur du type T.
si SC est sous-classe de T, alors SC est sous-type de T
Exemple :
si poly.surface() est valide, alors hexa.surface() le sera aussi Les
classes PolygoneRegulier et Hexagone :
I
I
Amlie Lambert
2014-2015
48 / 82
Que se passe-t-il ?
Une erreur surviendra la compilation, car le type de poly
(PolygoneRegulier) ne possde pas de mthode dessiner()
Amlie Lambert
2014-2015
49 / 82
Amlie Lambert
2014-2015
50 / 82
Le transtypage (cast)
Le transtypage consiste convertir une valeur dun type dans un
autre type.
Exemples :
hexa = poly;
2014-2015
51 / 82
Amlie Lambert
2014-2015
52 / 82
Constructeurs et hritage
public class Point{
protected int x,y;
public Point( int x,int y ){
this.x = x;
this.y = y;
}
...
}
public class Cercle extends Point{
private int rayon;
public Cercle( int x,int y,int r ){
super( x,y );
rayon = r;
}
...
}
Amlie Lambert
2014-2015
53 / 82
Polymorphisme
Amlie Lambert
2014-2015
54 / 82
Polymorphisme
Le polymorphisme permet des objets de types diffrents dtre
manipuls avec une interface uniforme. Cest un des concepts essentiels
de la programmation oriente objet
polymorphisme vient du grec et signifie qui peut prendre plusieurs
formes
Le polymorphisme signifie quune mme opration peut se
traduire diffremment selon lobjet sur laquelle elle sapplique :
cest la capacit dun objet prendre plusieurs formes.
Alors que lhritage concerne les classes (et leur hirarchie), le
polymorphisme est relatif aux mthodes des objets.
Amlie Lambert
2014-2015
55 / 82
Exemple
Amlie Lambert
2014-2015
56 / 82
Polymorphisme
On ne connat qu lexcution la classe dappartenance de lobjet
dont la rfrence est affecte p.
Le choix du code excuter pour une mthode polymorphe ne se
fait pas statiquement la compilation mais dynamiquement
lexcution.
Le polymorphisme trouve son intrt lorsque lon veut construire
dynamiquement des structures de donnes dont les lments sont des
rfrences dobjets dune mme hirarchie.
En effet, la dclaration dune telle structure impose un type identique
tous les objets quelle est susceptible de contenir
Amlie Lambert
2014-2015
57 / 82
Polymorphisme : exemple
PolygoneRegulier[] p = new PolygoneRegulier[3];
Hexagone h = new Hexagone();
Carre c = new Carre();
PolygoneRegulier r = new PolygoneRegulier();
p[0] = h;
p[1] = c;
p[2] = r;
for ( int i=0;i<3;i++ ){
System.out.println( p[i].surface() );
}
Amlie Lambert
2014-2015
58 / 82
Exercice 3 (1/2)
class A extends Object{
public void m(){
System.out.println("mdelaclasseA");
}
}
class B extends A{
public void m(){
System.out.println("mdelaclasseB");
}
}
public class Poly03{
public static void main( String[] args ){
Object var = new B();
((B)var).m();
((A)var).m();
var.m();
var = new A();
((A)var).m();
}
}
2014-2015
59 / 82
Exercice 3 (2/2)
Amlie Lambert
2014-2015
60 / 82
Amlie Lambert
2014-2015
61 / 82
2014-2015
62 / 82
Amlie Lambert
2014-2015
63 / 82
Amlie Lambert
2014-2015
64 / 82
Amlie Lambert
2014-2015
65 / 82
Une classe abstraite ne peut pas tre instancie, mais on peut dfinir
des constructeurs qui seront invoqus dans les sous-classes
Si une sous-classe dune classe abstraite nimplmente pas toutes les
mthodes abstraites, cette sous-classe doit tre dclare abstraite.
Une sous-classe peut tre abstraite mme si sa super-classe est
concrte (exemple la super-classe Object)
Amlie Lambert
2014-2015
66 / 82
Vehicule v;
Train t = new Train();
Bateau b = new bateau();
boolean presse;
...
if (presse)
v = t;
else
v = b;
v.print();
Une classe abstraite sert de modle. Elle ne peut pas tre instancie.
Quelle que soit la rfrence contenue dans dans v, on a la garantie que la
mthode print() est implante
Amlie Lambert
2014-2015
67 / 82
Interfaces
Amlie Lambert
2014-2015
68 / 82
Interfaces
Amlie Lambert
2014-2015
69 / 82
Interfaces
Amlie Lambert
2014-2015
70 / 82
Interfaces (exemple)
Amlie Lambert
2014-2015
71 / 82
Interfaces (exemple)
public class Compte implements Transaction,Comparable{
private String titulaire;
private double solde;
private String code;
public Compte( String t,String c ){
titulaire = t;
code = c;}
public void ajouter( double s ){
solde = solde+s; }
public void retirer( double s ){
solde = soldes; }
public double getSolde(){
return solde; }
public int compareTo( Object o ){
if( solde<((Compte)o).getSolde() )
return 1;
else if( solde>((Compte)o).getSolde() )
return 1;
else return 0;}
}
Amlie Lambert
2014-2015
72 / 82
Interfaces (exemple)
public class Reservoir implements Transaction,Comparable{
private double contenu;
public Reservoir( double c ){
contenu = c; }
public void ajouter( double s ){
contenu = contenu+s; }
public void retirer( double s ){
contenu = contenus; }
public double getContenu(){
return contenu; }
public int compareTo( Object o ){
if(contenu<((Reservoir)o).getContenu())
return 1;
else if(contenu>((Reservoir)o).getContenu())
return 1;
else return 0;}
}
Amlie Lambert
2014-2015
73 / 82
Conflit de noms
interface I1{
void m(double d);
void f();
void g(int i);}
interface I2{
void m(int i);
void f();
float g(int i);}
f est prsente dans les 2 interfaces, pas de conflit de noms car il suffit de
dfinir une mthode f pour satisfaire les besoins dimplmentation imposs
par les 2 interfaces.
public void f(){....}}
2014-2015
74 / 82
Amlie Lambert
2014-2015
75 / 82
Exercices
Amlie Lambert
2014-2015
76 / 82
Exercice 4 (1/2)
Quel est le rsultat de lexcution du programme suivant :
(Remarque : le constructeur sans paramtre de la classe Object est-il
invoqu lorsque new B(5) est excut ?)
public class Exo4{
public static void main(String[] args){
B b = new B(5);
}
}
class A{
public A(){
System.out.println("JesuisdansA");
}
}
public class B extends A{
public B(int x){
System.out.println("JesuisdansB");
}
}
Amlie Lambert
2014-2015
77 / 82
Exercice 4 (2/2)
Le programme affiche :
Je suis dans A
Je suis dans B
En effet, si le constructeur de la classe drive ninvoque pas le
constructeur de la classe de base explicitement avec linstruction
super(...), Java fait quand mme appel au constructeur, sans argument,
de la classe de base : super().
Un constructeur dfinit comme suit :
public Toto(String e) {this.e = e ; }
est automatiquement transform en
public Toto(String e) { super() ; this.e = e ; }
Amlie Lambert
2014-2015
78 / 82
Exercice 5 (1/2)
Quels sont les problmes identifis la compilation du programme suivant :
public class C3{
public static void main(String[] args){
B b = new B();
}
}
class A{
public A(int x){
System.out.println("Jevaux:"+x);
}
}
public class B extends A{
public B(){
System.out.println("JesuisdansB");
}
}
Amlie Lambert
2014-2015
79 / 82
Exercice 5 (2/2)
Amlie Lambert
2014-2015
80 / 82
Exercice 7 (1/2)
On veut manipuler dans un mme programme des objets caractriss par leur
couleur et leur position (respectivement de type Color et Position) et que lon
pourra dplacer et afficher.
Parmi ces objets, on trouve :
des photos, caractrises par leur taille et que lon pourra compresser
des figures gomtriques, carrs et des hexagones et plus gnralement des
polygones rguliers dfinis par le nombre et la longueur de leurs cots et des
cercles dfinis par leur rayon dont on pourra calculer la surface.
Notons que le calcul de la surface dune photo ou que la compression dune figure
gomtrique quelconque ne nous intresse pas.
On souhaite pouvoir ajouter dautres figures gomtriques possdant les mmes
caractristiques et quon pourra afficher lcran, dplacer et dont on pourra
aussi calculer surface.
Proposer larchitecture qui vous parat la plus adapte. Elle sera exprime en
UML. On ne sintressera donc pas au codage des mthodes mais seulement
leur dclaration.
Amlie Lambert
2014-2015
81 / 82
Exercice 7 (2/2)
Amlie Lambert
2014-2015
82 / 82