Vous êtes sur la page 1sur 7

07/04/14 www.florat.net/tutorial-java/chapitre01.

html
www.florat.net/tutorial-java/chapitre01.html 1/7
CHAPITRE 1 - L'Orient Objet
Ce chapitre ne concerne pas seulement Java mais tout langage orient objet. Il donnera les notions et
le vocabulaire fondamentaux de l'OO.
1.1- La programmation oriente objet
Les deux grands mondes de la programmation
Il existe deux grands types de programmation :
Le Procdural ou structur comme le C o on dfinit des fonctions s'appelant mutuellement. Chaque
fonction ou procdure est associe un traitement particulier qui peut tre dcompos en sous
traitements jusqu' obtenir des fonctions basiques. Globalement, le procdural travaille sur l'action ou
le verbe. Par exemple, pour calculer la vitesse d'une voiture, la philosophie du procdural conduira
faire : calculVitesse(voiture) partout o cela est ncessaire. Le code faisant rfrence une voiture
est donc "fondu" et dispers dans l'ensemble des programmes.
L'Orient Objet ( ou OO ) o on manipule uniquement des objets c'est--dire des ensembles groups
de variables et de mthodes associes des entits intgrant naturellement ces variables et ces
mthodes. Dans cette configuration, le sujet est prpondrant: disposant d'un objet Voiture, on
effectuera spontanment : Voiture.calculVitesse() . Tout le code touchant l'objet Voiture se trouve
ainsi regroup.
Avantages de l'Orient Objet
L'OO supplante peu peu le procdural dans les grands programmes car il prsente d'normes
avantages: facilit d'organisation, rutilisation, mthode plus intuitive, possibilit d'hritage, facilit de
correction, projets plus faciles grer. L'intrt principal de l'OO rside dans le fait que l'on ne dcrit
plus par le code des actions raliser de faon linaire mais par des ensembles cohrents appels
objets.
L'OO est facilement concevable car il dcrit des entits comme il en existe dans le monde rel. Ainsi,
l'objet Voiture qui implmente la mthode Voiture.rouler et possde la proprit Voiture.Cylindre
est facilement concevable et peut tre utilise -par exemple- dans une simulation de course automobile
o on fera interagir plusieurs objets Voiture. Les modles objets ont t crs pour modliser le
monde rel. "Dans un modle objets, toute entit du monde rel est un objet, et rciproquement, tout
objet reprsente une entit du monde rel".
L'OO permet en quelque sorte de factoriser le code en ensembles logiques. Du point de vue de la
programmation, L'OO permet d'crire des programmes facilement lisibles avec un minimum
d'exprience, de taille minimale et la correction aise. Ces programmes sont, de plus, souvent trs
07/04/14 www.florat.net/tutorial-java/chapitre01.html
www.florat.net/tutorial-java/chapitre01.html 2/7
stables.
Les informations concernant un domaine tant centralises en objets, il est facile de scuriser le
programme en interdisant ou autorisant l'accs ces objets aux autres parties du programme.
En gnral, en OO, cohabitent deux types de dveloppeurs: ceux qui conoivent les objets et ceux qui
utilisent ces objets dans leurs programmes. De cette faon, la programmation objet permet de diviser
la complexit. La programmation objet permet d'obtenir des projets stratifis. Chaque protagoniste
ne travaille que sur des implmentations le concernant.
1.2- Concepts gnraux de l'OO
1.2.1- Notion de classe
Une classe encapsule, c'est--dire regroupe des proprits et des comportements. Par exemple, la classe
Humain dfinit des proprits ( deux bras, deux jambes...) et des comportements ( marcher, parler, voir...).

classe Humain
En OO, les comportements sont appels mthodes et les proprits variables d'instance. Notons que les
proprits des classes peuvent elles-mme tre des objets. Par exemple, la proprit bras de notre exemple
peut tre un objet de type 'Bras'. Si nous prenons l'exemple d'une voiture, la classe 'Voiture' sera l'ensemble
des plans de la voiture.
1.2.2- Notion d'objet
Un objet est une instance de classe, c'est--dire un exemplaire utilisable cre partir de cette classe et en
valorisant certaines proprits. Par exemple, bob ou bill sont des instances de la classe Humain, c'est--dire
des humains ayant des proprits spcifiques ( bob est un humain aux yeux noirs et bill un humain aux yeux
marrons ). Notons que le concept de classe est abstrait : personne n'a jamais vu d'Humain dans la nature
alors que le concept d'objet est fondamentalement concret : il est concevable de croiser des personnes
physiques, c'est--dire des instances d'Humain.
07/04/14 www.florat.net/tutorial-java/chapitre01.html
www.florat.net/tutorial-java/chapitre01.html 3/7
Tout objet possde un type: bob est de type Humain. L'instance d'une classe est du type de sa classe. C'est
le type initial de l'objet. La classe est le moule, le plan, la recette de tout objet. La plupart du temps, les
objets sont initialiss lors de leur instanciation. Le systme excute alors automatiquement le constructeur de
la classe. Le constructeur est excute l'instanciation de l'objet. Il prend en argument des proprits du
nouvel objet. L'instanciation d'une voiture rouge se fait par Voiture(rouge). Une classe peut avoir plusieurs
constructeurs. Dans notre exemple, on peut instancier une Voiture en ne lui prcisant que sa couleur (
exemple prcdant ) ou en lui prcisant en plus sa marque de fabrique : Voiture(rouge,Renault) Toujours
dans notre exemple de voiture, une instance de Voiture sera physiquement une voiture - unique - qui a t
construite partir du plan 'Voiture'.
1.2.3- Notion de rfrence sur un objet
Dans les programmes, un objet est une zone mmoire qui est pointe par une ou plusieurs rfrences. Une
fois l'objet instanci, il correspond en ralit une zone mmoire donne. Cette zone mmoire, pour tre
utilise doit tre rfrence. Par exemple, bob est une rfrence sur l'objet de type Humain correspondant et
vaut l'adresse mmoire E515:FB80 . Instancions l'objet bill : il y a rservation d'une seconde place mmoire
rfrence ( pointe) par la rfrence bill valant E515:FF90. Un objet peut possder plusieurs rfrences:
par exemple, si on fait bill = bob, cela signifie qu'ils rfrencent tous les deux le mme objet, la mme zone
mmoire. Dans ce cas, l'objet bill est donc perdu car il n'est plus rfrenc. Les rfrences bill et bob
dsignent maintenant le mme objet. Dans la suite de ce document et pour amliorer la comprhension, nous
dsignerons par abus de langage une rfrence sur un objet par le terme 'objet'. Par exemple: "l'objet Bill de
type Humain" au lieu de "la rfrence Bill sur l'objet correspondant de type Humain". Dans l'exemple
de la voiture, une rfrence sur un voiture pourrait tre sa plaque d'immatriculation.
1.3- Proprits de base de l'OO
1.3.2- L'hritage
L'hritage permet de spcialiser une classe qui possdera non seulement les proprits et mthodes de sa
mre mais galement d'autres mthodes spcifiques ou redfinies. Le terme est faire driver la classe en
une classe fille. Dans l'objet fille, on trouve:
07/04/14 www.florat.net/tutorial-java/chapitre01.html
www.florat.net/tutorial-java/chapitre01.html 4/7
De nouvelles mthodes ou proprits
Des mthodes ou proprits qui surchargent, c'est- -dire redfinissent celles de la classe mre.
Les proprits et mthodes de la classe mre qui n'ont pas t surcharges
Remarque: Les mthodes et proprits peuvent tre hrites un niveau n, c'est--dire qu'un objet peut
utiliser une mthode de la mre de sa mre et ainsi de suite. Exemple d'hritage :
Les classes Voiture et Moto drivent de la classe Vhicule.
Voiture :
Conserve la mthode rouler() de Vhicule
Conserve la proprit Couleur de Vhicule
Surcharge la mthode seGarer de Vhicule
Implmente la mthode reculer()
Possde la nouvelle proprit Volant
Moto:
Conserve la mthode seGarer() de Vhicule
Conserve la mthode rouler() de Vhicule
Conserve la proprit Couleur de Vhicule
Implmente la mthode passerEntreLesVoitures()
Possde la nouvelle proprit Guidon
1.3.2- Le polymorphisme et le transtypage
Les objets sont dits polymorphes car ils possdent plusieurs types: le type de leurs classes et les types des
classes ascendantes. Par exemple, uneHonda, instance de Moto aura comme type initial Moto mais une
Moto possde par hritage le type Vhicule. L'objet uneHonda est bien un Vhicule. Dans certains cas, il
est possible de forcer le programme 'voir' un objet comme un type diffrent de son type initial, c'est le
transtypage ou cast. Ce transtypage ne modifie par l'objet mais indique seulement la faon de le voir. Il y a
transtypage implicite de la fille vers la mre: une Voiture est implicitement de type Vhicule.
Attention! Une erreur courante est de penser qu'il y a cast de la mre vers la fille: Une classe mre n'est pas
07/04/14 www.florat.net/tutorial-java/chapitre01.html
www.florat.net/tutorial-java/chapitre01.html 5/7
du type de sa fille! Un Vhicule n'est pas forcement une Voiture. Dans certains cas, nous avons besoin
d'affecter une variable d'un type une autre d'un autre type. De nombreux problmes mtaphysiques s'en
suivent gnralement. La bonne faon de raisonner lorsque l'on veut affecter un type un autre est de
procder comme suit:
On fait A <- B ; A possde un type initial, le type que l'on a donn l'instanciation. Cette affectation est
valide si et seulement si B est du type initial de A. Autrement dit, il faut que B soit de mme type initial que A
ou d'un type driv de celui de A. Exemple:
monVehicule est une instance de type Vhicule;
maVoiture est une instance de type Voiture;
maVoiture <- monVehicule : est-ce une affectation valide?
maVoiture est de type initial Voiture ; monVehicule est de type initial Vhicule et un Vhicule n'est pas
forcement une Voiture donc cette affectation n'est pas valide. En revanche tudions l'affectation :
monVehicule <- maVoiture :
maVehicule est de type initial Vhicule et maVoiture est galement de type Vhicule car Voiture drive de
Vhicule; donc cette affectation est valide !
Polymorphisme paramtrique
Le terme polymorphisme est galement souvent associ par abus de langage au concept de polymorphisme
paramtrique: un objet peut comporter plusieurs mthodes de mme nom et possdant des arguments
diffrents. Ce sont des mthodes polymorphiques. Nous en avons vu un exemple avec les constructeurs.
Voiture.rouler(chemin) la faon dont la voiture roule ne dpend que du chemin.
Voiture.rouler( chemin,meteo) la faon dont la voiture roule dpend du chemin et de la mto.
Voiture.rouler(chemin,meteo,circulation) la faon dont la voiture roule dpend du chemin, de la mto et
de la circulation.
1.3.3- Les deux types de transtypages
Il existe deux types de transtypage:
Le transtypage ascendant qui sert un objet tre vu comme du type de sa mre. Ce transtypage est
fait de faon implicite et n'est ncessaire que dans le cas o la classe courante possde une proprit
ayant le mme nom que sa classe mre et que l'on cherche accder la proprit mre. ( ce
transtypage rarement utilis est illustr au chapitre 06 ).
Le transtypage descendant - le plus courant - qui sert forcer une classe de type mre tre vue
comme un type fille. Ce transtypage n'est valide que si l'objet de type mre tait de type fille son
instanciation.
07/04/14 www.florat.net/tutorial-java/chapitre01.html
www.florat.net/tutorial-java/chapitre01.html 6/7
TD 1 - L'Orient Objet
Exercice 1 - Exercice de vocabulaire
Donnez la signification des termes suivants ( donner des exemples ):
Instance - objet - classe - mthode - comportement - proprit - surcharge - transtypage - hritage - classe
fille - classe mre - type - rfrence - polymorphisme - constructeur.
Exercice 2 - Questions
Quels sont les principales diffrences entre la programmation objet (comme le Java) et procdural
(comme le C) ?
Quels sont les avantages de la programmation OO ?
Quels sont les deux types de services que on rencontrer dans une structure dveloppant OO en
entreprise ?
Quelles sont les diffrences entre une classe et un objet ?
Comment obtenir un objet en vue de l'utiliser ?
Qu'est ce que le polymorphisme ? le polymorphisme paramtrique ?
A quoi sert l'hritage?
Qu'est ce que le transtypage? Le transtypage modifie-t-il l'objet ?
Quelle est la diffrence entre type l'instanciation et type acquis par cast (inn et acquis en quelque
sorte ) ?
A quelle condition peut-on transtyper coup sr un objet d'un type vers un autre type?
Exercice 3- Exercice sur l'hritage et les mthodes
Dans cet exercice, nous noterons (Toto)Titi comme le transtypage de Titi en type Toto.
La classe Voiture drive de la classe Vhicule.
Soit le programme suivant se trouvant dans une classe quelconque: ( les notations ne correspondent pas
07/04/14 www.florat.net/tutorial-java/chapitre01.html
www.florat.net/tutorial-java/chapitre01.html 7/7
celles d'un vritable langage de programmation).
classe Vhicule
mthode rouler(){
...
}
mthode seGarer(){
...
}
classe Voiture drive de Vhicule{
mthode seGarer(){
...
}
mthode klaxonner(){
...
}
mthode rouler(){
...
}
}
Soit une106, une instance de Voiture et monVehicule, une instance de Vhicule.
1- Peux-t-on faire une106.rouler() ? Pourquoi ?
2- Si l'on fait une106.seGarer(), est-ce la mthode de la classe Vhicule ou de la classe Voiture qui est
appele ?
3- Peux-t-on faire monVehicule.klaxonner() ? Pourquoi ?
solutions

Vous aimerez peut-être aussi