initroduction poo 2018 [mode de compatibilité] support 2018.pdf · 3 dqv gh vl 3 dqv hw gh vl 3...
Post on 22-Jul-2020
3 Views
Preview:
TRANSCRIPT
04/10/2018
1
Introductionà la programmation orientée objet
Mohsine Eleuldj
Département Génie Informatique, EMI
eleuldj@emi.ac.ma
Octobre 2018
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 2
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%)
04/10/2018
2
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 3
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 4
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).
04/10/2018
3
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 5
Méthodologie de développement de programmes
Problème Algorithme Solution
Programme
Données
ConceptionVérification
(trace)
Traduction(programmation)
Soumission(compilation)
Soumission
Exécution
Ordinateur
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 6
Structure d’un ordinateur
Mémoire Unitéde sortie
Unitéd’entrée
Processeur
programme
donnéesrésultat
Ordinateur
Automacité : faculté d’exécuter des millions d’instructions sans intervention humaine
04/10/2018
4
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 7
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
Instruction d’entrée/sortie : lecture ou écriture (caractère, nombre,…)
• Commande de gestion des périphériques (écran, clavier, souris, imprimante, disque,…)
Enchaînementdes instructions
Branchement
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 8
Mémoire principale (RAM)
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)
001011…115408
Adresse
Cellule
Mémoire
n bits
m cellules
.
.
.
.
.
.
04/10/2018
5
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 9
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)
Ordinateur
Mémoiresecondaire
programme
donnéesdonnées
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 10
Configuration de mon système
Processeur : Intel i7-2760QM Fréquence : 2,40 GHzMémoire cache 6 Mo Mémoire RAM : 8 GoDisque dur : 698 Go 4 Cœurs et 8 ThreadsLecteur DVD/CD-ROM Ports COM et LPTCarte réseau carte graphiqueclaviers PS/2 contrôleur de bus USBBluetooth Souriscontrôleur audio vidéo, Moniteurlecteur 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)
04/10/2018
6
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 11
Intel Core i7-3770K160 mm2, 22 nm, 1,4 G transistors et 3,4 GHz
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 12
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,…
…………101101101111110111100101100011011…………
langage binaire(langage machine)
………..ADD R1,R2MULT R4,13……………
Langage symbolique (langage d’assemblage)
………..A = x+3Print(x,y)………..
Langage évolué(haut niveau)
04/10/2018
7
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 13
Choix du langage de programmation
Compilateurou
interpréteur
Langage machine
langage d’assemblage
Assembleur
Langage évolué
Programmeur
Ordinateur
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 14
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),…
04/10/2018
8
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 15
Exécution d’un programme
Fichier exécutable
Résultat
Bibliothèquedes fonctions
Programme(fichier source)
Editiondes liens
Compilation
Fichier objet
Données
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 16
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
04/10/2018
9
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 17
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.
ExemplesRésolution d’une équation du second degréGuide d’utilisation d’un appareil ménagerRecette 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 18
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%
1 début
2 lire(montant)
3 intérêt montant * 3,5%
4 écrire(intérêt)
5 fin
Pseudo_code
lire(montant)
intérêt montant * 3,5%
écrire(intérêt)
début
fin
Organigramme
Exercice : Faire la trace pour montant = 1000
04/10/2018
10
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 19
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 20
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.
oui non
lire(montant)
écrire(intérêt)
début
fin
montant < 10000
intérêt montant*3,5% intérêt montant*4%
1 début
2 lire(montant)
3 si montant < 10 000 alors
4 intérêt montant * 3,5%
5 sinon
6 intérêt montant * 4%
7 écrire(I)
8 fin
Exercice : Faire la trace pour M=11000
04/10/2018
11
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 21
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)si P = 1 alors
I M * 3,5%sinon si P = 2 alors
I M * 4%sinon si P = 3 alors
I M * 4,5%sinon
I M * 5%écrire (I)
lire (M, P)si P = 1 alors
I M * 3,5%sinon
si P = 2 alorsI M * 4%
sinonsi P = 3 alors
I M * 4,5%sinon
I M * 5%écrire(I)
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 22
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 ?
04/10/2018
12
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 23
Boucle tant que
Forme généraletant 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 02 nombreNotes 03 lire(note)4 tant que note ≠ -1 faire5 somme somme + note6 nombreNotes nombreNotes + 17 lire(note)8 écrire(somme/nombreNotes)
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 24
Exercice 1
a) Dessiner l’organigramme de l’algorithme.b) Faire la trace pour : 12,5 13,5 -1c) Quel est l’ordre de l’algorithme ?
oui non
nombreNotes 0
nombreNotes nombreNotes+1
début
fin
note ≠ -1
somme somme+note
somme 0
lire(note)
lire(note)
Ecrire(somme/nombreNote)
04/10/2018
13
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 25
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 2 -1 - 13
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 26
Boucle répéter … jusqu’à
Forme généralerépéter
<traitement> jusqu’à <condition>
Problème 6 : Reprenons le problème 5 en utilisant la boucle répéter…jusqu’à.
somme 0nombreNotes 0lire(note)répéter
somme somme + notenombreNotes nolmbreNotes + 1lire(note)
jusqu’à note = -1écrire(somme/nombreNotes)
04/10/2018
14
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 27
Exercice 2
a) Dessiner l’organigramme de l’algorithme.b) Faire la trace pour la liste : 14 12 15 13 -1c) Faire la trace pour la liste : -1
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 28
Boucle pour
Forme généralepour 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 0Lire(nombreNotes)pour i = 1 à nombreNotes faire
lire(note)somme somme + note
écrire(somme/nombreNotes)
04/10/2018
15
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 29
Exercices (1/2)
Problème 8 :a) Faire la trace de ce algorithme pour : 14 12 15 13b) 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 = 4c) 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 30
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 Arépéter
X (X + A/X)/2jusqu’à |X2 – A| < εécrire X
a) Faire la trace pour A = 9 et ε = 0,1.b) Que calcule cet algorithme ?
04/10/2018
16
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 31
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 entiersT(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 32
Etapes de résolution d’un problème
1 Définition précise du problèmegé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éveloppementprocédurale (déclarative)orientée objet
3 Conception des algorithmes4 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 pointcorrection des erreurs de syntaxe et de sémantique (à l’aide des jeux d’essai).
04/10/2018
17
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 33
Chapitre IIINotions 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 34
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
04/10/2018
18
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 35
Interpréteur Python
Mode interactifSemblable au fonctionnement d’une calculatrice
Lancement de l’interpréteur
Exécution d’une instruction à la fois
Mode non interactifEdition 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 36
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)
04/10/2018
19
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 37
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 38
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.
04/10/2018
20
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 39
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 40
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
04/10/2018
21
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 41
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 42
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 lignedoubleLigne = 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
04/10/2018
22
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 43
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 44
Chapitre IVProgrammation 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
04/10/2018
23
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 45
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 46
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 largeurint longueur
périmètre()double surface()
classe
propriétés
méthodes
04/10/2018
24
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 47
Diagramme des classes
Etudiant
String nomint annéeNaissanceString cinString filièreint niveauint [] notes
int calculerAge()int [] saisirNotes ()double calculerMoyenne()
Enseignant
String nomint annéeNaissanceString cinString gradeString [] coursEnseignés
int calculerAge()String [] saisirCours()double calculerSalaire()
classe
propriétés
méthodes
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 48
Héritage
EtudiantH
String filièreint niveauint [] notes
int [] saisirNotes ()double calculerMoyenne()
Citoyen
String nomint annéeNaissanceString cin
int calculerAge()
EnseignantH
String gradeString [] coursEnseignés
String [] saisirCours()double calculerSalaire()
La classe fille EtudiantH hérite (attributs et méthodes) de la classe mère CitoyenLa classe EtudiantH est une spécialisation de la classe Citoyen
04/10/2018
25
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 49
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 50
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)
04/10/2018
26
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 51
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 52
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)
04/10/2018
27
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 53
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 54
Gestion des étudiants (1/2)
# Déclaration de la classe Etudiantclass Etudiant :
# definition du constructeurdef __init__(self, n, a, c, f, l) :
self.nom = n # initialisation du nom self.anneeNaissance; = a # initialisation de l’année de naissanceself.cin = c # initialisation de la CINself.filiere = f # initialisation de la filièreself.niveau = l # initialisation du niveau d’étudeself.notes = self.saisirNotes() # initialisation des notes par une méthode
# méthode qui retourne une liste de notes lues def saisirNotes(self) :
.....
04/10/2018
28
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 55
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())/3moyenneGenerale = (e1. calculerMoyenne() + e2. calculerMoyenne())/2print("\nAge moyen des étudiants = ", ageMoyen)print("Moyenne générale de Génie Mécanique = " , moyenneGenerale)
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 56
Exécution de Gestion des étudiants
Veuillez introduire le nombre de notes de Benahmed: 1introduire la note 1 : 13
Veuillez introduire le nombre de notes de Aithadou: 2introduire la note 1 : 11introduire la note 2 : 17
Veuillez introduire le nombre de notes de Zaitouni: 1introduire la note 1 : 12
Age moyen des étudiants = 22.0Moyenne générale de Génie Mécanique = 13.5
04/10/2018
29
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 57
Gestion des enseignants (1/2)
# Déclaration de la classe Enseignantclass Enseignant :
# définition du constructeurdef __init__(self, n, a, c, g) :
self.nom = n # attributs initialisés à la création de l’objetself.anneeNaissance = aself.cin = cself.grade = gself.coursEnseignes = self.saisirCours()
# méthode qui retourne la liste des cours enseignésdef saisirCours(self) :
…..# méthode qui retourne l’age de l'enseignantdef calculerAge(self) :
…..
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 58
Gestion des enseignants (2/2)
# méthode qui retourne le salaire de l'enseignantdef calculerSalaire(self) :
…..print("démarrage")enseignants = [] # une liste d’objets de la classe Enseignantenseignants.append(Enseignant("Kamoun",1953,"GF01205","PES"))enseignants.append(Enseignant("Labied",1975,"H089274","PA"))
sommeAge = 0sommeSalaire = 0for e in enseignants :
sommeAge += e.calculerAge()sommeSalaire += p.calculerSalaire()
print(("\nAge moyen des enseignants = ", sommeAge/len(enseignants))print("Total des salaires des enseignants = ", sommeSalaire)
04/10/2018
30
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 59
Exécution de Gestion des enseignants
démarrage Veuillez introduire le nombre de cours du Pr. Kamoun: 1
introduire le cours 1 : SGBDVeuillez introduire le nombre de cours du Pr. Labied: 2
introduire le cours 1 : RDMintroduire le cours 2 : CAO
Age moyen des enseignants = 52.0Total des salaires = 28500.0
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 60
Gestion des étudiants avec héritageClasse 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 nomself.anneeNaissance = a # initialisation du la date de naissanceself.cin = c # initialisation de la CIN
def calculerAge(self) :return 2017 – self.anneeNaissance
04/10/2018
31
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 61
Gestion des étudiants avec héritageClasse 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 Citoyenself.filiere = f # initialisation du la filièreself.niveau = l # initialisation du niveau d’étudeself.notes=self.saisirNotes() # initialisation des notes obtenues
def saisirNotes() :…..
def calculerMoyenne() :…..
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 62
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())/3moyenneGenerale = (e1. calculerMoyenne() + e2. calculerMoyenne())/2print("\nAge moyen des étudiants = ", ageMoyen)print("Moyenne générale de Génie Mécanique = " , moyenneGenerale)
04/10/2018
32
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 63
Exécution de Gestion des étudiants avec héritage
Veuillez introduire le nombre de notes de Benahmed: 1introduire la note 1 : 13
Veuillez introduire le nombre de notes de Aithadou: 2introduire la note 1 : 11introduire la note 2 : 17
Veuillez introduire le nombre de notes de Zaitouni: 1introduire la note 1 : 12
Age moyen des étudiants = 22.666666666666668Moyenne générale = 13.0
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 64
Gestion des enseignants avec héritageClasse 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) :# constructeurdef __init__(self,n,a,c,g):
print("Création d'un objet EnseignantH")Citoyen.__init__(self,n,a,c) # appel du constructeur de Citoyenself.grade = g # initialisation du gradeself.coursEnseignes = self.saisirCours() # initialisation par une méthode
def saisirCours() :…..
def calculerSalaire() :…..
04/10/2018
33
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 65
Gestion des enseignants avec héritage
Enseignants=[] # liste d’objets de la classe Enseignantenseignants.append (EnseignantH("Kamoun",1953,"GF01205","PES"))enseignants.append(EnseignantH("Labied",1975,"H089274","PA"))
sommeAge = 0sommeSalaire = 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 66
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
04/10/2018
34
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 67
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 68
Fichier
Types de fichiertextebinaire
Modes d’ouverturer : lecture seulew : écriture avec remplacementa : écriture avec ajout en fin de fichierx : lecture et écriture
Exemplefichier = open(donnees.txt , r) # ouverture en lecturefichier.close() # fermeture du fichierif fichier.closed:
print("le fichier est fermé")else :
print("le fichier ",fichier, " est ouvert")
04/10/2018
35
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 69
Fichier : Lecture
fichier = open(donnees.txt , r) # ouverture en lecturecontent = fichier.read() # lecture de tout le fichierprint(content) # affichage du contenufichier.close() # fermeture du fichier
fichier = open(donnees.txt , r) # ouverture en lectureligne = fichier.readline() # lecture de la première ligneligne = fichier.readline() # lecture de la deuxième lignelignes = fichier.readlines() # lecture du reste du fichierfichier.close() # fermeture du fichier
Remarquesla 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 70
Fichier : Ecriture
fichier1 = open(donnees.txt , w) # ouverture en lecturefichier1.write( première ligne \n) # lecture de tout le fichierfichier1.write(str(150)) # affichage du contenufichier1.write( première ligne ) # affichage du contenufichier1.close() # fermeture du fichier
Autre manière de gérer les fichierswith open(donnees.txt , r) as fichier : # la fermeture n’est pas nécessaire
content = fichier.read()print(content)
04/10/2018
36
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 71
Fichier binaire
import pickle # bibliothèque pour les fichiers binairesclass Joueur :
def __init__(self, nom, niveau): # constructeurself.nom=nomself.niveau=niveau
def whoIam(self): # méthode d’affichageprint(self.nom,":",self.niveau)
J1=Joueur("Hamid",103) # instanciation d’un objetwith open("doc.data","wb") as fichier: # mode d’écriture binaire
record = pickle.Pickler(fichier) # définir un enregistrementrecord.dump(J1) # copier l’objet dans l’enregistrement
with open("doc.data","rb") as fichier: # mode de lecture binaireget_record = pickle.Unpickler(fichier) # récupérer l’enregistrementJ1=get_record.load() # récupérer l’objet
J1.whoIam() # afficher ses informations
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 72
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
04/10/2018
37
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 73
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 74
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.
04/10/2018
38
Introduction à la POO, M. Eleuldj, EMI, Octobre 2018 75
Références
Tutoriel
https://docs.python.org/3.7/tutorial/index.html
top related