Vous êtes sur la page 1sur 15

Cours programmation - Marc Jachym Licence professionnelle Mtrologie dimensionnelle et qualit IUT de St enis!

Uni"ersit #aris $%

Cours de Programmation avec le langage Python


Niveau dbutant en programmation

Table des matires


#artie III &otions a"ances'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''( III'$ )etour sur les collections'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''( III'$'$ Les tuples *ou appels aussi n-uplets+''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''% III'$'% Les oprateurs et fonctions applica,les au- squences''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''. III'$'/' Les oprateurs et fonctions applica,les au- dictionnaires'''''''''''''''''''''''''''''''''''''''''''''''''''''''0 III'( Tra"ail sur les fichiers''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''0 III'('$ Lire 1 2crire le contenu des fichiers''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''3 III'('( Les oprations offertes par l4o,5et file''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''6 6 III'% Les o,5ets en #ython''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$7 III'%'$ La notion d8o,5ets''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$7 III'%'( La programmation oriente o,5ets''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$$ III'%'('$ Cration d8un nou"el o,5et 9 dfinir une classe''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$$ III'('('( Comment dcouper un programme en classe de mani:re adquate ;'''''''''''''''''''''''''''''''''$. III'('('% #rogrammation oriente o,5et! classes dri"es! hritage'''''''''''''''''''''''''''''''''''''''''''''''''''$. III'('('/ &otion de polymorphisme'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$6

Partie III Notions avances

III.1 Retour sur les collections


&ous a"ons "u dans la partie $ deu- types de < collections = ou < squences = 9 les chaines de caractres et les listes' ans cette partie nous allons "oir deu- autres types de squences offerts par le langage #ython 9 les tuples et les dictionnaires. &ous re"iendrons ensuite sur les oprateurs et fonctions associs > ces types en prsentant ce qu8ils ont en commun et ce qui est particulier > chacun des types' ?oici d5> trois choses que tous les types squences ont en commun 9 1/ @n peut accder > leurs lments par l8utilisation d8un indice plac entre crochets! de la mani:re sui"ante 9 i A Bune certaine "aleurC elem A maCollectionDiE / Ils ren"oient tous leur nom,re d8lments grFce > la fonction len*+ 9 n,Glem A len*maCollection+ !/ La structure "or permet de parcourir tous les lments qu8ils contiennent 9 "or elem in maCollection # H' utiliser l8lment courant elem '''
DSequence types 9 http911docs'python'org1('31li,rary1stdtypes'htmlIsequence-types-str-unicode-list-tuple-,ytearray-,uffer--rangeE

III.1.1 $es tuples %ou appels aussi n&uplets' Les tuples sont des ensem,les figs de "aleurs' Les "aleurs sont spares par des "irgules' @n peut mlanger les types pour les lments constituant un tuple' G- 9 t$ A *$! $(%! 3!6+ I un tuple homog:ne t( A *$!(!%! Ja,J! *$!(!%++ I un tuple htrog:ne! ou im,riqu
DTuples and sequences 9 http911docs'python'org1('31tutorial1datastructures'htmlItuples-and-sequencesE

III.1. $es dictionnaires Les dictionnaires sont un type de donnes dynamiques tr:s pratique offert par le langage #ython' #ar donnes < dynamique =! on entend un type collection dont le nom,re d8lments n8est pas fig > l8a"ance et dans lequel ont peut > tout moment a5outer de nou"elles "aleurs' C8est l8interprteur #ython qui s8occupe de rser"er *et au final de li,rer+ la mmoire ncessaire au stocKage' Ce point est galement "rai a"ec les listes' L la diffrence des listes! dont les "aleurs sont en quelque sorte JordonnesJ grFce > leur inde- numrique! les valeurs des dictionnaires sont associes ( des cls qui sont en gnral des entiers ou des chaines de caract:res' Un dictionnaire s8initialise grFce > une notation utilisant des accolades' Initialisation d8un dictionnaire "ide 9 Mon ict A MN Initialisation d8un dictionnaire a"ec un certain nom,re de couples < cl "aleur = Une#ersonne A M J#rnomJ 9 JLucJ! J&omJ 9 JMartinJ! JLgeJ 9 J((J! J?illeJ 9 J#arisJN L8acc:s au- lments se fait grFce > la notation ( crochets) comme pour les listes! mais avec la cl de l*lment > la place d8un indice' le&om A Une#ersonneDJ&omJE I acc:s en lecture > un lement Une#ersonneDJ?illeJE A JMarseilleJ I acc:s en criture > l8lment Une#ersonneDJLgeJE A (% I acc:s en criture > l8lment +i on utilise une cl ,ui n*e-iste pas encore pour crire dans un dictionnaire) alors l*lment cl # valeur est a.out. Une#ersonneDCode#ostalE A 3.777 I a5out d8un nou"el lment dans le dictionnaire print Une#ersonne I affiche dans la console le contenu du dictionnaire Remar,ue # ce dernier point est tr:s surprenant par rapport au- langages de programmation plus anciens et plus proches de la Jstructure de la machineJ comme le langage C' Il n8est pas anodin d8crire en mmoire > une adresse qui n8a pas t prala,lement rser"e O Gn C ce serait une erreur gra"e qui conduirait > un comportement indtermin et tr:s rapidement > un arrPt du programme'
%

Il faut ,ien comprendre qu8a"ec les langages interprts modernes comme #hp ou #ython! il y a comme une Jmachine "irtuelleJ entre les instructions du programme et le microprocesseur' Cette machine "irtuelle effectue de nom,reuses actions pour prendre en charge les ordres du programme! comme rser"er de la mmoire et mettre > 5our en mmoire les o,5ets "olus manipuls par le programmeur! par e-emple les listes et les dictionnaires'
D octionnaries 9 http911docs'python'org1('31tutorial1datastructures'htmlIdictionariesE

III.1.! $es oprateurs et "onctions applicables au- s,uences &ous connaissons trois types de squences! deu- fi-es! les chaines de caract:res et les tuples et le troisi:me modifia,le! les listes' ?oici les oprateurs que ces % types ont en commun 9
le test d*appartenance 9 Q in S! Q not in S par e-emple 9 8n8 in 8lune8 ren"oie la "aleur True la boucle "or for Q in S 9 la concatnation *mise ,out > ,out+ SRS SDiE l*accs par indice

l*accs par plage d*indices SDi95E SD95E SDi9E oprateur longueur len*S+ oprateurs min et mamin*S+ ma-*S+

III.1./. $es oprateurs et "onctions applicables au- dictionnaires


len%d' retourne le nom,re d4lment du dictionnaire d dDcleE

acc:s > l4lment repr par cle a5out d4une entre au dictionnaire

dDcleE A "aleur del dDcleE cle in d d'items*+

enl:"e l4lment du dictionnaire ren"oie "rai si une cl cle est dfinie dans le dictionnaire d retourne le contenu du dictionnaire sous la forme d4une liste de paires *cle! "aleur+ retourne l4ensem,le des cls du dictionnaire dans une liste retourne l4ensem,le des "aleurs du dictionnaire dans une liste

d'Keys*+ d'"alues*+

01ictionnaires ou *2apping types* # http#//docs.python.org/ .3/library/stdtypes.html4mapping&types&dict5

III. 6ravail sur les "ichiers


Un fichier est une suite de donnes enregistres! sous un certain nom! sur le disque dur d8un ordinateur ou sur un support amo"i,le' Lu ni"eau le plus lmentaire toute donne est reprsente par un certain nom,re d8octets' Les supports contiennent les fichiers dans des structures appels < syst:mes de fichiers =! elles-mPme contenues dans des partitions' Il y a diffrents types de syst:mes de fichiers! par e-emple SLT *$0 ou %(+! &TSS! GQT%! H Le syst:me de fichier permet de grer des rpertoires et des fichiers reprs par des noms o,issant > certaines r:gles 9 nom,re de caract:res ma-imal! caract:res autoriss et interdits' e plus le syst:me de fichier garde un certain nom,re de d8information sur chaque fichier et rpertoire 9 le propritaire! les droits du propritaire et des autres utilisateurs! les dates de cration! de derni:re modification! de derni:re acc:s en lecture! etc' Il y a deu- ni"eau de gestion des fichiers dans un programme' Gt donc deucatgories de fonctions correspondantes 9

1/ La gestion des syst:mes de fichiers 9 trou"er des rpertoires et des fichiers et grer les fichiers et rpertoires dans leur ensem,le 9 renommer! effacer! dplacer et o,tenir les informations concernant les utilisateurs et les dates' / La gestion du contenu d8un fichier donn 9 crer un fichier! ou"rir un fichier e-istant! lire les donnes dans le fichier! crire dans le fichier'

III. .1 $ire / 7crire le contenu des "ichiers Tout commence par l8utilisation d8une fonction de la ,i,lioth:que standard *Tuilt-in+ 9 open*+ dont "oici la signature ha,ituelle 9
open%name) mode'

name est une chaine de caract:res indiquant le nom du fichier > ou"rir' Ce nom peut contenir l8indication du chemin de rpertoires > sui"re pour trou"er le fichier' La rfrence *le point de dpart+ est le rpertoire courant de tra"ail' Gn cas d8erreur! en particulier si le fichier indiqu n8est pas trou"! une erreur se produit' Gn langage #ython! les erreurs sont gres gr8ce ( un mcanisme appel e-ceptions' Ce mcanisme offre au programmeur la possi,ilit de pr"oir des traitements spciau- > effectuer quand une erreur particuli:re! pr"ue > l8a"ance! se produit' #ar e-emple! on pourrait imaginer! si un fichier > ou"rir n8a pas t trou"! de demander > l8utilisateur de saisir un autre nom pour le fichier' G-emple 9 CCC open*JrepUmonfichier't-tJ! JrJ+ Trace,acK *most recent call last+9 Sile JBpyshellI7CJ! line $! in BmoduleC open*Jmonfichier't-tJ! JrJ+ I@Grror9 DGrrno (E &o such file or directory9 8repUmonfichier't-t8 CCC Ici la fonction est appele sur un chemin *rpertoire R nom de fichier+ qui n8est pas trou"' L8interprteur #ython dclenche une e-ception I@Grror *erreur d8Gntre1Sortie+' Cette e-ception n8tant pas gre par le programme! le programme s8arrPte et affiche le message associ > l8e-ception' Le second argument de la fonction open est mode' C8est une chaine de caract:re indiquant dans quel mode on souhaite ou"rir le fichier' Les modes possi,les sont 9 lecture! criture d8un nou"eau fichier! criture a"ec a5out > la fin d8un fichier e-istant!
0

lecture et crite' e plus un fichier peut Ptre ou"ert en mode te-te ou en mode binaire' Vue sont les fichiers te-te et ,inaire ; Un "ichier te-te est "u comme un ensem,le de lignes termines par un sparateur' Le sparateur n4est pas le mPme sur les diffrentes plate-formes *A syst:mes d4e-ploitations+' Sous Uni-1Linu-! les fins de lignes des fichiers te-tes sont indiques par le caract:re <neW line=! not Un *de "aleur LSCII $7+' Sous Macintosh! la fin de ligne est indique par <carriage return=! not Ur *de "aleur LSCII $%+' Sous XindoWs! ce sont les deu- caract:res qui sont utiliss! le marqueur de fin de ligne tant UrUn' *"oir en anne-e la description des ta,les LSCII+ #ython! qui sait sur quelle plate-forme il est lanc! normalise les fins de ligne des fichiers te-te par la notation unique Un ! quel que soit le syst:me' Les lignes sont lues dans les fichiers te-te par #ython et sont considres comme des chaines de caract:res' ans le cas des "ichiers binaires! les octets contenus dans le fichier sont lus tels quels! sans une interprtation de la part de #ython' Ce mode de tra"ail est adapt pour les fichiers de donnes non te-tuelles! comme les fichiers images par e-emple'
D)eading and Writing files 9 http911docs'python'org1('31tutorial1inputoutput'htmlIreading-and-Writing-filesE

III. .

$es oprations o""ertes par l9ob.et file

Gn cas de succ:s! la fonction open ren"oie un o,5et de type fichier ?oici quelques mthodes des o,5ets de type file # file'read*n,re+ siYe est une "aleur enti:re' la mthode read lit *au plus+ nbre octets dans le fichier et retourne ces octets sous la forme d8une chaine de caract:res' S4il reste moins de nbre caract:res > lire 5usqu4> la fin du fichier! tous ces caract:res sont retourns' Si nbre est nul ou ngatif! tous des caract:res 5usqu4> la fin du fichier sont retourns' @n "oit donc qu4il est possi,le de lire en seule une fois tout le contenu d4un fichier! contenu qui sera plac dans une chaine de caract:res que #ython se charge de placer en mmoire' C4est l> une spcificit des langages dynamiques comme #ython'
3

file'Write*str+ file'seeK*pos+ file'tell*+

crit le contenu de la chaine str dans le fichier' Cette fonction ne retourne rien' place le curseur *A la position courante+ dans le fichier > la position pos ren"oie la position courante de lecture1criture dans le fichier' Cette fonction! ainsi que la prcdente! est utile quand on tra"aille sur des fichiers structurs oZ l4on parcourt des enregistrements de taille fi-e'

file'readline*n,re+ lit une ligne compl:te ou au ma-imum nbre caract:res si une fin de ligne n4esty pas rencontre' )en"oie une chaine de caract:res' file'readlines*+ lit depuis la position courante dans le fichier 5usqu4> la fin du fichier' )etourne! sous la forme d4une liste de chaines de caract:res! l4ensem,le des lignes lues dans le fichier' Serme le fichier' Cette opration est importante sans quoi les donnes pourraient ne pas Ptre effecti"ement crite dans le fichier'

file'close*+

DSiles o,5ects 9 http911docs'python'org1('31li,rary1stdtypes'htmlIfile-o,5ectsE

III.! $es ob.ets en Python


III.!.1 $a notion d*ob.ets #ython est un langage ( ob.ets ou langage orient ob.ets' C8est > dire qu8en plus de "aria,les simples comme des entiers! des flottants! des caract:res et des "aria,les composes comme les ta,leau- et les structures du langage C! #ython offre la possi,ilit de manipuler des "aria,les de type ,eaucoup plus comple-e' Gn particulier! on appelle langage > o,5ets! un langage qui permet d8associer) au sein m:me des variables) les donnes avec leurs traitements' &ous a"ons d5> rencontr plusieurs types d8o,5ets 9 1/ les chaines de caractres' Ce ne sont pas de simples ta,leau- < passifs = de caract:res' Lu contraire! les "aria,les de type < chaine de caract:res = contiennent tout un ensem,le de fonctions de manipulation > s8appliquer sur elles-mPmes' G-emples 9
[

str'capitaliYe*+ str''isalnum*+ str'count*su,D! startD! endEE+ str'find*su,D! startD! endEE+ / $es s,uences et dictionnaires !/ $es "ichiers La cration d8un fichier se fait > l8aide de la fonction < traditionnelle = open, mais celle-ci! en cas de succ:s! renvoie un ob.et de type file qui contient toutes sortes de fonctions de manipulation du fichier qui "ient d8Ptre ou"ert' ans tous ces e-emples! on "oit qu8un o,5et est une "aria,le qui contient des donnes et des traitements sur ces donnes' Ces traitements sont des fonctions qui sont in"oques grFce > la notation < point =' #ar e-emple 9 taille A $77 monfichier A open *Jfichier't-t =! JrJ+ I Cration d8un o,5et file ,uffer A monfichier'read*taille+ I lecture dans l8ob.et file grFce > sa mthode read H

III.!. $a programmation oriente ob.ets L4utilisation d8o,5ets en programmation "a au del> de l8utilisation des lments et ,i,lioth:ques d5> prPts et offerts par le langage' Le programmeur peut lui-mPme crer et utiliser ses propres o,5ets' L8criture d8un programme sous la forme d8interactions entre des o,5ets permet de modliser de mani:re plus intuiti"e le tra"ail que doit raliser un logiciel' Lu lieu d8a"oir de grands paquets d8instructions en ,locs monolithiques! nous pou"ons a"oir des o,5ets plus intuitifs qui offrent leurs ser"ices sous la forme de mthodes' Linsi la connaissance d8un o,5et disponi,le et la description de ses mthodes *ce qu8on appelle l*inter"ace de l*ob.et+ permet de l8utiliser sans a"oir ,esoin d8aller regarder dans son code! c8est > dire sans ,esoin d8aller "oir comment ses mthodes sont crites *ce que l8on appelle la dfinition ou l*implmentation de l*ob.et+'

III.!. .1 Cration d*un nouvel ob.et # d"inir une classe Une classe est la dfinition d8un nou"eau type d8o,5et' Gn #ython on utilise le mot cl class La structure gnrale de dfinition d8une classe est la sui"ante 9 class maClasse # de" ;;init;;% sel") arg$! arg(! H' # H code du constructeur de la classe' '' de" fonct$* sel") args! H+ # H code de la mthode $ H' de" fonction( * sel") arg(! H+ # H code de la fonction ( H La "aria,le sel" reprsente l8instance de la classe *l8o,5et courant reprsent par cette classe lors de l8e-cution du programme+ > l8intrieur de la dfinition de celle-ci' C8est par cette "aria,le self que l8on acc:de au- donnes membres et "onctions membres *A mthodes+ de la classe dans sa dfinition' <-emple # @n "a crer une classe pour dcrire un o,5et gomtrique en deu- dimensions' Tout d8a,ord "oici une classe permettant de dcrire un point de l8cran et de lui affecter une couleur' class #oint 9 I constrcuteur' @n enregistre les coordonnes dans des "aria,les de classe def \\init\\*int -! int y+ 9 self'- A self'y A y self'color A MJredJ 9 (..! JgreenJ 9 (..! J,lueJ 9 (.. N I on utilise un dictionnaire I par dfaut le point est noir I mthode pour afficher le point en couleur en donnant ses trois composantes I couleurs rouge! "ert! ,leu
$7

def setColor *self! red! green! ,lue+ 9 I d8a,ord il faudrait tester que les trois arguments sont ,ien des "aleurs I enti:res comprises entre 7 et (.. self'colorDJredJE A red self'colorDJgreenJE A green self'colorDJ,lueJE A ,lue Maintenant "oici la dfinition de la classe Sorme' Cette classe est ,ase sur un point de rfrence ser"ant > positionner la forme quelque part dans le plan de l8cran' La classe Sorme est une classe gnrique ou classe < de ,ase =! ne reprsentant en elle-mPme aucune forme "rita,le mais ser"ant de point de dpart > la cration de formes relles *rectangle! cercle! etc+' class Sorme 9 I constructeur def \\init\\*self! point)ef+ 9 self'point)ef A point)ef def translation*self! offsetQ! offset]+ 9 self'point)ef'- RA offsetQ self'point)ef'y RA offset] def rotation*self! int angle+ 9 pass I ne fait rien sur cette classe de ,ase def dessine*self!+ 9 pass
^L first looK at classes9 http911docs'python'org1('31tutorial1classes'htmlIa-first-looK-at-classesE

III. . . Comment dcouper un programme en classe de manire ad,uate = Il n8y a pas de rponse simple et dfiniti"e > cette question! ni de mthode prdtermine' La programmation o,5et "ise > faciliter le tra"ail de cration logicielle en le structurant d:s les premi:res tapes de la conception' @n peut imaginer des o,5ets qui modlisent d8asseY pr:s un domaine de la "ie courante que l8on "eut grer > l8aide d8un logiciel' #ar e-emple on peut imaginer des o,5ets clients! produits! facture! etc'''
$$

La programmation d8interfaces graphiques est un autre domaine qui se prPte ,ien > la dcoupe en o,5ets' @n peut imaginer des o,5ets fenPtres ainsi que des Widgets de diffrents types *,outon! cases > cocher! Yone d8affichage de te-te! Yone de saisie! etc'''+' Le fait d8imaginer des o,5ets! indpendamment de sa"oir quel code informatique les mettra en _u"re! permet de clarifier la conception d:s le dialogue a"ec les futurs utilisateurs' Il est possi,le aussi d8imaginer des o,5ets a,straits gnriques que l8on pourra spcialiser par la suite' #ar e-emple 5e peu- imaginer un o,5et fenPtre gnral *lors de la conception d8une interface graphique+' Une fenPtre a un titre! un style *par e-emple paisseur de ,ordure+! une taille *largeur R hauteur+' Les lments de la fenPtre gnrique peu"ent Ptre mis > 5our grFce au- mthodes de l8o,5et fenPtre comme setXidth*"aleur+! set`eight*"aleur+! setTitle*titre+! resiYe *neWXidth! neW`eight+! etc''' L partir de l>! on peut imaginer des fenPtres plus spcialises' #ar e-emple une fenPtre affichant un message a"ec un ,outon @K pour "alidation! une autre affichant une question et deu- ,outons < @ui = et < &on = pour saisir le choi- de l8utilisateur! une autre encore permettant la saisie d8informations dans des Yones de te-te *,oite de dialogue+ a"ec un ,outon < @K = pour "alider' Il est facile d8imaginer > partir de l> toute une hirarchie d8o,5ets'

III. . .! Programmation oriente ob.et) classes drives) hritage. Ce cours est un cours d8initiation! on n8tudiera pas tous les raffinements possi,les de la programmation oriente o,5et mais il nous faut au moins signaler l4e-istence des classes dri"es' &ous a"ons parl dans l8e-emple prcdent sur les interfaces graphiques! d8une classe de fenPtre gnrique et de classes de fenPtres plus spcialises' @r une fenPtre spcialise et a"ant tout une fenPtre! a"ec un titre! un style! une largeur! une hauteur' onc la "en:tre spcialise sera construite ( partir de la "en:tre gnri,ue' Si 58ai dfini des attri,uts comme Width et height et une mthode comme resiYe pour la fenPtre gnrique! 5e dois pou"oir rcuprer ces attri,uts et cette mthode dans ma fenPtre particuli:re' La fenPtre spcialise sera drive de la fenPtre gnrique'

$(

Gn langage #ython! si Base est le nom d8une classe que l8on "eut utiliser comme point de dpart pour l8criture d8une nou"elle classe plus spcialise! "oici la synta-e > respecter 9

class maClasse*Tase+ 9 \\init\\*self! H+ 9 H' dfinition du constructeur'''''' uneMethode*self! H+ 9 H'dfinition de la mthode'''' une LutreMethode*self! H'+ 9 C8est l8opration d8hritage 9 La nou"elle classe maClasse hrite de tous les attri,uts *c8est > dire toutes les "aria,les mem,res+ et de toutes les fonctions mem,res dfinis dans la classe de ,ase' La nou"elle classe peut ensuite dfinir de nouveau- attributs et de nouvelles mthodes *A fonctions mem,re+ qui "iendront s8a5outer au- attri,uts *A"aria,les+ et mthodes hrits' e plus! une fonction mem,re d5> prsente dans la classe de ,ase peut Ptre rcrite dans la classe drive pour adapter son comportement au- ,esoins de la nou"elle classe' <-emple # ans l8e-emple "u plus haut sur la modlisation de formes gomtriques > deudimensions! nous a"ons cr la classe Forme. Mais celle-ci est ,ien trop limite pour Ptre directement utile' Glle fournit une ,ase de tra"ail pour dclarer et dfinir des formes gomtriques relles' La classe Sorme n8est qu8une classe de ,ase > partir de laquelle nous allons crer de nou"elles classes reprsentant des formes gomtriques' C8est ici que nous allons utiliser l8hritage! par e-emple pour modliser un rectangle' #our simplifier on considrera que les cots du rectangle doi"ent Ptre parall:les au,ords de l8cran' class )ectangle*Sorme+ 9
$%

def \\init\\*self! topLeft! ,ottom)ight+ 9 self'poin)ef A topLeft self',ottom)ight A ,ottom)ight def translation*self! offsetQ! offset]+ 9 self'point)ef'- RA offsetQ self'point)ef'y RA offset] self',ottom)ight'- RA offsetQ self',ottom)ight'y RA offset] def rotation*self! angle+ 9 H' programme pour la rotation du rectangle ''' def dessine*self! + 9 H programme pour l8affichage du rectangle H Si l8on compare les deu- premi:res instructions de la mthode translation de la classe dri"e Rectangle > celles de la classe de ,ase Forme! on constate qu8elles sont identiques' Il est possi,le! dans les mthodes de la classe dri"e! d8utiliser les mthodes de la classe de ,ase' #our cela il faut prfi-er la mthode a"ec le nom de la classe' Ici on "eut rutiliser! dans la mthode translation de la classe dri"e! la mthode translation de la classe de ,ase' I ---------- dans la dfinition de la classe )ectangle ---------------def translation*self! offsetQ! offset]+ 9 Sorme'translation*self! offsetQ! offset]+ self',ottom)ight'- RA offsetQ self',ottom)ight'y RA offset] Cela permet d8effectuer la translation du point de rfrence du rectangle grFce > la fonction dfinie dans la classe de ,ase'
DInheritance9 http911docs'python'org1('31tutorial1classes'htmlIinheritanceE

III. . ./ Notion de polymorphisme Le terme polymorphisme en programmation oriente o,5et correspond > la possi,ilit d8crire un algorithme manipulant des o,5ets < gnriques =! en se ,asant sur une dfinition ,asique de ces o,5ets et de leurs mthodes! alors que! lors de l8e-cution de
$/

l8algorithme! ces o,5ets pourront Ptre plus "olus que le mod:le de ,ase utilis pour crire l8algorithme' #our mieu- comprendre! reprenons l8e-emple prcdent des classes de formes gomtriques' &ous a"ons une classe de ,ase Forme > partir de laquelle nous pou"ons dri"er de nou"elles classes comme Rectangle! Triangle! Cercle' Chacune de ces derni:res classes redfinira les mthodes translation! rotation! dessine pour les adapter > leurs particularits' Imaginons maintenant que 58cri"e un algorithme pour effectuer la translation d8un ensem,le de formes et pour les afficher' L8ensem,le de formes sera reprsent par une liste' -AH y A ''' lesSormes A DE lesSormes A readSormes*+ I lecture des formes! par e-emple dans un fichier "or f in lesSormes # f'translation*-!y+ f'dessine*+ L8algorithme peut s8appliquer > toutes les formes issues de la classe de ,ase Forme, chaque forme fournissant ses propres "ersions des mthodes translation et dessine' C8est cela qu8on appelle polymorphisme' Cela paraat asseY "ident a"ec un langage dynamique comme #ython oZ les "aria,les ne sont pas dclares a"ec un type > priori! mais c8est moins intuitif a"ec les langages > typage strict! comme le C! oZ le type des "aria,les est "rifi lors de la compilation du programme' L>! il est moins intuitif d8imaginer que l8algorithme dfini > partir du type de ,ase d8une classe! s8appliquera en fait aussi > des types dri"s'

$.

Vous aimerez peut-être aussi