Présentation python : Épisode 4 ● Les objets : héritage ● Introduction à l'héritage ● Un exemple illustrant l'héritage ● Détails sur l'appel de méthode.

Slides:



Advertisements
Présentations similaires
Introduction à la Programmation Orientée Objet H.GATI.
Advertisements

Présentation python : Épisode 1 ● Introduction à Python ● Les types de base et leur manipulation ● Les structures de contrôle ● Les fonctions Étienne Loks.

1 Programmation Orientée Objet ● Qu'est-ce qu'un objet ● Collaboration des objets ● Les classes ● Relations entre les classes – “Utilise”, “Contient”,
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Types et opérations fondamentales ● Tests ● Boucles ● Pointeurs, références.
Les objectifs de connaissance : Les objectifs de savoir-faire : - Connaître les règles de nomenclature des composés organiques (alcanes, alcools, aldéhydes,
Présentation python : Épisode 4 ● Les objets : héritage ● Introduction à l'héritage ● Un exemple illustrant l'héritage ● Détails sur l'appel de méthode.
1 Programmation en C++ IO en C++/SL ● Standard Library ● Types, objets pour IO ● L'entrée de clavier ● Sortie à l'écran ● Fichiers.
Présentation python : Épisode 3 ● Comment programmer comme un gentilhomme ? ● Le style de code ou comment bien présenter ● Les test unitaires ou comment.
DIAGRAMME DE DEPLOIEMENT Exposé de: MBALLA MEKONGO Michèle MBOUNA FEUZE William SIEYADJEU Alex Lionel CHOPGWE Leonard NDUMATE Landry TIDJON Lionel.
MINISTERE DE L’ENSEIGNEMENT SUPERIEUR ET DE LA RECHERCHE SCIENTIFIQUE Université d’Adrar Diagramme d’états-transitions Présenté par Sbai Omar Benothman.
• A quoi peut me faire penser cette image de Ronaldo?
Présentation python : Épisode 2
Les commandes externes
Programmation en C++ Standard Library
Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne
Corrélation et causalité
Coloration de graphe, backtracking, branch and bound
Détection des erreurs.
Les fondamentaux de la Programmation Orientée Objet
Algorithmique demander jeu du pendu.
MOT Éditeur de modèles de connaissances par objets typés
Ajouter le code dans une page html
Initiation aux bases de données et à la programmation événementielle
Présentation python : Épisode 3
JAVA et POO : Notion d'héritage
Javadoc et débogueur Semaine 03 Version A16.
Bddictionnairique Phase 1
Bases de programmation en Python
Principes de programmation (suite)
Comment construire un schéma de scénario ou synopsis ? Les 6 étapes
Polymorphisme : règles
Réalisation d'agents de surveillance Zephir
Master Réseaux et Systèmes Distribués (RSD) Algorithmique des systèmes
Collecte de données CAPI
Technologies d’intelligence d’affaires
Comment bien communiquer avec un diaporama
Python for beginners Qu'est ce que Python
Stabilité des porteurs horizontaux (Poutres)
Présentation des EJB Enterprise Java Beans.
Notion De Gestion De Bases De Données
Programmation en C++ C++ de base
1.2 dénombrement cours 2.
Modélisation avec UML 2.0 Partie II Diagramme de classes.
Chapter 12: Structures de données
Présentation python : Épisode 3
Programmation Orientée Objet
Programmation Android Bases De Données, SQL-lite
Deuxième partie LE DOSSIER TECHNIQUE DU MARINGOUIN.
Formation sur les bases de données relationnelles.
Publipostage avec Word 2007
Développement d’applications interactives
Diagrammes UML 420-KE2-LG.
Programmation Android Première application Android
Présentation des outils de recherche d’informations scientifiques
Windows 7 NTFS.
Présentation 9 : Calcul de précision des estimateurs complexes
Bienvenue ! Année scolaire [Insérez l'année] Nom de l'école
Bienvenue ! Année scolaire [Insérez l'année] Nom de l'école
Logiciel de présentation
PRO1026 Programmation et enseignement
Le langage C# : Partie 1.
INTERFACE ET POLYMORPHISME
Design, innovation et créativité
Retour sur les interfaces
Jérôme CUTRONA PHP objet Jérôme CUTRONA 08:30:34 Programmation Web
Réflexion sur l’apprentissage
Python Nicolas THIBAULT
MOT Éditeur de modèles de connaissances par objets typés
Les données structurées et leur traitement
Transcription de la présentation:

Présentation python : Épisode 4 ● Les objets : héritage ● Introduction à l'héritage ● Un exemple illustrant l'héritage ● Détails sur l'appel de méthode ● Les différentes manières de structurer les objets ● Les objets : redéfinition des opérateurs ● Étienne Loks et David Mentré - 7 avril 2008

Rappel sur les objets ● Une classe contient méthodes et attributs ● C'est un « moule » pour un objet ● import random class Dice: ”””Un dé à plusieurs faces””” def __init__(self, nombre_faces): self.nombre_faces = nombre_faces def rouler(self): ”””Faire rouler le dé””” return random.randint(1, self.nombre_faces) >>> de_6_face = Dice(6) >>> print de_6_face.rouler() 4 ● Permet d'encapsuler au plus près méthodes et données

Héritage ● Une classe peut « hériter » d'une autre classe ● de ses attributs et de ses méthodes ● Elle en profite pour ajouter ses attributs et méthodes ● class Point: def __init__(self, x, y): self.x = x self.y = y def affiche(self): print "x:%d y:%d" % (self.x, self.y) class PointColore(Point): def colorise(self, couleur): self.couleur = couleur

Héritage : exemple ● Exemple de la classe mère ● >>> p = Point(3,4) >>> p.affiche() x:3 y:4 ● Exemple de la classe fille : même comportement ! ● >>> pc = PointColore(3,4) >>> pc.affiche() x:3 y:4 ● Mais la classe fille a aussi ses propres méthodes ! ● >>> pc.colorise("rouge") >>> pc.couleur 'rouge'

Redéfinition ● Les méthodes de la classe mère peuvent être redéfinies ● class PointColore(Point): def __init__(self, x, y, couleur): self.x = x self.y = y self.couleur = couleur def affiche(self): print "x:%d y:%d couleur:%s" % (self.x, self.y, self.couleur) def colorise(self, couleur): self.couleur = couleur ● >>> pc = PointColore(3,4,'rouge') >>> pc.affiche() x:3 y:4 couleur:rouge ● OU def __init__(self, x, y, couleur): Point.__init__(self, x, y) self.couleur = couleur

Quel utilité ?!? ● Les classes en haut de la hiérarchie (les grands- mères) définissent des interfaces ● Que tout le monde dans la hiérarchie respecte ● Que tout le monde (dans ou hors la hiérarchie) peut utiliser ● => Avantage : quand on change quelque chose, on ne doit pas tout boulverser

Exemple d'asbtraction ● class Interface: def ecrire(self, chaine): assert False class Console(Interface): def ecrire(self, chaine): print chaine class Fichier(Interface): def __init__(self, nom_fichier): self.f = open(nom_fichier, 'w') def ecrire(self, chaine): self.f.write(chaine) ● >>> c = Console() >>> c.ecrire("toto") toto ● >>> f = Fichier('/tmp/toto') >>> f.ecrire("toto") ● Même règle d'appel !

Appel de méthode en détail ● Quand on appelle une méthode toto() ● on la recherche dans la classe de l'objet ● si on la trouve pas, dans les classes parentes de la classe de l'objet, en remontant la hiérarchie ● si vraiment on ne la trouve pas... ben on renvoie une erreur

Appel de méthode : exemple ● class Toto(): def toto(self): print "methode toto de la classe Toto" def titi(self): print "methode titi de la classe Toto" ● class TotoFils(Toto): def titi(self): print "methode titi de la classe TotoFils" ● >>> t = TotoFils() >>> t.titi() methode titi de la classe TotoFils >>> t.toto() methode toto de la classe Toto >>> t.tata() Traceback (most recent call last): File " ", line 1, in AttributeError: TotoFils instance has no attribute 'tata'

Héritage multiple ● On peut avoir plusieurs parents : ● class Fille(A, B, C, D): [...] ● La recherche de méthode s'effectue en profondeur d'abord ● D'abord les méthodes de la classe Fille ● Puis celle de A (et ses parents) ● Puis celle de B (et ses parents) ●....

Programmer « objet » ● Repérer les classes d'objets qui feront le programme ● s'inspirer des objets réels (ex. un compte dans un programme de compta) ● Regrouper ces classes en hiérarchie ou les faire s'utiliser les unes les autres par référence ● Seule l'expérience peut dire comment faire ● => Design Patterns (encore une autre (longue) histoire) !

Références entre objets ● Un objet peut contenir dans un attribut une référence à un autre objet ● class A: def appelle(self): print "Methode appelle() sur un objet de classe A" class B: def __init__(self): self.a = A() def appelle_a(self): self.a.appelle() ● >>> b = B() # on crée un objet de la classe B >>> b.appelle_a() Methode appelle() sur un objet de classe A ● Souvent la structure la plus commune !

Redéfinition des opérateurs ● >>> A, B = Point(1, 1), Point(2, 2) >>> C = A + B Traceback (most recent call last): File " ", line 1, in TypeError: unsupported operand type(s) for +: 'instance' and 'instance' ● Les opérateurs classiques peuvent être redéfinis pour chaque classe permettant ainsi de manipuler les objets crées de façon plus flexible ● >>> class Point: (...)... def __add__(self, point):... return Point(self.x+point.x, self.y+point.y) >>> C = A + B >>> C.affiche() x:3 y:3

Quelques opérateurs pouvant être redéfinis ● Addition : __add__ ● Soustraction : __sub__ ● Égalité : __eq__ ● Conversion en chaîne de caractères : __str__ ● etc. (cf §6.7 dans la documentation des bibliothèques python) ● Attention à bien documenter une surcharge d'opérateur

Conclusion ● Essentiel des objets ● classes : attributs et méthodes locaux à un objet ● héritage : pouvoir redéfinir des méthodes ● Programmation objet = comment bien utiliser les objets ● Pour commencer ● Utilisez des objets déjà existants (par ex. interface graphique)

Pour aller plus loin ● Références bibliographiques (techniques) ● Design Patterns (Gamma et al.) ● Comment structurer les objets entre eux ● Object-Oriented Software Construction (Bertrand Meyer) ● Explique de manière propre la programmation objet pour faire du bon logiciel