SI4 – LES BASES DE LA PROGRAMMATION Algorithmique et

publicité
BTS SIO
SI4 – LES BASES DE LA PROGRAMMATION
Algorithmique et Python
Analyser et utiliser un programme de gestion de compte bancaire à l’aide de la Programmation Orientée
Objet (POO).
En programmation objet, on répartit les instructions dans des classes représentant les acteurs de la réalité
que le programme se doit d’affronter.
Les classes sont donc les principaux outils de la POO.
Ce type de programmation permet de structurer les logiciels complexes en les organisant comme des
ensembles d’objets qui interagissent entre eux et avec le monde extérieur.
Ainsi, une application bancaire reprendra comme classes, les clients, les comptes en banque, les
opérations bancaires, les emprunts…
Une classe se définit par ses attributs, qui décrivent ce qu’elle est, et ses méthodes, qui décrivent ce
qu’elle fait.
Exemple en Python d’une classe Client (remarque : un nom de classe commence toujours par une
majuscule).
class Client:
def __init__(self,nomInit,prenomInit,adresseInit,ageInit):
self.__nom=nomInit
self.__prenom=prenomInit
self.__age=ageInit
self.__adresse=adresseInit
def donneNom(self):
return self.__nom
def donneAdresse(self):
return self.__adresse
def donneAge(self):
return "age: " + str(self.__age)
def __str__(self):
return "client: " + self.__prenom + " " + self.__nom
Lycée des Métiers Jacques Prévert
Combs – la – Ville
Section BTS Services Informatiques aux Organisations
1
SI4 – LES BASES DE LA PROGRAMMATION
Algorithmique et Python
BTS SIO
On utilise un langage de modélisation graphique des développements logiciels dans les projets
informatiques, que l’on nomme UML (Unified Modeling Language).
Sans rentrer dans un cours d’UML complet, inutile à ce niveau, on va toutefois modéliser les classes par
des diagrammes, qui permettent d’identifier facilement les structures des classes d’un système (propriétés
et méthodes dans un premier temps).
Diagramme de Classe Client :
Une classe est représentée en utilisant un rectangle divisé en 3 sections. La section supérieure est le nom
de la classe. La section centrale définit les propriétés (attributs) et celle du bas, les méthodes.
Client
-nom
-prenom
-age
-adresse
+__init()__
+donneNom()
+donneAdresse()
+donneAge()
La visibilité indique qui peut avoir accès aux attributs: le signe - signifie que l’attribut a un accès privé.
Ceci est lié au principe fondamental d’encapsulation en POO qui consiste à protéger l’information contenue
dans un objet et de ne proposer que des méthodes de manipulation.
Le signe + indique donc que la méthode est publique et manipulable par l’utilisateur.
Pour qu’un attribut privé soit récupérable, il faut utiliser un getter (accesseur) ; pour qu’il soit modifiable, il
faut utiliser un setter (mutateur).
Détails de la classe Client :
-
La classe Client possède 4 attributs privés inaccessibles de l’extérieur de la classe.
C’est la présence de __ (double tiret bas) qui donne ce caractère privé.
-
__init__ est le constructeur de la classe, qui permet d’initialiser les attributs privés.
-
La méthode __str__ est héritée de la super-classe object et redéfinie dans cette classe Client.
-
3 méthodes publiques permettent d’accéder aux attributs privés.
-
Le mot-clé self est indispensable dès qu’il s’agit de faire référence à l’objet lui-même. De fait,
toutes les méthodes portant sur l’objet se doivent de recevoir ce dernier, c’est-à-dire self en
paramètre (voir utilisation de la classe).
Lycée des Métiers Jacques Prévert
Combs – la – Ville
Section BTS Services Informatiques aux Organisations
2
BTS SIO
SI4 – LES BASES DE LA PROGRAMMATION
Algorithmique et Python
Utilisation de la classe Client :
Exemple de programme :
#création d’un premier client (d’un objet de type classe Client)
client1 = Client(‘Bersini’, ‘Hugues’, ‘rue Louise’, 20)
#création d’un deuxième client (d’un objet de type classe Client)
client2 = Client(‘Lendersi’, ‘Pascale’, ‘rue Juliette’, 30)
Ici, les 2 clients sont créés grâce au constructeur __init__ qui possède 4 paramètres. Lors de la création, il
faut donc écrire 4 arguments.
Donc, l’instruction client3 =Client() déclenchera l’exception
TypeError: __init__() missing 4 required positional arguments: 'nomInit', 'prenomInit', 'adresseInit', and
'ageInit'
Les instructions:
print(client1)
print(client2)
permettent d’exécuter implicitement la méthode __str__() et d’afficher le nom et le prénom des clients
créés :
client: Hugues Bersini
client: Pascale Lendersi
Pour connaître l’adresse du client1, il faut entrer :
print(client1.donneAdresse())
résultat rue Louise
La méthode donneAdresse(self) retourne la bonne adresse. Le mot-clé self correspond au client1.
Cette méthode est un accesseur.
Le client1 déménage ; son adresse change. On pourrait recréer complètement le client comme
précédemment mais ce n’est pas l’idéal. On va donc rajouter une méthode dans la classe, qui va agir sur
l’attribut du client créé (mutateur).
def demenage(self, newAdresse) :
self.__adresse =newAdresse
et dans le programme d’utilisation :
client1.demenage(‘rue Juliette’)
print(client1.donneAdresse())
resultat rue Juliette
Le client1 vieillit : procéder de la même façon pour modifier son attribut age.
Lycée des Métiers Jacques Prévert
Combs – la – Ville
Section BTS Services Informatiques aux Organisations
3
SI4 – LES BASES DE LA PROGRAMMATION
Algorithmique et Python
BTS SIO
Association entre classes:
La pratique de l’orienté objet consiste d’abord et avant tout en l’éclatement de l’application logicielle entre
les classes constitutives du projet.
Ainsi, si dans un logiciel bancaire, le client veut retirer 100€ de son compte, c’est l’objet client qui sollicitera
la méthode retire(100) exécutée sur le compte en question.
Ce déclenchement de cette méthode retire(100) sur le compte, provoqué par le client, est appelé un envoi
de message.
On y retrouve en effet, l’expéditeur client, le destinataire compte en banque et le contenu du message
retire(100).
Une association est une relation générique (hiérarchique) entre 2 classes. Elle peut être modélisée en UML
par une ligne reliant les 2 classes. Cette ligne peut être qualifiée avec le type de relation et peut également
comporter des règles de multiplicité (par exemple un à un, un à plusieurs, plusieurs à plusieurs) pour la
relation.
CompteEnBanque
1...n
Client
-mesComptes : CompteEnBanque
-nom
-prenom
-age
-adresse
+__init()__
+donneNom()
+donneAdresse()
+donneAge()
+ajoutCompte(entrée nouveauCompte:CompteEnBanque)
+retire()
+depose()
-solde
-numero
-modele
-nombreComptes
-nomTitulaire:Client
+__init()__
+retire(entrée montant:int)
+depose(entrée montant:int)
1
Signification :
Chaque objet client est associé à un ensemble d’objets compteEnBanque et en retour, chaque objet
compteEnBanque est associé à un et un seul client.
Les attributs soulignés sont des attributs statiques associés à la classe plutôt qu’aux objets. On les appelle
des variables de classe.
Ils n’ont besoin que de la classe pour exister et être utilisés. Ils le sont d’ailleurs en faisant toujours allusion
à leur classe (comme dans CompteEnBanque.nombreComptes). Leur utilisation ne nécessite pas de
recourir au mot-clé self. Tout ce qui est statique peut exister sans objet.
Lycée des Métiers Jacques Prévert
Combs – la – Ville
Section BTS Services Informatiques aux Organisations
4
BTS SIO
SI4 – LES BASES DE LA PROGRAMMATION
Algorithmique et Python
class Client:
def __init__(self,nomInit,prenomInit,adresseInit,ageInit):
self.__nom=nomInit
self.__prenom=prenomInit
self.__adresse=adresseInit
self.__age=ageInit
self.__mesComptes=[]
def donneNom(self):
return self.__nom
def donneAdresse(self):
return self.__adresse
def donneAge(self):
return self.__age
def demenage(self, newAdresse):
self.__adresse =newAdresse
def __str__(self):
return "client: "+ self.__prenom + " " + self.__nom
def retire(self):
c=self.identifieCompte()
print('quel montant?')
x =int(input('?'))
c.retire(x)
def depose(self):
c=self.identifieCompte()
print('quel montant?')
x =int(input('?'))
c.depose(x)
def identifieCompte(self):
print('Sur quel compte?')
x=input('?')
for c in self.__mesComptes:
if c.donneNumero() == x:
res=c
break
return c
def ajouteCompte(self):
self.__mesComptes.append(compte)
compte.assigneTitulaire(self)
Lycée des Métiers Jacques Prévert
Combs – la – Ville
Section BTS Services Informatiques aux Organisations
5
BTS SIO
SI4 – LES BASES DE LA PROGRAMMATION
Algorithmique et Python
class CompteEnBanque:
__modele="210-"
__nombreComptes=0
def __init__(self):
self.__solde=0
self.__nomTitulaire=""
self.__numero=CompteEnBanque.__modele + str(CompteEnBanque.__nombreComptes)
CompteEnBanque.__nombreComptes+=1
def assigneTitulaire(self,titulaire):
self.__nomTitulaire=titulaire
def donneNumero(self):
return self.__numero
def retire(self,montant):
self.__solde-=montant
def depose(self,montant):
self.__solde+=montant
def __str__(self):
return "le solde du compte: "+self.__numero +" est: "+str(self.__solde)
Lycée des Métiers Jacques Prévert
Combs – la – Ville
Section BTS Services Informatiques aux Organisations
6
BTS SIO
SI4 – LES BASES DE LA PROGRAMMATION
Algorithmique et Python
Problème 1 : location de voitures .
Une entreprise de location de voitures veut réaliser un programme pour gérer son parc de voitures.
Une voiture est caractérisée par les éléments suivants : le modèle de la voiture, son immatriculation,
son kilométrage et son état (disponible ou en cours de location) .
Ecrire un programme présentant le menu suivant :
MENU
1 : Louer une voiture .
2 : Retourner une voiture .
3 : Donner l’état d’une voiture .
4 : Donner l’état de l’ensemble des voitures .
Ces options devront correspondre aux spécifications suivantes :
1 : le programme demande l’immatriculation de la voiture à louer . Si cette voiture n’existe pas dans le
parc ou est déjà louée, le programme signale une erreur ; sinon , la voiture est marquée comme étant en
location .
2 : le programme demande l’immatriculation de la voiture à retourner . Si cette voiture n’existe pas dans
le parc ou n’était pas marquée comme étant en location , le programme signale une erreur ; sinon , le
programme demande le nombre de kilomètres effectués et les rajoute au kilométrage de la voiture . La
voiture est alors marquée comme étant disponible .
3 : le programme demande l’immatriculation de la voiture dont on souhaite connaître l’état . Si cette
voiture n’existe pas dans le parc , une erreur est signalée ; sinon son modèle , son kilométrage et son état
de location sont affichés .
4 : le programme affiche le nombre de voitures en location et leurs immatriculations , le nombre de
voitures disponibles et leurs immatriculations , ainsi que le kilométrage moyen de l’ensemble des
voitures. Après l’exécution de l’une de ces options , le programme devra réafficher le menu , et ce autant
de fois que l’utilisateur le souhaite .
Lycée des Métiers Jacques Prévert
Combs – la – Ville
Section BTS Services Informatiques aux Organisations
7
BTS SIO
SI4 – LES BASES DE LA PROGRAMMATION
Algorithmique et Python
Résultats de quelques tests
******Création du parc de véhicules*****
Entrer le modele du véhicule:
Scenic
Entrer l'immatriculation:
1234
Entrer le kilométrage:
5
Entrer le modele du véhicule:
twingo
Entrer l'immatriculation:
4321
Entrer le kilométrage:
4
Que voulez-vous faire?
1: Louer une voiture
2: Retourner une voiture
3: Donner l'état d'une voiture
4: Donner l'état de l'ensemble des voitures
1
Vous voulez louer un véhicule....
Entrer l'immatriculation du véhicule à louer:
4321
Le véhicule existe bien dans le parc
Ce véhicule est dispo
Voulez-vous continuer?
O
Que voulez-vous faire?
1: Louer une voiture
2: Retourner une voiture
3: Donner l'état d'une voiture
4: Donner l'état de l'ensemble des voitures
1
Vous voulez louer un véhicule....
Lycée des Métiers Jacques Prévert
Combs – la – Ville
Section BTS Services Informatiques aux Organisations
8
BTS SIO
SI4 – LES BASES DE LA PROGRAMMATION
Algorithmique et Python
Entrer l'immatriculation du véhicule à louer:
4321
Le véhicule existe bien dans le parc
Impossible, le véhicule est déjà loué
Voulez-vous continuer?
O
Que voulez-vous faire?
1: Louer une voiture
2: Retourner une voiture
3: Donner l'état d'une voiture
4: Donner l'état de l'ensemble des voitures
1
Vous voulez louer un véhicule....
Entrer l'immatriculation du véhicule à louer:
1234
Le véhicule existe bien dans le parc
Ce véhicule est dispo
Voulez-vous continuer?
N
Fin du programme
BUILD SUCCESSFUL (total time: 1 minute 9 seconds)
Lycée des Métiers Jacques Prévert
Combs – la – Ville
Section BTS Services Informatiques aux Organisations
9
Téléchargement