Les classes

publicité
Au programme du jour ….
Livraison de code


Organisation des répertoires et packages
Ce que vous n’avez pas encore vraiment
vu




Constantes et variables de classe (static)
Visibilité (public, private, protected)
Héritage (extends)
Exceptions
Livraison d’un projet
Usage de votre code



Votre code est destiné à être utilisé
VOUS DEVEZ Documenter votre code
2 documentations :


à destination des usagers de la classe : ils ne doivent pas
connaître l’implémentation.
Ils doivent uniquement connaître :




La façon d’installer et d’exécuter
Les fichiers .class et leur emplacement
Et la documentation de l’interface de la classe : javadoc
à destination des développeurs qui doivent faire évoluer votre
code: ils doivent connaître l’implémentation.


Livraison des .java
Et Documentation de l’implémentation de la classe : UML, cahier
des charges, spécifications détaillées, commentaires dans le code
Livraison
Rappel Javadoc
API Java : à quoi ça vous sert ?
Rechercher des informations
et
Comprendre un code existant
API Java : Rechercher des informations

sur les types de données que l’on
manipule ou que l’on souhaite manipuler ?

ArrayList :




Peut on ajouter un élément à une position donnée ?
Peut on enlever à une position donnée ?
Qu’existe-t-il comme autre type de données du
même style ?
Comment construit on une ArrayList ? Avec un
tableau est ce possible ?
API Java : Comprendre un code existant
String input = reader.getInput();
if(input.startsWith("bye")) {
finished = true;
}
Que fait startsWith("bye") ?
Comment peut on trouver l’information ?
Que fait getInput()?
Comment peut on trouver l’information ?
Comment chercher dans l’API ?

Organisation par packages

Quels sont les packages que vous connaissez ?




java.util
java.lang
Où pouvez vous trouver la classe String ? La
classe ArrayList ?
Quels sont les packages qui pourront vous
servir ?
Pourquoi trouve-t-on l’information ?
Parce que les classes sont documentées
 Documentation standardisée avec
génération dans un format HTML
 Documentation accessible par un browser
web
 On documente : l’API des classes


Interface des classes : ensemble des méthodes
et variables publiques
Public vs private : accessible ou non à l’extérieur
de la classe
Documenter quoi ?

Interface vs implémentation


L’implémentation reste cachée
La documentation inclut :



Le nom de la classe
Une description textuelle générale de la classe
La liste des constructeurs et des méthodes publiques :
les signatures



Valeurs de retours et paramêtres
Description textuelle (pré_conditions, post conditions,
objectifs…)
L’ interface de la classe

UTILE pour son usage
Javadoc et classe

POUR UNE CLASSE

Class comment:
/**
* The Responder class represents a response
* generator object. It is used to generate an
* automatic response.
*
* @author Michael Kölling and David J. Barnes
* @version 1.0 (1.Feb.2002)
*/








JAVADOC et méthode













Commentaire pour une méthode
/**
* Read a line of text from standard input (the text
* terminal), and return it as a set of words.
*
* @param prompt A prompt to print to screen.
* @return A set of Strings, where each String is
* one of the words typed by the user
*/
public HashSet getInput(String prompt)
{
...
}
Comment générer la javadoc : page
HTML

javadoc ClasseATester.java
OPTION -help
 Donne en ligne les différentes options

Génération du fichier ClasseATester.html

pour en savoir plus

http://java.sun.com/j2se/javadoc/writingdoccommen
ts/
Livraison
Rappel sur les tests
Un Main pour les Tests
Exemple : Pour tester la classe ClasseATester
Ecrire le contenu du main dans une classe
TestDEClasseAtester (condition réelle de l’usage) de sorte
qu’il y ait :
Création d’instances de cette classe : (Tests des
constructeurs)
Affichage des instances créées (Tests des constructeurs et de la
méthode toString)
Appels des méthodes en faisant varier la valeur des paramètres
sur ces instances (Test des méthodes publiques)
Affichage des retours des méthodes pour voir les tests
Comment faire et utiliser des
packages?
Vous connaissez déjà….

Organisation par packages

Quels sont les packages que vous connaissez ?




java.util
java.lang
Où pouvez vous trouver la classe String ? La
classe ArrayList ?
Quels sont les packages qui pourront vous
servir ?
Comment travaille-t-on avec des
packages ?

Les classes d’un package (bibliothèque de classes) doivent
être importées (comme des livres que l’on emprunte…)

Utilisation de la clause import





Pour importer une seule classe : import java.util.ArrayList;
Pour importer toutes les classes d’un package : import java.util.*;
Importation inutile pour les classes de java.lang (tout le
monde a ces livres ).
Une fois importées les classes ont toutes la même visibilité
En cas de conflit, mettre le nom complet de la classe
java.util.ArrayList

Ex : la classe MaClasse existe dans 2 packages :
monnompackage et autrenompackage

On peut les distinguer à l’aide des noms complets :
monnompackage.MaClasse ou autrenompackage.MaClasse
Packaging de votre code

Implication dans chaque classe de cette
bibliothèque

package nompackage;
Instruction à ajouter au début des classes appartenant au
package

Implication sur l’organisation des fichiers

Mettre les classes à compiler sous un répertoire de nom
nompackage

Compiler (placé au dessus du répertoire de nom
nompackage)
 javac nompackage/ClassePackagée.Java

Exécuter (placé au dessus du répertoire de nom
nompackage)
 java nompackage.ClassePackagee
Packaging de votre code et compilation
ATTENTION
A LA COMPILATION D’UNE CLASSE
Les classes utilisées doivent être déjà compilées et visibles
ORDRE de Compilation important
VISIBILITE importante
Désignation des répertoires où sont stockés les classes possibles
VARIABLE D’ENVIRONNEMENT : CLASSPATH
OPTION DE COMPILATION ET D’EXECUTION : -cp
AUTRE OPTION PRATIQUE -d
Packaging de votre code

Pour une meilleure livraison

Pour regrouper les classes utilisées dans le
même contexte

Une organisation des répertoires




src : les classes
doc : la documentation
bin : les binaires
tests : les tests
Ce que vous n’avez pas
encore vraiment vu
Constantes et variables de classe
Un nouveau mot clé : static

Information attachée à la classe et non à une
instance

Constantes – static + mot clé final + nommage



private static final int GRAVITY = 3;
public static final int VAL_MAX=10;
Variables et méthodes de classes : static

variable : ex : Stocker les instances créées dans une
classe
 Exemple du compte bancaire

Méthode : ex : la méthode main et la classe Math
 Pour une classe de Test
Ce que vous n’avez pas
encore vraiment vu
Visibilité des méthodes et des
variables d’instances
PRIVATE vs PUBLIC

La partie Implémentation : Ce qui ne concerne pas l’usage


Les variables d’instances (statut private) – on doit pouvoir
librement changer le type d’une variable d’instances et éviter
que l’utilisateur change ses valeurs sans contràole (accesseurs
et modifieurs)
Les méthodes internes à la classes (statut private)- on doit
pouvoir réutiliser un code commun mais éviter que l’utilsateur
fasse des effets de bord sur notre code (ex décalage des
valeurs d’un tableau)
Implémentation de la classe (Le corps de chaque méthode et
constructeur (code source))
Elle concerne les développeurs
Autre documentation : conception UML, etc
Ce que vous n’avez pas
encore vraiment vu
Héritage
Héritage
La classe Object
La classe Object
La classe Object est la classe mère dont
héritent toutes les autres classes
 Toute classe définie en Java, que ce soit
par l’utilisateur ou dans un package de
l’API, hérite de la classe Object
 Ainsi, toute classe hérite d’emblée des
méthodes de la classe Object

Méthodes de la classe Object





int hashCode() renvoie un code utilisé pour
stocker dans une Hashtable
boolean equals(Object o) attention, == teste les
références. Mais compare les références des
attributs (=> redéfinir)
Object clone() : crée une copie de l’objet. Mais
copie les références des attributs (=> redéfinir)
String toString() renvoie une String décrivant
l'objet. Par défaut, renvoie le type et l’adresse de
stockage (=> redéfinir)
...
Intérêt de la classe Object
Certains traitements sont si génériques
qu'ils peuvent s'appliquer à tous les
objets
 Par exemple, une liste peut contenir
n'importe quel type d'objet et les
compter, les trier, etc.
 Donc il faut écrire la classe Liste pour
manipuler des objets de la classe Object
 On pourra alors stocker dans la liste
n’importe quel type d’objet

Exemple
Point
PointColore




Point3D
La classe Point contient tout ce qu'il y a de commun à
PointColore et Point3D
Point contient la gestion de l’abscisse et de l’ordonnée
PointColore ne contient que ce qu'il y a de spécifique en
plus : la couleur
Point3D: le troisième axe
Objectif de l'héritage






On souhaite ne décrire qu'une seule fois le
même traitement lorsqu'il s'applique à plusieurs
classes
Evite de recopier (notamment les modifications)
On crée une classe plus générique à laquelle s'applique le
traitement
Toutes les classes plus spécifiques, héritant de
cette classe, héritent de ce traitement, elles
peuvent l'exécuter
Le traitement n'est décrit qu'au niveau de la classe mère
Les classes filles contiennent d'autres
traitements plus spécifiques
Usage de l'héritage




Une classe spécifique hérite des méthodes
(public) et des attributs (protected) de sa
classe mère.
On n'a pas besoin de les réécrire pour la classe
fille.
On peut cependant redéfinir une méthode de la
classe mère dans la classe fille (de même
signature)
Le constructeur d'un objet doit toujours
commencer par appeler le constructeur de sa
classe mère (super())
Rappel : la surcharge
On appelle surcharge le fait d’avoir
plusieurs méthodes qui ont le même nom
au sein de la même classe
 Les exemplaires de la méthode ont des
paramètres différents
 Ils peuvent avoir le même type de retour
 Par contre, impossible d’avoir des types de
retour différents pour les mêmes
paramètres

Usage de l'héritage (suite)




Un objet de type PointColore peut utiliser
toutes les méthodes de la classe Point
Il doit disposer d’une valeur pour tous les
attributs de la classe Point
A tout moment, une méthode qui utilise un
objet de type Point peut manipuler un objet de
type PointColore en guise de Point (on ne
pourra pas accéder à la couleur)
Cette dernière propriété est le polymorphisme.
Exemple : une classe Point
class Point
{
protected int x,y;
public Point(int a, int b){x=a; y=b;}
public Point(){x=0; y=0;}
public void moveTo (int a, int b){x=a; y=b;}
public String toString()
{return ‘‘(‘‘ + x + ‘‘,‘‘ + y + ‘‘)‘‘);}
}
public void distanceToOrigin()
{
return Math.sqrt(x*x +y*y);
}
Exemple : classe PointCol (oré)
class PointColore extends Point
{
protected String couleur;
public PointColore (int abs, int ordo, String c)
{super(abs,ordo);
couleur=c;}
public PointColore (String c){couleur=c;} // appel
implicite de super()
public PointColore(){super(); couleur=« blanc »;}
}
public String getColor(){return couleur;}
public String toString()
{
return super.toString()+ ‘‘couleur ‘‘+
couleur;
}
ArrayList<Point> lesPoints;
Ce que vous n’avez pas
vraiment vu
Les wrappers
Les classes « enveloppe » (1)
Problème : les types de base (int, float,
double, boolean… ne sont pas des
objets)
 On ne peut pas les stocker tels quels
dans les conteneurs
 C’est à cela que servent les classes
enveloppes (Wrappers)

Les classes « enveloppe » (2)
Permettent de représenter des types de
base sous forme d’objets
 int entier => Integer n
 Integer n = new Integer(entier);
 entier = n. intValue();
 double =>Double, boolean =>
Boolean…
 intValue(), doubleValue() ...

Ce que vous n’avez pas
vraiment vu
Les exceptions
Les exceptions que vous
connaissez déjà

Des exceptions logicielles rattrapables



NumberFormatException
ArrayIndexOutOfBounds
Des exceptions graves non rattrapables

NullFormatPointerException
E qu’on peut faire : les rattraper
try
<instruction>
catch
(<type-exception1 ex1) <instruction>
catch
(<type-exception2 ex2) <instruction>
…
finally
<instruction>
E qu’on peut faire : les déclarer et
les lever
void maMethode() throws E {
...
obj.m();
...
}
E doit être une sous classe d’Exception
Instruction
throw new Exception(unmessage);
Téléchargement