Développement Logiciel en Orienté Objet: 3 Partie
Développement Logiciel en Orienté Objet: 3 Partie
Développement Logiciel en Orienté Objet: 3 Partie
Caissier
Compte
en banque
GAB
Ordinateur
Compte
de la banque
en banque
GAB Ordinateur
central
Ordinateur Compte
de la banque en banque
GAB
Compte
en banque
Énoncé du problème
Vous allez concevoir un logiciel prenant en charge un
réseau d’organisations bancaires informatisées,
constitué à la fois de caissiers humains et de guichets
automatiques de banque (GAB), et partagé par un
consortium de banques. Chaque banque utilise son
propre ordinateur pour maintenir ses comptes et
traiter les transactions qui les concernent. Les
stations de caissiers sont la propriété de chaque
banque et chaque cassier a accès aux ordinateurs de
la banque où il travaille. Les caissiers saisissent les
données concernant les comptes et les transactions.
Énoncé du problème
Les GAB communiquent avec un ordinateur central qui
autorise les transactions avec la banque appropriée.
Un GAB accepte une carte bancaire, interagit avec
l’utilisateur, communique avec le système central
pour effectuer les transactions, distribue des billets et
imprime des reçus. Le système nécessite une
journalisation adéquate des transactions et des
dispositions de sécurité. Il doit pouvoir gérer
correctement des accès concurrents et des dispositions
de sécurité. Il doit pouvoir gérer correctement des
accès concurrents à un même compte.
Énoncé du problème
Les banques utiliseront leur propre logiciel
sur leurs ordinateurs. Vous devez concevoir
le logiciel pour les GAB et le réseau. Le
coût du système sera partagé entre les
banques au prorata du nombre de clients
possédant des cartes bancaires.
Plan
• Spécification initiale du système
• Analyse
• Conception
• Implémentation
Analyse
• Analyse du domaine
• Analyse de l’application
Introduction
• L’analyse du domaine a pour objectif d’obtenir un
modèle précis, concis, compréhensible et correct du
monde réel
– Avant de construire quoi que ce soit de complexe, celui qui le construit doit
comprendre les besoins
Énoncé
Entretiens utilisateurs du problème
Connaissance du domaine
Construire Analyse:
Expérience du monde réel des modèles Analyse du domaine
Analyse de l’application
Systèmes apparentés
Modèle de classes
Modèle d’états
Modèle d’interactions
Conception
Modèle de classes du domaine
• Vous devez effectuer les étapes suivantes
pour construire un modèle du domaine:
– Identifier les classes
– Préparer un dictionnaire de données
– Identifier les associations
– Identifier les attributs des objets et les liens
Modèle de classes du domaine
– Organiser et simplifier les classes en utilisant
l’héritage
– Vérifier que tous les chemins d’accès existent
pour les requêtes probables
– Itérer et affiner le modèle
– Réexaminer le niveau d’abstraction
– Regrouper les classes en packages
Identifier les classes
• Les classes correspondent souvent à des
noms
– N’opérez toutefois pas à l’aveuglette. L’idée est de comparer des
concepts: tous les noms ne représentent pas de concepts et ceux-ci
peuvent être exprimés par d’autres catégories grammaticales
• Attributs: Données sur les comptes, Reçu, Espèces, Données sur les
transactions
code
Carte code
code Banque Compte Client
Consortium Banque 0..1
1 0..1 Compte
1 nom * 1 nom
code solde
1
1 code adresse
Employé limiteCrédit
Station
1 type 1
1
Emploie 1 1 *
1
1
Ordinateur 0..1
Ordinateur Banque
code 1 0..1 Caissier
Central Banque code
nom
code CommuniqueAvec Station
1
Station CommuniqueAvec 1 SaisiePar
* *
0..1 0..1
1
StationCaissier SaisieSur TransactionCaissier
CommuniqueAvec 1 * type
dateHeure
0..1
montant
GAB SaisieSur TransactionDistante * * 0..1
espèces type *
1 *
dateHeure *
1 CarteBancaire
Disponibles codeSecret
montant AutoriéePar
Affiner en utilisant l’héritage
• L’héritage peut être appliqué dans deux directions:
StationDeSaisie Transaction
1 SaisieSur * type *
dateHeure
montant
0..1
GAB
StationCaissier
espècesDisponibles Transaction Transaction
0..1 Caissier Distante
1
0..1
CommuniqueAvec * *
CommuniqueAvec 1
1 code SaisiePar
Ordinateur Station 1 AutoriséePar
code Ordinateur
Central Banque
Caissier
Banque Émet 1
code nom 0..1
Station
1
0..1 CarteBancaire
1
Client
1 1 codeSecret
Emploie nom 1 *
code adresse *
Station code 1
1
1 Banque Employé 1
*
nom Compte *
Consortium code code
Banque
1 1
0..1 code Carte solde
1
Compte 1 0..1 limiteCrédit 1
type
Itérer sur le modèle de classes
• Un modèle objet est rarement correct d’emblée
Caissier Carte
SaisiePar * *
1 AutoriséePar
GAB
StationCaissier Caissier 1
espècesDisponibles nom Émet 0..1 Autorisation
0..1 0..1 0..1 Carte
1 Emploie
code * *
1 1
code Station code
Banque Employé Client
Station 1
nom
nom Compte
Consortium code code adresse
Banque
1 1
0..1 code Carte solde
1
Compte 1 0..1 limiteCrédit *
type 1
Grouper les classes en packages
• La dernière étape de la modélisation des classes consiste à
regrouper les classes en packages
– Un package est un groupe d’éléments (classes, associations,
généralisation et d’autres packages de niveau inférieur) ayant un
thème commun
• Exemple du GAB
– Les événements importants comprennent:
• fermer compte,
• retirer montant supérieur au solde,
• trois codes faux successifs
• suspicion de fraude et
• action administrative
Construire des diagrammes
d’états
Compte Fermé
fermer compte
retirer montant supérieur au solde
ouvrir compte
Normal ADécouvert
déposer montant suffisant
suspicion de fraude
lever opposition
action administrative
Suspendu
trois codes faux successifs
Évaluer les diagrammes d’états
• Examinez chaque modèle d’états
– Tous les états sont-ils connectés?
• Prêtez une attention particulière aux chemins d’accès
– S’il représente une classe « progressive », y a-t-il un
chemin conduisant de l’état initial à l’état final?
– Les variations attendues sont-elles présentes?
– S’il représente une classe « cyclique », la boucle
principale est-elle présente?
– Existe-t-il des états « morts » (terminaux) qui mettent
fin au cycle?
Modèle d’interactions du domaine
interroger
un compte Banque
Client
exécuter une
transaction
transmettre
des données Consortium
Résume des cas d ’utilisation du
GAB
• Initialiser une session. Le guichet automatique
vérifie l’identité du client et affiche une liste de
comptes et d’interventions possibles pour ce
clients sur le système
• Interroger un compte
– L’événement initial est une demande du client de
consulter les données de son compte
– L’événement final est la présentation de ces données au
client
Événements initiaux et finaux pour les
cas d’utilisation du GAB
• Exécuter une transaction
– L’événement initial est l’initialisation d’une transaction par le
client
– Il y a deux événements finaux: la transaction est validée ou elle est
annulée
sélectionner retrait
sélectionner compte
demander montant
saisir montant
vérifier fonds
vérifier fonds
confirmer fonds
confirmer fonds
délivrer billet(s)
prendre billet(s)
Préparer des diagrammes d’activité
pour les cas d’utilisation complexes
[carte OK]
[communication en panne]
[compte OK]
GAB
initialiser
une session
« include »
« include »
transmettre
des données
Vérifier avec le modèle de classe
du domaine
• À ce stade, le modèle de l’application et le
modèle du domaine devraient être
globalement cohérents
1 2 3 CORRECTION
4 5 6 ANNULATION
7 8 9 VALIDATION
reçus billets
Définir des classes frontières
• Une classe frontière est une classe qui fournit un
lien d’acheminement pour les communications
entre un système et une source externe
CarteBancaire carteActive 1
0..1 0..1 SessionGAB ContrôleurDeSession
Compte 0..1 dateHeureDébut * 1 état
compteActif
Modèle d’états de l’application
• Le modèle d’états de l’application se concentre sur les
classes de l’application et augmente le modèle d’états du
domaine
• Exemple du GAB.
– Consortium a l’activité vérifierCodeBanque
– Banque a l’activité vérifierCodeSecret
Opérations « aide-mémoire »
• Le comportement des classes dans le monde réel
suggère parfois des opérations
– Meyer nomme cela l’aide-mémoire, parce que ces
opérations ne dépendent pas d’une application
particulière mais qu’elles présentent un intérêt
intrinsèque
• Les opérations de l’aide-mémoire fournissent
l’occasion d’élargir la définition d’une classe au-
delà des besoins stricts du problème immédiat
Quelques opérations aide-mémoire
pour le GAB
• compte.fermer()
• banque.créerCompteEpargne(client):compte
• banque.créerCompteChèques(client):compte
• Banque:créerAutCarteBancaire(client) ->
autorisationCarteBancaire
• autorisationCarteBancaire.ajouterCompte(compte)
• autorisationCarteBancaire.supprimerCompte(com
pte)
• autorisationCarteBancaire.fermer()
Simplifier les opérations
• Recherchez, dans le modèle de classes, les
opérations similaires et les variations de
forme d’une même opération
– Utilisez l’héritage, quand c’est possible, pour
réduire le nombre d’opérations distinctes
Modèle du domaine du GAB avec des opérations
EntréeSur
Transaction
*
dateHeure
1
*
1
MiseAJour
StationDEntrée montant
type
*
Transaction Autorisation
Caissier Carte
GAB SaisiePar *
CarteBancaire
*
AutoriséePar
StationCaissier 1 1
espècesDisponibles numéroSérie AutorisationCarte
Caissier *
codeSecret
0..1
vérifierCarteBancaire nom 1
limite
1 ajouterCompte
0..1 code 0..1
supprimerCompte
1 Station Émet
Banque Emploie fermer
code nom
0..1 *
*
1
Station vérifierCodeSecret code
code créerCompteEpargne Employé
Client
consortium Banque 0..1
1 Compte nom
1 créerCompteChèque code solde
créerAutCarteBancaire Carte adresse
vérifierCarteBancaire code limiteCrédit
1
Compte 1 0..1
type *
fermer
1
Plan
• Analyse
• Conception
• Implémentation
Conception
• Conception du système
Caissier
réseau
Carte Code BD
lien
bancaire station
réseau Compte
Utilisateur
interface Code Client
utilisateur banque
Autorisation
carte
Transaction
Transaction
Transaction
Identifier la concurrence
• Dans la pratique, on peut implémenter de
nombreux objets sur un même processeur si ces
objets ne doivent pas être actifs en même temps
Le fossé
?
Ressources disponibles
• Analyse
• Conception
• Implémentation
Plan
• Modélisation de l’implémentation
• Bases de données
Optimisation des classes
• L’objectif de l’implémentation est de mettre
en œuvre les modèles issus de l’analyse et
de la conception
Adresse Ville *
Personne
rue nomDeVille
nom * 0..1 * 0..1
*
numéroDeTéléphone
* * 1
0..1 Département
nomDeDépartement
1
0..1
CodePostal *
codePostal
*
Optimisation des généralisations
Personne Société
Implémentation:
employeur
Associations bidirectionnelles
• Il existe trois approches pour les
implémenter:
– Implémentation unidirectionnelle
• Implémenter les associations unidirectionnelles sous
la forme de pointeur dans une seule direction et
effectuer une recherche lorsque la traversée dans le
sens opposé est nécessaire
Associations bidirectionnelles
– Implémentation bidirectionnelle
• Implémenter les associations bidirectionnelles par
des pointeurs dans les deux directions
Personne Société
employeur employés
Ensemble
Associations bidirectionnelles
– Implémentation avec un objet-association
• Cela consiste à implémenter les associations
bidirectionnelles par des objets-associations
distincts, indépendants de toute classe
:Personne travaillePour :Société
:Personne
:Personne
:Personne
:Société
:Personne
Associations complexes
• Classes-associations
• Transformer l’association en classe
• Association ordonnées
• Utiliser un ensemble ordonné de pointeurs
• Séquences
• Comme pour une association ordonnée, mais avec une liste de
pointeurs
• Bags
• Comme pour une association ordonnée, mais avec un tableau
de pointeurs
Associations complexes
• Associations qualifiées
• Implémenter comme un objet-dictionnaire
• Associations n-aires
• Promouvoir l’association en classe
• Agrégation
• Traiter l’agrégation comme une association ordinaire
• Composition
• Vous pouvez traiter la composition comme une association
ordinaire. Vous aurez besoin d’un peu de code supplémentaire
pour appliquer la dépendance de la partie de l’assemblage
Plan
• Modélisation de l’implémentation
• Bases de données
Modèle abrégé du GAB
Banque code délivre 1 * CarteBancaire
nom Carte 0..1
AutorisatioCarte
vérifierCodeSecret 1 numéroDeSérie
codeSecret 0..1
créerCompteEpargne limite
créerCompteChèque carteActive
ajouterCompte
créerAutCarteBancaire Compte supprimerCompte
vérifierMontant fermer
solde
codeCompte
limiteCrédit
Client
* *
nom
1
fermer * 1 adresse
0..1 vérifierMontant montantTemp
enregistrer getSolde
* 1
0..1 compteActif getCompte
0..1
CompteChèques CompteEpargne
0..1 SessionGAB
autorisationDeDécouvert taux
heureDébutSession
Implémentation de la structure
• La première étape de l’implémentation d’une
conception OO consiste à mettre en œuvre la
structure spécifiée par le modèle de classes
Personne Société
employeur
• Bases de données
Implémentation du schéma de bases
de données: concepts de base
• Il est facile de traduire le modèle de classes
en code SQL
Client
IDclient nom montantTempo
nom
montantTempo
getMontant
getCompte
Implémentation des associations
Compte AutorisationCarte
* * codeSecret
solde
limiteCrédit limite
IDcompte IDautorissationCarte
(référence Compte) (référence AutorissationCarte)
Implémentation des associations
AutorisationCarte CarteBancaire
1 *
codeSecret numéroDeSérie
limite
Table CarteBancaire
Table Adresse
Table Banque
IDbanque nom
Table Compte
CompteChèques CompteEpargne
autorisationDeDécouvert
Tables: - Compte
- CompteChèques
- CompteEpargne