Vous êtes sur la page 1sur 76

Programmation oriente objet

Le langage utilis : Java

Prrequis
Vous devez tre un familier de la programmation:

Que un programme est un ensemble d'instructions, ce que signifie un sous-programme, une fonction, une macro-instruction, un ordre de contrle tel que if ainsi qu'une structure de boucle telle que while , etc.

Sinon prparez vous travailler dur

Gnralits
Le Concept orient objet

Extrait de Au cur de Activex et OLE de


David Chappel
"Au cours des 35 dernires annes, les concepteurs de

matriel informatique sont passs de machines de la taille d'un hangar des ordinateurs portables lgers bass sur de minuscules microprocesseurs. Au cours des mmes annes, les dveloppeurs de logiciels sont passs de l'criture de programmes en assembleur l'criture de programmes encore plus grands en C et C++. On pourra parler de progrs (bien que cela soit discutable), mais il est clair que le monde du logiciel ne progresse pas aussi vite que celui du matriel. Qu'ont donc les dveloppeurs de matriel que les dveloppeurs de logiciels n'ont pas ?
4

La rponse est donne par les composants. Si les ingnieurs

en matriel lectronique devaient partir d'un tas de sable chaque fois qu'ils conoivent un nouveau dispositif, si leur premire tape devait toujours consister extraire le silicium pour fabriquer des circuits intgrs, ils ne progresseraient pas bien vite. Or, un concepteur de matriel construit toujours un systme partir de composants prpars, chacun charg d'une fonction particulire et fournissant un ensemble de services travers des interfaces dfinies. La tche des concepteurs de matriel est considrablement simplifie par le travail de leurs prdcesseurs.
5

La rutilisation est aussi une voie vers la cration de

meilleurs logiciels. Aujourd'hui encore, les dveloppeurs de logiciels en sont toujours partir d'une certaine forme de sable et suivre les mmes tapes que les centaines de programmeurs qui les ont prcds. Le rsultat est souvent excellent, mais il pourrait tre amlior. La cration de nouvelles applications partir de composants existants, dj tests, a toutes chances de produire un code plus fiable. De plus, elle peut se rvler nettement plus rapide et plus conomique, ce qui n'est pas moins important." Cest le but du nouveau concept de programmation: lorient objet
6

La programmation orient objet


La

programmation objet consiste crer une reprsentation informatique des lments du monde rel auxquels on s'intresse, sans se proccuper de l'implmentation. Cette reprsentation est appele un objet .

un objet reprsente un concept, une ide ou toute entit

du monde physique, comme une voiture, une personne ou encore un livre. Chaque objet est la concrtisation d'une structure abstraite (sa classe); la classe voiture, livre, personne
7

Exemple (classe et objet)


Les formes gomtriques , utilises dans les jeux vidos.

Le type de base est la forme gomtrique , et chaque forme a une taille, une couleur, une position, etc (caractristiques)... Chaque forme peut tre dessine, efface, dplace, peinte, etc.(comportement)..
la classe forme gomtrique

A partir de ce type de base, des objets sont construits: un

cercle de rayon 1, couleur rouge dont le centre est lorigine du repre. Un carr de largeur 1, couleur vert, centre est un le point (1,2), etc.
Des objet de type forme
8

Les cinq caractristiques principales (1/5)


Toute chose est un objet. Il faut penser un objet comme

une variable amliore : il stocke des donnes, mais on peut effectuer des requtes sur cet objet, lui demander de faire des oprations sur lui-mme. En thorie, on peut prendre n'importe quel composant conceptuel du problme qu'on essaye de rsoudre (un chien, un immeuble, un service administratif, etc...) et le reprsenter en tant qu'objet dans le programme.

Les cinq caractristiques principales (2/5)


Un programme est un ensemble d'objets se disant

les uns aux autres quoi faire en s'envoyant des messages. Pour qu'un objet effectue une requte, on envoie un message cet objet. Plus concrtement, on peut penser un message comme un appel de fonction appartenant un objet particulier.

10

Les cinq caractristiques principales (3/5)


Chaque objet a son propre espace de mmoire

compos d'autres objets. Dit d'une autre manire, on cre un nouveau type d'objet en crant un paquetage contenant des objets dj existants. Ainsi, la complexit d'un programme est cache par la simplicit des objets mis en oeuvre.

11

Les cinq caractristiques principales (4/5)


Chaque objet est d'un type prcis. Dans le jargon de la

POO, chaque objet est une instance d'une classe, o classe est synonyme de type (Forme gomtrique). La plus importante caractristique distinctive d'une classe est : Quels messages peut-on lui envoyer ? (les mthodefonctions ou procdure- comme dans le jargon de la programmation).

12

Les cinq caractristiques principales (5/5)


Tous les objets d'un type particulier peuvent

recevoir le mme message. C'est une caractristique lourde de signification, on la verra plusieurs reprises dans le cours. Les message sont des appels de mthodes.

13

Gnralits
Introduction au langage Java

14

Historique
Java fut dvelopp par Sun Microsystems en 1991.
dveloppement de systmes embarqus : des tlviseurs

interactifs, des grille-pains interactifs, des systmes d'clairage intelligents, etc. Java a le mrite d'tre un langage peu encombrant, performant et facile porter pour un large ventail d'appareils. HotJava, un navigateur Web capable de faire fonctionner des applets Java, fut dvelopp par Sun en 1994.
Java a alors attir lattention de la communaut du Web.

Netscape signe au mois d'aot 1995 un contrat de licence

15

l'autorisant l'utiliser Java. Premire confrence Java0ne de mai 1996 ddi ce langage. Peu aprs dans la mme anne, la sortie de la premire version publique du langage.

Java est simple


Simplicit relative par rapport au C++ Certains concepts du C++ lorigine de nombreux bugs ont

t supprims
Pointeurs Surcharge des oprateurs

Des tudes comparatives de dveloppements

montrent une diminution du cot de dveloppement de 30 35 %


16

Java est un langage objet


Java reprend des caractristiques de diffrents langages objets La syntaxe du C++ La gestion dynamique de la mmoire SmallTalk Tout est objet et toute ligne de code JAVA se trouve

obligatoirement dans une mthode lintrieur dune classe distribus

Nombreuses classes permettant le dveloppement de systmes

17

JAVA est portable


Un code source Java est compil pour gnrer un code assembleur

virtuel : le byte code


Ce code est conu pour : Etre rapidement interprt Etre optimisable au moment de son excution Etre facilement traduit en instructions assembleur (de votre

machine) lors de son excution Etre compact en moyenne, une instruction byte code = 1,8 octet, RISC = 4 octets Etre vrifiable
Le byte code est excut par un logiciel : la Machine virtuelle
18

La machine virtuelle est dpendante de la plate-forme

JAVA est scuris


Le compilateur interdit toute manipulation en mmoire Le Verifier contrle que le byte code charg dans la machine

virtuelle est conforme


Le ClassLoader est responsable du chargement des classes dans le

SandBox . Il vrifie que la classe charge nen crase pas une autre en mmoire
Le SecurityManager contrle les oprations dentre/sortie

locales et sur le rseau (Applet uniquement) La portabilit de Java permet de dplacer dynamiquement du code Java sur un rseau
19

Introduction Java

Le JDK
Le JDK = Java Development Kit
Ancienne version : 1.0.2 Version actuelle : 1.2

Il contient :
Un ensemble de classes de base regroupes en packages

Interface utilisateur, gestion des threads, rseau


Des excutables : machine virtuelle, compilateur

Peut tre tlcharg sur http://www.javasoft.com/ Il est gratuit


20

Les environnements de dveloppement


Ils offrent des fonctions avances :

diteur volu (couleur, autocorrection, prsentation) Assistance syntaxique Gnrateur de code Dbugage Environnement dexcution

Loffre actuelle
Eclipse Jbuilder 4 (Inprise) Visual J++ (Microsoft)
21

Introduction Java

Les classes de base


AWT : Abstract Window Toolkit
Classes dIHM : boutons, listes, gestion gnrique de la

gomtrie, traitement des vnements par abonnement, copier/coller, glisser/dplacer


Rseau
Sockets (serveurs, clients), Web (URL), Applet

Entre-sortie
Fichier, Pipe, accs direct

Classes de base
date, Chane de caractres

JDBC
Accs aux bases de donnes relationnelles
22

Scurit
Cryptage, identification, signature

Comment crer une application Java ?


N'importe quel diteur de texte convient pour crire le code

source dans un ou plusieurs fichiers ayant l'extension .java (ex: monProg.java) Le compilateur s'appelle JAVAC.EXE On compile un fichier en l'excutant dans une fentre ou console du systme d'exploitation. on tape la commande : javac monProg.java Des fichiers .class sont gnrs dans le mme rpertoire, exactement un fichier pour chacune des classes dfinies dans le fichier source.
23

Par exemple, si l'une des classes incluses dans le source

monProg.java s'appelle MaClasse, l'un des fichiers gnrs par la compilation portera forcment le nom MaClasse.class
Onlance l'interprteur dans une fentre ou par la ligne de

commande : java MaClasse (sans l'extension .class). Pour tre excute, la classe MaClasse doit possder la mthode public static void main(String arg[ ]) Cette mthode est le point d'entre obligatoire dans toute application, et est automatiquement recherche

24

Ecriture d'un programme JAVA


Ecrire un programme JAVA, c'est avant tout dcrire un ensemble de

classes. En effet, aucune partie de code ne peut tre crite en dehors d'une classe !

Un mme fichier source peut regrouper plusieurs classes. Mais dans

cette hypothse, une seule doit contenir le qualificatif public dans sa dclaration. doit tre le mme que celui de la classe suivi de l'extension .java, sinon le compilateur signalera l'erreur. qui est dclare public donne son nom au fichier source .java

Si l'une des classes est dclare public, alors le nom du fichier source

Conclusion : si on prfre regrouper le code de plusieurs classes, celle


25

En rsum

26

Mon premier programme


/* Enregistrer sous Bonjour.java */ public class Bonjour { public static void main (String args[]) { System.out.println("Bonjour tout le monde !"); } }

27

Quelques commentaires :
public class Bonjour est la signature de la classe public static void main (String args[]) est la signature de

la mthode main() public signifie que la classe Bonjour n'est pas protge, elle pourrait tre utilise par une classe d'un autre paquetage. void signifie que la mthode main() ne renvoie pas de valeur. String args[] est un paramtre de type tableau qui permet de rcuprer des arguments de lignes de commandes.

28

Passer des arguments au programme


String args[] est un paramtre de type tableau de chaine de caractres. Jusqu'ici nous avons laiss ce tableau vide, car nous n'avons pas pass de paramtres en complment de la commande d'excution, par exemple java Bonjour. A l'excution le tableau nomm args[] est automatiquement cr, et chacun de ses lments contient dans l'ordre les chaines spares par un espace qui ont t passes la suite de la commande.

29

java AffichePersonne Toto 25 rose initialise automatiquement le tableau args[] avec les valeurs : args[0]="Toto" args[1]="25" args[2]= " rose" Son nombre d'lments est 3 et peut tre obtenu dans le progarmme par args.length.

30

La syntaxe
du langage Java

31

Constitution dun programme


Un programme Java utilise un ensemble de classes Les classes sont regroupes par package Une classe regroupe un ensemble dattributs et de

La syntaxe

mthodes
Package Classe Attributs Mthodes
32

Dclaration dune classe


Le nom de la classe est spcifi derrire le mot cl class Le corps de la classe est dlimit par des accolades On dfinit dans le corps les attributs et les mthodes qui

La syntaxe

constituent la classe

class Test { < corps de la classe > }

33

Dfinition dun mthode


Une mthode est constitue de : Dun nom Dun type de retour De paramtres (ventuellement aucun) Dun bloc dinstructions Un paramtre est constitu : Dun type Dun nom void est le mot-cl signifiant que la mthode ne renvoie pas de

valeur

class Test { int calculer (int taux, float delta) { < corps de la mthode > } }
34

Bloc dinstructions
Un bloc dinstructions est dlimit par des accolades Il contient un ensemble dinstructions Toute instruction est termine par un point virgule Un bloc dinstructions peut contenir dautres blocs

La syntaxe

dinstructions
{ int i = 0; if (i==0) System.out.println ("Valeur de i : " + i); }

35

Instructions possibles
Dclaration dune variable Appel de mthode Affectation Instruction de boucle (while, for) Instruction de test (if, switch)

La syntaxe

36

Corps dune mthode


Le corps dune mthode est un bloc dinstructions Le mot cl return permet de renvoyer une valeur

La syntaxe

lappelant de la mthode Il doit renvoyer une valeur du mme type que le type de retour de la mthode
class Test { int calculer (int taux, int delta) { return taux * delta; } }

37

Dclaration dune variable


Une variable possde un type et un nom Le type peut tre un type de base ou une classe Linitialisation dune variable peut se faire au moment de la

La syntaxe

dclaration
{ int compteur; int indice = 0; Voiture golf; Voiture twingo = new Voiture(); }

38

Porte dune variable


La porte dune variable stend jusqu la fin du bloc dans

La syntaxe

lequel elle est dfinie

{ { int compteur; // compteur est accessible } // compteur nest plus accessible }

39

Nom de classes, de variables et de mthodes


Un nom peut tre constitu de lettres, de chiffres et du caractre soulign Il ne peut pas commencer par un chiffre Le caractre $ est utilisable mais viter Les mots rservs (if, class, int) ne peuvent pas tre utiliss Les dveloppeurs ont dfini un consensus de nommage : Les mots du langage sont en minuscule Les noms de classe commencent par une majuscule Les noms de mthodes et de variables comment par une minuscules Chaque mot qui compose le nom commence par une majuscule
40

Point dentre
Une application possde un point dentre fourni par la

La syntaxe

mthode main Attention la casse, Java est sensible aux majuscules/minuscules


class Test { public static void main (String[] args)) { // corps de la mthode main } }

41

Les diffrents types de base (1/2)


Types arithmtiques
byte short int long float double 8 bits 16 bits 32 bits 64 bits 32 bits 64 bits sign sign sign sign sign sign (-128 , 127) (-32768 , 32767) (-2147483648 , 2147483647) (-9223372036854775808, 9223372036854775807) (1.4E-45 , 3.4028235E38) (4.9E-324 , 1.7976931348623157E308)

Type caractre
char 16 Bits 1 bit non sign UNICODE2

Type boolen
42

boolean

deux valeurs possibles : true ou false

Les diffrents types de base (2/2)


Les types de base scrivent en minuscules (int, float..) Le type int est cod sur 4 octets Le type char est cod sur 2 octets Une chane de caractres est dclare avec le mot-cl

La syntaxe

String
Ce nest pas un type de base Il se manipule comme un type de base Ce nest pas quivalent un tableaux de caractres
String s = "Hello World"

43

Laffectation
Loprateur = permet daffecter la valeur de

La syntaxe

lexpression qui est droite la variable qui est gauche

class Test { int calculer () { int i = 0; int j = 6; i = (j + 5) * 3; return i + j; } }

44

Les oprateurs arithmtiques


Sappliquent sur les types entiers ou rels
+, - , * , / , % (modulo) , += , -= , *= , /=
int x, y, z; y = 2; z = 3; x x y y = y * z ; += 2 ; = x / 4 ; =x % 2 ; //x //x //y //y vaut vaut vaut vaut 6 8 2 0

La syntaxe

Les oprateur = et += peuvent tre utiliss sur des

variables de type String

45

Oprateurs unaires
Sappliquent un seul oprande de type entier ou rel
-, --, +, ++

La syntaxe

int x, y; x = 3; y = -x ; y = ++x ; y = x-- ; //y vaut -3 //y vaut 4, x vaut 4 //y vaut 4, x vaut 3

La pr et la post-incrmentation diminuent le nombre de

lignes de byte code gnres


46

Oprateurs de comparaison
Sappliquent sur des entiers, boolens, rels

La syntaxe

==, !=, <=, >, >= Ces oprateurs retournent une valeur du type boolean

{ boolean droitDeVote; int age; droitDeVote = (age >= 18) ; }

47

Oprateurs logiques
Sappliquent au type boolean
! (not) , && (and) , || (or) &, |

La syntaxe

Retournent un type boolean & renvoie true si les deux expressions renvoient true && a le mme comportement mais nvalue pas le seconde

expression si la premire est false renvoie true si lune des deux expressions renvoie true || a le mme comportement mais nvalue pas le seconde expression si la premire est true
48

Les conversions de type (1/2)


Il y a 4 contextes possibles de conversion (cast) :
Conversion explicite Affectation Appel de mthode

La syntaxe

Certaines conversions provoquent une perte de valeur


Float en int, int en short, short en byte

Le type boolean ne peut pas tre converti en entier

49

Les conversions de type (2/2)


double f =3.14 ; int i,j ; short s ; i = (int)f; float ff = (float)3.14; i = s; // float int (conversion explicite) // short int (affectation)

La syntaxe

// appel de la mthode int obj.m(int i) obj.m(s); // short int (appel de mthode) // division dun entier et dun flottant : lentier i est // converti en flottant, puis la division flottante est calcule f = i / (double)j; // f vaut 0.3333

50

Test conditionnel
class Test { public static void main (String args[]) { int compteur = 0; boolean debut; if (compteur == 0) { debut = true; System.out.println("Dbut de la partie"); } else if (compteur ==10) System.out.println("Fin de la partie"); else System.out.println("Partie en cours"); } }
51

La syntaxe

Boucles while
class Test { public static void main (String args[]) { int i; do { System.out.println("Entrez un nombre < 10"); c= lireUnInt(); } while (c>10); } while (c>0) afficher (c--);

La syntaxe

public static int lireUnInt() {} public static void afficher (char c) {} }

52

Boucles for
class Test { public static void main (String args[]) { int i; for (i=0 ; i <=5 ; i++) { System.out.println (i); } for (j=0 ; j <=5 , j++) { System.out.println (i); } // i est accessible // j nest pas accessible

La syntaxe

}
53

Switch
class Test { public static void main (String args[]) { char c = (char)System.in.read(); switch(c) { case o : case O : System.out.println("Oui"); break; case n : case N : System.out.println("Non"); break; default : System.out.println("Mauvaise rponse"); break; }

La syntaxe

Le switch ne sapplique quau type entier ou caractre.


54

Commentaires (1/2)
Lutilisation de commentaires est fortement recommand /*ceci est un commentaire

La syntaxe

sur plusieurs lignes */

//ceci est un commentaire sur une ligne Commentaires destins au gnrateur de documentation

55

HTML javadoc /** * * */

Les tableaux : description


Nombre fixe dlments. Taille fixe la construction Les lments sont de mme type (type de base ou classe) Les tableaux sont allous dynamiquement par new Un tableau est dtruit lorsquil nest plus rfrenc Les tableaux multi-dimensionnels sont des tableaux de

La syntaxe

tableaux

56

Les tableaux : syntaxe


2 syntaxes pour lallocation :
int[] monTableau = new int[10]; int monTableau[] = new int[10];

La syntaxe

Une mthode peut renvoyer un tableau


classe Test { int[] construireTableau (int dimension) { int tab[] = new int[dimension]; return tab; }

57

Les tableaux : initialisation


Lattribut length renvoie la dimension du tableau Lindice des lments du tableaux varie de 0

La syntaxe

tableau.length 1 Initialisation statique :


int[] monTableau = {1, 2, 3};

Initialisation dynamique :
int[] param = new int[10]; for (int i = 0; i < param.lenght ; i++) param[i]= i;

58

Concepts objet, classes, constructeurs, destructeurs, surcharge


Classe et Objet

59

Programmation par objet


Unit logique : lobjet Objet est dfini par
un tat un comportement une identit
maVoiture couleur = bleu vitesse = 100

tat : reprsent par des attributs (variables) qui stockent

des valeurs Comportement : dfini par des mthodes (procdures) qui modifient des tats Identit : permet de distinguer un objet dun autre objet (nom)
60

Principe POO
Les objets communiquent entre eux par des messages Un objet peut recevoir un message qui dclenche

une mthode qui modifie son tat et / ou une mthode qui envoie un message un autre objet
Voiture

dmarre

Moteur

61

Principe POO : Notion de classe


Les objets qui ont les mmes tats et les mmes comporte-

ments sont regroups : cest une classe


Les classes servent de moules pour la cration des objets Un objet est une instance dune classe Un programme POO est constitu de classes qui permettent

de crer des objets qui senvoient des messages


62

Exemple 1 : la classe Voiture

63

64

Exemple 2 : la classe Compte


Compte
Numero : entier Solde : nombre rel deposer (montant) Utilisateur retirer (montant) ConsulterSolde () AfficherSolde ()

- 65 -

Exemple dcriture de la classe Compte


class Compte { private int numero ; private float solde ; public void initialise (int n, float s) { numero = n ; solde = s ; } public void deposer (float montant) { solde = solde + montant ; } public void retirer (float montant) { solde = solde montant ; } public float consulterSolde ( ) { return solde ; } public void afficher () { System.out.println ("Compte : " + numero + " solde: " + solde) ; } }

- 66 -

Utilisation de la classe Compte


public class Banque { public static void main (String args []) { Compte co1; co1 = new Compte () ; // constructeur des objets Compte co2 = new Compte () ; co1.initialise (1234,1000) ; co2.initialise (5678,500) ; co1.deposer (2100.95) ; co1.afficheSolde () ; co2.retirer (1000.0) ; co2.afficheSolde () ; } }
- 67 -

Exemple 1 : reprsentation en mmoire


Aprs la dclaration : Compte co1; il y a une place en mmoire pour la variable co1, mais cette variable est en fait destine contenir l'adresse d'un objet de type Compte, il n'y a pas encore de compte cr. La case mmoire pour la variable co1 est reprsente ci-dessous. co1 est appel aussi rfrence de lobjet. co1

- 68 -

Exemple 1 : reprsentation en mmoire co1 = new Compte () Aprs linstruction


Dans une affectation, le second membre est calcul avant l'affectation. Donc, new Compte() s'excute en premier: c'est l qu'il y a ce qu'on appelle l'instanciation de la classe Compte, autrement dit la cration d'un objet de type Compte. Une place est faite en mmoire pour les attributs de l'objet cr, ici l'attribut numero et solde. Au dpart, les valeurs des attributs valent 0 (les attributs entiers sont par dfaut toujours initialiss 0). Le mot new indique qu'on cre un objet et on fait appel, derrire ce mot, par Compte(), au constructeur de la classe Compte (mthode (par dfaut) qui construit un objet sur le modle de la classe Compte). Il y a donc maintenant en mmoire ce qui est reprsent ci-dessous, o l'objet cr est reprsent en orange : co1
- 69 -

Exemple 1 : reprsentation en mmoire


Aprs new CompteA(); Le constructeur renvoie en fait l'adresse de l'objet cr. L'affectation co1 = ... s'excute. L'adresse de l'objet cr est mise dans la variable co1 : on a maintenant le schma ci-dessous, o la flche symbolise le fait que dans la variable co1, il y a l'adresse de l'objet de type Compte cr :

Aprs pour utiliser la mthode initialise de lobjet co1, on procde comme on le voit dans l'instruction : co1.initialise (1234,1000); On excute la mthode initialise crite dans la classe Compte.

- 70 -

Reprsentation mmoire

co1

co2

numero solde

numero solde

- 71 -

Reprsentation mmoire

co1 et co2 contiennent l'adresse des zones mmoires alloues par l'oprateur new pour stocker les informations relatives ces objets. co1 et co2 sont des rfrences. La rfrence dun objet est utilise pour accder aux donnes et fonctions membres de lobjet. Quand un objet nest plus utilis (aucune variable du programme ne contient une rfrence sur cet objet), il est automatiquement dtruit et la mmoire rcupre (garbage collector).

- 72 -

visibilit des attributs dans une classe


Un attribut est une variables globales de la classe: Accessibles

dans toutes les mthodes de la classe (attribut vs variable)


public classVoiture { private int puissance; private boolean estDemarree; private double vitesse; public int deQuellePuissance() { return puissance; } public void demarre() { estDemarree = true; } public void accelere(double v) { if (estDemarree) { double avecTolerance ; avecTolerance = v + 25; vitesse = vitesse + avecTolerance
- 73 -

visible partout

visible uniquement ici

} }}

74

75

Trans 19 42

76