Cédric Baubeau/Maxime Charpignon /Franck Duffaud/Gilles Dalles TD NSI - Algorit
Cédric Baubeau/Maxime Charpignon /Franck Duffaud/Gilles Dalles TD NSI - Algorithmique - Programmation Objet TD NSI - Algorithmique Programmation Objet Première partie Cours - Programmation orientée objet 1 Introduction : Programmation procédurale, programmation orientée objet 1.1 La notion d’objet et de classe — Jusqu’ici, les programmes ont été réalisés en programmation procédurales, c’est à dire que chaque programme a été décomposé en plusieurs fonctions réalisant des tâches simples. Cependant lorsque plusieurs programmeurs travaillent simultanément sur un projet, il est nécessaire de program- mer autrement afin d’éviter les conflits entre les fonctions. — Un objet se caractérise par 3 choses : — son état — son comportement — son identité L’état est défini par les valeurs des attributs de l’objet à un instant t. Par exemple, pour un téléphone, certains attributs sont variables dans le temps comme allumé ou éteint, d’autres sont invariants comme le modèle de téléphone. Le comportement est défini par les méthodes de l’objet : en résumé, les méthodes définissent à quoi sert l’objet et/ou permettent de modifier son état. L’identité est définie à la déclaration de l’objet (instanciation) par le nom choisi, tout simplement. — En programmation orientée objet, on fabrique de nouveau types de données correspondant aux besoin du pro- gramme. On réfléchit alors aux caractéristiques des objets qui seront de ce type et aux actions possibles à partir de ces objets. Ces caractéristiques et ces actions sont regroupées dans un code spécifique associé au type de données, appelé classe. 1.2 Classe : un premier exemple avec le type list Le type de données list est une classe . # Dans la console PYTHON >>> l=[1,5,2] >>> type(l) <class 'list'> Une action possible sur les objets de type liste est le tri de celle-ci avec la méthode nommée sort(). On parle alors de méthode et la syntaxe est : nom_objet . nom_méthode() comme avec la méthode de tri liste.sort() # Dans la console PYTHON >>> l=[1,5,2] >>> l.sort() >>>l [1,2,5] www.math93.com - Cédric Baubeau/Maxime Charpignon/Franck Duffaud/Gilles Dalles 1/19 Cédric Baubeau/Maxime Charpignon /Franck Duffaud/Gilles Dalles TD NSI - Algorithmique - Programmation Objet 1.3 Classe : vocabulaire — Le type de données avec ses caractéristiques et ses actions possibles s’appelle classe. — Les caractéristiques (ou variables) de la classe s’appellent les attributs. — Les actions possibles à effectuer avec la classe s’appellent les méthodes. — La classe définit donc les attributs et les actions possibles sur ces attributs, les méthodes. — Un objet du type de la classe s’appelle une instance de la classe et la création d’un objet d’une classe s’appelle une instanciation de cette classe. — Lorsqu’on définit les attributs d’un objet de la classe, on parle d’instanciation. — On dit que les attributs et les méthodes sont encapsulés dans la classe. Classe On peut afficher les méthodes associées à un objet avec la fonction dir(objet) : # Dans la console PYTHON >>> l=[1,5,2] >>> dir(l) ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__','__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__','__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy','count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] On retrouve les méthodes connues concernant les listes : sort(), count(), append(), pop() ... Les autres méthodes encadrées par les underscores sont spéciales. 1.4 Un peu d’histoire La programmation orientée objet, qui fait ses débuts dans les années 1960 avec les réalisations dans le langages Lisp, a été formellement définie avec les langages Simula (vers 1970) puis SmallTalk. Puis elle s’est développée dans les langages anciens comme le Fortran, le Cobol et est même incontournable dans des langages récents comme Java. www.math93.com - Cédric Baubeau/Maxime Charpignon/Franck Duffaud/Gilles Dalles 2/19 Cédric Baubeau/Maxime Charpignon /Franck Duffaud/Gilles Dalles TD NSI - Algorithmique - Programmation Objet 2 Création d’une classe : pas à pas 2.1 Un constructeur — On va créer une classe simple, la classe Carte correspondant à une carte d’un jeu de 32 ou 52 cartes. Par convention, une classe s’écrit toujours avec une majuscule. # Dans l'éditeur PYTHON class Carte: "Une carte d'un jeu de 32 ou 52 cartes" — Une méthode constructeur commence toujours par : def __init__(self,...): Le paramètre particulier self est expliqué en fin de chapitre 2.1. Avec deux tirets bas ou underscores (AltGr 8) de part et d’autre de init. — On va définir les attributs de la cartes qui seront : — sa valeur 2,3··· ,10,11 pour Valet,12 pour Dame,13 pour Roi et14 pour As; — et sa couleur (Carreau, Coeur, Trèfle, Pique). # Dans l'éditeur PYTHON class Carte: # Définition de la classe "Une carte d'un jeu de 32 ou 52 cartes" def __init__(self,valeur,couleur): # méthode 1 : constructeur self.valeur=valeur # 1er attribut valeur {de 2 à 14 pour as} self.couleur=couleur # 2e attribut {'pique','carreau','coeur','trefle'} — Création d’une instance de la classe Carte : # Dans la console PYTHON >>>x=Carte(5,'carreau') Lorsque l’on créé un objet, son constructeur est appelé implicitement et l’ordinateur alloue de la mémoire pour l’objet et ses attributs. On peut d’ailleurs obtenir l’adresse mémoire de notre objet créé x. # Dans la console PYTHON >>>x=Carte(5,'carreau') >>> x <__main__.Carte object at 0x7f7f57d4ae90> — Par ailleurs, l’obtention de la valeur d’un attribut d’un objet se fait par l’utilisation de l’opérateur d’accessibilité point : nom_objet.nom_attribut Cela peut se lire ainsi de droite à gauche nom_attribut appartenant à l’instance nom_objet # Dans la console PYTHON >>>x=Carte(5,'carreau') >>>x.valeur 5 >>>x.couleur 'carreau' www.math93.com - Cédric Baubeau/Maxime Charpignon/Franck Duffaud/Gilles Dalles 3/19 Cédric Baubeau/Maxime Charpignon /Franck Duffaud/Gilles Dalles TD NSI - Algorithmique - Programmation Objet — La variable self. La variable self , dans les méthodes d’un objet, désigne l’objet auquel s’appliquera la méthode. Elle représente l’objet dans la méthode en attendant qu’il soit créé. self # Dans l'éditeur PYTHON class Carte: # Définition de la classe "Une carte d'un jeu de 32 ou 52 cartes" def __init__(self,valeur,couleur): # constructeur self.valeur=valeur # 1er attribut self.couleur=couleur # 2e attribut # Dans la console PYTHON >>>x=Carte(5,'carreau') >>>y=Carte(14,'pique') Dans cet exemple, la méthode __init__ (constructeur) est appelée implicitement. "self" fait référence à l’objet x dans la première ligne et à l’objet y dans la seconde. www.math93.com - Cédric Baubeau/Maxime Charpignon/Franck Duffaud/Gilles Dalles 4/19 Cédric Baubeau/Maxime Charpignon /Franck Duffaud/Gilles Dalles TD NSI - Algorithmique - Programmation Objet 2.2 Encapsulation : les accesseurs ou "getters" On ne va généralement pas utiliser la méthode précédente nom_objet.nom_attribut permettant d’accéder aux valeurs des attributs car on ne veut pas forcement que l’utilisateur ait accès à la représentation interne des classes. Pour utiliser ou modifier les attributs, on utilisera de préférence des méthodes dédiées dont le rôle est de faire l’interface entre l’utilisateur de l’objet et la représentation interne de l’objet (ses attributs). Les attributs sont alors en quelque sorte encapsulés dans l’objet, c’est à dire non accessibles directement par le program- meur qui a instancié un objet de cette classe. — L’encapsulation désigne le principe de regrouper des données brutes avec un ensemble de routines (méthodes) permettant de les lire ou de les manipuler. — But de l’encapsulation : cacher la représentation interne des classes. — pour simplifier la vie du programmeur qui les utilise; — pour masquer leur complexité (diviser pour régner); — pour permettre de modifier celle-ci sans changer le reste du programme. — la liste des méthodes devient une sorte de mode d’emploi de la classe. Encapsulation Pour obtenir la valeur d’un attribut nous utiliserons la méthode des accesseurs (ou "getters") dont le nom est générale- ment : getNom_attribut() . Par exemple ici : # Dans l'éditeur PYTHON class Carte: # Définition de la classe "Une carte d'un jeu de 32 ou 52 cartes" def __init__(self,valeur,couleur): # méthode 1 : constructeur self.valeur=valeur # 1er attribut valeur {de 2 à 14 pour as} self.couleur=couleur # 2e attribut {'pique','carreau','coeur','trefle'} def getAttributs(self): # méthode 2 : permet d'accéder aux valeurs des attributs return (self.valeur,self.couleur) # Dans la console PYTHON >>>x=Carte(5,'carreau') >>>y=Carte(14,'pique') Créer deux autres méthodes permettant de récupérer la valeur de la carte et la couleur avec les "getters" (accesseurs) : getCouleur() et getValeur(). Exercice 2.1 www.math93.com - Cédric Baubeau/Maxime Charpignon/Franck Duffaud/Gilles Dalles 5/19 Cédric Baubeau/Maxime Charpignon /Franck Duffaud/Gilles Dalles TD NSI - Algorithmique - Programmation Objet 2.3 Modifications contrôlées des valeurs des attributs : les mutateurs ou "setters" On va devoir contrôler les valeurs attribuées aux attributs. Pour cela, on passe par des méthodes particulières appelées mutateurs (ou "setters") qui vont modifier la valeur d’une propriété d’un objet. Le nom d’un mutateur est généralement : setNom_attribut() . # Dans l'éditeur PYTHON class Carte: # Définition de la classe "Une carte d'un jeu de 32 ou 52 cartes" def __init__(self,valeur,couleur): constructeur self.valeur=valeur # 1er attribut {de 2 à 14} self.couleur=couleur # {'pique', 'carreau', 'coeur', 'trefle'} def getAttributs(self): # méthode 2 : accesseur return (self.valeur,self.couleur) def getValeur(self): # méthode 3 : accesseur return self.valeur def getCouleur(self): # méthode 4 : accesseur return self.valeur def setValeur(self,v): # mutateur avec contrôle if 2<=v<=14: self.valeur=v return True else: return False Par exemple on va créer une carte c1, un 7 de coeur puis modifier sa valeur en la passant à uploads/Geographie/ nsi-terminale-program-objet.pdf
Documents similaires










-
24
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Apv 14, 2022
- Catégorie Geography / Geogra...
- Langue French
- Taille du fichier 0.2138MB