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
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
Terminologie
• 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.
2
04/10/2018
Vérification
Conception (trace)
Programme Exécution
Soumission
(compilation)
Soumission
Ordinateur
Données
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 5
Ordinateur
programme
Unité Unité résultat
données Mémoire
d’entrée de sortie
Processeur
3
04/10/2018
Types d’instructions
Enchaînement
Branchement
des instructions
.
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
5
04/10/2018
Langages de programmation
…………
10110110111 ……….. ………..
11101111001 ADD R1,R2 A = x+3
01100011011 MULT R4,13 Print(x,y)
………… …………… ………..
6
04/10/2018
Programmeur
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)
Rôle :
• faciliter au programmeur l’utilisation de la machine et ses périphériques
• assurer un bon fonctionnement et une utilisation optimale
7
04/10/2018
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
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
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
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)
10
04/10/2018
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
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
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
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
Boucle pour
Forme générale
pour v=valeur1 à valeur2 avec un pas faire
<traitement>
Somme 0
Lire(nombreNotes)
pour i = 1 à nombreNotes faire
lire(note)
somme somme + note
écrire(somme/nombreNotes)
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.
Exercice (2/2)
Problème 11 : Déterminer le plus grand élément dans une liste de nombres
positifs
15
04/10/2018
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
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
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
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 )
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 pour
for <variable> in <sequence> :
<bloc>
Exemple :
for i in range(0,15,2):
print (i)
20
04/10/2018
Listes
Chaînes de caractères
21
04/10/2018
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
22
04/10/2018
Paradigmes de programmation
Historique de la POO
Origine : langage Simula 67 en 1967
Intérêt grandissant à partir du milieu des années 80 : C++, Java, Python, …
Classe et objet
Rectangle
int largeur classe
int longueur
propriétés
périmètre()
double surface()
méthodes
23
04/10/2018
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
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
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)
25
04/10/2018
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
26
04/10/2018
# 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
27
04/10/2018
e1 = Etudiant("Benahmed",1993,"AB20016","Mécanique",1)
e2 = Etudiant("Aithadou",1995,"Y602219","Mécanique",1)
e3 = Etudiant("Zaitouni",1992,"DS74002","Informatique",3)
28
04/10/2018
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
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
def calculerAge(self) :
return 2017 – self.anneeNaissance
30
04/10/2018
def saisirNotes() :
…..
def calculerMoyenne() :
…..
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 61
e1 = EtudiantH("Benahmed",1993,"AB20016","Mécanique",1)
e2 = EtudiantH("Aithadou",1995,"Y602219","Mécanique",1)
e3 = EtudiantH("Zaitouni",1992,"DS74002","Informatique",3)
31
04/10/2018
def saisirCours() :
…..
def calculerSalaire() :
…..
32
04/10/2018
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)
33
04/10/2018
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
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
Fichier : Ecriture
35
04/10/2018
Fichier binaire
Exercice 2
36
04/10/2018
Exercice 2
Exercice 3
37
04/10/2018
Références
Tutoriel
https://docs.python.org/3.7/tutorial/index.html
38