public - e
Transcription
public - e
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