Vous êtes sur la page 1sur 28

Conception par Objet et Programmation Java

Plan du cours
Sances Chapitres 1 Introduction Java

2
3 4 5 6 7 8

Classe et objet
Encapsulation Hritage Polymorphisme Exceptions Interface et collection Interface graphique

Les meilleurs pratique


Convention et recommandation

Conventions de nommage
les noms doivent tre de prfrence en anglais (pour faciliter la comprhension du code, dans le cas de dveloppement de logiciels open source) les noms doivent tre parlants, viter dutiliser des abrviations les noms des classes et des interfaces doivent commencer par une majuscule et avoir la forme suivante : MyClass les noms des attributs static final doivent tre en majuscule et avoir la forme suivante sils contiennent plusieurs noms : MY_CONSTANT les noms des autres attributs et des mthodes doivent commencer par une minuscule et avoir la forme suivante sils contiennent plusieurs noms: myAttribut, myMethod() les noms de classe hritant de la classe Exception doivent se terminer par Exception: MyException les noms de paquetage ne doivent contenir que des minuscules et chaque mot spar par un .
4

Recommandations (1)
crire une mthode main pour chacune des classes testables le main de lapplication doit tre dans une classe spare Main (ou Test) viter de dclarer des attributs comme public. Garder toutes les donnes private et implantez plutt pour un attribut , 1 accesseurs et 1 mutateur : setAttribut(), getAttribut() toutes les donnes ne ncessitent pas daccesseurs en modification
la date de naissance dune personne ne va pas changer

ne pas utiliser trop de types basiques


remplacer : une rue, une ville, un pays, un code postal par une classe Adresse

toujours initialiser et explicitez les attributs utiliser equals() plutt que "==" (pour les types non primitifs
comme String)
5

Recommandations (2)
initialiser les objets qui peuvent retourner une Enumeration(Vector, HashTable,) avec autre chose que null crire des mthodes qui ne font quune chose et en utilisent dautres ne dclarez les variables locales qu lendroit o vous en avez rellement besoin affectez null toutes les rfrences qui ne sont plus utilises minimiser les * dans les imports

Renaud Zigmann

Copyright 2000 XSALTO sarl

CLASSE ET OBJET
Classe(attribut, mthode) Objet Surcharge des constructeurs Rle de this Static Relation entre les classes

Classe
Dfinition
une classe est un moule pour crer des objets une classe permet de modliser des objets du monde rel cest un type dobjet

Syntaxe
[<modificateurs_de_classe>]class <nom_de_classe> [extends <nom_de_superclasse>] [implements <interface_1>,<interface_2,...] { <Attribut_et_Mthodes> }
8

Attribut
class Livre{ String titre; /* un attribut de nom titre et de type String chaine de caractres */ int nb_Exemplaire; /* un attribut de nom nb_Exemplaire et de type int */ int annee_edition; /* un attribut de nom annee_edition et de type int */ }

Mthode
class Livre{
String titre; int nb_Exemplaire; int annee_edition; public Livre(){} /*mthode afficher_Titre na pas de paramtre en entre et retourne vide cette mthode agira sur les attributs de la classe livre */ Void afficher_Titre() {System.out.print("Le titre est "+titre);} /*mthode photocopier a comme paramtre un entier n et retourne le nouveau nombre dexemplaire*/ int photocopier(int n) {nb_Exemplaire=nb_Exemplaire+n; Return nb_Exemplaire; }

}
10

Objet
Dfinition un objet est une instance de classe Exemple
public class MonProgramme { public static void main(String[] args) { Livre l; // l est une rfrence sur la classe l = new Livre(); // l rfrence maintenant un objet //allou en mmoire Livre l2 = new Livre(); l.titre="Java 2, le guide du programmeur "; l.nb_Exemplaire=2; l. afficher_Titre(); } }
11

Cration d'un objet


Pour manipuler un objet, on dclare une rfrence sur la classe de cet objet :
Livre l;

Pour crer un objet, on instancie une classe en appliquant l'oprateur new sur un de ses constructeurs. Une nouvelle instance de cette classe est alors alloue en mmoire :
l = new Livre();

Toute classe possde un constructeur par dfaut, implicite. Il peut tre redfini. Une classe peut avoir plusieurs constructeurs qui diffrent par le nombre et la nature de leurs paramtres.
12

Le Constructeur dun objet


Dans lexemple prcdent du livre, la mthode suivante est un peu particulire Public Livre(){} Elle porte seulement le nom de la classe en cours de dfinition Cette mthode est un constructeur charg de construire lobjet : allouer de la mmoire et initialiser les attributs de lobjet Il nest jamais appel directement, il est pris en compte lors de la demande de cration de lobjet avec new

13

La surcharge des mthodes


Un mme nom de mthode peut tre utilis pour plusieurs fonctions (lorsquils ralisent des actions conceptuellement voisines. Le compilateur se base sur le nombre de paramtres, le type des paramtres ou lordre des types des paramtres pour distinguer quelle est la mthode mettre en uvre. La valeur de retour nest pas prise en compte pour cette diffrenciation.
14

Exemple de surcharge
Surcharge des constructeurs Livre(){ }//constructeur par defaut Livre(String titre, int nb_exemplaire, int annee){ }// constructeur exhaustive

La surcharge des mthodes emprunter(String titre){ } emprunter(int num_exemplaire, String titre){ }

15

Destruction d'un objet


La destruction des objets est prise en charge par le garbage collector (GC). Le GC dtruit les objets pour lesquels il n'existe plus de rfrence. Les destructions sont asynchrones (le GC est gr dans une thread de basse priorit). Aucune garantie n'est apporte quant la destruction d'un objet. Si l'objet possde la mthode finalize, celle-ci est appele lorsque l'objet est dtruit. On peut invoquer le gc pour dtruire tous les objets qui rfrence le null
16

Destruction d'un objet


class Livre { ... void finalize() { System.out.println("Je suis garbage collecte"); } } public class MonProgramme { public static void main(String[] args) { Livre l; // l est une rfrence sur la classe Livre l = new Livre(); l.titre="Java 2, le guide du programmeur "; l.nb_Exemplaire=2; l.photocopier(10); l. afficher_Titre();

l=null; System.gc(); System.runFinalization(); System.gc();

17

Rle de this
This dsigne lobjet courant(cest une rfrence sur lobjet courant). Il permet de lever lambiguit de nom : this.titre dsigne lattribut alors que titre seul dsigne le paramtre.
public setTitre(String titre){ this.titre=titre; }

18

Final
Le mot cl Java final signifie Cela ne peut pas changer .Vous pourriez vouloir empcher les changements pour deux raisons : conception ou efficacit. Une constante est utile pour deux raisons: 1- Elle peut tre une constante lors de la compilation qui ne changera jamais ; 2- Elle peut tre une valeur initialise l'excution qu'on ne veut pas changer.19

Exemple : Final
public class FinalData { // Peut tre des constantes la compilation final int i1 = 9; static final int VAL_TWO = 99; // Constantes publiques typiques: public static final int VAL_THREE = 39; // Ne peuvent pas tre des constantes la compilation: final int i4 = (int)(Math.random()*20); static final int i5 = (int)(Math.random()*20); }

Un champ qui est la fois static et final a un emplacement de stockage fixe qui ne peut pas tre chang. 20

Static
Les variables static sont communes toutes les instances de la classe. Il n'est pas ncessaire d'instancier une classe pour accder un de ses membres statiques. Les attributs static sont initialiss par dfaut 0 pour les nombres entiers et rels, false pour les boolens et null pour les rfrences Les mthodes Static sont des fonctions qui dlivrent un rsultat indpendamment de tout objet, elles sont mises (en dehors de leur classe) en les faisant prcder du nom de la classe les dfinissant.

21

Exemple
Attribut static private double pReel;// partie Relle private double pImag;//partie Imaginaire private static int nbDecimales = 3;//nombre de dcimales fournir pour lcriture des rsultats. Mthode static Complex c1= new Complex(2,1.50); Complex c2= new Complex(-2,1.75); Complex c3= c1.plus(c2);// c1 est lobjet implicite Complex c3= Complex.plus(c1, c2); //pas dobjet implicite
22

Membres de classe
un membre est dclar avec le modificateur static : membre de classe (champ ou mthode) un membre qui nest pas de classe est dit dinstance
NomClasse.membre

public class Count { private int serialNumber; private static int counter =0; public Count(){ counter++; serialNumber=counter; } }

public class Cercle{ public double x,y,r; public Cercle bigger(Cercle c){ if (c.r>r) return c else return this; }

public static Cercle bigger(Cercle a, Cercle b){ if (a.r>b.r) return a else return b; } ..} Cercle c=Cercle.bigger(a,b);
23

Cration dobjets identiques


Rectangle r1 = new Rectangle(100,50); Rectangle r2 = new Rectangle(100,50); if (r1 == r1) { ... } // vrai if (r1 == r2) { ... } // faux

Les variables de type objet que l'on dclare ne contiennent pas un objet mais une rfrence vers cet objet. c1 = c2 : copie la rfrence de l'objet c2 dans c1 mme objet (ils pointent sur le mme objet). c1 et c2 rfrent au

L'oprateur == compare ces rfrences. Deux objets avec des proprits identiques sont deux objets distincts Pour comparer l'galit des variables de deux instances, il faut munir la classe d'une mthode cette effet : la mthode equals hrite de Object. Si les deux objets sont de la mme classe: la mthode getClass() de la classe Object
(obj1.getClass().equals(obj2.getClass())

24

Afficher le contenu dune classe


Livre liv1= new Livre(java, 5); System.out.println( liv1);//affiche la rfrence de lobjet liv1 Si on veux afficher la valeur des diffrents attributs de la classe Livre, il faut implmenter la mthode toString() hrite de object Dans la classe Livre, on ajoute la mthode : public String toString(){ return le nom du livre :+this.titre+ le nombre dexemplaire :+ this.nb_exemplaire} A ce fait: System.out.println( liv1);//affiche :le nom du livre :java le nombre dexemplaire : 5
25

Relation entre les classes


Relation 1 vers 1

class Livre { String titre; int nbexemplaire; casier classer;

class casier { int numero; int etat; Livre classer;

26

Relation entre les classes


Relation de 1 vers n

class Livre { String titre; int nbexemplaire; Chapitre contenu[];

class Chapitre { String nom; String contenu; Livre l; 27

Relation entre les classes


Navigation

class Livre { String titre; int nbexemplaire; casier c;

class casier { int numero; int etat;

28