Python Programmation
La programmation orientée
objet (POO)
est un modèle de programmation informatique qui met en œuvre une conception basée sur
les objets. Elle se différencie de la programmation procédurale, qui est basée sur l’utilisation
de procédures, et de la programmation fonctionnelle, qui elle, repose entièrement sur le
concept de fonction.
De nos jours, de très nombreux langages permettent d’utiliser les principes de la POO dans
des domaines variés : Java et C# bien sûr, mais aussi PHP (à partir de la version 5), Python,
etc… La Programmation orientée objet a entraînée un changement profond dans la manière
de concevoir l’architecture des applications informatiques. Au cours de la modélisation
d’une application on réfléchit désormais en termes d’objets : c’est la modélisation orientée
objet (MOO), dont le principal support est le langage de modélisation UML.
Les langages conçus principalement pour la programmation OO, mais avec quelques
éléments procéduraux. Ex : Java, Python, C++, C#, Delphi/Object Pascal, [Link].
Concept POO
•La classe
•L’objet
•L’encapsulation
•L’héritage
Le concept de Classe
Le premier concept fondamental de l’orienté objet est la classe. Une classe est une
structure abstraite qui décrit des objets du monde réel sous deux angles : ses
propriétés (ses caractéristiques) et ses méthodes (les actions qu’elle peut effectuer ou
son comportement).
Par exemple, la Classe Vehicule représente un véhicule, couleur est l’une de ses
propriétés et accélérer/freiner sont deux de ses méthodes. Un autre exemple : on peut
représenter en programmation orientée-objet les employés sous forme de classe ;
auquel cas, la classe Employés représente tous les employés qui peuvent avoir pour
propriétés un nom, un prénom, une adresse et une date de naissance ; les opérations
qui peuvent être effectuées sur les employés peuvent être le changement de salaire, la
prise de congé, la prise de retraite, etc.
La classe est finalement une sorte de moule, de modèle. Toutes les instances de classe
s’appellent des objets. Les objets sont construits à partir de la classe, par un processus
appelé instanciation. De ce fait, tout objet est une instance de classe.
objet
le plus important en programmation objet c’est justement, l’objet. Comme nous vous l’avons
dit tout à l’heure, un objet est une instance de classe. Pour faire le parallèle avec le monde
réel, l’objet c’est un peu comme une maison bâtit sur la base d’un plan particulier. Tant que
les architectes se réfèrent à ce plan, ils produiront toujours les mêmes maisons.
Techniquement, un objet est caractérisé par 3 choses :
•une identité : l’identité doit permettre d’identifier sans ambiguïté l’objet (adresse/ référence
ou nom)
•des états : chaque objet a une valeur par défaut (lorsqu’elle est indiqué à l’instanciation)
pour chacune de ses propriétés. On appelle ces valeurs, des états de l’objet.
•des méthodes : chaque objet est capable d’exécuter les actions ou le comportement défini
dans la classe. Ces actions sont traduites en POO concrètement sous forme de méthodes.
Les actions Les actions possibles sur un objet sont déclenchées par des appels de ces
méthodes ou par des messages envoyées par d’autres objets.
objet
un objet est une instance de classe. L’objet, à la différence de la classe qui est abstraite, est
concret. Chaque objet a des états (valeur pour chaque propriété) et des méthodes (les actions
de la classe)Les objets ne sont pas des éléments statiques et leur durée de vie ne
correspond pas forcément à la durée d’exécution du programme. La durée de vie d’un
objet passe par trois étapes :
1. la déclaration de l’objet et son instanciation
2.l’utilisation de l’objet en appelant ses méthodes
[Link] suppression de l’objet, en appelant son destructeur ou en arrêtant la machine
virtuelle qui exécute le programme, ou en arrêtant simplement le programme.
Le concept d’encapsulation
Le troisième concept de la programmation orientée objet c’est l’encapsulation.
les propriétés des objets ne peuvent être accédées que par ses méthodes. Ainsi, la classe encapsule à
la fois les attributs et les méthodes qui permettent de manipuler les objets indépendamment de leurs
états.
L’encapsulation permet de restreindre l’accès direct aux états et empêche la modification de l’objet hors
de ses méthodes. Par exemple, si vous avez une classe Voiture et que vous voulez définir la valeur de
sa propriété couleur à bleu, il vous faut passer par une méthode par exemple definirCouleur,
implémentée par le développeur de la classe. Cette méthode peut restreindre les différentes valeurs de
couleur.
Ainsi, l’encapsulation est un mécanisme qui empêche donc de modifier ou d’accéder aux objets par un
autre moyen que les méthodes proposées, et de ce fait, permet de garantir l’intégrité des objets.
L’utilisateur d’une classe n’a pas forcément à savoir de quelle façon sont structurées les méthodes dans
l’objet, ni le processus par lequel l’objet obtient tel ou tel état. En interdisant l’utilisateur de modifier
directement les attributs, et en l’obligeant à utiliser les fonctions définies pour les modifier, on est
capable de s’assurer de l’intégrité des objets. On pourra donc effectuer des contrôles sémantiques sur
les données entrées par l’utilisateur.
l’encapsulation est comme un mécanisme de boîte noire qui empêche
l’utilisateur d’utiliser un objet au delà des méthodes qui lui sont
proposées.
L’héritage
L’héritage est le quatrième concept clé de la programmation objet. C’est un concept en
POO qui désigne le fait qu’une classe peut hériter des caractéristiques (attributs et
méthodes) d’une autre classe.
Les objets de classes peuvent hériter des propriétés d’une classe parent. Par exemple
on peut définir une classe Employé et une classe Manager qui est une classe
spécialisée de Employé, qui hérite de ses propriétés.
Soient deux classes A et B
•Relation d’héritage : Classe B « étend la » Classe A
•A est la super-classe ou classe mère/parent de B
•B est la sous-classe ou classe fille de A
l’héritage permet de créer des classes spécialisées.
Programmation oriente objet
Pour installer Python
Télécharger python du site officiel
IDE integrated development environment : Pycharme ou visual studio code
Calculer avec Python
Python présente la particularité de pouvoir être utilisé de plusieurs manières différentes. Vous allez d’abord l’utiliser en
mode interactif, c’est-à-dire d’une manière telle que vous pourrez dialoguer avec lui directement depuis le clavier. Cela
vous permettra de découvrir très vite un grand nombre de fonctionnalités du langage. Dans un second temps, vous
apprendrez comment créer vos premiers programmes (scripts) et les sauvegarder sur disque. Par exemple, vous pouvez
tout de suite utiliser l’interpréteur comme une simple calculatrice de bureau.
>>> 5+3
>>> 2 ? 9 # les espaces sont optionnels
>>> 7 + 3 * 4 # la hiérarchie des opérations mathématiques # est-elle respectée ?
>>> (7+3)*4
>>> 20 / 3 # attention : ceci fonctionnerait différemment sous Python 2
>>> 20 // 3
Comme vous pouvez le constater, les opérateurs arithmétiques pour l’addition, la soustraction, la multiplication et la
division sont respectivement +, -, * et /. Les parenthèses ont la fonction attendue
Données et variables
L’essentiel du travail effectué par un programme d’ordinateur consiste à manipuler des données. Ces données
peuvent être très diverses (tout ce qui est numérisable, en fait (6) ), mais dans la mémoire de l’ordinateur elles
se ramènent toujours en définitive à une suite finie de nombres binaires. Une variable apparaît dans un
langage de programmation sous un nomdevariable à peu près quelconque (voir ci après), mais pour
l’ordinateur il s’agit d’une référence désignant une adresse mémoire, c’est-à-dire un emplacement précis dans
la mémoire vive. À cet emplacement est stockée une valeur bien déterminée. C’est la donnée proprement dite,
qui est donc stockée sous la forme d’une suite de nombres binaires, mais qui n’est pas nécessairement un
nombre aux yeux du langage de programmation utilisé. Cela peut être en fait à peu près n’importe quel « objet
» susceptible d’être placé dans la mémoire d’un ordinateur, par exemple : un nombre entier, un nombre réel,
un nombre complexe, un vecteur, une chaîne de caractères typographiques, un tableau, une fonction, etc
Noms de variables et noms réservés
Les noms de variables sont des noms que vous choisissez vous-même assez librement. Efforcezvous cependant de
bien les choisir : de préférence assez courts, mais aussi explicites que possible, de manière à exprimer clairement
ce que la variable est censée contenir. Par exemple, des noms de variables tels que altitude, altit ou alt
conviennent mieux que x pour exprimer une altitude. Un bon programmeur doit veiller à ce que ses lignes
d’instructions soient faciles à lire. Sous Python, les noms de variables doivent en outre obéir à quelques règles
simples :
— Un nom de variable est une séquence de lettres (a → z , A → Z) et de chiffres (0 → 9), qui doit toujours
commencer par une lettre.
— Seules les lettres ordinaires sont autorisées. Les lettres accentuées, les cédilles, les espaces, les caractères
spéciaux tels que $, #, @, etc. sont interdits, à l’exception du caractère _ (souligné).
— La casse est significative (les caractères majuscules et minuscules sont distingués). Attention : Joseph, joseph,
JOSEPH sont donc des variables différentes. Soyez attentifs ! Prenez l’habitude d’écrire l’essentiel des noms de
variables en caractères minuscules (y compris la première lettre). Il s’agit d’une simple convention, mais elle est
largement respectée. N’utilisez les majuscules qu’à l’intérieur même du nom, pour en augmenter éventuellement
la lisibilité, comme dans tableDesMatieres
En plus de ces règles, il faut encore ajouter que vous ne pouvez pas
utiliser comme nom de variables les 33 « mots réservés » ci-
dessous (ils sont utilisés par le langage lui-même)
and as Assert break Class continue def del elif else
except False finally for from global if import in is lambda
None nonlocal not or pass raise return True try while with
yield
Les types de variables¶
Le type d'une variable correspond à la nature de celle-ci. Les trois principaux types dont
nous aurons besoin dans un premier temps sont les entiers (integer ou int), les nombres
décimaux que nous appellerons floats et les chaînes de caractères (string ou str). Bien
sûr, il existe de nombreux autres types (par exemple, les booléens, les nombres
complexes, etc.).
La fonction type()
>>> x = 2
>>> type(x)
<class 'int'>
>>> y = 2.0
>>> type(y)
<class 'float'>
>>> z = '2'
>>> type(z)
<class 'str'>
Conversion de types¶
En programmation, on est souvent amené à convertir les types, c'est-à-dire passer d'un type
numérique à une chaîne de caractères ou vice-versa. En Python, rien de plus simple avec les
fonctions int(), float() et str(). Pour vous en convaincre, regardez ces exemples :
Écriture scientifique
On peut écrire des nombres très grands ou très petits avec des puissances de 10 en utilisant le
symbole e
>>> 1e6
1000000.0
>>> 3.12e-3
0.00312
Affectation (ou assignation)
En Python comme dans de nombreux autres langages, l’opération d’affectation est représentée par le
signe =.
>>> n = 7 # définir n et lui donner la valeur 7
>>> msg = "Quoi de neuf ?" # affecter la valeur "Quoi de neuf ?" à msg
>>> pi = 3.14159 # assigner sa valeur à la variable pi
dans l'instruction x = y - 3, l'opération y - 3 est d'abord évaluée et ensuite le résultat de cette opération
est affecté à la variable x.
On peut aussi affecter des listes (de chiffres ou de chaînes de caractères) à
une variable et accéder au kième élément de la liste de la façon suivante
>> premiers = [1,3,5,7,11]
>>> premiers[1]
3
>>> premiers[4]
11
>>> premiers[0]+premiers[1]
4
Vous remarquerez que l’indexation commence à 0. En effet
exp2
>>> marque = ["citroen","peugeot","renault"]
>>> print(marque)
[’citroen’, ’peugeot’, ’renault’]
>>> modele = ["berlingot","partner","kangoo"]
>>> modele[1]
’partner’
Opération sur les listes¶
Tout comme les chaînes de caractères, les listes supportent l'opérateur + de
concaténation, ainsi que l'opérateur * pour la duplication :
>>> ani1 = ["girafe", "tigre"]
>>> ani2 = ["singe", "souris"]
>>> ani1 + ani2
['girafe', 'tigre', 'singe', 'souris']
>>> ani1 * 3
['girafe', 'tigre', 'girafe', 'tigre', 'girafe', 'tigre']
la méthode .append() permet d ajouter
un seul élément à la fin d'une liste.
Opérations sur les types numériques
>>> x = 45
>>> x + 2
47
>>> x - 2
43
>>> x * 3
135
>>> y = 2.5
>>> x - y
42.5
>>> (x * 10) + y
452.5
les opérateurs « combinés » qui effectue une opération et
une affectation en une seule étape
>>> i = 0
>>> i = i + 1
>>> i
1
>>> i += 1
>>> i
2
>>> i += 2
>>> i
4
L'opérateur += effectue une addition puis affecte le résultat à la même variable. Cette opération s'appelle une «
incrémentation ».
Les opérateurs -=, *= et /= se comportent de manière similaire pour la soustraction, la multiplication et la division.
Opérations sur les chaînes de caractères
>>> chaine = "Salut"
>>> chaine
'Salut'
>>> chaine + " Python"
'Salut Python'
>>> chaine * 3
'SalutSalutSalut'
'opérateur d'addition + concatène (assemble) deux chaînes de caractères.
L'opérateur de multiplication * entre un nombre entier et une chaîne de caractères duplique (répète)
plusieurs fois une chaîne de caractères.
Minimum et maximum
Python propose les fonctions min() et max() qui renvoient respectivement le minimum et le
maximum de plusieurs entiers et / ou floats :
Les entrées/sorties
print() qui affiche une chaîne de caractères (le fameux "Hello world!"). En fait, la fonction print()
affiche l'argument qu'on lui passe entre parenthèses et un retour à ligne. Ce retour à ligne
supplémentaire est ajouté par défaut. Si toutefois, on ne veut pas afficher ce retour à la ligne, on
peut utiliser l'argument par « mot-clé » end
>>> print("Hello world!")
Hello world!
>>> print("Hello world!", end="")
Hello world!>>>
Une autre manière de s'en rendre compte est
d'utiliser deux fonctions print() à la suite.
>>> print("Hello") ; print("Joe")
Hello
Joe
>>> print("Hello", end="") ; print("Joe")
HelloJoe
>>> print("Hello", end=" ") ; print("Joe")
Hello Joe
La fonction print() peut également afficher le contenu d'une variable quel que soit son type. Par
exemple, pour un entier :
>>> var = 3
>>> print(var)
3
>>> x = 32
>>> nom = "John"
>>> print(nom, "a", x, "ans")
John a 32 ans
Afficher la valeur d’une variable
À la suite de l’exercice ci-dessus, nous disposons donc des trois variables n, msg et pi. Pour
afficher leur valeur à l’écran, il existe deux possibilités. La première consiste à entrer au clavier le
nom de la variable, puis . Python répond en affichant la valeur correspondante :
>>> n
7
>>> msg
’Quoi de neuf ?’
>>> pi
3.1415
Afficher la valeur d’une variable
Il s’agit cependant là d’une fonctionnalité secondaire de l’interpréteur, qui est destinée à vous
faciliter la vie lorsque vous faites de simples exercices à la ligne de commande. À l’intérieur d’un
programme, vous utiliserez toujours la fonction print()
>>> print(msg)
Quoi de neuf ?
>>> print(n)
7
Typage des variables
Sous Python, il n’est pas nécessaire d’écrire des lignes de programme spécifiques pour définir le
type des variables avant de pouvoir les utiliser. Il vous suffit en effet d’assigner une valeur à un
nom de variable pour que celle-ci soit automatiquement créée avec le type qui correspond au
mieux à la valeur fournie. Dans l’exercice précédent, par exemple, les variables n, msg et pi ont
été créées automatiquement chacune avec un type différent (« nombre entier » pour n, «
chaîne de caractères » pour msg, « nombre à virgule flottante » (ou « float », en anglais) pour
pi). On dira à ce sujet que le typage des variables sous Python est un typage dynamique, par
opposition au typage statique qui est de règle par exemple en C++ ou en Java.
Affectations multiples
Sous Python, on peut assigner une valeur à plusieurs variables simultanément. Exemple :
>>> x = y = 7
>>> print(x)
7
>>> print(y)
7
On peut aussi effectuer des affectations parallèles à l’aide d’un seul opérateur :
>>> a, b = 4, 8.33
>>> a
4
>>> b
8.33
Exercice
1. Décrivez le plus clairement et le plus complètement possible ce qui se passe à chacune des
trois lignes de l’exemple ci-dessous :
>>> largeur = 20
>>> hauteur = 5 * 9.3
>>> largeur * hauteur
2. Assignez les valeurs respectives 3, 5, 7 à trois variables a, b, c. Effectuez l’opération a - b//c.
Interprétez le résultat obtenu.
Opérateurs et expressions
On manipule les valeurs et les variables qui les référencent en les combinant avec des
opérateurs pour former des expressions. Exemple :
a, b = 7.3, 12
y = 3*a + b/5
Exercice Dans les commandes ci-dessus quel est le type affecté automatiquement à la variable a
? à la variable b ?
Les opérateurs Python ne sont pas seulement les quatre opérateurs mathématiques de base.
Nous avons déjà signalé l’existence de l’opérateur de division entière //. Il faut encore ajouter
l’opérateur ** pour l’exponentiation, ainsi qu’un certain nombre d’opérateurs logiques, des
opérateurs agissant sur les chaînes de caractères, des opérateurs effectuant des tests d’identité
ou d’appartenance, etc. Nous reparlerons de tout cela plus loin. Signalons au passage la
disponibilité de l’opérateur modulo, représenté par le caractère typographique opérateur fournit
le reste de la division entière d’un nombre par un autre. Par exemple
>> 10 % 3 # (et prenez note de ce qui se passe !)
>>> 10 % 5
Exercice Testez les lignes d’instructions suivantes. Décrivez dans votre cahier ce qui se passe :
>>> r , pi = 12, 3.14159
>>> s = pi * r**2
>>> print(s)
>>> print(type(r), type(pi), type(s))
Quelle est, à votre avis, l’utilité de la fonction type() ?
Composition
Jusqu’ici nous avons examiné les différents éléments d’un langage de programmation, à savoir :
les variables, les expressions et les instructions, mais sans traiter de la manière dont nous
pouvons les combiner les unes avec les autres. Or l’une des grandes forces d’un langage de
programmation de haut niveau est qu’il permet de construire des instructions complexes par
assemblage de fragments divers. Ainsi par exemple, si vous savez comment additionner deux
nombres et comment afficher une valeur, vous pouvez combiner ces deux instructions en une
seule :
>>> print(17 + 3)
>>> 20
Exemple 2
>>> h, m, s = 15, 27, 34
>>> print("nombre de secondes écoulées depuis minuit = ", h*3600 + m*60 + s)
Dans une expression, ce que vous placez à la gauche du signe égale doit toujours être une
variable, et non une expression. Cela provient du fait que le signe égale n’a pas ici la même
signification qu’en mathématique : comme nous l’avons déjà signalé, il s’agit d’un symbole
d’affectation (nous plaçons un certain contenu dans une variable) et non un symbole d’égalité.
• L’interpréteur Python peut être utilisé comme calculatrice. Plus généralement, les instructions
peuvent être tappées directement dans l’interpréteur.
• La priorité des opérations et les parenthèses suivent les mêmes règles qu’en mathématiques.
• Il est possible de faire des affectations multiples.
• Pour afficher des valeurs ou des chaines de caractères, on utilise la fonction print.
• Certains noms de variables sont réservés.
Contrôle du flux d’exécution
Dans notre premier chapitre, nous avons vu que l’activité essentielle d’un programmeur est la
résolution de problèmes. Or, pour résoudre un problème informatique, il faut toujours effectuer
une série d’actions dans un certain ordre. La description structurée de ces actions et de l’ordre
dans lequel il convient de les effectuer s’appelle un algorithme.
Le « chemin » suivi par Python à travers un programme est appelé un flux d’exécution, et les
constructions qui le modifient sont appelées des instructions de contrôle de flux. Les structures
de contrôle sont les groupes d’instructions qui déterminent l’ordre dans lequel les actions sont
effectuées. En programmation moderne, il en existe seulement trois : la séquence et la sélection,
que nous allons décrire dans ce chapitre, et la répétition que nous aborderons au chapitre suivant.
Séquence d’instructions
Sauf mention explicite, les instructions d’un programme s’exécutent les unes après les autres,
dans l’ordre où elles ont été écrites à l’intérieur du script.
Cette affirmation peut vous paraître banale et évidente à première vue. L’expérience montre
cependant qu’un grand nombre d’erreurs sémantiques dans les programmes d’ordinateur sont la
conséquence d’une mauvaise disposition des instructions. Plus vous progresserez dans l’art de
la programmation, plus vous vous rendrez compte qu’il faut être extrêmement attentif à l’ordre
dans lequel vous placez vos instructions les unes derrière les autres. Par exemple, dans la séquence
d’instructions suivantes :
>>> a, b = 3, 7
>>> a = b
>>> b = a
>>> print(a, b)
Vous obtiendrez un résultat contraire si vous intervertissez les 2e et 3e lignes.
Python exécute normalement les instructions de la première à la dernière, sauf lorsqu’il ren-
contre une instruction conditionnelle comme l’instruction if. Une telle instruction va permettre
au programme de suivre différents chemins suivant les circonstances.