« Programmation Python/Programmation orientée objet pour les non-programmeurs » : différence entre les versions

Déplacements pour fusion
(Déplacements pour fusion)
<noinclude>{{Programmation Python}}</noinclude>
 
== Le concept objet ==
* l'objet '''dé''' hérite de l'objet '''cube'''
 
Un objet est une entité que l'on construit par ''instanciation'' à partir d'une ''classe'' (c'est-à-dire en quelque sorte une « catégorie » ou un « type » d'objet). Par exemple, on peut trouver dans la bibliothèque ''Tkinter'', une classe <code>Button()</code> à partir de laquelle on peut créer dans une fenêtre un nombre quelconque de boutons.
<noinclude>[[Catégorie:Programmation orientée objet|Python]]</noinclude>
 
''Nous allons à présent examiner comment vous pouvez vous-mêmes définir de nouvelles classes d'objets''. Il s'agit là d'un sujet relativement ardu, mais vous l'aborderez de manière très progressive, en commençant par définir des classes d'objets très simples, que vous perfectionnerez ensuite. Attendez-vous cependant à rencontrer des objets de plus en plus complexes par après.
== Classes et objets ==
{{cadre code|Déclaration d'une classe|
<source lang="python">
class MaClasse:
# définir ici les méthodes
</source>
}}
 
Comme les objets de la vie courante, les objets informatiques peuvent être très simples ou très compliqués. Ils peuvent être composés de différentes parties, qui soient elles-mêmes des objets, ceux-ci étant faits à leur tour d'autres objets plus simples, etc.
{{cadre code|Appel d'une classe : instanciation qui crée un objet|
<source lang="python">
Classe1 = MaClasse()
</source>
}}
 
== Constructeur,Utilité destructeurdes classes ==
{{cadre code|Classe avec constructeur|
<source lang="python">
class Complexe:
def __init__(self, r, i):
self.reel = r
self.imaginaire = i
 
Les classes sont les principaux outils de la programmation orientée objet ou POO (''Object Oriented Programming ou OOP'' en anglais). Ce type de programmation permet de structurer les logiciels complexes en les organisant comme des ensembles d'objets qui interagissent, entre eux et avec le monde extérieur.
Complexe1 = Complexe(1, 2)
print Complexe1.reel # Affiche 1
</source>
}}
 
Le premier bénéfice de cette approche de la programmation consiste dans le fait que les différents objets utilisés peuvent être construits indépendamment les uns des autres (par exemple par des programmeurs différents) sans qu'il n'y ait de risque d'interférence. Ce résultat est obtenu grâce au concept d'''encapsulation'' : la fonctionnalité interne de l'objet et les variables qu'il utilise pour effectuer son travail, sont en quelque sorte « enfermés » dans l'objet. Les autres objets et le monde extérieur ne peuvent y avoir accès qu'à travers des procédures bien définies.
== Encapsulation des données ==
== Héritage ==
{{cadre code|Classe héritant d'une autre|
<source lang="python">
class Triangle(FormeGeometrique):
def __init__(self):
# Création d'un triangle
</source>
}}
 
En particulier, l'utilisation de classes dans vos programmes vous permettra - entre autres choses - ''d'éviter au maximum l'emploi de variables globales''. Vous devez savoir en effet que l'utilisation de variables globales comporte des risques, surtout dans les programmes volumineux, parce qu'il est toujours possible que de telles variables soient modifiées ou même redéfinies n'importe où dans le corps du programme (et ce risque s'aggrave particulièrement si plusieurs programmeurs différents travaillent sur un même logiciel).
== Polymorphisme ==
{{...}}
 
Un second bénéfice résultant de l'utilisation des classes est la possibilité qu'elles offrent de ''construire de nouveaux objets à partir d'objets préexistants'', et donc de réutiliser des pans entiers d'une programmation déjà écrite (sans toucher à celle-ci !), pour en tirer une fonctionnalité nouvelle. Cela est rendu possible grâce aux concepts de ''dérivation'' et de ''polymorphisme''.
<noinclude>
 
----
* La dérivation est le mécanisme qui permet de construire une classe « enfant » au départ d'une classe « parente ». L'enfant ainsi obtenu ''hérite'' toutes les propriétés et toute la fonctionnalité de son ancêtre, auxquelles on peut ajouter ce que l'on veut.
{{lienDePage|Programmation Python|Regex|Bibliothèques pour Python}}
 
</noinclude>
* Le polymorphisme permet d'attribuer des comportements différents à des objets dérivant les uns des autres, ou au même objet ou en fonction d'un certain contexte.
La programmation orientée objet est optionnelle sous Python. Vous pouvez donc mener à bien de nombreux projets sans l'utiliser, avec des outils plus simples tels que les fonctions. Sachez cependant que les classes constituent des outils pratiques et puissants. Une bonne compréhension des classes vous aidera notamment à maîtriser le domaine des interfaces graphiques (''Tkinter'', ''wxPython''), et vous préparera efficacement à aborder d'autres langages modernes tels que ''C++'' ou ''Java''.
 
<center>''Objet = [ attributs + méthodes ]''</center>
 
Cette façon d'associer dans une même « capsule » les propriétés d'un objet et les fonctions qui permettent d'agir sur elles, correspond chez les concepteurs de programmes à une volonté de construire des entités informatiques dont le comportement se rapproche du comportement des objets du monde réel qui nous entoure.
 
Considérons par exemple un ''widget'' « bouton ». Il nous paraît raisonnable de souhaiter que l'objet informatique que nous appelons ainsi ait un comportement qui ressemble à celui d'un bouton d'appareil quelconque dans le monde réel. Or la fonctionnalité d'un bouton réel (sa capacité de fermer ou d'ouvrir un circuit électrique) est bien intégrée dans l'objet lui-même (au même titre que d'autres propriétés telles que sa taille, sa couleur, etc.) De la même manière, nous souhaiterons que les différentes caractéristiques de notre bouton logiciel (sa taille, son emplacement, sa couleur, le texte qu'il supporte), mais aussi la définition de ce qui se passe lorsque l'on effectue différentes actions de la souris sur ce bouton, soient regroupés dans une entité bien précise à l'intérieur du programme, de manière telle qu'il n'y ait pas de confusion avec un autre bouton ou d'autres entités.
 
<noinclude>[[Catégorie:Programmation orientée objet|Python]]</noinclude>