Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Le monde qui nous entoure est compos d'objets Ces objets ont tous deux caractristiques un tat un comportement chien tat : nom, couleur, race, poids.... comportement : manger,aboyer,renifler... Bicyclette tat : nombre de vitesses, vitesse courante, couleur comportement : tourner, acclrer, changer de vitesse
Lapproche objet
Lapproche objet :
Programmation dirig par les donnes et non par les traitements les procdures existent toujours mais on se concentre dabord sur les entits que lon va manipuler avant de se concentrer sur la faon dont on va les manipuler Notion dencapsulation les donnes et les procdures qui les manipulent (on parle de mthodes) sont regroups dans une mme entit (la classe).
Un objet informatique
maintient son tat dans des variables (appeles champs) implmente son comportement l'aide de mthodes objet informatique = regroupement logiciel de variables et de mthodes
Cycle de vie
construction (en mmoire) Utilisation (changements dtat par affectations, comportements par excution de mthodes) destruction
Franois Bonneville - Laboratoire d'Informatique de Besanon 2
Concept de classe
La classification dun univers quon cherche modliser est sa distribution systmatique en diverses catgories, daprs des critres prcis En informatique, la classe est un modle dcrivant les caractristiques communes et le comportement dun ensemble dobjets : la classe est un moule et lobjet est ce qui est moul partir de cette classe Mais l'tat de chaque objet est indpendant des autres
Les objets sont des reprsentations dynamiques (appeles instances) du modle dfini au travers de la classe Une classe permet dinstancier plusieurs objets Chaque objet est instance dune seule classe
Franois Bonneville - Laboratoire d'Informatique de Besanon 3
Classe : description dune famille dobjets ayant une mme structure et un mme comportement. Elle est caractrise par :
Un nom Une composante statique : des champs (ou attributs) nomms ayant une valeur. Ils caractrisent ltat des objets pendant lexcution du programme Une composante dynamique : des mthodes reprsentant le comportement des objets de cette classe. Elles manipulent les champs des objets et caractrisent les actions pouvant tre effectues par les objets.
Mthodes
Attributs
Mthodes
Linstanciation (1)
Dans nos programmes Java nous allons dfinir des classes et instancier ces classes en des objets qui vont interagir. Le fonctionnement du programme rsultera de linteraction entre ces objets instancis . En Programmation Oriente Objet, on dcrit des classes et lapplication en elle-mme va tre constitue des objets instancis, partir de ces classes, qui vont communiquer et agir les uns sur les autres.
Linstanciation (2)
Instance
reprsentant physique d'une classe obtenu par moulage du dictionnaire des variables et dtenant les valeurs de ces variables. Son comportement est dfini par les mthodes de sa classe Par abus de langage instance = objet si nous avons une classe voiture, alors votre voiture est une instance particulire de la classe voiture. Classe = concept, description Objet = reprsentant concret dune classe
Exemple :
L'allocation mmoire ncessaire au stockage de ce nouvel objet et l'initialisation par dfaut de ces attributs, L'initialisation explicite des attributs, s'il y a lieu, L'excution d'un constructeur.
public class Application { public static void main(String args[]) { Personne jean = new Personne() jean.setNom("Jean") ; } }
Lorsque l'initialisation explicite n'est pas possible (par exemple lorsque la valeur initiale d'un attribut est demande dynamiquement l'utilisateur), il est possible de raliser l'initialisation au travers d'un constructeur. Le constructeur est une mthode :
Toute classe possde au moins un constructeur. Si le programmeur ne l'crit pas, il en existe un par dfaut, sans paramtres, de code vide.
Franois Bonneville - Laboratoire d'Informatique de Besanon 10
public class Application { public static void main(String args[]) { Personne jean = new Personne() jean.setNom("Jean") ; } }
11
Pour une mme classe, il peut y avoir plusieurs constructeurs, de signatures diffrentes (surcharge). L'appel de ces constructeurs est ralis avec le new auquel on fait passer les paramtres.
p1 = new Personne("Pierre", "Richard", 56); Il se fait en fonction des paramtres passs lors de l'appel (nombre et types). C'est le mcanisme de "lookup". Si le programmeur cre un constructeur (mme si c'est un constructeur avec paramtres), le constructeur par dfaut n'est plus disponible. Attention aux erreurs de compilation !
Franois Bonneville - Laboratoire d'Informatique de Besanon 12
Attention
On dfinit plusieurs constructeurs qui se diffrencient uniquement par leurs paramtres (on parle de leur signature)
13
class Personne Personne jean, pierre; { jean = new Personne (); String nom; pierre = new Personne (); int age; float salaire; } Loprateur dinstanciation en Java est new : MaClasse monObjet = new MaClasse(); En fait, new va rserver lespace mmoire ncessaire pour crer lobjet monObjet de la classe MaClasse Le new ressemble beaucoup au malloc du C
14
Lorsqu'une variable est d'un type objet ou tableau, ce n'est pas l'objet ou le tableau lui-mme qui est stock dans la variable mais une rfrence vers cet objet ou ce tableau (on retrouve la notion dadresse mmoire ou du pointeur en C). Lorsqu'une variable est d'un type de base, la variable contient la valeur.
15
Rfrences
La rfrence est, en quelque sorte, un pointeur pour lequel le langage assure une manipulation transparente, comme si c'tait une valeur (pas de drfrencement). Par contre, du fait qu'une rfrence n'est pas une valeur, c'est au programmeur de prvoir l'allocation mmoire ncessaire pour stocker effectivement l'objet (utilisation du new).
16
3
0x768 0x852
String s1="abc",s2="abc"; s1 == s2 est faux... Quand on compare 2 variables dun type de base on compare leur valeur. Quand on compare 2 objet avec les oprateurs on compare leur rfrence (leur adresse en mmoire). Introduction de la mthode equals() pour les objets : s1.equals(s2) est vrai
Franois Bonneville - Laboratoire d'Informatique de Besanon
Abc ....
Abc ....
17
18
20
21
22
Java n'implmente qu'un seul mode de passage des paramtres une mthode : le passage par valeur. Consquences :
l'argument pass une mthode ne peut tre modifi, si l'argument est une instance, c'est sa rfrence qui est passe par valeur. Ainsi, le contenu de l'objet peut tre modifi, mais pas la rfrence elle-mme.
23
{
return (number1 +number2); }
24
Les variables sont connues et ne sont connues qu lintrieur du bloc dans lequel elles sont dclares
public class Bidule { int i, j, k; public void truc(int z) { int j,r; r = z; } public void machin() { k = r; } }
Ce sont 2 variables diffrentes k est connu au niveau de la mthode machin() car dclar dans le bloc de la classe. Par contre r nest pas dfini pour machin(). On obtient une erreur la compilation
25
En cas de conflit de nom entre des variables locales et des variables globales, cest toujours la variable la plus locale qui est considre comme tant la variable dsigne par cette partie du programme
Attention par consquent ce type de conflit quand on manipule des variables globales.
Java n'a pas repris son compte la notion de destructeur telle quelle existe en C++ par exemple. C'est le ramasse-miettes (ou Garbage Collector - GC en anglais) qui s'occupe de collecter les objets qui ne sont plus rfrencs. Le ramasse-miettes fonctionne en permanence dans un thread de faible priorit (en tche de fond ). Il est bas sur le principe du compteur de rfrences.
27
Ainsi, le programmeur na plus grer directement la destruction des objets, ce qui tait une importante source d'erreurs (on parlait de fuite de mmoire ou memory leak en anglais). Le ramasse-miettes peut tre "dsactiv" en lanant l'interprteur java avec l'option -noasyncgc. Inversement, le ramasse-miettes peut tre lanc par une application avec l'appel System.gc();
28
Il est possible au programmeur d'indiquer ce qu'il faut faire juste avant de dtruire un objet. C'est le but de la mthode finalize() de l'objet. Cette mthode est utile, par exemple, pour :
fermer une base de donnes, fermer un fichier, couper une connexion rseau, etc.
29
Lencapsulation (1)
Notion d'encapsulation :
les donnes et les procdures qui les manipulent sont regroupes dans une mme entit, l'objet. Les dtails d'implmentation sont cachs, le monde extrieur n'ayant accs aux donnes que par l'intermdiaire d'un ensemble d'oprations constituant l'interface de l'objet. Le programmeur n'a pas se soucier de la reprsentation physique des entits utilises et peut raisonner en termes d'abstractions.
30
Lencapsulation (2)
pour traiter une application, le programmeur commence par dfinir les classes d'objets appropries, avec leurs oprations spcifiques. chaque entit manipule dans le programme est un reprsentant (ou instance) d'une de ces classes. L'univers de l'application est par consquent compos d'un ensemble d'objets qui dtiennent, chacun pour sa part, les cls de leur comportement.
31
visible depuis les instances de toutes les classes d'une application. En d'autres termes, son nom peut tre utilis dans l'criture d'une mthode de ces classes. Il est alors public. visible uniquement depuis les instances de sa classe. En d'autres termes, son nom peut tre utilis uniquement dans l'criture d'une mthode de sa classe. Il est alors priv.
public private
32
les attributs ne soient pas visibles, Les attributs ne devraient pouvoir tre lus ou modifis que par l'intermdiaire de mthodes prenant en charge les vrifications et effets de bord ventuels. les mthodes "utilitaires" ne soient pas visibles, seules les fonctionnalits de l'objet, destines tre utilises par d'autres objets soient visibles. Cest la notion dencapsulation
Nous verrons dans la suite que lon peut encore affiner le contrle daccs
Franois Bonneville - Laboratoire d'Informatique de Besanon 33
Il peut s'avrer ncessaire de dfinir un attribut dont la valeur soit partage par toutes les instances d'une classe. On parle de variable de classe. Ces variables sont, de plus, stockes une seule fois, pour toutes les instances d'une classe. Mot rserv : static Accs :
depuis une mthode de la classe comme pour tout autre attribut, via une instance de la classe, l'aide du nom de la classe.
35
public class UneClasse { public static int compteur = 0; public UneClasse () { compteur++; } }
public class AutreClasse { public void uneMethode() { int i = UneClasse.compteur; } }
36
Il peut tre ncessaire de disposer d'une mthode qui puisse tre appele sans instance de la classe. C'est une mthode de classe. On utilise l aussi le mot rserv static Puisqu'une mthode de classe peut tre appele sans mme qu'il n'existe d'instance, une mthode de classe ne peut pas accder des attributs non statiques. Elle ne peut accder qu' ses propres variables et des variables de classe.
37
38
Un objet peut tre compos partir dautres objets Exemple : Une voiture compose de
5 roues (roue de secours) chacune compose dun pneu dun moteur compos de plusieurs cylindres de portires Voiture Moteur Portire etc Roue Pneu Roue Pneu Roue Pneu
Portire
Roue Pneu
Roue Pneu
class Voiture { Roue roueAVG,roueAVD, roueARG, roueARD , roueSecours ; Portiere portiereG, portiereD; Moteur moteur;}
40
Gnralement, le constructeur dun objet compos doit appeler le constructeur de ses composants
public Roue () { pneu = new Pneu();} public Voiture () { roueAVG = new Roue(); roueAVD = new Roue(); roueARG = new Roue(); roueARD = new Roue(); portiereG = new Portiere(); portiereD = new Portiere(); moteur = new Moteur();}
41
Linstanciation dun objet compos instancie ainsi tous les objets qui le composent Voiture
RoueAV GG RoueAV D
Moteur
Portire
Portire
Roue
diamtre
Roue
diamtre
RoueAR G
Roue
diamtre
RoueAR D
RoueSecours
Roue
diamtre
Roue
diamtre
Pneu
pression
Pneu
pression
Pneu
pression
Pneu
pression
Pneu
pression
42
La modlisation du monde rel ncessite une classification des objets qui le composent Classification = distribution systmatique en catgories selon des critres prcis Classification = hirarchie de classes Exemples :
43
Polygone Quadrilatre
Rectangle
Triangle equilateral
Triangle Rectangle
Carr
44
Hritage : mcanisme permettant le partage et la rutilisation de proprits entre les objets. La relation dhritage est une relation de gnralisation / spcialisation. La classe parente est la superclasse. La classe qui hrite est la sous-classe.
45
Superclasse
Java implmente le mcanisme d'hritage simple qui permet de "factoriser" de l'information grce une relation de gnralisation / spcialisation entre deux classes. Pour le programmeur, il s'agit d'indiquer, dans la sousclasse, le nom de la superclasse dont elle hrite. Par dfaut toutes classes Java hrite de la classe Object L'hritage multiple n'existe pas en Java. Mot rserv : extends
47
Constructeurs et hritage
par dfaut le constructeur dune sous-classe appelle le constructeur "par dfaut" (celui qui ne reoit pas de paramtres) de la superclasse. Attention donc dans ce cas que le constructeur sans paramtre existe toujours dans la superclasse... Pour forcer l'appel d'un constructeur prcis, on utilisera le mot rserv super. Cet appel devra tre la premire instruction du constructeur.
49
Appel par dfaut dans le constructeur de Personne au constructeur par dfaut de la superclasse de Personne, qui est Object
51
Redfinition de mthodes
Une sous-classe peut redfinir des mthodes existant dans une de ses superclasses (directe ou indirectes), des fins de spcialisation.
Le terme anglophone est "overriding". On parle aussi de masquage. La mthode redfinie doit avoir la mme signature.
class Employe extends Personne class Cadre extends Employe { { redfinition private float salaire; public calculePrime() public calculePrime( ) { { // ... // ... } } // ... } }
Franois Bonneville - Laboratoire d'Informatique de Besanon 52
Le polymorphisme
Capacit pour une entit de prendre plusieurs formes. En Java, toute variable dsignant un objet est potentiellement polymorphe, cause de l'hritage. Polymorphisme dit dhritage dclenchement de la mthode la plus spcifique dun objet, c'est-dire celle correspondant au type rel de l'objet, dtermin l'excution uniquement (et non le type de la rfrence, seul type connu la compilation, qui peut tre plus gnrique). Cette dynamicit permet d'crire du code plus gnrique.
53
Cadre calculePrime()
54
Dans une mme classe, plusieurs mthodes peuvent possder le mme nom, pourvu qu'elles diffrent en nombre et/ou type de paramtres.
On parle de surdfinition ou surcharge, on encore en anglais doverloading en anglais. Le choix de la mthode utiliser est fonction des paramtres passs l'appel. Ce choix est ralis de faon statique (c'est--dire la compilation). Trs souvent les constructeurs sont surchargs (plusieurs constructeurs prenant des paramtres diffrents et initialisant de manires diffrentes les objets)
Franois Bonneville - Laboratoire d'Informatique de Besanon 55
Oprateur instanceof
L'oprateur instanceof confre aux instances une capacit d'introspection : il permet de savoir si une instance est instance d'une classe donne.
Lorsqu'une rfrence du type d'une classe dsigne une instance d'une sous-classe, il est ncessaire de forcer le type de la rfrence pour accder aux attributs spcifiques la sous-classe. Si ce n'est pas fait, le compilateur ne peut dterminer le type rel de l'instance, ce qui provoque une erreur de compilation. On utilise galement le terme de transtypage Similaire au cast en C
57
On force le type de la variable jean pour pouvoir accder lattribut salaire . On peut le faire car cest bien un objet Employe qui est dans cette variable
58
Le mot rserv this, utilis dans une mthode, dsigne la rfrence de l'instance laquelle le message a t envoye (donc celle sur laquelle la mthode est excute ). Il est utilis principalement :
lorsqu'une rfrence l'instance courante doit tre passe en paramtre une mthode, pour lever une ambigut, dans un constructeur, pour appeler un autre constructeur de la mme classe.
59
Pour lever lambigut sur le mot nom et dterminer si cest le nom du paramtre ou de lattribut
60
Rfrence la superclasse
Le mot rserv super permet de faire rfrence au constructeur de la superclasse directe mais aussi dautres informations provenant de cette superclasse.
Appel la mthode calculPrime() de la superclasse de Cadre
class Employe extends Personne { private float salaire; public float calculePrime() { return (salaire * 0,05); } // ... }
class Cadre extends Employe { public float calculePrime() { return (super.calculePrime() / 2); } // ... }
Franois Bonneville - Laboratoire d'Informatique de Besanon 61
Il peut tre ncessaire au programmeur de crer une classe dclarant une mthode sans la dfinir (c'est-dire sans en donner le code). La dfinition du code est dans ce cas laisse aux sous-classes. Une telle classe est appele classe abstraite. Elle doit tre marque avec le mot rserv abstract. Toutes les mthodes de cette classe qui ne sont pas dfinies doivent elles aussi tre marques par le mot rserv abstract. Une classe abstraite ne peut pas tre instancie.
Franois Bonneville - Laboratoire d'Informatique de Besanon 62
Par contre, il est possible de dclarer et d'utiliser des variables du type de la classe abstraite. Si une sous-classe d'une classe abstraite ne dfinit pas toutes les mthodes abstraites de ses superclasses, elle est abstraite elle aussi.
public abstract class Polygone { private int nombreCotes = 3; public abstract void dessine (); // methode non dfinie public int getNombreCotes() { return(nombreCotes); } }
Franois Bonneville - Laboratoire d'Informatique de Besanon 63