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



5 ProgObjJavaSuite .pdf


Original filename: 5-ProgObjJavaSuite.pdf
Title: Microsoft PowerPoint - 5-ProgObjJavaSuite.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 223 times.
File size: 495 KB (10 pages).
Privacy: public file




Download original PDF file









Document preview


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

HÉRITAGE
Stylo

12

Compte

Compte épargne

Compte courant

Crayon

LA PROGRAMMATION OBJET EN JAVA
HÉRITAGE, POLYMORPHISME

• Héritage simple en Java. Racine de toute arbre
d'héritage : la classe Object

• Il doit être possible de substituer un objet d'une
sous-classe à un objet d'une super-classe

• Toutes les méthodes de la super-classe doivent
avoir un sens au niveau des sous-classes

188

JAVA - © Christine Bonnet

• La classe (classe de base) Article définit des

189

Article

méthodes et des variables
Film

• Film (classe dérivée) "extends" Article peut :
– ajouter de nouvelles variables
– ajouter de nouvelles méthodes
– substituer les méthodes de la classe Article

• Pour empêcher la spécialisation d'une classe :
final  rend toutes ses méthodes final

JAVA - © Christine Bonnet

• Indication de la super-classe que la sous-classe
étend : extends

public class Article {
private double prix;
private String condition; …
}

Article
double prix
String condition

Film
String titre
int durée

public class Film extends Article{
private String titre;
private int duree; …
}

• Film hérite de toutes les variables et méthodes de
Article

public final class Color {

Une classe n'hérite pas des constructeurs de sa super-classe,


}

190

appel explicite par super(arguments)
JAVA - © Christine Bonnet

191

JAVA - © Christine Bonnet

• Création d'un objet d'une sous-classe

LA RÉFÉRENCE super

Article
double prix
String condition

• super fait référence à l'objet courant mais comme une

Film film1 = new Film();

instance de la super-classe

Film
String titre
int durée

• super permet d'accéder aux méthodes de la superclasse même si elles ont été redéfinies dans la sousclasse : super.nomMethode(…)

• Si aucun constructeur n'a été défini :
– le constructeur par défaut (sans argument) de la
super-classe est appelé  initialisation des
variables d'instance de Article avec les valeurs
par défaut

• Utile pour appeler les constructeurs de la super-classe
(super considéré alors comme nom de constructeur)

L'appel doit figurer en première ligne du constructeur
de la sous-classe

puis
– le constructeur par défaut de la sous-classe est
appelé  initialisation de titre et durée avec
les valeurs par défaut

public SousClass(…) {

• Si un constructeur a été défini dans la super-classe,
utilisation de super(arguments)
192

// constructeur de la sous-classe

super(…); // appel du constructeur de la super-classe
… ;

// code du constructeur spécifique à la sous-classe

}

JAVA - © Christine Bonnet

193

EXEMPLE
Article
double prix
String condition

JAVA - © Christine Bonnet

SUBSTITUTION DES MÉTHODES DE LA
CLASSE DE BASE : POLYMORPHISME

Article(double,String)

• Une sous-classe peut substituer à une méthode de la
Film
String titre

super-classe sa propre version

Film(double,String,String)

prix = p;

La méthode a la même signature et le même type
retourné (différent de la surcharge)

condition = cond;

Elle doit avoir la même sémantique

public class Article {
public Article(double p, String cond) {

} …
public class Film extends Article {

 polymorphisme

public Film(double p, String cond, String t) {
super(p, cond);

Exemple :

titre = t;
} …

Charger des passagers
194

JAVA - © Christine Bonnet

195

JAVA - © Christine Bonnet

LE POLYMORPHISME

Le polymorphisme assure que la version correcte
de la méthode est appelée à l'exécution
Article
calcCaution(){…}
LecteurDVD
calcCaution(){…}

Film
calcCaution(){…}

Construction très puissante permettant de définir les
méthodes d'une super-classe avant de connaître les
détails des sous-classes

Caddie

 augmente la réutilisation du code

void ajoutArticle(Article item) {

 rend le code plus facile à maintenir

// cette méthode est appelée à chaque fois
//
//que
quel'employé
l'employéscanne
scanneun
unnouvel
nouvelarticle
article
double caution = item. calcCaution();


Exemple :
Ajout de types d'articles en fonction des nouvelles
locations sans avoir à recompiler le code existant

}

Ajout d'un article dans le caddie  Java détermine le type de l'article et
appelle la méthode calcCaution() correspondant à ce type
196

JAVA - © Christine Bonnet

ACCÈS AUX VALEURS D'ATTRIBUTS DE
LA SUPER-CLASSE
 Une méthode de la classe dérivée ne peut pas accéder
directement aux attributs private de la super-classe

 accès par les méthodes de l'interface publique de
la super-classe

197

JAVA - © Christine Bonnet

APPEL DES MÉTHODES DE LA SUPER-CLASSE
Utilisation de la référence super :
super.methode(arguments) pour appeler une
méthode de la super-classe à partir d'une sous-classe
public class Article{
public double calcCaution(int idCli) {
if …
return 33.00;
}

public class LecteurDVD extends Article {

 Une méthode de la classe dérivée peut accéder aux

public double calcCaution(int idCli) {

attributs protected de la super-classe

cautionArticle = super.calcCaution(idCli);

Rappel 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)
198

JAVA - © Christine Bonnet

return (cautionArticle + lecteurDVDCaution);
}

199

JAVA - © Christine Bonnet

TRANSTYPAGE ET OPÉRATEUR instanceof
• Un objet d'une super-classe est passé en paramètre d'une

13

méthode attendant un objet de la sous-classe

 transtypage : une référence d'objet est transformée en
un autre type d'objets
objSousClasse = (SousClasse)objSuperClasse

LA PROGRAMMATION OBJET EN JAVA
CLASSES ABSTRAITES,

• L'opérateur instanceof permet de déterminer le type d'un
objet à l'exécution

INTERFACES

public class Article { …
public void uneMethode(Article i) {

if (i instanceof LecteurDVD)
((LecteurDVD)i).testDVD(); // méthode de LecteurDVD
}

NB : l'inverse ne nécessite pas de transtypage
200

JAVA - © Christine Bonnet

201

DÉFINITION D'UNE CLASSE ABSTRAITE

CLASSE ABSTRAITE
• Niveau d'abstraction plus élevé pour modéliser les

objets du monde réel  facilite la conception orientée
objet

JAVA - © Christine Bonnet

[indic_acces]

abstract

class NomClasse { … }

Elle est obligatoirement déclarée public ou package-private (aucun indicateur)
ObjetGraphique
int x
int y
String couleurLigne
String couleurInterieure

Elle contient toutes les fonctionnalités requises pour
toutes ses descendantes (même si elles n'existent
pas encore)  exploitation du polymorphisme

public abstract class ObjetGraphique
Personnel {
{
private int x
numPers;
;

int getNumPers
()…{
public void
deplacer ()
} …
}
public abstract void redimensionner();
public abstract void dessiner();
}

classe
abstraite

void deplacer( )
void redimensionner( )
void dessiner( )

• Peut contenir des méthodes abstraites (ou non) qui

devront être implémentées dans toutes les sous-classes
concrètes

• Une classe abstraite ne peut pas être instanciée. Elle

Rectangle
int largeur
int hauteur

Cercle
double diamètre

void redimensionner()
void dessiner()

void redimensionner()
void dessiner()

peut être spécialisée

• Une classe qui contient une méthode abstraite doit être


}

elle-même abstraite
202

extends ObjetGraphique {
public class Rectangle
Employe
private
int largeur;
extends
Personnel
{

tauxHoraire
;
public void redimensionner() {
… …
}
public void dessiner() {

}
JAVA - © Christine Bonnet

203

JAVA - © Christine Bonnet



MÉTHODE ABSTRAITE
ObjetGraphique g ; // OK g référence sur un
// ObjetGraphique ou dérivé
g = new ObjetGraphique(); // ERREUR
ObjetGraphique g2= new Rectangle(…); // OK
Rectangle r1 = new Rectangle(…); // OK

g2 : on ne pourra invoquer (sans transtypage) que les méthodes
d'ObjetGraphique
r1 : on pourra invoquer les méthodes d'ObjetGraphique et de Rectangle

204

JAVA - © Christine Bonnet

indic_acces [static]

abstract

type nomMethode(liste_param);

• Une méthode abstraite est une méthode sans corps. Seule
la signature et le type retourné sont fournis
NB : pas d'accolades et "; " à la fin de la signature

• Elle est obligatoirement déclarée public ou packageprivate (aucun indicateur)
private abstract n'existe pas (remarque : ni static
abstract)

• Chaque sous-classe concrète doit implémenter la
méthode

public abstract class Article {
public abstract boolean estRentable();

205

JAVA - © Christine Bonnet

CLASSE ABSTRAITE - SUITE
• Une classe abstraite peut comporter un ou plusieurs
constructeurs; ils ne peuvent pas être abstraits

• Une classe dérivée d'une classe abstraite peut être
abstraite

Exercices

• Une classe dérivée d'une classe non abstraite peut être
abstraite (exemple : toutes les classes dérivent de
Object)

206

JAVA - © Christine Bonnet

207

JAVA - © Christine Bonnet

INTERFACE
Interface : contrat auquel doit obéir une classe

• Permet :
– de spécifier des protocoles, des comportements
génériques (exemples : Cloneable, Serializable)
– d'attribuer des comportements multiples à un objet et
de fédérer des objets selon leurs comportements

• Une interface définit un type

 Si une variable est déclarée d'un type d'interface I,
on peut lui affecter un objet de n'importe quelles
classes qui implémentent I

Exemple :

Les classes Moto, Montre et Casserole implémentent toutes
l'interface Vendable, un tableau de type Vendable[6] pourra
contenir deux motos, trois montres et une casserole
208

JAVA - © Christine Bonnet

• Une classe peut implémenter une ou plusieurs
interfaces par implements

Interface  support de l'héritage multiple
mais une classe ne peut étendre qu'une seule
classe
class PileParTableau extends Tableau implements Pile {… }

• Lorsqu'une classe implémente une interface, elle
fournit une définition pour toutes les méthodes
abstraites de l'interface

210

JAVA - © Christine Bonnet

• Le nom d'une interface est souvent un adjectif
• Il est impossible d'instancier une interface
• Une interface ne peut contenir que
– des constantes de classes
– des méthodes abstraites
et depuis Java 8
– des méthodes par défaut
– des méthodes statiques

• Une interface peut ne contenir aucune constante et aucune
méthode  utilisée comme type et pour marquer un
comportement pour les classes qui l'implémentent

Exemples : java.lang.Cloneable, java.io.Serializable

209

JAVA - © Christine Bonnet

Constantes de classe d'une interface
Les constantes définies dans une interface sont
implicitement public, static et final  indicateur
d'accès facultatif
Les constantes public sont accessibles en dehors
d'une classe implémentant l'interface (constante MAX de
l'interface I  I.MAX)
Méthodes abstraites, méthodes par défaut et méthodes
statiques d'une interface
sont implicitement public  indicateur d'accès
facultatif

211

JAVA - © Christine Bonnet

Exemple :
Pour les classes d'objets pouvant être "conduits"
 interface "dirigeable"

MÉTHODE PAR DÉFAUT
• Les méthodes par défaut disposent d'une implémentation

public interface Dirigeable {

• Permettent d'ajouter de nouvelles fonctionnalités à une

int MAXROTATION = 45;
void tournerAGauche(int deg);
void tournerADroite(int deg);

interface déjà implémentée en assurant la compatibilité du
code existant (utilisant l'ancienne version de l'interface –
sans recompilation)

}
public class Voilier extends Bateau implements Dirigeable {

public void tournerAGauche(int deg) {…}
public void tournerADroite(int deg) {…}

• Syntaxe
default typeRetourné nomMéthode ([arguments]){

}

// instructions
}

212

JAVA - © Christine Bonnet

EXEMPLE 1
Soit l'interface DoIt

213

JAVA - © Christine Bonnet

SOLUTION

1. créer une interface dérivée. Les utilisateurs du code
choisiront de continuer avec l'ancienne interface ou
d'upgrader

Ultérieurement on souhaite ajouter une 3ème méthode

2. créer une méthode par défaut dans l'interface DoIt



les classes qui implémentent DoIt sont toutes à
compléter !
214

JAVA - © Christine Bonnet

215

JAVA - © Christine Bonnet

EXEMPLE 2

public LocalDateTime getDateHeureLocale() {

import java.time.*; // java 8

return dateEtHeure;

public interface Temps {

}

void setHeure(int hour, int minute, int second);
LocalDateTime getDateHeureLocale();

}

}
import …
public class ClientTemps implements Temps {
private LocalDateTime dateEtHeure;
public ClientTemps() {
dateEtHeure = LocalDateTime.now();
}

Ajout d'une nouvelle fonctionnalité à l'interface Temps pour
pouvoir fixer une date  ajout d'une méthode par défaut
setDate dans l'interface. La classe ClientTemps n'a pas à
être complétée (ni recompilée)
// ajout dans l'interface Temps
default void setDate(int jour, int mois, int annee) {

public void setHeure(int heure, int minute, int seconde) {

LocalDate dateAFixer = LocalDate.of(jour, mois, annee);

LocalDate dateActuelle = LocalDate.from(dateEtHeure);

LocalTime heureActuelle = LocalTime.from(dateEtHeure);

LocalTime heureAFixer = LocalTime.of(heure, minute, seconde);
dateEtHeure = LocalDateTime.of(dateActuelle, heureAFixer);

dateEtHeure = LocalDateTime.of(dateAFixer, heureActuelle);
}

}
216

JAVA - © Christine Bonnet

217

JAVA - © Christine Bonnet

DERIVATION D'UNE INTERFACE

MÉTHODE STATIQUE

Une interface peut hériter elle-même de plusieurs interfaces
par extends (mais pas d'une classe)

• Il est possible de définir une méthode statique au
niveau de l'interface

public Interface GroupeInterfaces extends Interface1, Interface2 {

• Joue également le rôle de méthode par défaut. Elle
peut être ajouter ultérieurement à une interface

• Syntaxe identique aux méthodes statiques des classes
static typeRetourné nomMéthode ([arguments]){
// instructions

}

Les interfaces forment une hiérarchie séparée de celle des
classes
 L'interface hérite de toutes les constantes et méthodes
des super-interfaces
 La classe qui implémente cette interface doit
implémenter à la fois les méthodes abstraites de
l'interface et celles de ses super-interfaces

}

218



JAVA - © Christine Bonnet

219

JAVA - © Christine Bonnet

COMPLEMENTS

DERIVATION D'UNE INTERFACE et METHODE PAR DEFAUT
public interface DoItPlus extends DoIt

• Les classes qui implémentent une même interface

peuvent n'avoir aucune super-classe commune (mis à
part Object)

Exemple : Montre, Casserole implémentent l'interface
Vendable
Choix possibles :
– DoItPlus ne mentionne pas didItWork  héritage
– DoItPlus re-déclare la méthode boolean
didItWork(int i, double x, String s);
 elle devient abstraite (et devra donc être écrite dans
toutes les classes qui implémente DoItPlus)
– DoItPlus redéfinit la méthode default boolean
didiItWork(int i, double x, String s){//code}
220

JAVA - © Christine Bonnet

DÉFINITION D'UNE INTERFACE
[indic]

interface

NomInterface [extends …] {

// champs
// méthodes



}

• indic :
 public : interface visible à l'extérieur du
package (par toutes les classes)

 sans indicateur : interface visible dans le
package

 abstract : par définition une interface est
abstraite  abstract omis

222

JAVA - © Christine Bonnet

• Conflits de noms
interface I1 { void f(int n); void g();}
interface I2 { void f(double x); int g();}
public class A implements I1, I2 {
// A doit contenir une méthode void g() et une méthode int g()
// ce qui est impossible (règles de redéfinition)
}
221

JAVA - © Christine Bonnet

Exemple (pédagogique) : ré-écriture de l'interface Iterator du
package java.util
// spécification des interfaces Itérateur
interface Iterateur {
Object suivant();
void debut();
boolean fin();
}
interface IterateurInverse {
Object suivantInverse();
void debutInverse();
boolean finInverse();
}
public class Tableau implements Iterateur, IterateurInverse {
private Object[] tabElements; // le tableau d'élément
private int nbElts; // nombre d'objets dans le tableau
private int courant; // indice de l'élément courant dans le parcours
// constructeur
public Tableau(int taille) {
tabElements = new Object[taille];
courant = 0;
nbElts = 0;
}
223

JAVA - © Christine Bonnet


Related documents


5 progobjjavasuite
4 progobjjava
6 genericitecollections
2 basesjavadebut
3 basesjavasuite
1 introjava


Related keywords