Table des matières
Type | Règles de nomenclature | Exemples |
Packages | Les noms de packages sont écrits en lettres minuscules. Pour le laboratoire DAMAS, les packages commenceront tous par "ca.ulaval.ift.damas". | com.sun.eng ca.ulaval.ift.damas.netsa.broker |
Classes | L'identificateur d'une classe devrait être un nom et il doit commencer par une majuscule. S'il y a plus qu'un mot, tous les mots commencent par des majuscules. Autant que possible, il ne faut pas utiliser d'abréviation. | class Cercle; class ImageAnimee; |
Interfaces | La nomenclature est la même que pour une classe. | interface Dessinable; interface EventListener; |
Méthodes | Le nom des méthodes devrait être un verbe à l'infinitif suivi d'un complément et il doit commencer par une minuscule. Le complément peut avoir plus d'un mot. Les noms des méthodes pour accéder aux attributs devraient commencer par get ou set et être suivi par le nom de l'attribut. | deplacerForme(); envoyerMessageATous(); setLargeur(); getLargeur(); |
Variables | Le nom des variables commencent par une lettre minuscule. S'il y a plus d'un mot, les autres mots commencent par une lettre majuscule. Le nom de la variable devrait être le plus significatif possible. | int largeurCercle; |
Attributs | Le nom des attributs commencent par un symbole de soulignement. Par la suite, le premier mot commence par une lettre minuscule et les autres mots commencent par une lettre majuscule. Le nom de l'attribut devrait être le plus significatif possible. | int _rayonCercle; |
Constante | Le nom des constantes sont toujours définis en lettres majuscules. Les mots composant le nom doivent être séparés par des soulignés. | static final int LARGEUR_MAXIMALE = 50 ; static final double NIVEAU_CRITIQUE = 4.0; |
Ces trois parties sont définies dans les sections qui suivent.
Voici un exemple de commentaire global:
/*
* Classe: Cercle
*
* Auteur: Sébastien Paquet
*
* 13 mai 2000 Création
* 25 mai 2000 Ajout de la méthode XXX
* 12 juin 2000 Modification de la méthode YYY
*/
package java.awt;
import java.awt.peer.CanvasPeer;
Parties | Notes |
Le commentaire de documentation de la classe ou de l'interface. (/**...*/) | Ce commentaire est en format javadoc. Voir la section commentaire de classe pour voir la manière d'écrire ce commentaire. |
L'instruction de classe ou d'interface. | |
Le commentaire d'implémentation de la classe ou de l'interface, si nécessaire. (/*...*/ ou //) | Cette zone de commentaire devrait contenir des commentaires spécifiques à l'implémentation de la classe qui n'étaient pas pertinents d'inclure dans la section de commentaire de documentation. |
Les variables de classes. (static) | Les variables sont placées en ordre de visibilité: public, protected, friendly(aucun modificateur) et private. La variable de classe est précédé d'un commentaire javadoc. |
Les variables d'instance. | Les variables sont placées en ordre de visibilité: public, protected, friendly(aucun modificateur) et private. La variable d'instance est précédé d'un commentaire javadoc. |
Le ou les constructeurs. | Le code du constructeur est précédé d'un commentaire javadoc. |
Les méthodes. | Les méthodes devraient être ordonnées selon leur fonctionnalité plutôt que par leur visibilité. Par exemple, une méthode private peut être placée entre deux méthodes public. Le but est de rendre le code plus facile à lire et à comprendre. |
Vous devez utiliser les commentaires pour chacune des parties de votre code qui mérite d'être commentées. C'est au programmeur de juger de la pertinence d'un commentaire. Il est à noter qu'il est possible et conseillé d'utiliser les instructions HTML pour ajuster la présentation des commentaires javadoc. Par contre, les sections suivantes vous présenteront les commentaires obligatoires.
/**
* Graphics is the abstract base class for all graphics contexts
* which allow an application to draw onto components realized on
* various devices or onto off-screen images.
* A Graphics object encapsulates the state information needed
* for the various rendering operations that Java supports. This
* state information includes:
* <ul>
* <li>The Component to draw on
* <li>A translation origin for rendering and clipping coordinates
* <li>The current clip
* <li>The current color
* <li>The current font
* <li>The current logical pixel operation function (XOR or Paint)
* <li>The current XOR alternation color
* (see <a href="#setXORMode">setXORMode</a>)
* </ul>
* <p>
* Coordinates are infinitely thin and lie between the pixels of the
* output device.
* Operations which draw the outline of a figure operate by traversing
* along the infinitely thin path with a pixel-sized pen that hangs
* down and to the right of the anchor point on the path.
*
* @author Sami Shaio
*/
Voici un exemple de commentaire:
/**
* Draws as much of the specified image as is currently available
* with its northwest corner at the specified coordinate (x, y).
* This method will return immediately in all cases, even if the
* entire image has not yet been scaled, dithered and converted
* for the current output device.
* If the current output representation is not yet complete then
* the method will return false and the indicated {@link ImageObserver}
* object will be notified as the conversion process progresses.
*
* @param img the image to be drawn
* @param x the x-coordinate of the northwest corner of the
* destination rectangle in pixels
* @param y the y-coordinate of the northwest corner of the
* destination rectangle in pixels
* @param observer the image observer to be notified as more of the
* image is converted. May be <code>null</code>
* @return <code>true</code> if the image is completely
* loaded and was painted successfully;
* <code>false</code> otherwise.
* @exception IOException If an input or output exception occurred
* @see Image
* @see ImageObserver
*/
public abstract boolean drawImage(Image img, int x, int y,
ImageObserver observer) throws IOException;
/**
* Commentaire pour la variable de classe qui s'étend
* sur plus qu'une ligne
*/
private static Object classVar2;
/** Commentaire de la variable d'instance sur une ligne. */
private Object instanceVar1;
Si une instruction s'étend sur plus d'une ligne, coupez-la selon les règles générales suivantes:
Voici quelques exemples:
someMethod(longExpression1, longExpression2, longExpression3,
longExpression4, longExpression5);
var = someMethod1(longExpression1,
someMethod2(longExpression2,
longExpression3));
longName1 = longName2 * (longName3 + longName4 - longName5)
+ 4 * longname6;
/* On a utilisé une indentation de 8 espaces par rapport au niveau
supérieur, car tout serait trop collé vers la droite. */
private static synchronized horkingLongMethodName(int anArg,
Object anotherArg, String yetAnotherArg,
Object andStillAnother)
{
...
}
sinon on aurait eu:
private static synchronized horkingLongMethodName(int anArg,
Object
anotherArg,
String
yetAnotherArg,
Object
andStillAnother)
{
...
}
int level;
int size;
est préférable à
int level, size;
int rayon = 10;
est préférable à
int rayon;
... // Des lignes de code
rayon = 10;
void myMethod()
{
int int1 = 0; // Au commencement du bloc de la méthode
if (condition)
{
int int2 = 0; // Au commencement du bloc if
...
}
}
Il y a une exception à cette règle et c'est pour les boucles for
où la variable compteur doit être déclarée à l'intérieur de
l'instruction.
for (int i = 0; i < max; i++)
{
...
}
Voici un exemple de déclaration de classe:
class Sample extends Object
{
int ivar1;
int ivar2;
Sample(int i, int j)
{
ivar1 = i;
ivar2 = j;
}
int emptyMethod() {}
}
argv++; // OK
argc--; // OK
argv++; argc--; // Éviter
if (condition)
{
énoncés;
}
if (condition)
{
énoncés;
}
else
{
énoncés;
}
if (condition)
{
énoncés;
}
else if (condition)
{
énoncés;
}
else
{
énoncés;
}
Note: Les énoncés if utilisent toujours les accolades.
//Éviter cela
if (condition)
énoncés;
for (initialisation; condition; incrément)
{
énoncé;
}
while (condition)
{
énoncés;
}
do
{
énoncés;
}
while (condition);
switch (condition)
{
case ABC:
énoncés;
break;
case DEF:
énoncés;
break;
default: //Obligatoire
énoncés;
break;
}
try
{
énoncés;
}
catch (ExceptionClass e)
{
énoncés;
}
Un énoncé try-catch peut être suivi d'un finally qui est toujours
exécuté, que le bloc try soit réussi ou non.
try
{
énoncés;
}
catch (ExceptionClass e)
{
énoncés;
}
finally
{
énoncés;
}