Rédaction des méthodes
Déclaration des méthodes:
En Java, les textes des méthodes sont rédigés à l’intérieur de la
définition d’une classe.
Une déclaration de méthode a la forme suivante :
T est le type du résultat (void si la méthode ne rend pas de résultat).
PPP est le nom de la méthode.
T1 p1, T2 p2, ... est la liste des paramètres avec leur type. Si une méthode
n’a pas de paramètre, il faut tout de même conserver les parenthèses : T
PPP().
Corps est composé de déclarations de variables et d’instructions. Les
déclarations peuvent être mêlées aux instructions.
Le rendu de résultat se note return expression :
On peut donner le même nom à plusieurs méthodes, à condition qu’elles diffèrent
par le nombre ou le type des paramètres.
Rédaction des méthodes (2)
Instance courante: This
Dans le cas où un appel de méthode porte sur un objet, cet objet
est appelé communément l’instance courante.
Au sein des méthodes, les composants de l’instance courante
sont directement désignables par leur identificateur.
Par exemple, lors de l’exécution de [Link](), X et Y
désignent les composants X et Y de vigor.
Citation explicite de l’instance courante : this
Dans certains cas, on peut avoir besoin de citer explicitement
l’instance courante dans le texte d’une méthode, par exemple
pour passer cette instance en paramètre de procédure.
On dispose pour cela du mot clé this (littéralement “lui”).
Citation explicite de l’instance courante : this
Prenons un exemple classique, le placement de boutons dans
une fenêtre de dialogue. La procédure de placement peut
être définie dans une classe à part, Placement.
La classe Fenetre ci-dessous place un bouton au sein d’elle-
même en se passant en paramètre à la méthode placer() :
Composants non liés à des objets : static
besoin de procédures non associées à un objet (parfois)
Pas de procédures isolées: cette procédure doit être
rédigée dans la classe
Classe=>regroupant les procédures autour d’un même
thème
Exemple: une procédure qui compare deux objets de
type Robot et rend le meilleur des deux, mais sans
vouloir associer la méthode leMeilleur à l’un plutôt qu’à
l’autre => attribut static
Composants non liés à des objets : static
Appel de la procédure:
définir des données qui ne sont pas des composants
d’objets. => l’attribut static,
pas de procédures isolées en Java, il n’y a que des
méthodes de classe => inventer artificiellement une classe
La solution est par convention: donner un nom significatif à la
classe, et un nom muet à la méthode
Le mot clé final
Le mot clé final s'applique aux variables, aux méthodes et
aux classes.
Une variable qualifiée de final signifie que la variable est
constante.
Une variable déclarée final ne peut plus voir sa valeur
modifiée.
On ne peut déclarer de variables final locales à une
méthode.
Les constantes sont qualifiées de final et static.
Exemple :
public static final float PI = 3.1416f;
Abstraction de la représentation : private et public
On utilise généralement une classe pour réaliser un type de
données ou bien un comportement d’objet dont on souhaite
cacher la mise en œuvre à l’utilisateur.
Exemple de type de données: « Pile d’entiers »
Etat d’un objet: une suite finie, éventuellement vide, de valeurs
entières qui ont été empilées une à une.
Le sommet est la plus récente des valeurs empilées, non encore
retirées.
On peut empiler ou dépiler
Abstraction de la représentation : private et public
La classe PileEnt
La classe laisse voir trop de chose à voir!!
Abstraction de la représentation : private et public
Le tableau P et l’index s ne font pas partie des
propriétés d’une pile, ce ne sont que des éléments d’une
mécanique interne particulière.
PileEnt doivent être indépendants de ces choix arbitraires
de mise en œuvre.
Abstraction de la représentation : private et public
Rendre inaccessible un membre par son identificateur
on le déclare à la suite du mot clé private.
P et s ne sont accessible que de l’intérieur de la classe
Encapsulation
Organisation interne des classes
Classes internes
Définir une classe à l’intérieur d’une autre
Une telle classe est dite interne (inner class en anglais)
le nom de la classe interne est purement local
Par exemple, pour programmer une pile au moyen de maillons chaînés, on peut définir une
classe Maillon interne à la classe Pile.
Classes internes
A l’extérieur de la classe englobante:
classe [Link] interne
la classe interne ne fait référence à aucun membre de la
classe englobante : on pourrait dans ce cas la déclarer avec
l’attribut static.
une nouvelle classe interne par objet de la classe englobante,
chacune étant liée à un objet
On veut parcourir la pile: plusieurs parcours en même temps
sur une même pile
Définir une classe Parcours et créer un objet à chaque parcours
une nouvelle classe interne par objet de la classe
englobante, chacune étant liée à un objet
Classes internes
Le constructeur Parcours() initialise le parcours à partir du sommet
suivant() passe au suivant dans la pile,
element() rend l’élément courant du parcours
estEnFin() teste si le parcours est fini.
Classes internes
Exemple d’utilisation:
Noter la forme (surprenante) de la création d’un objet
instance d’une classe interne :
[Link] constructeur
La durée de vie d’un objet
Les objets ne sont pas des éléments statiques et leur durée de vie
ne correspond pas forcément à la duréed'exécution du
[Link] durée de vie d'un objet passe par trois étapes :
la déclaration de l'objet et l'instanciation grâce à l'opérateur new
Exemple :
nom_classe nom_objet = new nom_classe( ... );
l'utilisation de l'objet en appelant ces méthodes
la suppression de l'objet (destruction) : elle est automatique en java
grâce à la machine virtuelle. La restitution de la mémoire inutilisée est
prise en charge par le récupérateur de mémoire (garbage collector). Il
n'existe pas d'instruction delete comme en C++.
Paquetages: Organisation des classes en packages
Les package introduisent la notion d’espace de nom
Les espaces de noms servent à résoudre les conflits de
chemins d’accès entre plusieurs classes portant le même
nom.
Toute classe doit toujours appartenir à un espace de
nom (i.e.,à un package)
Lespackages aident à bien organiser les applications. Ils
définissent une hiérarchie.
Exemple:
Déclaration de package (ex. de [Link]
et [Link])
Arborescence découlant de l’organisation en packages
Importation d’une classe appartenant `a un autre package
Très souvent, on a besoin d’accéder à des classes
appartenant à d’autres package que celui dans lequel on
développe
Utilisation du mot-clé import avec le nom complet de la
classe (fully qualified name, notation pointée) à importer
Arborescence découlant des packages point et sphere