public - e

publicité
JAVA et l'orientation objet
Jean-Jacques LE COZ
Encapsulation
L'encapsulation est le concept de
masquer l'implémentation de la
classe
 De ne permettre l'accès qu'à
l'interface de la classe
 Réalisation


Positionner la visibilité des membres ne
faisant pas partie de l'interface à la
valeur private ou protected
Accès aux membres privés

Java définit un standard pour l'accès
aux membres données cachés par
l'encapsulation
Le standard JavaBean
 Méthodes d'accès



Méthodes get et set dont la visibilité est
public
Méthodes is pour celles qui retournent un
booléen
Exemple d'encapsulation
public class Personne {
private String nom;
private boolean celibataire = true;
public Personne() {}
public Personne(String nom) { this.setNom(nom); }
public void setNom(String nom) { this.nom = nom; }
public String getNom() { return this.nom; }
}
public boolean isCelibataire() { return celibataire; }
public void setCelibataire(boolean situation) {
this.celibataire = situation; }
Visibilités Java
Visibilité Classe Paquetage Sous-classe
Le monde
private
oui
non
non
non
package
oui
oui
non
non
protected
oui
oui
oui
non
public
oui
oui
oui
oui
Variables d'instance
Ce sont les membres données avec
la visibilité private ou protected
 Accessibles que via les méthodes
set et get (standard JavaBean)
 Attention même privées les
données membres sont toutefois
visibles entre objets du même type

Variables de classe
Ce sont les données membres
déclarées avec le mot réservé
static
 Elles existent hors des instances
 Une variable de classe est partagée
par toutes les instances

private static String variable;
Constantes
Même concept que dans le langage
C
 Définies avec le mot réservé final

private final static String CONSTANTE= ''ABCD'';
Méthodes de classe
Ce sont les méthodes déclarées
avec le mot réservé static
 Elles peuvent être invoquées hors
l'existence d'une instance

public class Maclasse {
public static void methode() {
System.out.println(''Bonjour'');
}
...
Maclasse.methode();
Constructeur
Méthode spéciale
 Sans type retour
 Ayant toujours pour nom celui de la
classe
 Une classe peut posséder plusieurs
constructeurs surchargés
 Si pas de constructeur défini alors le
langage offre le constructeur dit par
défaut

Exemple avec
constructeurs
public class Personne {
private String nom;
private String adresse;
public Personne() {}
public Personne(String nom) { this.nom = nom; }
}
public Personne(String nom, String adresse) {
this.nom = nom;
this.adresse = adresse;
}
Héritage et abstraction

La relation « est un » ou « est une sorte
de »
IS-A relationship
 Basée sur la spécialisation et l'héritage



Pas d'héritage multiple
Implémentation

Avec le mot réservé extends
Pas de possibilité d'indiquer des règles
d'héritage
 L'héritage correspond à l'héritage public du

Exemple de spécialisation
public class Animal { ... }
public class Chat extends Animal { ... }
Spécialisation
Permet de définir un sous-type, une
sous-classe avec le mot réservé
extends
 Les classes définissent une hiérarchie
dont la racine est la classe Object
 Le mécanisme d'héritage exclue
l'héritage des constructeurs

Le mot réservé super permet de faire
référence à un membre de la sur-classe
 La méthode réservée super() permet de

Racine hiérarchie Java
Relation « a un » ou « a
des »
Si une classe possède une
référence sur une autre classe on
dit qu'elle a une relation « a un »
 HAS-A relationship

public class Automobile {
private Moteur moteur;
...
}
Exemple de HAS-A relation
public class Automobile {
private Moteur moteur;
private Roue[ ] roues = new Roue[4] ;
...
}
Modèle de relation
Interfaces
Le langage Java implémente le concept
d'interface
 Une interface est un contrat de
comportement public



Les classes qui implémentent une interface
doivent en implémenter toutes les
méthodes
C'est le mot réservé implements qui
permet de préciser qu'une classe
implémente une interface
Définition d'interface
public interface Humain {
final String GENRE_MASCULIN = ''MASCULIN'';
final String GENRE_FEMININ = ''FEMININ'';
public void marcher();
public void parler();
public void rire();
}
Implémentation
public class Personne implements Humain {
...
public void marcher() { .... }
public void parler() { ... }
public void rire() { ... }
...
}
Utilisation d'interfaces
Permet de masquer les vrais types des
objets, notamment dans les collections
 Peut permettre le polymorphisme
 Isolation plus sûre qu'avec les classes
abstraites
 Exemple

public class CommunautéHumaine {
private Humain[ ] collection = new Personne[100];
Principe d'isolation parfait

A partir d'une interface


Exposition du contrat de comportement
Réaliser une implémentation par une
classe abstraite
Factorisation des données communes
 Factorisation des comportements
communs


Spécialisation par des classes concrètes

Implémentation concrète
Diagramme UML
Polymorphisme
Capacité des objets à réagir
différemment au même message.
 Le comportement polymorphe est
obtenu par des méthodes polymorphes.
 Le polymorphisme repose sur la
dérivation de classes et/ou leur
implémentation.

Méthodes polymorphes
Les méthodes polymorphes peuvent
être abstraites dans les sur-classes et
redéfinies dans les sous-classes
concrètes.
 Les méthodes polymorphes peuvent
avoir une implémentation par défaut
dans les sur-classes et être redéfinies
dans les sous-classes concrètes.

Java et le polymorphisme
Possible via les classes, les classes
abstraites et les interfaces
 Le mécanisme de choix de la
méthode à exécutée se fait lors
du runtime
 Il faut prévenir le langage que le
comportement polymorphe est
attendu


En attachant aux objets deux types

Le type déclaré et le type inhérent
Exemple UML
Exemple Java
Interface instancea = new ClasseA();
Interface instanceb = new ClasseB();
instancea.methode-polymorphe();
instanceb.methode-polymorphe();
Classe-abstraite instancec = new ClasseC();
Classe-abstraite instanced = new ClasseD();
instancec.methode-polymorphe();
instanced.methode-polymorphe();
Classes imbriquées
Une classe imbriquée est une classe
déclarée dans une autre classe
 Visibilités d'une classe imbriquée



public ,private, protected
Portées d'une classe imbriquée

final, abstract, static
Exemple
public class Maclasse {
private MaclasseImbriquee laclasse = new MaclasseImbriquee();
...
protected class MaclasseImbriquee {
}
}
...
Collections
Les collections sont essentielles en Java
 Elles couvrent un grand nombre de
classes et d'interfaces
 Depuis Java 5 (Tiger) elles peuvent être
paramétrées
 Par défaut elles contiennent des Object



Phénomène d'aplatissement
Il s'agit d'un véritable framework
Collection, interfaces,
classes
Collection est l'interface racine
 Sous-interfaces : List, Set, Map
 Classes


Implémentation de List


Implémentation de Set


ArrayList, LinkedList, Vector
HashSet, LinkedHashSet, TreeSet
Implémentation de Map

HashMap, HashTable, TreeMap,
LinkedHashMap
Implémentation de List
Quand la collection ne nécessite
pas d'être synchronisée il faut
préférer la classe d'implémentation
ArrayList
 Quand la collection nécessite d'être
synchronisée et donc sûre au
niveau des Threads il faut choisir
la classe Vector

Accès aux membres des
collections
Avec l'implémentation Java du
Design Pattern Iterator
 Avec la nouveauté Java 5: for
 Exemple
...

Iterator it = communautéHumaine.iterator();
while(it.hasNext()) {
Humain courant = (Humain) it.next();
System.out.println((courant.parler());
} ...
Collections typées
A l'aide des Generics
 Nouveauté java 5
 Syntaxe

Collection<Humain> communauté;
 communauté = new
ArrayList<Humain>();

Nouvautés Java 5
public class Exemple {
private Collection<String> collection = new ArrayList<String>();
...
public boolean rechercher(String argument) {
for(String instance : collection)
if(instance.equals(argument)) return true;
}
return false;
Dates

Classes pour manipuler les dates
Calendar
 DateFormat
 SimpleDateformat
 DateFormatSymbols


Création d'une instance de Date
Date ladate = new Date();
 Date ladate =
new
Date(System.currentTimeMillis());

Références

The Java Language Specification, Gosling, J., Joy, B., and Steele, G.
Addison-Wesley, 2000, ISBN 0-201-31008-2

Java in a Nutshell, Flanagan, D. O'Reilly & Associates, 1999, ISBN 156592-487-8

Core Java 2, Volume I - Fundamentals, Horstmann, C.S. and Cornell, G.
Prentice Hall, 1999, ISBN 0-13-081933-6

Core Java 2, Volume II - Advanced Features, Horstmann, C.S. and Cornell,
G. Prentice Hall, 2000, ISBN 0-13-081934-4

Sun Microsystem's Java tutorial
Téléchargement