3.Approche Objet
3.1. Introduction
3.2. Les Avantages de l'Approche Objet
A la base, une nouvelle lecture du système d'information (SI) traduit l'évolution du lien
entre l'informatique et l'organisation de l'entreprise : le SI devient un vecteur de
changement, voire le vecteur principal du changement dans l'organisation, sa conception
suppose donc d'autres approches. La spécification des systèmes d'information mobilise des
modèles qui relèvent majoritairement aujourd'hui de l'approche objet : ainsi la référence à
UML semble s'imposer mais de manière mesurée en informatique de gestion. Cette
suprématie ne saurait cependant faire oublier les autres références classiques de
l'informatique de gestion ni l'émergence d'une réflexion portant sur l'ingénierie des besoins.
Au plan technologique, la généralisation croissante des systèmes d'information distribués
permet d'aborder de nouvelles architectures dans le domaine de la communication, comme
dans celui de la gestion des connaissances.
L'enjeu est aujourd'hui de mettre en place la meilleure solution, aussi bien technologique
qu'organisationnelle, pour "… concevoir un système d'information numérique qui permette
à l'acteur, à son poste de travail, dans sa situation, d'obtenir les informations circulantes, de
partager ses connaissances et d'accéder aux informations, sources de connaissances, qui lui
sont nécessaires pour comprendre et résoudre les problèmes qu'il rencontre, prendre des
décisions, exercer son activité et capitaliser les connaissances produites dans l'exercice de
cette activité."
Partie1 : Introduction à l'Ingénierie du Logiciel
1. Activités du Cycle de Développement d'un Logiciel:
Aucune ne doit commencer avant que les précédentes ne soient réellement terminées, et
lorsqu'une modification est effectuée sur un élément, tous ceux qui en dépendent doivent
être revus. Il se peut qu'un module donné soit à la fois spécifié et implémenté avant que
ceux qui en dépendent soient complètement spécifiés, situation que l'on appelle
développement avancé ou recherche.
Il est absolument essentiel que chaque phase du processus liée au génie logiciel subisse
plusieurs types de revues : revue des pairs, revue par le responsable projet et par la
direction, et revue interdisciplinaire.
Le DSL de nombreux projets qui échouèrent avait été considéré comme constituant les
« Tables de la loi » remises par les gens du commercial aux ingénieurs, qui, alors,
ronchonnèrent longuement sur les lois de la physique et sur les raisons qu'ils avaient de ne
pas pouvoir fabriquer ce produit puisqu'ils n'était pas possible de s'approvisionner en
« Kryptonite » ou quoi que ce soit d'autre. Le DSL est le fruit d'un effort conjoint auquel
les ingénieurs doivent aussi participer en rédigeant de nombreuses sections, et non en se
contentant d'en analyser le termes.
C'est une description de haut niveau du produit, en termes de « modules » (ou quelquefois
de « programmes ») et de leurs interactions. Ce document doit en premier lieu asseoir la
confiance en la finalité et la faisabilité du produit, et, en second lieu, servir de base pour
l'estimation de la quantité de travail à fournir pour le réaliser.
C'est au niveau de la conception détaillée que chacun des modules énumérés dans le
dossier de conception préliminaire est décrit en détail. L'interface (formats de lignes de
commande, appels d'API, structures de données visibles de l'extérieur) de chacun des
modules doit être complètement définie à ce niveau. Deux choses doivent émerger lors de
cette étape : un diagramme de PERT ou de GANTT, montrant comment le travail doit être
fait et dans quel ordre, ainsi qu'une estimation plus précise de la charge de travail induite
par la réalisation de chacun des modules.
Chaque module doit avoir un plan de test unitaire, qui fournit aux réalisateurs la liste des
tests à effectuer ou des types de scénarios de test à créer afin de vérifier que le module
répond aux spécifications. Il faut noter qu'il existe des tests unitaires complémentaires, ne
concernant pas les fonctionnalités, dont on parlera plus tard.
Implémentation (Programmation):
Chacun des modules décrits dans le document de spécification détaillé doit être réalisé.
Cela comprend la petite activité de codage ou de programmation qui constitue le cœur et
l'âme du processus de développement du logiciel. Il est malheureux que cette petite activité
soit quelquefois l'unique partie du génie logiciel qui soit enseignée (ou étudiée), puisque
c'est également la seule partie du génie logiciel qu'un autodidacte peut réellement
appréhender.
On peut considérer qu'un module a été réalisé quand il a été créé, testé et utilisé avec
succès par un autre module (ou par un processus de test au niveau système). La création
d'un module se fait dans le cadre du cycle classique édition-compilation-répétition. Le test
des modules comprend les tests au niveau unitaire les tests de non-régression définis lors
de la conception détaillée, ainsi que les tests de performances et de charge et l'analyse de
couverture du code.
Quand tous les modules sont terminés, l'intégration, au niveau du système, peut être
réalisée. C'est là que tous les modules sont réunis en un seul ensemble de code source,
compilés et liés pour former un paquetage qui constitue le système. L'intégration peut être
réalisée de façon incrémentale, en parallèle avec la réalisation de différents modules, mais
on ne peut pas décider de manière autoritaire que « c'est fini » tant que tous les modules ne
sont pas effectivement terminés.
Parfois, dans le cas des logiciels personnalisés, le paquetage est constitué du simple
exécutable résultant de la compilation de l'ensemble des modules, et, dans ce cas, il n'y a
pas d'outil d'installation ; les tests seront effectués tels quels.
Le système ayant été installé (s'il doit l'être), le processus de tests au niveau système doit
pouvoir lancer toutes les commandes publiques et appeler tous les points d'entrée publics,
en utilisant toutes les combinaisons raisonnables d'arguments. Si le système doit pouvoir
créer une sorte de base de données, la procédure automatisée de test au niveau système doit
en créer une et utiliser des outils extérieurs (écrits séparément) pour vérifier l'intégrité de la
base de données. Les tests unitaires peuvent être utilisés pour répondre à certains de ces
besoins, et tous les tests unitaires doivent être exécutés en séquence pendant le processus
d'intégration, de construction et de réalisation du paquetage.
Validation et Vérification:
Enfin, il sera nécessaire de faire fonctionner le logiciel à l'extérieur, c'est-à-dire sur les
ordinateurs des clients (ou de ceux que l'on espère voir devenir des clients). Il vaut mieux
choisir des « clients amicaux » pour ce genre d'exercice, puisqu'ils découvriront peut-être
de nombreux défauts, même évidents, tout simplement parce que leur manière de travailler
et leurs habitudes sont différentes de celles de vos utilisateurs internes. Les développeurs
du logiciel doivent être en première ligne pendant cette phase de test externe.
Les défauts rencontrés pendant la phase de test devront être étudiés par des développeurs
confirmés et des ingénieurs commerciaux, pour déterminer ceux qui doivent être corrigés
dans la documentation, ceux qui doivent être corrigés avant que cette version du logiciel ne
soit diffusée et ceux qui le seront dans la prochaine version (ou jamais).
Maintenance et assistance:
Les défauts du logiciel rencontrés, soit pendant la phase de test in situ soit après sa
diffusion, doivent être enregistrés dans un système de suivi. Il faudra affecter un ingénieur
logiciel pour la prise en charge de ces défauts, qui proposera de modifier soit la
documentation du système, soit la définition d'un module ou la réalisation de ce module.
Ces modifications devront entraîner l'ajout de tests unitaires ou au niveau système, sous
forme de tests de non-régression pour mettre en évidence le défaut et montrer qu'il a bien
été corrigé (et pour éviter de le voir réapparaître plus tard).
Exactement comme le DSL a constitué une entreprise en commun entre les commerciaux
et les ingénieurs, la maintenance est une entreprise commune aux ingénieurs et au service
client. La liste des bogues, la description de bogues particuliers, le nombre maximum de
défauts critiques dans une version diffusée du logiciel,... constituent les pièces maîtresses
de cet édifice.
Avant la livraison à un client, le développement d'un logiciel passe par plusieurs étapes
définies au cours des deux dernières décennies :
(*) La recette est une vérification de conformité du logiciel par rapport aux spécifications
théoriques définies au début du projet, avant son déploiement final.
Le modèle en cascade est adapté aux projets de durée inférieure à l'année, sur des
projets à forte composante réglementaire, comme les projets de back-office.
Le Modèle en V: repose sur une étroite interdépendance des étapes soumises à une
validation avant la prochaine étape et une vérification anticipatoire du produit final :
1. spécification textuelle,
2. conception générale,
3. conception détaillée,
4. codage,
5. tests unitaires,
6. tests d'intégration,
7. validation.
Il permet de vérifier en continu que le projet progresse vers un produit répondant aux
besoins initiaux
Ce modèle est adapté aux projets de taille et de complexité moyenne. C'est une
amélioration du modèle en cascade traditionnel. Il permet d'identifier et d'anticiper très
tôt les éventuelles évolutions des besoins. C'est aussi un moyen de vérifier de la
maturité des utilisateurs, car s'il en était autrement, ils se trouveraient dans l'incapacité
de fournir des tests de recettes dès la phase de spécification. C'est un modèle
avantageux pour une maîtrise d'oeuvre, rassurant pour une maîtrise d'ouvrage qui doit
cependant s'engager significativement. Le modèle en V demeure actuellement le cycle
de vie le plus connu et certainement le plus utilisé.
La première étape, appelé spécification ou analyse des besoins, a pour but de dégager
du cahier des charges, toutes les contraintes nécessaires à l'élaboration du logiciel.
Trois sortes de contraintes logicielles sont à prendre en considération :
Lors de cette phase, il peut être décider de découper le logiciel en plusieurs modules
distincts afin de les sous-traiter par plusieurs équipes de développement. Un module
possède une interface permettant son intégration au logiciel global ou à d'autres
modules, et un corps pour son fonctionnement interne. Ils sont hiérarchisés de telle
façon que des modules de bas niveau s'emboîtent dans des modules intermédiaires,
lesquels s'intègrent à un module de haut niveau (noyau logiciel).
Un autre découpage peut être aussi utilisé pour scinder le logiciel en tâches distinctes.
L'application contient alors plusieurs sous-ensembles ayant en charge des traitements
spécifiques (tâches externes et tâches internes au logiciel), lesquels s'interconnectent
entre eux
Le Modèle en Spirale: s'appuie sur une succession de cycles dont chacun se déroule
en quatre phases :
Le cycle de vie en spirale est un modèle générique de cycle de vie évolutif qui a été
proposé par Barry W. Boehm en 1984. Ce modèle, axé sur la maîtrise et la réduction
des risques, est davantage un cadre de travail guidant la construction d'une démarche
spécifique de projet, plutôt qu'une démarche formalisée.
Le cycle de vie en spirale est plutôt adapté aux grands projets complexes.
Difficilement contractualisable, il est davantage applicable pour de projets internes à
l'entreprise. Il nécessite un patron de projet expérimenté. Les maîtrises d'ouvrage
peuvent voir dans le cycle de vie en spirale une méthode de conduite de programme,
dont chaque boucle serait un sous projet, éventuellement outsourcé sous la forme d'une
démarche en cascade. Chaque boucle de spirale permet :
Elle donne lieu au choix d'une alternative, validé par un prototype le cas échéant, et à
l'exécution de l'alternative choisie. A l'issue de la boucle, une revue des produits et des
résultats fournit une évaluation qui sert d'entrée pour la boucle suivante.
C'est un modèle adapté aux grands projets. Néanmoins, l'architecture du système doit
permettre de définir des domaines suffisamment découplés. Dans le cas contraire,
certains incréments doivent attendre que les incréments avec lesquels ils sont liés,
soient suffisamment développés. Lorsqu'on leur propose un développement par lot, les
Maîtrises d'Ouvrage doivent vérifier le couplage des domaines.
Le Modèle en B :
Le modèle en B est du à Birrel et Ould d'après " a Practical Handbook for software
developpement " (1985).
Similaire au modèle en cascade, il met l'accent sur le processus de maintenance qui est
évalué à 70% du cycle complet. Ce modèle réutilise les scénarios de tests bâtis pendant
la phase de développement, notamment pour les tests de non-régression, ainsi que les
procédures de mise en exploitation.
Ce modèle se projette plus loin que le traditionnel cycle en cascade. Il peut servir de
base à une maîtrise d'ouvrage pour bâtir un projet complet de développement et de
maintenance d'une grosse application de Back-Office. Son intérêt est de prévoir lors de
la phase projet la réutilisation des tests et des procédures de mise en exploitation.
Si l'on en croit le Robert, "un prototype est la première version d'un produit qui vient
d'être réalisé afin d'être mis au point". Autrement il faut parler de maquette qui
recouvre la réalisation à petite échelle de tout ou partie d'un produit à réaliser. Par abus
de langage, nous nommerons prototype les maquettes réutilisables.
Réellement, dire que l'on adopte un cycle de vie par prototype est un raccourci qui,
hors des petits projets, n'est pas assez formalisé pour soutenir l'organisation nécessaire
aux projets plus importants. On préfèrera des cycles de vie en spirale, RAD ou DSDM
qui tout en intégrant des phases de prototypage, proposent de par ailleurs un
formalisme adapté aux grands projets.
Sur les petits projets, plutôt techniques, mené par des petites équipes, l'intérêt est peut-
être de gagner en flexibilité, et de s'abstraire des contraintes d'une méthodologie plus
large. Pour des projets où les utilisateurs sont largement impliqués, on préfèrera
toujours un cycle de vie RAD.
Le Modèle Parallèle :
Le cycle de vie RAD est employé lorsque l'implication forte de l'utilisateur est
nécessaire. Il permet de construire le système avec l'utilisateur, et participe ainsi de
l'assurance qualité. Néanmoins la condition sine qua non pour mettre en oeuvre un
cycle RAD est de s'appuyer sur un solide atelier de génie logiciel qui seul peut garantir
un passage rapide du concept à la mise en oeuvre. L'équipe projet doit nécessairement
maîtriser l'AGL employé, c'est le risque principal des projets RAD.
Le cycle RAD a été introduit par James Martin. Il comporte 3 phases:
Historique
Développée à SOFTTECH (U.S.A.) en 1976 ;
Utilisée dans des projets industriels à ITT, THOMSON, AÉROSPATIALE etc.
Peut être utilisée pour décrire (spécifier) n'importe quel système
Sert à définir des modèles de systèmes existants, idéaux, réalisables compte tenu des
contraintes d'un projet, etc.
Le Modèle SADT
Un modèle SADT représente une image d'un système qu'on veut appréhender. La
technique d'analyse structurée identifie et organise les détails d'un tel système suivant
une hiérarchie parfaitement référencée.
Les entrées : ce sont les flèches horizontales entrant dans les boîtes.
Les mécanismes : ce sont les flèches venant du bas du schéma vers le bas des boîtes.
Les contrôles : les flèches venant du haut du schéma et pointant vers le haut des
boîtes.
Actigrammes
Un actigramme est identifié par un verbe d'action, il gère des données désignés par
des noms à partir de directives de contrôle (désignés par des noms aussi) en
s'appuyant sur lespotentialités des mécanismes. Il génère des données en sortie par
création ou par modifications des données en entrée.
Les données de contrôle ne sont pas modifiées par l'activité mais influent sur son
déroulement (ex. choix de l'utilisateur dans un menu).
Datagrammes
Un datagramme représente des données créées par des activités Génératrices (en
entrée) et consommées par des activités Utilisatrices (en sortie), sous le
contrôle d'activité de contrôle.
Ils accompagnent les diagrammes pour présenter brièvement des généralités sur le
diagramme et les faits auxquels l'auteur accorde un intérêt particulier, sans toutefois
dupliquer l'information présentée par le diagramme lui-même. Ce texte doit être écrit
uniquement lorsque le diagramme aura atteint son niveau d'approbation, permettant
ainsi de vérifier la lisibilité du diagramme lors du cycle écriture/lecture. Le texte
explicatif du niveau global doit présenter les faits qui s'appliquent à l'ensemble du
modèle, fournissant ainsi une description globale du système.
Les diagrammes pour explication seulement
Ils ne font pas vraiment partie du modèle. Il illustrent ou clarifient un aspect particulier
du système. Il est par exemple utile de produire une copie simplifiée des schémas
complexes.
Les n uds d'un modèle SADT sont numérotés d'une façon précise. Le premier n ud
représente le système global. Il porte le numéro particulier A-0 (resp. D-0) pour le
modèle des actigrammes (resp. datagrammes). Il sera décomposé sur la feuille A0
(resp. D0) en plusieurs n uds portant les numéros A1, A2 ...An (resp. D1, D2, ...Dn),
décomposés à leur tours en A11, A12 etc.
Les pages de textes et de glossaires sont numérotées de manière identique avec les
lettres G et T respectivement.
Les Actigrammes :
Les Datagrammes
La boîte représente les données (indiquées par un nom).
Les entrées représentent les actions qui produisent les données de la boîte.
Les sorties représentent les actions qui utilisent les données de la boîte.
Analyse descendante
1. Procéder par analyse descendante : Le premier niveau du modèle est en général très
abstrait, et progressivement les activités et les moyens nécessaires à leur réalisation sont
détaillés.
2. Délimiter le cadre de l’analyse : afin d’aborder l’analyse et la description du système, il
est fondamental de préciser le contexte (limite du système), le point de vue et l’objectif
de l’analyse.
Description de la méthode
La première phase est la modélisation du système décrit précédemment qui en montre
les fonctions. Le contexte est identifié par les flèches qui entrent ou sortent de cette
boîte mère.
Les supports peuvent ne pas être mentionnés si cela n’éclaire pas la compréhension.
On ne mentionne que les éléments nécessaires à ce que l’on veut montrer.
Enfin, il est fondamental que le modèle circule entre les partenaires du projet afin
qu'un consensus soit clairement établi avant de passer au début de la phase de
conception et d’implémentation.
La flèche tunnel dont les parenthèses entourent l'extrémité de la flèche qui est connectée à une
boîte, qui signifie que cette flèche existe implicitement dans toutes les boîtes résultant de la
décomposition de celle-ci.
La flèche tunnel dont les parenthèses se trouvent à l'autre extrémité, donc près des frontières
du diagramme, qui signifie que cette flèche existe implicitement dans toutes les boîtes qui
sont hiérarchiquement au dessus de la boîte concernée ; c'est-à-dire sa boîte mère, grand-
mère, ... jusqu'à A0 compris.
Exemple 1:
Exemple 2
Conclusions
a) SADT est un outil graphique de représentation.
b) SADT oblige à consigner par écrit les décisions d'une équipe de travail. Ceci
permet progressivement de créer une documentation complète.
c) SADT est un travail d'équipe qui demande discipline et coordination. Le
SADT est un produit pour communiquer et pour être diffusé.
d) Son formalisme conduit à une représentation structurée ascendante ou
descendante.
e) Si SADT est utilisé complètement (Actigrammes et Datagrammes) il permet
de programmer directement un système automatisé.
Cette succession d'étapes est appelée cycle d'abstraction pour la conception des
systèmes d'information :
L'expression des besoins est une étape consistant à définir ce que l'on attend du système
d'information automatisé, il faut pour cela :
Cela va permettre de créer le MCC (Modèle Conceptuel de la Communication) qui définit les
flux d'informations à prendre en compte.
L'étape suivante consiste à mettre au point le MCD (Modèle Conceptuel des Données) et
le MCT (Modèle conceptuel des traitements) décrivant les règles et les contraintes à prendre
en compte.
Le modèle organisationnel consiste à définir le MOT (Modèle Organisationnel
des Traitements), décrivant les contraintes dues à l'environnement (organisationnel, spatial et
temporel).
Le modèle logique, MLD (Modèle Logique des Données), représente un choix logiciel pour
le système d'information.
Le modèle physique reflète un choix matériel pour le système d'information.
3. Approche Objet:
3.1. Introduction :
Dans une approche fonctionnelle, vos programmes sont composés d'une série de fonctions,
qui assurent ensemble certains services. Il s'agit d'une approche logique, cohérente et intuitive
de la programmation.
Cette approche a un avantage certain appelé la factorisation des comportements (c'est à dire
que pour créer une fonction d'une application, rien ne vous empêche d'utiliser un autre
ensemble de fonctions (qui sont donc déjà écrites)).
Mais, l'approche fonctionnelle a aussi ses défauts, comme par exemple une maintenance
complexe en cas d'évolution de votre application (une simple mise à jour de l'application à un
point donné peut avoir un impact en cascade sur d'autres fonctions de notre application).
L'application sera alors retouchée dans sa globalité.
L'approche fonctionnelle n'est pas adaptée au développement d'applications qui évoluent sans
cesse et dont la complexité croit continuellement (plusieurs dizaines de milliers de lignes de
code).
Elle apporte l’indépendance entre les programmes, les données et les procédures parce que les
programmes peuvent partager les mêmes objets sans avoir à se connaître.
L'Objet: Un objet est une abstraction d’un élément du monde réel. Il possède des
informations, par exemple nom, prénom, adresse, etc., et se comporte suivant un ensemble
d’opérations qui lui sont applicables.
De plus, un ensemble d'attributs caractérisent l'état d'un objet, et l'on dispose d'un ensemble
d'opérations (les méthodes) qui permettent d'agir sur le comportement de notre objet.
Un objet est l'instance d'une classe, et une classe est un type de données abstrait, caractérisé
par des propriétés (ses attributs et ses méthodes) communes à des objets, qui permet de créer
des objets possédant ces propriétés.
• L’identité:
L’objet possède une identité, qui permet de le distinguer des autres objets, indépendamment
de son état. On construit généralement cette identité grâce à un identifiant découlant
naturellement du problème (par exemple un produit pourra être repéré par un code, une
voiture par un numéro de série, ...)
• Les attributs:
Il s’agit des données caractérisant l’objet. Ce sont des variables stockant des informations
d’état de l’objet
Les méthodes d’un objet caractérisent son comportement, c’est-à-dire l’ensemble des actions
(appelées opérations) que l’objet est à même de réaliser. Ces opérations permettent de faire
réagir l’objet aux sollicitations extérieures (ou d’agir sur les autres objets). De plus, les
opérations sont étroitement liées aux attributs, car leurs actions peuvent dépendre des valeurs
des attributs, ou bien les modifier.
La Notion de Classe:
On appelle classe la structure d’un objet, c’est-à-dire la déclaration de l’ensemble des entités
qui composeront un objet. Les objets de même nature ont en général la même structure et le
même comportement. La classe factorise les caractéristiques communes de ces objets et
permet de les classifier. Un objet est donc, une instanciation d’une classe, c’est la raison pour
laquelle on pourra parler indifféremment d’objet ou d’instance (éventuellement d’occurrence).
Toutes les instances d'une classe constituent l'extension de la classe.
Classe = instanciation + attributs (variables d'instances) + opérations
• L’instanciation:
L’objet possède une identité, qui permet de le distinguer des autres objets, indépendamment
de son état. L'instanciation représente la relation entre un objet et sa classe d'appartenance qui
a permis de le créer.
Il s'agit des données représentant l'état de l'objet. Ils ont un nom et soit un type de base
(simple ou construit) soit une classe (l'attribut référençant un objet de la même classe ou une
autre classe).
Il s'agit des opérations applicables aux objets de la classe. Elles peuvent modifier tout ou en
partie l'état d'un objet et retourner des valeurs calculées à partir de cet état.
Exemple: Si on définit la classe voiture, les objets Peugeot 406, Renault 18 seront des
instanciations de cette classe. Il pourra éventuellement exister plusieurs objets Peugeot 406,
différenciés par leur numéro de série. Mieux: deux instanciations de classes pourront avoir
tous leurs attributs égaux sans pour autant être un seul et même objet. C'est le cas dans le
monde réel, deux T-shirts peuvent être strictement identiques et pourtant ils sont distincts.
D'ailleurs en les mélangeant il serait impossible de les distinguer...
L’Encapsulation:
Le concept d’encapsulation est un mécanisme consistant à rassembler les données et les
méthodes au sein d’une structure en cachant l’implémentation de l’objet, c’est-à-dire en
empêchant l’accès aux données par un autre moyen que les services proposés. L'utilisateur
d'une classe n'a pas forcément à savoir de quelle façon sont structurées les données dans
l'objet, cela signifie qu'un utilisateur n'a pas à connaître l'implémentation. Ainsi, en interdisant
l'utilisateur de modifier directement les attributs, et en l'obligeant à utiliser les fonctions
définies pour les modifier (appelées interfaces). L’encapsulation permet donc de garantir
l’intégrité des données contenues dans l’objet (on pourra par exemple s'assurer que le type
des données fournies est conforme à nos attentes, ou encore que les données se trouvent bien
dans l'intervalle attendu)..
L’encapsulation permet de définir des niveaux de visibilité des éléments de la classe. Ces
niveaux de visibilité définissent les droits d’accès aux données selon que l’on y accède par
une méthode de la classe elle-même, d’une classe héritière, ou bien d’une classe quelconque.
Il existe trois niveaux de visibilité :
• Publique : Les fonctions de toutes les classes peuvent accéder aux données ou aux
méthodes d’une classe définie avec le niveau de visibilité public. Il s’agit du plus bas niveau
de protection des données.
• Protégée : l’accès aux données est réservé aux fonctions des classes héritières, c’est-à-dire
par les fonctions membres de la classe ainsi que des classes dérivées.
• Privée : l’accès aux données est limité aux méthodes de la classe elle-même. Il s’agit du
niveau de protection des données le plus élevé.
La Notion d'Héritage:
L’héritage (en anglais inheritance) est un principe propre à la programmation orientée objet,
permettant de créer une nouvelle classe à partir d’une classe existante. Le nom d’"héritage"
(ou parfois dérivation de classe) provient du fait que la classe dérivée (la classe nouvellement
créée) contient les attributs et les méthodes de sa superclasse (la classe dont elle dérive).
Héritage Multiple:
Certains langages orientés objet, tels que le C++, permettent de faire de l’héritage
multiple. Ce qui signifie qu’ils offrent la possibilité de faire hériter une classe de deux
superclasses. Ainsi, cette technique permet de regrouper au sein d’une seule et même classe
les attributs et les méthodes de plusieurs classes. L'héritage multiple représente le mécanisme
par lequel une sous-classe hérite des propriétés de plus d'une super-classe.
Polymorphisme:
Le nom de polymorphisme vient du grec et signifie qui peut prendre plusieurs formes. Cette
caractéristique essentielle de la programmation orientée objet caractérise la possibilité de
définir plusieurs fonctions de même nom mais possédant des paramètres différents (en
nombre et/ou en type), si bien que la bonne fonction sera choisie en fonction de ses
paramètres lors de l’appel.
Le Polymorphisme Ad Hoc:
Le polymorphisme ad hoc permet d'avoir des fonctions de même nom, avec des
fonctionnalités similaires, dans des classes sans aucun rapport entre elles (si ce n'est bien sur
d'être des filles de la classe objet). Par exemple, la classe complexe, la classe image et la
classe lien peuvent avoir chacune une fonction "afficher". Cela permettra de ne pas avoir à se
soucier du type de l'objet que l'on a si on souhaite l'afficher à l'écran.
Le polymorphisme ad hoc permet ainsi de définir des opérateurs dont l'utilisation sera
différente selon le type des paramètres qui lui sont passés. Il est donc possible par exemple de
surcharger l'opérateur + et de lui faire réaliser des actions différentes selon qu'il s'agit d'une
opération entre deux entiers (addition) ou entre deux chaînes de caractères (concaténation).
Le Polymorphisme d'Héritage:
La possibilité de redéfinir une méthode dans des classes héritant d'une classe de base s'appelle
la spécialisation. Il est alors possible d'appeler la méthode d'un objet sans se soucier de son
type intrinsèque : il s'agit du polymorphisme d'héritage. Ceci permet de faire abstraction des
détails des classes spécialisées d'une famille d'objet, en les masquant par une interface
commune (qui est la classe de base).
Imaginons un jeu d'échec comportant des objets roi, reine, fou, cavalier, tour et pion, héritant
chacun de l'objet pièce. La méthode mouvement () pourra, grâce au polymorphisme d'héritage,
effectuer le mouvement approprié en fonction de la classe de l'objet référencé au moment de
l'appel. Cela permettra notamment au programme de dire piece.mouvement sans avoir à se
préoccuper de la classe de la pièce.
Le Polymorphisme Paramétrique:
On appelle signature le nombre et le type (statique) des arguments d'une fonction. C'est donc
la signature d'une méthode qui détermine quelle méthode sera appelée.
3.2. Les Avantages de l’Approche Objet:
* La modularité et la réutilisabilité:
* L’extensibilité:
Pour une meilleure productivité des développeurs et une plus grande qualité des applications).
La maîtrise de la complexité d’un système repose sur trois principes :
La modélisation objet consiste à créer une représentation informatique des éléments du monde
réel, sans se préoccuper de l’implémentation, ce qui signifie indépendamment d’un langage
de programmation. Il s’agit donc de déterminer les objets présents et d’isoler leurs données
et les fonctions qui les utilisent. Pour cela, des méthodes de conception et de développement
orientées objet ont été mises au point. Entre 1970 et 1990, de nombreux analystes ont mis au
point des approches orientées objets, si bien qu’en 1994 il existait plus de 50 méthodes objet.
Toutefois seules 3 méthodes ont véritablement émergées :
La méthode OMT de Rumbaugh
La méthode BOOCH’93 de Booch
La méthode OOSE de Jacobson
A partir de 1994, Rumbaugh et Booch (rejoints en 1995 par Jacobson) ont unis leurs efforts
pour mettre au point la méthode UML (Unified Modeling Language), qui permet de définir
une notation standard en incorporant les avantages de chacune des méthodes précédentes
(ainsi que celles d’autres analystes).
3.2. Présentation générale de la méthode OMT:
Introduction:
OMT (Object Modeling Technique) utilise trois modèles pour décrire un système : objet,
dynamique et fonctionnel. Ces trois modèles sont complémentaires et inter-reliés. Le modèle
objet est fondamental et préalable aux deux autres.
OMT permet de modéliser un système selon trois points de vue complémentaires, chacun
capturant des aspects essentiels du système, tous requis pour une description complète:
Un logiciel combine normalement ces trois aspects: il transforme (modèle 3) des données
(modèle 1) d'une façon ordonnée dans le temps (modèle 2).
Esprit de la méthode:
Avantages:
Les outils:
Généralité de la méthode:
OMT n'est pas une méthode dédiée explicitement à la programmation orientée objet. On
montre l'intérêt de la méthode pour spécifier des applications dont le langage cible n'est pas
orienté objet.
l'accent est mis sur l'utilisation des objets pour modéliser le monde réel plutôt que
comme un mécanisme d'un langage particulier.
les relations inter objets sont élevées à un rang aussi élevé que les classes
moins d'accent est mis sur l'héritage et les méthodes
les mécanismes subtils liés à l'héritage sont laissés de côté
un accent particulier est mis sur le typage, les classes, la modélisation
la terminologie utilisée est celle qui domine quand elle existe
Exercices:
Tous les objets ont une identité et sont identifiables. D'un point de vue informatique, il n'est
pas toujours évident de prévoir tout ce qui permet de les distinguer. Pour chacun de ces
collections d'objets, décrire de quelle façon on pourrait les distinguer :
QUOI : le modèle objet définit la structure statique des objets et leurs inter-relations
Classes
Liens
Héritage
QUAND : le modèle dynamique décrit les interactions entre les objets
OMT permet de modéliser un système selon trois points de vue complémentaires, chacun
capturant des aspects essentiels du système, tous requis pour une description complète:
Chaque modèle comporte des références aux deux autres ; ces liens sont limités et
explicites
Chaque modèle peut être examiné d'une façon relativement indépendante des deux
autres
Chaque modèle évolue durant le cycle de développement :
Les objets sont les éléments sur lesquels les autres modèles s'appuient. Ce sont les atomes (au
sens grec : insécable) de nos modèles a l'issue de l'analyse le modèle objet comporte des
termes familiers aux personnes du domaine, et normalement aucune référence informatique.
Par contre, le modèle de conception comporte des références informatiques. Bien évidemment
le modèle objet est représenté par des diagrammes décrivant les différentes classes,
hiérarchisées, et comportant les attributs et les opérations utiles.
5.2. Le modèle dynamique: (Le "Quand?")
Le modèle dynamique décrit les interactions entre les objets. Il décrit les aspects d'un système
où interviennent :
Le temps
Les séquences
Les événements
Séquences d'événements
Les états qui définissent le contexte pour des événements
L'organisation des événements et des états
Ce qu'elles font
Ce sur quoi elles opèrent
Comment elles sont programmées
Diagrammes d'état:
Fonctions
Applications
Contraintes
Dépendances fonctionnelles
Ce modèle décrit ce que fait un système, sans considération pour quand ou comment il le fait.
Le modèle fonctionnel est représenté par des Diagrammes de Flux de Données (DFD).
Les DFD montrent :
5.5. Difficultés:
On ne sait pas toujours décider si une information doit ou non figurer dans un modèle. Ceci
est normal car un modèle décrit ses frontières de façon toujours brutale au début, et certaines
limites doivent être déplacées. Certaines propriétés d'un système peuvent parfois être mal
représentées par OMT. C'est également normal, aucune méthode ne peut être complète. Dans
ce cas, le recours à tout autre langage ou méthode (graphique ou non, spécifique au domaine
ou non) est souhaitable ou même nécessaire.
5.6. Exercices:
1) Parmi les caractéristiques d'un pneu on trouve sa taille, son composant, sa construction
interne, dessin, prix, poids, durée de vie.
2) Décider quel modèle (objet, dynamique, fonctionnel) est pertinents pour les aspects
suivants d'un programme de jeu aux échecs. Le jeu et les pièces sont visualisés sur un écran.
Les coups de l'humain sont décrits par un curseur et une souris