Classes et Objets en JAVA Classes et Objets en JAVA
Transcription
Classes et Objets en JAVA Classes et Objets en JAVA
Classes Classes et et Objets Objets en en JAVA JAVA Classes et Objets CNAM 2009 1 Classe Classe et et Fichier Fichier • Un nom de classe commence par une majuscule • Un fichier ne peut contenir qu'une seule classe "public" Il doit porter alors le nom de la classe "public" • Il n'y a pas de classes dites "private", "protected" ... CNAM 2009 2 Les Les Classes Classes ClassName1.java public class ClassName1 { // Membres de la classe: // Attributs // Méthodes } class ClassName2 { // Membres de la classe: // Attributs // Méthodes } CNAM 2009 3 Les Les membres membres de de la la classe classe • Données membres (Attributs) - Variables de différents types - Par convention on peut utiliser: - la notation hongroise - le préfixe "m_" pour membre • Fonctions membres (Méthodes) - Type de retour - Nom de la méthode - Liste des arguments avec leur type entre parenthèses - Implémentation entre accolades CNAM 2009 4 Les Les membres membres de de la la classe classe (2) (2) public class Reveil { // Données membres int m_nSeconde, m_nMinute, m_nHeure; // Méthodes public boolean reglerHeure(int h, int m, int s) { m_nHeure = h; m_nMinute = m; m_nSeconde = s; return true; } public void afficher() { System.out.println(m_nHeure + ":" + m_nMinute + ":" + m_nSeconde); } } CNAM 2009 5 Membres final" Membres ""final" • Donnée membre "final" (1) - Variable qui ne peut être modifiée, elle doit donc être directement initialisée. - Déclaration et initialisation: Ex: final double m_dPI = 3.1415; • Méthode "final" (2) - Interdire la redéfinition d'une méthode. - Déclaration avec le mot-clé: final Ex: final int methode(...) { ... }; - Protection lors de l'héritage. CNAM 2009 6 Membre final" (2) Membre ""final" (2) Membre constant public class ClassName { // Données membres final double m_dPI = 3.1415; ... // Méthodes public void methode1() { m_dPI = 3.14; } ERROR Cannot assign final variable 'm_dPI' } CNAM 2009 7 Membres static" Membres ""static" • Donnée membre "static" - Variable partagée par l'ensemble des instances d'une classe. - Déclaration et initialisation: Ex: static int m_nvar = 156; • Fonction membre "static" - Fonction indépendante de l'instance de la classe. - Déclaration avec le mot-clé: static Ex: static int fonction(...) { ... }; - Appel de la fonction "static" avec le nom de la classe et non pas par l'instance. CNAM 2009 8 Membres static" (2) Membres ""static" (2) Membres statiques de la classe Reveil public class Reveil { // Données membres int m_nSeconde, m_nMinute, m_nHeure; static int m_nNombreDeReveil; // Méthodes public static int getNombreDeReveil() { return m_nNombreDeReveil; } } CNAM 2009 9 Une Une classe classe particulière particulière • Classe qui contient "main" le point d'entrée de l'application. • "main " est une fonction " static" . public class ClassName { Point d'entrée: la fonction "main" // Data ... // Méthodes // Point d'entrée de l'application "main" public static void main( String args[]) { // Code } } CNAM 2009 10 Instanciation Instanciation d'une d'une classe classe • Utilisation de l'opérateur "new" Point d'entrée: la fonction "main" public class ClassName { public static void main( String args[]) { Reveil reveil = new Reveil(); } } Instanciation de la classe Reveil CNAM 2009 11 Accès Accès aux aux membres membres d'un d'un objet objet • Utilisation du point "." TestReveil.java Point d'entrée: la fonction "main" public class TestReveil { public static void main( String args[]) { Reveil reveil = new Reveil(); reveil.m_nSeconde = 10; reveil.afficher(); } Instanciation de la classe Reveil CNAM 2009 } Accès et affectation d'une donnée membre de Reveil Appel d'une fonction membre de Reveil 12 Encapsulation Encapsulation • Syntaxe: - Publique: - Amie: - Privée: "public" "friendly" "private" public class Reveil { public void afficher() { ... } /*friendly*/ boolean reglerHeure(int nHeure, int nMinute, ...) { ... } Accès private int m_nHeure; private int m_nMinute; int m_nSeconde; private void sonner() { ... } } • Si aucune protection n'est définie, c'est "friendly" par défaut* CNAM 2009 13 Constructeur Constructeur • C'est une fonction membre appelée automatiquement lors de la création de l'objet. • Rôle: Initialiser les données membre de l'objet. • Elle doit porter le même nom que la classe. • Une classe peut comporter plusieurs constructeurs. Ils sont adaptés aux différents formats de données passées en argument pour l'initialisation de l'objet. CNAM 2009 14 Constructeur Constructeur (2) (2) • Les constructeurs ne retournent rien. Constructeur et classe portent le même nom Constructeur de la classe Reveil public class Reveil { public Reveil(int h, int m, int s) { // Code d'initialisation m_nHeure = h; m_nMinute = m; m_nSeconde = s; } private int m_nSeconde; private int m_nMinute; private int m_nHeure; } CNAM 2009 15 Destructeur Destructeur • C'est une fonction membre appelée automatiquement lors de la destruction de l'objet. • Les Destructeurs* n'existent pas en Java. • Il existe cependant une méthode "finalize()" en Java. • Cette fonction est appelée : - par le "garbage collector" (Go to the heap) - par "System.gc()" CNAM 2009 16 Surcharge Overload) Surcharge ((Overload) • Plusieurs Méthodes peuvent avoir le même nom au sein de la même classe. • Rôle: Simplifier l'interface de la classe. • Elles sont différentes de part le type et le nombre d'arguments. • Le type de retour ne peut différencier deux méthodes. CNAM 2009 17 Surcharge Surcharge d'un d'un constructeur constructeur Constructeurs et classe portent le même nom Constructeurs de la classe Reveil public class Reveil { public Reveil() { // Code d'initialisation } public Reveil(int nHeure, int nMinute, ...) { // Code d'initialisation } } CNAM 2009 18 Constructeur Constructeur de de copie copie Argument du même type que la classe Constructeur de copie de la classe Reveil public class Reveil { public Reveil(Reveil unReveil) { // Code d'initialisation } } CNAM 2009 19 Appel Appel des des méthodes méthodes surchargées surchargées Instanciation: Reveil reveil1=new Reveil(); public Reveil() { // Code d'initialisation } Reveil reveil2=new Reveil(10,22,8); public Reveil(int nHeure, int nMinute, int nSec) { // Code d'initialisation } Reveil reveil3=new Reveil("21:17:03"); public Reveil(String strHeure) { // Code d'initialisation } Reveil reveil4=new Reveil(reveil3); public Reveil(Reveil unReveil) { // Code d'initialisation } CNAM 2009 20 Référence Référence sur sur objet objet • C'est une variable d'un type de classe qui désigne une instance d'une classe.(1) • Une référence est un pointeur masqué.(2) Exemple : Composition d'objet Reveil m_HeureCourante CTemps m_HeureSonnerie marche() sonner() CNAM 2009 21 Référence Référence sur sur objet objet (2) (2) public class CTemps { private int m_nHeure; private int m_nMinute; private int m_nSeconde; ... Instance de la classe CTemps } Référence public class Reveil { private CTemps m_HeureCourante; private CTemps m_HeureSonnerie; ... ... } CNAM 2009 10:26:55 Instance de la classe CTemps Référence 7:16:44 22 THIS THIS • Le mot-clé "this" référence l'instance courante de la classe.* • Il n'est pas nécessaire pour accéder aux membres d'une classe. • C'est le premier argument passé aux méthodes des classes. Cet argument est caché. • Permet d'appeler un autre constructeur de la même classe. CNAM 2009 23 THIS THIS (2) (2) permet de se faire référencer dans d'autres objets. unReveil uneInstanceDeCtemps m_HeureCourante 10:23:45 m_HeureSonnerie m_Reveil uneAutreInstanceDeCtemps 06:02:00 m_Reveil CNAM 2009 24 Les Les Tableaux Tableaux • Ensemble d'éléments de même type.(1) • En Java les tableaux sont des objets. • Ils ne peuvent exister statiquement. (2) • Obligation de les allouer explicitement (par new). • Le nom du tableau est une référence sur un tableau Notation: [] CNAM 2009 Crochets 25 Les Les Tableaux Tableaux :: syntaxe syntaxe Déclaration Référence sur le tableau Type [ ] nomTableau; ou Type nomTableau [ ]; Allocation nomTableau = new Type [taille]; Déclaration & Allocation Type [ ] nomTableau = new Type [taille]; Déclaration & Initialisation Type nomTableau [ ] = { val, val ,val, ... }; Affectation CNAM 2009 nomTableau [ nIndex ] = valeur; 26 Les Les Tableaux Tableaux d'objets d'objets • Tableau de référence sur objet. • Ils ne peuvent exister statiquement. • Obligation d'allouer explicitement les objets et de les référencer dans le tableau. Reveil [ ] tableauReveil = new Reveil [ 5 ]; tableauReveil [ 0 ] = new Reveil( Reveil( ); Référence1 null OBJET null null null CNAM 2009 27 Les Les Tableaux Tableaux àà plusieurs plusieurs dimensions dimensions • Java ne supporte pas directement les tableaux multidimensions. • Solution: Tableau de tableau. • Pour une matrice d'objet: - Java permet ce raccourci ( ClassName [ ] [ ] matrice = new ClassName [ n ][ m ]; ) Reveil [ ] [ ] matrice = new Reveil [ 3 ][ 2 ]; matrice [0][1] = new Reveil( Reveil( ); CNAM 2009 null Référence1 null null null null OBJET 28