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
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 C++ Il dépend de la visibilité des membres de la sur-classe
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 faire référence au constructeur de la sur- classe
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] ;... }
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 ses 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 servir de vecteur au 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 Réaliser une spécialisation par des classes concrètes Implémentation concrète des comportements polymorphes
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 Les méthodes polymorphes sont abstraites dans les sur-classes et redéfinies dans les sous-classes concrètes
Java et le polymorphisme Possible via 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 {... }
Expressions régulières
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 ArrayList, LinkedList, Vector Implémentation de Set 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 communauté; communauté = new ArrayList ();
Nouvautés Java 5 public class Exemple { private Collection collection = new ArrayList ();... public boolean rechercher(String argument) { for(String s : collection) if(s.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());
Entrées/sorties
Ressources
Références The Java Language Specification, Gosling, J., Joy, B., and Steele, G. Addison- Wesley, 2000, ISBN Java in a Nutshell, Flanagan, D. O'Reilly & Associates, 1999, ISBN Core Java 2, Volume I - Fundamentals, Horstmann, C.S. and Cornell, G. Prentice Hall, 1999, ISBN Core Java 2, Volume II - Advanced Features, Horstmann, C.S. and Cornell, G. Prentice Hall, 2000, ISBN Sun Microsystem's Java tutorial