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

Documents pareils