Vous êtes sur la page 1sur 38

04/10/2018

Introduction
à la programmation orientée objet

Mohsine Eleuldj
Département Génie Informatique, EMI
eleuldj@emi.ac.ma

Octobre 2018

Introduction à la POO
Objectif
• Apprendre les principes de base de l’algorithmique et de la programmation
orientée objet
• Etre capable de comprendre et d’écrire un programme lisible et maintenable
• Savoir écrire un petit logiciel en Python

Contenu
• Introduction
• Conception des algorithmiques
• Eléments de base du langage Python
• Programmation orientée objet

Evaluation des connaissances :


• Comptes rendus (10%) + TP (20%) + Contrôle avec documents (70%)
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 2

1
04/10/2018

Chapitre I : Introduction

1 Terminologie
2 Structure d’un ordinateur
3 Langages de programmation
4 Systèmes d’exploitation
5 Exécution d’un programme

Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 3

Terminologie

• Algorithme : suite de prescriptions précises qui indiquent l’exécution, dans un


ordre bien déterminé, d’une succession d’opérations en vue de la résolution
d’un problème.

• Programme : ensemble d’ordres ou d’instructions qui agit sur les données pour
produire des résultats sur un ordinateur selon une syntaxe et une sémantique.

• Programmation orientée objet (POO) : une même structure contient les


données et les opérations associées.

• Ordinateur : machine électronique capable d’exécuter un programme enregistré


dans sa mémoire.

• Informatique : traitement automatique de l’information à l’aide d’un ordinateur


(≠ calculatrice sans programmation).
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 4

2
04/10/2018

Méthodologie de développement de programmes

Vérification
Conception (trace)

Problème Algorithme Solution


Traduction
(programmation)

Programme Exécution
Soumission
(compilation)
Soumission

Ordinateur
Données
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 5

Structure d’un ordinateur

Ordinateur
programme
Unité Unité résultat
données Mémoire
d’entrée de sortie

Processeur

Automacité : faculté d’exécuter des millions d’instructions sans intervention humaine


Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 6

3
04/10/2018

Types d’instructions

• Instruction arithmétique ou logique: addition, multiplication, et, ou…


• Instruction de transfert : mouvement de l’information d’un emplacement à un
autre (entre le processeur et la mémoire par exemple)
• Instruction de branchement : rupture de l’exécution séquentielle des
instructions

Enchaînement
Branchement
des instructions

Instruction d’entrée/sortie : lecture ou écriture (caractère, nombre,…)


• Commande de gestion des périphériques (écran, clavier, souris, imprimante,
disque,…)
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 7

Mémoire principale (RAM)


n bits

.
Cellule .
.
m cellules
5408 001011…11
.
.
Adresse .

Mémoire
Mémoire : ensemble de cellules ayant chacune une adresse et contenant des données (bits)
Rôle : emmagasiner les informations + pouvoir les accéder (lecture et écriture)
Caractéristiques des RAM : volatile + capacité limitée (quelques Giga octets) + coût élevé
Technologie : électronique + biologique (dans le stade de la recherche)
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 8

4
04/10/2018

Mémoire secondaire

programme
données
données Ordinateur

Mémoire
secondaire

Technologie : magnétique (disque dur) + optique + dernièrement électronique (SSD :


Solid State Drive)
Temps d’accès : en général, dépend de la localisation de l’information dans le support
Caractéristiques : permanente + capacité (quelques Téra octets) + coût bas (/ à la RAM)
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 9

Configuration de mon système

Processeur : Intel i7-2760QM Fréquence : 2,40 GHz


Mémoire cache 6 Mo Mémoire RAM : 8 Go
Disque dur : 698 Go 4 Cœurs et 8 Threads
Lecteur DVD/CD-ROM Ports COM et LPT
Carte réseau carte graphique
claviers PS/2 contrôleur de bus USB
Bluetooth Souris
contrôleur audio vidéo, Moniteur
lecteur carte à puce Système d’exploitation 64 bits
… Indice de performance :5,2

Exercice : Déterminer la configuration de votre système


(Panneau de configuration/Système)
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 10

5
04/10/2018

Intel Core i7-3770K


160 mm2, 22 nm, 1,4 G transistors et 3,4 GHz

Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 11

Langages de programmation

Définition : Outil à l’aide duquel le programmeur écrit des programmes


exécutables sur un ordinateur
Exemples : FORTRAN, COBOL, Lisp, Pascal, Prolog, Ada, C, Java, R, Python,…

…………
10110110111 ……….. ………..
11101111001 ADD R1,R2 A = x+3
01100011011 MULT R4,13 Print(x,y)
………… …………… ………..

langage binaire Langage symbolique Langage évolué


(langage machine) (langage d’assemblage) (haut niveau)
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 12

6
04/10/2018

Choix du langage de programmation

Programmeur

Langage évolué langage d’assemblage

Compilateur
ou Assembleur
interpréteur
Langage machine

Ordinateur
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 13

Système d’exploitation
Définition : ensemble de programmes qui permettent de gérer (ou exploiter) la
machine (en anglais : Operating System)

Composantes : compilateurs, assembleur, fonctions d’entrée/sortie, mémoire


virtuelle, multiprogrammation, …

Rôle :
• faciliter au programmeur l’utilisation de la machine et ses périphériques
• assurer un bon fonctionnement et une utilisation optimale

Exemples : Unix, Linux, Windows, SunOS, MacOS, Android (téléphone, TV,


Auto,…), iOS (Téléphone),…

Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 14

7
04/10/2018

Exécution d’un programme


Programme
(fichier source)

Compilation
Fichier objet
Edition Bibliothèque
des liens des fonctions
Fichier exécutable

Données

Résultat
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 15

Chapitre II : Conception des algorithmes

1 Notion d’algorithme
2 Structures de contrôle
Enchainement
Sélection binaire
Sélection multiple
3 Structures répétitives
Boucle tant que
Boucle répéter … jusqu’à
Boucle pour
4 Structure de données tableau
5 Etapes de résolution d’un problème

Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 16

8
04/10/2018

Notion d’algorithme
D’après les historiens des mathématiques , l’origine provient du livre "Algèbre
et équations " écrit par Alkhawarizmi en 825
ʺ‫ﺟﻌﻔﺮﻣﺤﻣﺪ إبن ﻣوسى الخواﺮزﻣي ﻔي كتابه ʺالﺟبﺮ و الﻣقابلة‬
Définition : Un algorithme est une suite de prescriptions précises qui indiquent
d’exécuter, dans un ordre déterminé, une succession d’opérations en vue de
la résolution d’un problème.
Exemples
Résolution d’une équation du second degré
Guide d’utilisation d’un appareil ménager
Recette de cuisine sans interprétation ni ambiguïté
Représentation en Pseudo-code (ou langage algorithmique) indépendante de
l’agent (humain ou machine) qui sera appelé à exécuter l’algorithme
(intermédiaire entre un langage naturel et un langage de programmation)
Organigramme : diagramme, qui est une autre représentation d’un algorithme,
composé de rectangles, losanges, flèches, …
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 17

Enchaînement
Problème 1 : Calculer l’intérêt d’un montant sachant que le taux d’intérêt est
de 3,5%

début

1 début lire(montant)
2 lire(montant)
3 intérêt  montant * 3,5% intérêt  montant * 3,5%

4 écrire(intérêt) écrire(intérêt)
5 fin
fin
Pseudo_code
Organigramme
Exercice : Faire la trace pour montant = 1000
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 18

9
04/10/2018

Trace de l’algorithme 1

Opération montant intérêt Ecrire


1 - - -
2 1000 - -
3 1000 35 -
4 1000 35 35
5 1000 35 -

Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 19

Sélection binaire
Problème 2 : Calculer l’intérêt d’un montant sachant que le taux d’intérêt est
de 3,5% si le montant < 10 000 DH et de 4% sinon.
début
1 début
2 lire(montant) lire(montant)
3 si montant < 10 000 alors oui non
4 intérêt  montant * 3,5% montant < 10000
5 sinon
intérêt  montant*3,5% intérêt  montant*4%
6 intérêt  montant * 4%
7 écrire(I)
8 fin écrire(intérêt)

Exercice : Faire la trace pour M=11000 fin


Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 20

10
04/10/2018

Sélections binaires imbriquées


Problème 3 : Calculer l’intérêt d’un montant sachant que le taux d’intérêt
annuel dépend de la période de dépôt P. Il est de 3,5% si P = 1 an, de 4% si
P = 2 ans, de 4,5% si P = 3 ans et de 5% si P ≥ 4 ans.
lire (M, P) lire (M, P)
si P = 1 alors si P = 1 alors
I  M * 3,5% I  M * 3,5%
sinon sinon si P = 2 alors
si P = 2 alors I  M * 4%
I  M * 4% sinon si P = 3 alors
sinon I  M * 4,5%
si P = 3 alors sinon
I  M * 4,5% I  M * 5%
sinon écrire (I)
I  M * 5%
écrire(I)
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 21

Sélection multiple
Problème 4 : Calculer l’intérêt d’un montant sachant que le taux annuel est de
3,5% si la période P=1 an, de 4% si P=2 ans, de 4,5% si P=3 ans et de 5% si
P=4 ans.
lire (M, P)
choisir P de
1 : I  M * 3,5%
2 : I  M * 4%
3 : I  M * 4,5%
4 : I  M * 5%
écrire(I)

Exercice :
a) Dessiner l’organigramme de l’algorithme du problème 3.
b) Quelle est la différence entre les algorithmes du problème 3 et 4 ?
c) Qu’arrive-t-il si P est négatif ou supérieur à 4 ?
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 22

11
04/10/2018

Boucle tant que


Forme générale
tant que <condition> faire
<traitement>

Problème 5 : Calculer la moyenne arithmétique d’une liste de notes (nombres


positifs) tel que le dernier nombre est -1.

1 moyenne  0
2 nombreNotes 0
3 lire(note)
4 tant que note ≠ -1 faire
5 somme  somme + note
6 nombreNotes  nombreNotes + 1
7 lire(note)
8 écrire(somme/nombreNotes)
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 23

Exercice 1
a) Dessiner l’organigramme de l’algorithme. début
b) Faire la trace pour : 12,5 13,5 -1
c) Quel est l’ordre de l’algorithme ? somme  0

nombreNotes  0

lire(note)

oui non
note ≠ -1

somme  somme+note Ecrire(somme/nombreNote)

nombreNotes  nombreNotes+1 fin

lire(note)
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 24

12
04/10/2018

Trace de l’algorithme 5
Opération somme nombreNotes note note ≠ -1 écrire
1 0 - - - -
2 0 0 - - -
3 0 0 12,5 - -
4 0 0 12,5 oui -
5 12,5 0 12,5 - -
6 12,5 1 12,5 - -
7 12,5 1 13,5 - -
4 12,5 1 13,5 oui -
5 26 1 13,5 - -
6 26 2 13,5 - -
7 26 2 -1 - -
3 26 2 -1 non -
8 26
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 2 -1 - 13 25

Boucle répéter … jusqu’à


Forme générale
répéter
<traitement>
jusqu’à <condition>

Problème 6 : Reprenons le problème 5 en utilisant la boucle répéter…jusqu’à.

somme  0
nombreNotes  0
lire(note)
répéter
somme  somme + note
nombreNotes  nolmbreNotes + 1
lire(note)
jusqu’à note = -1
écrire(somme/nombreNotes)
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018
26

13
04/10/2018

Exercice 2
a) Dessiner l’organigramme de l’algorithme.
b) Faire la trace pour la liste : 14 12 15 13 -1
c) Faire la trace pour la liste : -1

Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 27

Boucle pour
Forme générale
pour v=valeur1 à valeur2 avec un pas faire
<traitement>

Problème 7 : Calculer la moyenne arithmétique d’une liste de notes (nombres


positifs) tel que le nombre de notes est donné (nombre d’itérations est
connu à l’avance).

Somme  0
Lire(nombreNotes)
pour i = 1 à nombreNotes faire
lire(note)
somme  somme + note
écrire(somme/nombreNotes)

Introduction à la POO, M. Eleuldj, EMI, Octobre 2018


28

14
04/10/2018

Exercices (1/2)
Problème 8 :
a) Faire la trace de ce algorithme pour : 14 12 15 13
b) Comparer les trois types de boucles (structures répétitives) pour la
résolution du problème du calcul de la moyenne.

Problème 9 : Considérons le calcul du quotient Q et du reste R de la division de


deux nombres positifs A et B en utilisant l’addition et la soustraction
uniquement (la division entière ne doit pas être utilisée).
a) Décrire l’algorithme.
b) Faire la trace pour A = 9 et B = 4
c) Que se passe-t-il si : A = 0 et B ≠ 0; A > 0 et B = 0; A = 0 et B = 0; A < B

Problème 10 : Trouver toutes les valeurs de N (1 ≤ N ≤ 100) tel que :


1 + 2 + … + N = 3(N -1)

Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 29

Exercice (2/2)
Problème 11 : Déterminer le plus grand élément dans une liste de nombres
positifs

Problème 12 : Déterminer la liste des diviseurs d’un nombre entier naturel.


Ecrire un algorithme qui détermine si un nombre est premier (ses seuls
diviseurs est 1 et lui-même).

Problème 13 : Soit l’algorithme suivant:


lire A, ε
XA
répéter
X  (X + A/X)/2
jusqu’à |X2 – A| < ε
écrire X
a) Faire la trace pour A = 9 et ε = 0,1.
b) Que calcule cet algorithme ?
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 30

15
04/10/2018

Structure de donnée tableau


Définition : un tableau est une structure de données qui peut contenir plusieurs
données de même type. Un élément du tableau est accédé en utilisant la
variable du tableau suivie du numéro de l’élément appelé indice

Exemple : Soit T un tableau de 10 entiers


T(5) 26 permet d’affecter la valeur 26 au 5ème élément.

Problème 14 : Considérons que le tableau Notes contient N notes. Calculer la


moyenne arithmétique de ces notes.
a) Ecrire l’algorithme en pseudo-code.
b) Faire la trace de ce algorithme pour Notes=(14 ,12,15,13).

Problème 15: Considérons les diviseurs d’un nombre entier naturel (Problème
12) sont sauvegardés dans un tableau.
a) Ecrire l’algorithme en pseudo-code.
b) Faire la trace de cet algorithme pour 18.
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 31

Etapes de résolution d’un problème


1 Définition précise du problème
généralement les problèmes sont mal définis et représentent des ambiguïtés.
Il faudrait prévoir les cas susceptibles de se produire et préciser le traitement
correspondant (données, traitement, résultats et erreurs)
2 Méthode de développement
procédurale (déclarative)
orientée objet
3 Conception des algorithmes
4 Validation des algorithmes
les algorithmes doivent répondre aux spécifications (trace)
5 Codification
expression (traduction) des algorithmes en langage de programmation
dépendamment des langages disponibles et de la nature du problème.
6 Mise au point
correction des erreurs de syntaxe et de sémantique (à l’aide des jeux d’essai).
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 32

16
04/10/2018

Chapitre III
Notions de base du langage Python

1 Caractéristiques du langage
2 Interpréteur
3 Syntaxe de base du langage
4 Sélection (binaire et multiple)
5 Répétition (tant que et pour)
6 Structure de données (liste et chaîne de caractère)
7 Fonctions de lecture et écriture

Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 33

Caractéristiques du langage Python


Simplicité de la syntaxe  facilité d’apprentissage
indentation au lieu des délimiteurs
Utilisation des variables et paramètres sans déclaration
Puissance de la programmation (inclusion de bibliothèques de fonctions)
Efficacité des structures de données de haut niveau (liste, dictionnaire,…)
Typage dynamique (langage non typé)
Paradigmes de programmation
Procédural
fonctionnel
Orientée objet
Interprétation des instructions  interpréteur (≠ compilation)
Rapidité du développement d’applications dans certains domaines
Open Source
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 34

17
04/10/2018

Interpréteur Python

Mode interactif
Semblable au fonctionnement d’une calculatrice
Lancement de l’interpréteur
Exécution d’une instruction à la fois

Mode non interactif


Edition du programme (module ou script)dans un fichier avec l’extension .py 
(pour python)
Exécution du programme lance l’interpréteur en mode interactif
D’autres instructions peuvent être exécutées directement en mode interactif

Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 35

Syntaxe de base du langage Python

Identificateur
commence par une lettre,_(sousligné) ou $ et différencie les majuscules et
minuscules
convention d’écriture : classe (MonEcole), fonction (calculProduit),
variable (taille, ordreMatrice) et constante (MAX_AGE)
Commentaire: #, ou  ….sur plusieurs lignes….
Opérateurs
arithmétique : +, -, *, /, %,
logique : !, and, or,…
comparaison : <, >, <=, >=, ==, !=
affectation : =, +=, -=, *=, /=, …
Types de données standards: int (entier), float (réel), str (chaîne de caractère
délimitée par ’ ou ), bool (True, False)
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 36

18
04/10/2018

Sélection binaire
if <condition> :
<bloc 1> les blocs sont délimités (identifiés) par l’indentation
else :
< bloc 2>

Exemple :
if nombre%2 == 0 : # si le reste de la division par 2 est nul
print(nombre,  est pair )
else :
print(nombre,  est impair )

Exercice: Ecrire un programme pour calculer l’intérêt I d’un montant M


sachant que le taux d’intérêt est de 3,5% si M < 10 000 DH et de 4% sinon.
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 37

Sélection multiple

if <condition 1> :
< bloc 1>
elif <condition 2> :
<bloc 2>

elif <condition n> :
<bloc n>
else :
<bloc n+1>

Exercice : Calculer l’intérêt I d’un montant M sachant que le taux annuel est
de 3,5% si P=1 an, de 4% si P=2 ans, de 4,5% si P=3 ans et de 5% si P=4
ans.
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 38

19
04/10/2018

Boucle tant que


while <condition> :
<bloc>

Exemple : Boucle infinie


while True:
print(‘encore un message’)

Exercice : Considérons une liste de nombres (valeurs positives) tel que le


dernier nombre est 0.
a) En utilisant une boucle tant que, écrire un algorithme pour calculer la
moyenne arithmétique de cette liste.
b) Exécuter cet programme pour les listes : [14.5, 12, 15, 13, 0], [0], [12, 14],
[14, -13, 0].
c) Traduire cet algorithme en un programme Python
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 39

Boucle pour
for <variable> in <sequence> :
<bloc>

Remarques : si <sequence> est une liste, la variable d’itération <variable>


prend la première valeur de la liste dans la première itération, puis la
deuxième ainsi de suite jusqu’à la dernière valeur.

Exemple :
for i in range(0,15,2):
print (i)

Exercice : Calculer la moyenne arithmétique d’un tableau de nombres positifs


dont le dernier élément est 0.
a) Ecrire le programme en utilisant la boucle pour.
b) Exécuter le programme pour le tableau : 14 12 15 13 0
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 40

20
04/10/2018

Listes

Liste est une ensemble d’items entre crochets


carres = [1, 4, 9, 15, 25] # affectation de la liste carres
carres[0] # premier item de la liste
carres[-1] # dernier item de la liste
carres[-3 :] # [9, 15, 25]
carres[ :] # toute la liste
carres[3]=[16] # modification du quatrième item (mutable)
carrés + [36, 49] # ajout de deux items à la liste
carrés.append(64) # ajout d’un autre item
n=[a ,  b ] #
liste = [carrés,n] # un item de la liste est une liste (liste de liste)
liste[0][1] # le deuxième item de la première liste (4)
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 41

Chaînes de caractères

Une chaîne de caractères est une séquence de caractères délimitée par ‘ ou 


Ligne = première ligne
doubleLigne = première ligne\ndeuxième ligne # \n : une nouvelle ligne
3 * très  + important ! # concaténation grâce aux opérateurs + et *
mot = Python # Initialisation
mot[0] # caractère de la position 0
mot[4] # caractère de la position 4
mot[-1] # dernier caractère
mot[-2] # avant dernier caractère
mot[0:2] # les 2 premiers caractères
mot[ 0] = ’J’ # erreur car les chaînes ne sont pas modifiables(mutables)
len(mot) # retourne la longueur de la chaîne de caractères
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 42

21
04/10/2018

Fonction de lecture et écriture

input : fonction de lecture qui retourne une chaîne de caractères


print : fonction d’écriture (qui ne retourne aucune valeur)

Exemples :
nomJoueur = input(introduire le nom du joueur :) # lecture du nom
nomJoueur # affichage dans l’interpréteur
montant = int(input("Introduire le montant: ")) # conversion d’un entier
print( \t bonjour tout le monde\n la température d’aujourd’huit est tout le monde)
texte= bon{}
print(texte.format( jour)) # formatage de la sortie
Pi = 3.1429
print('Pi== {:6.2f}'.format(pi)) # spécification du nombre de décimaux
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 43

Chapitre IV
Programmation orientée objet en Python

1 Paradigmes de programmation
2 Classe et objet
3 Diagramme de classe
4 Héritage
5 Classe et objet en Python
6 Gestion d’une école
7 Fichier

Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 44

22
04/10/2018

Paradigmes de programmation

Programmation structurée (traditionnelle ou classique)


Séparation des données et des opérations
Initialisation des structures de données
Traitement des données par les procédures et les fonctions

Programmation orientée objet (POO)


Une même structure contient les données et les opérations associées

Historique de la POO
Origine : langage Simula 67 en 1967
Intérêt grandissant à partir du milieu des années 80 : C++, Java, Python, …

Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 45

Classe et objet

Classe : définition d’un type généralement composé de propriétés et méthodes


(Modèle ou moule)
Objet : déclaration d’un variable d’une classe pouvant accéder aux propriétés et
méthodes de la classe (Exemple ou produit identifié)
Instanciation : création d’un objet à partir d’une classe (exemple selon un modèle
ou produit à l’aide d’un moule)

Rectangle
int largeur classe
int longueur
propriétés
périmètre()
double surface()
méthodes

Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 46

23
04/10/2018

Diagramme des classes

Etudiant Enseignant
String nom String nom classe
int annéeNaissance int annéeNaissance
String cin String cin
String filière String grade
int niveau String [] coursEnseignés propriétés
int [] notes int calculerAge()
int calculerAge() String [] saisirCours()
int [] saisirNotes () double calculerSalaire()
double calculerMoyenne() méthodes

Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 47

Héritage

Citoyen
String nom
int annéeNaissance
String cin
int calculerAge()

EtudiantH EnseignantH
String filière String grade
int niveau String [] coursEnseignés
int [] notes String [] saisirCours()
int [] saisirNotes () double calculerSalaire()
double calculerMoyenne()
La classe fille EtudiantH hérite (attributs et méthodes) de la classe mère Citoyen
La classe EtudiantH est une spécialisation de la classe Citoyen
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 48

24
04/10/2018

Classe et objet en Python

En Python, tout est objet


>>> nombre = 134 # création d’un objet de type entier (instanciation)
>>> type(nombre) # donner le type de la variable nombre

Attribut : variable d’une classe


Propriété : manière de manipuler les attributs (lecture seule,…)

class Rectangle: # classe qui ne contient ni méthode ni attribut


pass # mot clé sans aucun effet (circuler, rien à voir)

print("démarrage") # première instruction exécutable


r1 = Rectangle() # instanciation (création) d’un objet Rectangle
r2 = Rectangle() # instanciation d’un autre objet Rectangle
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 49

Classe avec un attribut et une méthode

class Rectangle:
couleur = "bleu " # attribut partagé par tous les objets de la classe (global)
def __init__(self): # méthode particulière appelée constructeur
print("Création d'un rectangle")

print("démarrage")
r1 = Rectangle() # instanciation
print(l’attribut couleur = , r1.couleur) # accès à l’attribut et affichage

r2 = Rectangle() # instanciation
r 2.couleur =  rouge  # modification du contenu de l’attribut
print( l’attribut couleur = , r1.couleur)

Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 50

25
04/10/2018

Classe avec constructeur et attributs


class Rectangle:
def __init__(self): # constructeur de la classe
print("Création d'un objet rectangle")
self.largeur = 5 # premier attribut
self.longueur = 7 # deuxième attribut

print("démarrage")
r1 = Rectangle() # instanciation d’un objet
print( largeur =  , r1.largeur,  longueur =  , r1.longueur)
r2 = Rectangle() # initialisation des attributs par défaut
r2.largeur = 4 # modification de l’initialisation par défaut
r2.largeur = 6
print( largeur =  , r2.largeur,  longueur =  , r2.longueur)
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 51

Paramètres du constructeur et méthodes


class Rectangle:
def __init__(self, larg, long): # constructeur
print("Création d'un objet Etudiant")
self.largeur =larg # affectation de larg au premier attribut
self.longueur=long # affectation de long deuxième attribut
def perimetre(self): # première méthode ne retourne pas de valeur)
print("périmètre =", (self.largeur+self.longueur)*2)
def surface(self): # deuxième méthode (retourne une valeur)
return self.longueur*self.longueur

r1=Rectangle(5,9) # instanciation d’un objet


r1.perimetre() # appel de la première méthode
print("surface = " , r1.surface()) # autre manière d’appel : Rectangle.surface(r1)
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 52

26
04/10/2018

Exercice : Gestion d’un école


1 Créer une classe "Etudiant "
Attributs : nom, annéeNaissance, cin, filière, niveau et notes
Méthodes : saisirNotes, calculerAge et calculerMoyenne
2 Instancier 3 objets Etudiant et afficher l’age moyen et la moyenne des notes
3 Créer une classe " Enseignant "
Attributs : nom, annéeNaissance, cin, grade, coursEnseignés
Méthodes : calculerAge, saisirCours, calculerSalaire.
4 Instanciation 2 objets Enseignant éléments d’une liste et afficher l’age moyen
et le montant des salaires.
5 Créer une classe Citoyen regroupant les attributs et méthodes communes des
classes Etudiant et Enseignant
6 Modifier les classes Etudiant et Enseignant pour hériter les attributs et les
méthodes de la classe Citoyen
N.B.: salaire = nombre de cours * grade * 30 (PA=250, PH=300 et PES=350)
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 53

Gestion des étudiants (1/2)

# Déclaration de la classe Etudiant


class Etudiant :

# definition du constructeur
def __init__(self, n, a, c, f, l) :
self.nom = n # initialisation du nom
self.anneeNaissance; = a # initialisation de l’année de naissance
self.cin = c # initialisation de la CIN
self.filiere = f # initialisation de la filière
self.niveau = l # initialisation du niveau d’étude
self.notes = self.saisirNotes() # initialisation des notes par une méthode

# méthode qui retourne une liste de notes lues


def saisirNotes(self) :
.....
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 54

27
04/10/2018

Gestion des étudiants (2/2)


# méthode qui retourne l’age moyen des étudiants
def calculerAge(self) :
…..
# méthode qui retourne la moyenne des notes
def calculerMoyenne(self) :
…..

e1 = Etudiant("Benahmed",1993,"AB20016","Mécanique",1)
e2 = Etudiant("Aithadou",1995,"Y602219","Mécanique",1)
e3 = Etudiant("Zaitouni",1992,"DS74002","Informatique",3)

ageMoyen = (e1.calculerAge() + e2. calculerAge() + e3. calculerAge())/3


moyenneGenerale = (e1. calculerMoyenne() + e2. calculerMoyenne())/2
print("\nAge moyen des étudiants = ", ageMoyen)
print("Moyenne générale de Génie Mécanique = " , moyenneGenerale)
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 55

Exécution de Gestion des étudiants

Veuillez introduire le nombre de notes de Benahmed: 1


introduire la note 1 : 13
Veuillez introduire le nombre de notes de Aithadou: 2
introduire la note 1 : 11
introduire la note 2 : 17
Veuillez introduire le nombre de notes de Zaitouni: 1
introduire la note 1 : 12

Age moyen des étudiants = 22.0


Moyenne générale de Génie Mécanique = 13.5

Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 56

28
04/10/2018

Gestion des enseignants (1/2)


# Déclaration de la classe Enseignant
class Enseignant :
# définition du constructeur
def __init__(self, n, a, c, g) :
self.nom = n # attributs initialisés à la création de l’objet
self.anneeNaissance = a
self.cin = c
self.grade = g
self.coursEnseignes = self.saisirCours()

# méthode qui retourne la liste des cours enseignés


def saisirCours(self) :
…..
# méthode qui retourne l’age de l'enseignant
def calculerAge(self) :
…..
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 57

Gestion des enseignants (2/2)


# méthode qui retourne le salaire de l'enseignant
def calculerSalaire(self) :
…..
print("démarrage")
enseignants = [] # une liste d’objets de la classe Enseignant
enseignants.append(Enseignant("Kamoun",1953,"GF01205","PES"))
enseignants.append(Enseignant("Labied",1975,"H089274","PA"))

sommeAge = 0
sommeSalaire = 0
for e in enseignants :
sommeAge += e.calculerAge()
sommeSalaire += p.calculerSalaire()
print(("\nAge moyen des enseignants = ", sommeAge/len(enseignants))
print("Total des salaires des enseignants = ", sommeSalaire)
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 58

29
04/10/2018

Exécution de Gestion des enseignants

démarrage
Veuillez introduire le nombre de cours du Pr. Kamoun: 1
introduire le cours 1 : SGBD
Veuillez introduire le nombre de cours du Pr. Labied: 2
introduire le cours 1 : RDM
introduire le cours 2 : CAO

Age moyen des enseignants = 52.0


Total des salaires = 28500.0

Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 59

Gestion des étudiants avec héritage


Classe Citoyen
 Déclaration de la classe mère Citoyen regroupant les attributs et méthodes
communs des classes filles Etudiant et Enseignant 
class Citoyen :
def __init__(self, n, a, c) :
self.nom = a # initialisation du nom
self.anneeNaissance = a # initialisation du la date de naissance
self.cin = c # initialisation de la CIN

def calculerAge(self) :
return 2017 – self.anneeNaissance

Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 60

30
04/10/2018

Gestion des étudiants avec héritage


Classe EtudiantH
""" Déclaration de la classe fille Etudiant qui hérite des attributs et méthodes de la
classe mère Citoyen """
class EtudiantH (Citoyen) :
# constructeur
def __init__(self,n,a,c,f,l):
print("Création d'un objet EtudiantH")
Citoyen.__init__(self,n,a,c) # appel du constructeur de Citoyen
self.filiere = f # initialisation du la filière
self.niveau = l # initialisation du niveau d’étude
self.notes=self.saisirNotes() # initialisation des notes obtenues

def saisirNotes() :
…..
def calculerMoyenne() :
…..
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 61

Gestion des étudiants avec héritage

e1 = EtudiantH("Benahmed",1993,"AB20016","Mécanique",1)
e2 = EtudiantH("Aithadou",1995,"Y602219","Mécanique",1)
e3 = EtudiantH("Zaitouni",1992,"DS74002","Informatique",3)

ageMoyen = (e1.calculerAge() + e2. calculerAge() + e3. calculerAge())/3


moyenneGenerale = (e1. calculerMoyenne() + e2. calculerMoyenne())/2
print("\nAge moyen des étudiants = ", ageMoyen)
print("Moyenne générale de Génie Mécanique = " , moyenneGenerale)

Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 62

31
04/10/2018

Exécution de Gestion des étudiants avec héritage

Veuillez introduire le nombre de notes de Benahmed: 1


introduire la note 1 : 13
Veuillez introduire le nombre de notes de Aithadou: 2
introduire la note 1 : 11
introduire la note 2 : 17
Veuillez introduire le nombre de notes de Zaitouni: 1
introduire la note 1 : 12

Age moyen des étudiants = 22.666666666666668


Moyenne générale = 13.0

Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 63

Gestion des enseignants avec héritage


Classe EnseignantH
""" Déclaration de la classe fille Enseignant qui hérite des attributs et méthodes de
la classe mère Citoyen """
class EnseignantH (Citoyen) :
# constructeur
def __init__(self,n,a,c,g):
print("Création d'un objet EnseignantH")
Citoyen.__init__(self,n,a,c) # appel du constructeur de Citoyen
self.grade = g # initialisation du grade
self.coursEnseignes = self.saisirCours() # initialisation par une méthode

def saisirCours() :
…..
def calculerSalaire() :
…..

Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 64

32
04/10/2018

Gestion des enseignants avec héritage

Enseignants=[] # liste d’objets de la classe Enseignant


enseignants.append (EnseignantH("Kamoun",1953,"GF01205","PES"))
enseignants.append(EnseignantH("Labied",1975,"H089274","PA"))

sommeAge = 0
sommeSalaire = 0

for p in enseignants :
sommeAge += p.calculerAge()
sommeSalaire += p.calculerSalaire()

ageMoyen = sommeAge/len(enseignants)
print("\nAge moyen des enseignants = ", ageMoyen)
print("Total des salaires des enseignants = ", sommeSalaire)

Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 65

Exécution de Gestion des enseignants avec héritage

Veuillez introduire le nombre de cours du Pr. Kamoun: 1


introduire le cours 1 : SGBD
Veuillez introduire le nombre de cours du Pr. Labied: 2
introduire le cours 1 : RDM
introduire le cours 2 : CAO

Age moyen des enseignants = 52.0


Total des salaires = 34500.0

Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 66

33
04/10/2018

Tri d’un tableau


fonction triCroissant (T[1..n])
pour i  2 jusqu'à n faire
x  T[i]
ji-1
tant que j > 0 et T[j] > x faire
T[j + 1]  T[j]
jj-1
T[j + 1]  x
retourner T
Exercice
a) Faire la trace pour T = {3,1,4,2}
b) Traduire cet algorithme en Python
c) Modifier l’algorithme pour effectuer un tri en ordre décroissant
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 67

Fichier

Types de fichier
texte
binaire
Modes d’ouverture
r : lecture seule
w : écriture avec remplacement
a : écriture avec ajout en fin de fichier
x : lecture et écriture
Exemple
fichier = open(donnees.txt , r) # ouverture en lecture
fichier.close() # fermeture du fichier
if fichier.closed:
print("le fichier est fermé")
else :
print("le fichier ",fichier, " est ouvert")
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 68

34
04/10/2018

Fichier : Lecture

fichier = open(donnees.txt , r) # ouverture en lecture


content = fichier.read() # lecture de tout le fichier
print(content) # affichage du contenu
fichier.close() # fermeture du fichier

fichier = open(donnees.txt , r) # ouverture en lecture


ligne = fichier.readline() # lecture de la première ligne
ligne = fichier.readline() # lecture de la deuxième ligne
lignes = fichier.readlines() # lecture du reste du fichier
fichier.close() # fermeture du fichier

Remarques
la métthode read retourne une chaîne de caractères comme input
 pour faire des calculs, il faut transformer l’entrée en un nombre

Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 69

Fichier : Ecriture

fichier1 = open(donnees.txt , w) # ouverture en lecture


fichier1.write( première ligne \n) # lecture de tout le fichier
fichier1.write(str(150)) # affichage du contenu
fichier1.write( première ligne ) # affichage du contenu
fichier1.close() # fermeture du fichier

Autre manière de gérer les fichiers


with open(donnees.txt , r) as fichier : # la fermeture n’est pas nécessaire
content = fichier.read()
print(content)

Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 70

35
04/10/2018

Fichier binaire

import pickle # bibliothèque pour les fichiers binaires


class Joueur :
def __init__(self, nom, niveau): # constructeur
self.nom=nom
self.niveau=niveau
def whoIam(self): # méthode d’affichage
print(self.nom,":",self.niveau)
J1=Joueur("Hamid",103) # instanciation d’un objet
with open("doc.data","wb") as fichier: # mode d’écriture binaire
record = pickle.Pickler(fichier) # définir un enregistrement
record.dump(J1) # copier l’objet dans l’enregistrement
with open("doc.data","rb") as fichier: # mode de lecture binaire
get_record = pickle.Unpickler(fichier) # récupérer l’enregistrement
J1=get_record.load() # récupérer l’objet
J1.whoIam() # afficher ses informations
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 71

Exercice 2

Reprenons le programme Gestion des étudiants.


a) Modifier le programme pour enregistrer les étudiants dans un fichier.
b) Enregistrer également les résultats obtenus

Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 72

36
04/10/2018

Exercice 2

Considérons une compétition sportive où n athlètes peuvent avoir un certain


nombre de médailles en or, argent ou bronze.
a) Ecrire un algorithme qui calcule le nombre total de médailles (or, argent et
bronze).
b) Faire la trace pour les concurrents suivants.
c) Ecrire un programme en Python

Nom Or Argent Bronze


Ahmed 1 4 0
Amina 2 0 1
Amal 0 2 0

Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 73

Exercice 3

Considérons des jeux universitaires qui mettent en concurrence des étudiants


de plusieurs établissements. Les organisateurs souhaiteraient informatiser la
gestion de cet événement.
a) Ecrire en Python une classe Etablissement sachant qu’un établissent est
identifié par son nom, le nombre total de médailles obtenues et un tableau
d’étudiants
b) Inclure une méthode pour remplir la liste des étudiants et une méthode pour
trouver le nombre total des médailles (Or, Argent et Bronze obtenues).
c) Ecrire en Python un programme pour afficher le classement des
établissements selon le nombre de médailles obtenues.

Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 74

37
04/10/2018

Références

Tutoriel
https://docs.python.org/3.7/tutorial/index.html

Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 75

38

Vous aimerez peut-être aussi