[go: up one dir, main page]

0% ont trouvé ce document utile (0 vote)
106 vues53 pages

Chapitre1 - Python

La classe Point a deux attributs X et Y. Le constructeur prend deux paramètres pour initialiser les attributs. Deux instances P1 et P2 sont créées avec des coordonnées différentes. La méthode calculant la distance entre les deux points est définie.

Transféré par

Suibgui Khairi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
106 vues53 pages

Chapitre1 - Python

La classe Point a deux attributs X et Y. Le constructeur prend deux paramètres pour initialiser les attributs. Deux instances P1 et P2 sont créées avec des coordonnées différentes. La méthode calculant la distance entre les deux points est définie.

Transféré par

Suibgui Khairi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 53

CPI-2 Python

Chapitre1: Programmation Orienté Objet

Dr . Faten OMRI
faten.omri@tek-up.tn
jango

You can simply impress your


audience and add a unique zing.

 Exam block #1: Object-Oriented Programming (34%)

 Exam block #2: Modules and Packages (12%)

 Exam block #4: Strings (18%)

 Exam block #5: Miscellaneous (List Comprehensions, Lambdas, Closures, and I/O Operations) (22%)

 Exam block #3: Exceptions (14%)


PLAN

Rappel Langage Python Notion de classe Méthodes Attributs


et objet

1 2 3 4

6 5
Fonctions pratiques Héritage
Rappel Introduction
jango

You can simply impress your


Le langage de programmation Python a été créé en 1989 par Guido van Rossum, aux Pays-Bas (Degree: Master of computer Science and mathematics)
audience and add a unique zing.
pendant les vacances de Christmas. Le nom Python vient d’un hommage à la série télévisée Monty Python’s Flying Circus dont G. van Rossum est fan.

• La première version publique de ce langage a été publiée en 1991. La dernière version de Python est la version 3.x

• Python est un langage de programmation puissant et facile à apprendre.

• Ce langage présente de nombreuses caractéristiques intéressantes :

Multiplateforme: il fonctionne sur des nombreux systèmes d’exploitation : Windows, Mac OS Linux, Android, iOS. Python est déjà présent sous

Linux et Mac OS X et s'installe très facilement sous Windows.

Gratuit.

Un langage de haut niveau: Il demande relativement peu de connaissance sur le fonctionnement d’un ordinateur pour être utilisé.

Simple: Python permet d'écrire des programmes compacts et lisibles. Les programmes écrits en Python sont généralement beaucoup plus courts

que leurs équivalents en C, C++ ou Java.


Rappel Introduction

You can simply impress your


audience and add a unique zing.
Un langage interprété: Un script Python n’a pas besoin d’être compilé pour être exécuté, contrairement à des langages comme le C ou le C++.

N’utilise pas les pointeurs

Un langage à typage dynamique:

Exemple: création des variables en python en utilisant l’opérateur d’affectation =

>>> X=2 # X est un entier

>>> X=2.5 # X est un réel

>>> X=2+5j # X est un nombre complexe

……………………….
Rappel Les types sous Python

Les types

Les types Les types complexes


Les conteneurs
élémentaires
int, float, complex, boolean, None

Non Mutables: Mutables:


modification non autorisée modification autorisée

Les Séquences Ordonnés Ordonnés Non Ordonnés

Tuples Les listes Ensemble


Chaines de caractères Dictionnaires
Application

1. Soit L une liste de nombres réels de taille n avec n un nombre tapé par le clavier .

2. Remplir la liste par des nombres saisis par le clavier

3. Calculer la somme des éléments de L

4. Calculer la moyenne arithmétique des éléments de L. Par exemple, si L=[0,1,2,3], on doit obtenir 1.5.

5. On suppose que L est une liste qui contient plusieurs occurrences d’éléments, écrire les instructions nécessaire pour rendre L une

liste d'éléments uniques, Par exemple si L=[1,1,2,2,5,8,9,9) alors on doit avoir L=[1,2,5,8,9]
Application

Soit la liste : S = [ 8-6j , [0,1,’CPI2’] , {1,2,3} , 27.1 , ’a’ , (8,6) ]

1. Afficher à chaque fois en utilisant le concept de slicing(découpage) :

a) La sous-liste du 3ème au 5éme élément en utilisant un indexage positive

b) La sous-liste du début au 2ème élément en utilisant un indexage négative

c) La sous-liste complète de la liste ;

d) Le premier élément en utilisant un indexage négatif.

e) Le dernier élément en utilisant un indexage négatif.

f) La sous liste [1,’CPI2’].

2. Modifier la chaine ‘CPI2’ par ‘TIC’ pour que la nouvelle liste soit égale à S = [ 8-6j , [0,1,TIC’] , {1,2,3} , 27.1 , ’a’ , (8,6) ]

3. Ajouter la valeur 105 à la fin de la liste S.

4. Supprimer l’élément {1,2,3} de la liste S.

5. Convertir la liste S en un tuple T.


Notion de classe

You can simply impress your


audience and add a unique zing.

▪Une classe modélise un ensemble d’objets et leurs comportements.

▪ Histoire des classes : Simula (1962-1967), Smalltalk (1972), C++ (1979), Objective-C (1983), CLOS (1987), Java (1995), etc.

▪ Les langages permettant de travailler avec des classes sont dits langages à objets. Le style de programmation correspondant s’appelle :

Programmation Orientée Objet (POO).

▪ Pour définir une classe il faut se poser deux questions relatives à ses objets :

i) Quelles sont les caractéristiques des objets de la classe ?

Attributs (variable)

ii) Quelles sont les opérations pertinentes sur ces objets ?

Méthodes (fonction)
Notion de classe Constructeur

You can simply impress your


• Classe Vide: and add a unique zing.
audience
class Maclass:
#classe vide
#donc utilisation du mot clé pass
pass

• Les constructeurs sont généralement utilisés pour instancier(créer) un objet.

• La tâche des constructeurs consiste à initialiser (attribuer des valeurs) aux attributs de la classe lorsqu'un objet de la classe est créé.

• En Python, la méthode __init __ () est appelée le constructeur et est toujours appelée quand on veut instancier ou créer un objet.
Notion de classe Constructeur

• You can
La méthode simply
__init__ impress
d'une your
classe est appelée lors de l'instanciation de l'objet. Cette méthode est unique dans une classe. Le premier paramètre de la
audience and add a unique zing.
méthode __init__ est l'objet instancié, appelé self .

• self est une référence à l'objet instancié. Dans la méthode __init__ on initialise les attributs de la classe en utilisant la variable self suivi du point (.) et ensuite
du nom de l'attribut.

▪Un objet de la classe Cercle aura 3 attributs : centre, rayon et couleur

▪ La première fonction du code de la classe doit être nommée obligatoirement __init__ avec ici 4 paramètres (1 + 3), dont le premier doit se nommer self et
représente l'objet en cours d'initialisation :
Notion de classe Types de Constructeur

1. Constructeur
You canpar défaut
simply (sans paramètres)
impress your
le audience and
constructeur paradd a unique
défaut zing.
est un constructeur simple qui n’accepte aucun argument. Sa définition n’a qu’un seul
argument(self) qui soit une référence à l’instance en cours de construction.

Exemple:

2. Constructeur paramétré :
Le constructeur paramétré prend son premier argument en tant que référence à l'instance en cours de construction,
appelée self, et le reste des arguments est fourni par le programmeur.

Exemple:
Notion de classe Types de Constructeur

3. Constructeur
You canparamétré (avec des
simply impress arguments ayant des valeurs par défauts):
your
audience and add a unique zing.
Ce constructeur peut contenir des paramètres avec des valeurs par défauts ainsi que d’autre sans valeurs, mais à condition que celles non
initialisés doivent précéder les arguments avec valeur

Exemple:
Notion d’objet Instance d’une classe

▪Soit laYou
classe Cercle:
can simply impress your
audience and add a unique zing.

▪Pour construire un objet particulier (une instance) de la classe Cercle, on utilise le nom de la classe comme pseudo-fonction à laquelle on passe les
valeurs des attributs, dans l'ordre des paramètres :

N.B. On ne passe pas self en argument ! Il est implicite.

La variable cercle représente alors un objet, instance de Cercle :

- Pour demander l'accès aux attributs de cercle :

- Pour modifier les attributs de cercle :


Application

Considérons une classe appelée Point ayant les attributs suivants : X et Y

1. Définissez la classe Point et un constructeur à deux paramètres

2. Créez deux instances P1 et P2 de la classe Point.

3. Affichez les coordonnés de chaque point.

4. Calculez la distance entre P1 et P2

Soit P3 un objet de la classe Point, P3 correspond au milieu du segment définit par les points P1 et P2.

5. Calculez et Affichez les coordonnées du P3.

6. Modifiez le constructeur de la classe Point pour qu’il soit un constructeur par défaut (il n’accepte aucun argument), les attributs X

et Y sont saisis par le clavier.

7. Créez deux instances P1 et P2 de la classe Point après modification du constructeur.


Définitions des Méthodes

▪Les méthodes
You cand’instances seront rédigés
simply impress your dans le corps de la classe des objets :
audience and add a unique zing.
▪ A quoi vont-elles servir ? A envoyer un message à un objet de la classe.

Par exemple :

o demander à un cercle de bien vouloir calculer et retourner son aire :

cercle.aire() # avec résultat

o lui demander de grossir en multipliant son rayon par k :

cercle.zoom(k) # sans résultat

NB : En rédigeant le corps d'une classe, il faut imaginer quels sont les messages que nous aurons à envoyer aux objets, et comment ceux-ci répondront
Méthodes d’instance

You can simply impress your


audience and add a unique zing.

Méthodes d’instance
La signature de ces méthodes doit contenir:
▪ son nom
▪ les arguments entre des parenthèses tel que le premier
argument doit être self.
__str__ : méthode spéciale cachée

You can simply impress your


▪Pour afficher un objet,
audience and la
addfonction print(objet
a unique zing. ) de Python fait appel à la fonction __str__ qui elle-même invoque la méthode cachée __repr__ de la classe
de l’objet à afficher, chargée de convertir l'objet en string :

retournent l’adresse mémoire du l’objet

▪ Il suffit donc de redéfinir __repr__ ou encore __str__ dans la classe Cercle, le type de retour est une chaine de caractère :

___str___
Attributs

Attributs

Attribut de Attribut
classe=statique d’instance
Privée/publique Privée/publique

Liste des attributs


Chaque attribut d’une instance de classe est inséré dans un dictionnaire appelé __dict__, attribut implicitement présent dès
la création d’une instance.
Attribut de classe et Attribut d’instance
Limiter la liste des attributs

Nous avons vu que nous pouvons créer autant d’attributs que nous le souhaitons pour un objet. Cela peut conduire à des bugs ou des difficultés de

compréhension du code Limiter la liste des attributs en utilisant __slots__

Limiter la liste des attributs en


utilisant __slots__
Attribut de classe et Attribut d’instance

You can simply impress your


Attributsaudience
de classe (and
définis
addauaniveau
uniqued’une classe ) contiennent des propriétés générales à la classe puisqu'ils vont prendre la même valeur quelle que soit
zing.
l'instance(partagée par tous les objets instances de cette classe). Il suffit de créer une variable au sein de la classe (en dehors de toute méthodes comme x dans
la classe C)
Au contraire, les attributs d'instance sont spécifiques à chaque instance. Pour en créer, il suffit de les initialiser dans la méthode .__init__() en utilisant une
syntaxe:

self.nouvel_attribut = valeur

On peut aussi ajouter un attribut d'instance a l'extérieur du classe avec une syntaxe:
instance.nouvel_attribut = valeur

En général, les variables d'instance stockent des informations relatives à chaque instance alors que les variables de classe servent à stocker les attributs et
méthodes communes à toutes les instances de la classe :

Les variables déclarées dans la définition de classe, mais pas dans une méthode, sont des variables de classe ou statiques
La notion d’Encapsulation

You can simply impress your


audience and add a unique zing.

Le concept d'encapsulation est un concept très utile de la POO. Il permet en particulier d’éviter une modification par erreur des
données d’un objet. En effet, il n’est alors pas possible d’agir directement sur les données d’un objet ; il est nécessaire de passer par
ses méthodes qui jouent le rôle d’interface obligatoire.

Définition d’attributs privés


On réalise la protection des attributs de notre classe grâce à l’utilisation d’attributs privées.
Pour avoir des attributs privés, leur nom doit débuter par __ (deux fois le symbole underscore touche 8).
La notion d’Encapsulation Attribut d’instance privé

On ne peut pas faire l’appel de l’attribut __a depuis l’ extérieur de la classe MaClasse
La notion d’Encapsulation Attribut de classe privé

‘TIC’

On ne peut pas faire l’appel de l’attribut __niveau depuis l’ extérieur de la classe MaClasse
La notion d’Encapsulation Les Accesseurs et les Mutateurs

You can simply impress your


Les Accesseurs (get_X()) qui fournissent des informations relatives à l’état d’un objet, c’est-à-dire aux valeurs de certains de ses attributs
audience and add a unique zing.
(généralement privés) sans les modifier
Les Mutateurs (set_X()) qui modifient l’état d’un objet ainsi que les valeurs de certains de ses attributs.
La notion d’Encapsulation

Nous pouvons accéder à la valeur de l'attribut caché en utilisant une syntaxe spéciale comme suit :
Objet._NomClasse__attribut privé

,
Application: TP Robot
Les Méthodes

Méthodes

Méthode de Méthode Méthode


classe d’instance statique
Privée/publique Privée/publique Privée/publique
Méthode d’instance

La signature de ces méthodes doit contenir:


▪ son nom
▪ les arguments entre des parenthèses tel que le premier argument doit être self.
Lors de l’appel d’ une méthode d’instance, on préfixe le nom de la méthode par le nom d’un objet de la classe (notation pointée)

Publique Privée

classe A contient
une méthode d'instance privée
None
Méthode de Classe publique

• You
Pour can
créer simply
une impress
méthode youril faut la faire précéder d’un « décorateur » : @classmethod
de classe,
audience and add a unique zing.
• Le premier argument de la méthode de classe doit être cls.

Syntaxe @classmethod
def func(cls,args……)

Lors de l’appel d’ une méthode de classe , on préfixe le nom de la méthode par le nom de la classe ou par un objet de la classe (notation
pointée)
Les Méthodes de classe fonctionnent avec la classe et ses paramètres sont toujours ceux de la classe elle-même. La Méthode de classe peut être
appelée à la fois par la classe et ses instances.

c'est une méthode de classe publique


Méthode de Classe privée

Youdes
Pour avoir canméthode
simply de
impress your leur nom doit débuter par __ (deux fois le symbole underscore touche 8).
Classe privées,
audience and add a unique zing.

C'est une méthode de classe privée


Méthode Statique publique

You can simply impress your


Pour créer une méthode statique, il faut la faire précéder d’un « décorateur » : @staticmethod
audience and add a unique zing.
Une méthode statique n’a pas d’accès à l’´état de la classe, il s’agit d’une fonction utilitaire rattachée à la classe

Syntaxe
@staticmethod
def func(args……)

Avec les méthodes statiques, ni self (l’instance d’objet) ni cls (la classe) n’est implicitement passé comme premier argument. Ils se comportent
comme des fonctions simples, sauf qu’on peut les appeler à partir d’une instance ou à partir d’une classe.

c'est une méthode statique publique


c'est une méthode statique publique
Méthode Statique privée

Youdes
Pour avoir canméthode
simply statique
impressprivées,
your leur nom doit débuter par __ (deux fois le symbole underscore touche 8).
audience and add a unique zing.

C'est une méthode statique privée


Notion d’Héritage

▪ Un avantage de la POO est qu’une classe Python peut toujours être spécialisée en une classe fille ( sous classe) qui hérite alors de tous les attributs et
méthodes de sa classe mère (super classe).

▪ La syntaxe pour la définition de sous classe est :

class SousClasse ( SuperClasse ) :


def __init__(self,……
……

▪ Exemple :classe carre hérite de la classe rectangle


Notion d’héritage
Notion d’héritage
Notion d’héritage
Notion d’héritage
Notion d’héritage

▪Le polymorphisme est la faculté pour une méthode portant le même nom mais appartenant à des classes distinctes héritées d’effectuer un travail différent.

▪ Cette propriété est acquise par la technique de la surcharge.

▪ La Dans l’exemple suivant, la classe Etudiant hérite de la classe Personne, et la méthode __init__ et affiche sont polymorphes :
Application: TP2
Notion d’héritage multiple

Lorsqu’une classe fille hérite de plusieurs classes mère, on


appellece concept « héritage multiple ». ’’GLSI ’’

Classe A Classe B Classe C

Classe D
Notion d’héritage multiple

B
Notion de Conception Orientée Objet

Suivant les relations que l’on va établir entre les objets, on peut concevoir nos classes de deux façons possibles :

▪ La composition qui repose sur la relation a-un ou sur la relation utilise-un :


Il s’agit d’une collaboration de plusieurs classes distinctes via une association (utilise-un) ou une agrégation (a-un).
La classe composite bénéficie de l’ajout de fonctionnalités d’autres classes qui n’ont rien en commun.

▪ la dérivation qui repose sur la relation est-un :


Il s’agit de la création de sous-classes par spécialisation.

Bien sûr, ces deux conceptions peuvent cohabiter, et c’est souvent le cas !
Notion de Conception Orientée Objet Exemple de composition

L’implémentation Python utilisée est généralement l’instanciation de classes dans le constructeur de la classe composite.
Notion de Conception Orientée Objet Exemple de Dérivation

L’implémentation Python utilisée est généralement l’appel du constructeur de la super classe dans le constructeur de la sous classe, soit nommément, soit
grâce à l’instruction super.
Méthodes spéciales

You can simply impress your


audience and add a unique zing.
Les méthodes magiques Python sont également appelées méthodes dunder ou méthodes spéciales.

Les méthodes magiques ne sont pas destinées à être invoquées directement, mais l'invocation se fait en interne à partir de la classe sur une certaine

action. Par exemple, lorsque on additionne deux nombres en utilisant l'opérateur +, en interne, la méthode __add__() sera appelée. Ces méthodes

portent des noms prédéfinis, précédés et suivis de deux caractères de soulignement. Elles servent à surcharger ses opérateurs :

Opérateur Méthode spéciale Utilisation


Opposé __neg__ - obj1
Addition __add__ Obj1 + obj2
Soustraction __sub__ Obj1 – obj2
Multiplication __mul__ Obj1 * obj2
Division __div__ Obj1 / obj2
Division entière __floordiv__ Obj1 // obj2
Méthodes spéciales

▪ Exemple de surcharge de l’operateur ‘ + ‘ pour les objets Vecteurs :


Classe Externe et Classe Interne

Une classe imbriquée (également appelée classe interne) est définie à l’intérieur d’une autre classe. Elle est très couramment utilisée dans tous les langages
de programmation orientés objet et peut présenter de nombreux avantages

Notez qu’on ne peut pas accéder directement à la classe interne. On crée son objet en utilisant le format outer.inner.
Classe Externe et Classe Interne

Avantages de la classe interne:

• Regroupement logique des classes : si une classe n'est utile qu'à une seule autre classe, il est logique de l'intégrer dans cette classe et de garder les

deux ensemble. L'imbrication de ces "classes d'assistance" rend leur package plus simple.

• Code plus lisible et maintenable : l'imbrication de petites classes dans des classes de niveau supérieur rapproche le code de l'endroit où il est

utilisé.

Le principal avantage est l'organisation. Tout ce qui peut être accompli avec des classes internes peut être accompli sans elles.
Fonctions pratiques hasattr() :

You can simply impress your


audience and add a unique zing.
La méthode hasattr() vérifie si un objet possède un tel attribut:
Fonctions pratiques issubclass()

La fonction issubclass() vérifie si une classe passée en premier paramètre est une sous classe (ou classe fille) de la classe passé en deuxième paramètre
Fonctions pratiques isinstance ()

La fonction isinstance () vérifie si un objet passé en premier paramètre est une instance de la classe passée en deuxième paramètre

Vous aimerez peut-être aussi