Cours de Modélisation

Télécharger au format docx, pdf ou txt
Télécharger au format docx, pdf ou txt
Vous êtes sur la page 1sur 11

Cours d’introduction à la modélisation objet

UML + 2TUP = Méthode = Langage de modélisation+ langage de processus

2TUP two track unified process (processus à deux branches unifiés)

On a la branche fonctionnelle et la branche technique

Programme

Chap1 : Introduction et concept de base de la modélisation orientée objet

Chap2 : Classes, objets et méthodes

Chap3 : Les langages

Chap4 : Méthodes d’analyse

Chap5 : Le langage UML

Chap1 : Introduction et concept de base de la modélisation orientée objet

Introduction

C’est à partir de 1960 que la programmation, même si elle est structurée, voit le jour. Il est surtout
question de résoudre de façon automatique les problèmes. La question de l’optimisation des
programmes ne se pose pas encore. Même si la programmation structurée permet de résoudre le
problèmes complexes, il est à noter qu’on observe une forte dépendance entre les données et les
traitements. Ainsi, au sein du même programme on trouve la définition des structures utilisées
(variables, constantes, types …) les opérations de manipulation de ces structures (fonctions,
procédures …) et le programme principal.

Program test

Déclaration des constantes

Déclaration des variables

Déclaration des types

Déclaration des procédures ;

Déclaration des fonctions ;

Début

Programme principal

Fin

Dans une telle structuration, seul le programme qui a créé une structure de donnée peut l’utiliser
La notion d’objet est utilisée pour la première fois dans le langage Silula (simple Universal langage)
en 1967. En effet, les concepteurs de ce langage, ont essayé de lever les limites, observer en y
adjoignant l’approche objet.

En somme, la POO (programmation orientée objet) met à jour un nouveau paradigme (nouvelle
façon de penser). Le programme devient donc un assemblage d’entités qui échangent au moins de
messages tout en garantissant l’autonomie de chaque entité et sa réutilisabilité. Ce paradigme
compréhensible par l’ensembles de développeurs dans le monde, vient avec son vocabulaire et sa
syntaxe que chaque développeur doit comprendre et maitriser afin de se faire comprendre des
autres.

I. Les concepts de la POO

1. Modularité

Un bon logiciel doit être fiable, extensible et réutilisable.

 Le logiciel sera dit fiable s’il a un fonctionnement adéquat par conséquent le logiciel doit faire
exactement ce pour quoi il a été pensé et conçu
 L’extensibilité représente la facilité avec laquelle l’on peut apporter des améliorations au
logiciel sans qu’il ne perde ses acquis
 La réutilisabilité est le fait pour un logiciel de voir ses composants réutilisés en totalité ou en
partie par d’autres applications

Un logiciel sera donc dit modulaire, s’il a toutes les qualités précédentes. Lorsque l’on programme il
est important de tenir compte des notions suivantes

 La décomposition/composition : il s’agit de découpage du problème principal à résoudre en


de petits problèmes moins difficiles à résoudre : les modules. Le programme est alors la mise
en commun des différents modules
 La compréhension : le programme doit pouvoir être maintenu par un programmeur autre
que celui qui l’a conçu
 La continuité : lorsqu’une application doit être modifiée, le nombre de modules nécessitant
une intervention doit être fortement réduit
 La protection des données : l’information doit être disponible et accessible uniquement au
composant qui y a droit. L’on doit éviter de plus en plus les variables globales au profit des
variables locales

2. Introduction aux concepts

a) Notion d’objet

Un objet est un élément de modèle représentant les instances d’une ou plusieurs classes. On appelle
objet, toute unité indépendante et distincte sur laquelle l’on a défini les opérations qui peuvent
s’appliquer. Un objet sera donc tout élément de l’environnement d’étude qui a un intérêt dans la
résolution du problème. Un objet est constitué de 2 parties : une partie statique qui décrit l’état
interne de l’objet (les attributs ou les membres) et une partie dynamique constituée par les
opérations qui lui sont applicables. Un objet n’a de vie qu’à partir d’une classe. On dit que l’objet est
une instanciation d’une instance ou une classe.
b) Notion de classe

Une classe est un moule à fabriquer les objets dont le programmeur a besoin pour modéliser le
monde réel. La classe est donc un regroupement d’objets similaires qui facilite leur création et leur
utilisation

Exemple : définir une classe point en dimension 2 et en dimension 3

Point2

 Abscisse
 Ordonné

 Initialiser ()
 Déplacer abs
(dx)
 Déplacer ord
(dy)
 Déplacer (dx,
dy)
 Supprimer ()
 Afficher abs ()
 Afficher ord ()
 Afficher ()

c) Le trio entité, attribut, valeur

Chaque objet qui nous entoure peut-être décrit par ce trio. A titre d’exemple, nous dirons (étudiant,
matricule, 22s142-GLO ou étudiant, nom, keps). Un objet peut avoir plusieurs attributs qui le
caractérisent chacun prenant une valeur spécifique. Pour une modélisation d’un problème donné, on
ne retiendra que les attributs essentiels pour le programme.

d) L’encapsulation

En orienté objet, elle permet de restreindre l’accès aux attributs. Seules les opérations de l’objet y
ont accès directement. L’encapsulation apporte l’indépendance entre les données et les
programmes. Elle favorise donc la modularité et la réutilisabilité des sous-systèmes. En séparant
l’interface d’un module (liste des services offerts) de son implémentation (structure de données et
algorithme. Avec l’encapsulation, il n’est pas possible d’agir directement sur les données. Il faut
nécessairement passer par les méthodes. L’appel d’une méthode, d’un objet, est donc un message
qu’on envoie à cet objet. In fine, l’encapsulation est le processus par lequel on impose que l’accès
aux attributs d’un objet se fasse uniquement par ses méthodes.
e) L’héritage

Il est possible que l’on veuille utiliser une classe existante, pour en créer une autre. L’héritage est une
technique qui permet de créer une classe à partir d’une autre classe. Cette dernière lui servant de
modèle ou de base de départ. Lorsque l’on procède de la sorte, on ne réécrit pas le même code
source plusieurs fois, et on se contente de définir les particularités de la nouvelle classe. La nouvelle
classe est appelé sous-classe et la classe à partir de laquelle elle a été créée super classe. On peut
omettre dans la classe fille ou sous-classe tous les attributs et méthodes de la super classe, qu’elle
hérite. Si une classe est un cas particulier d’une classe générale, alors elle possède toutes les
informations de la classe générale, sans avoir besoin de les redéfinir. On ne fait appel à la sous classe
que pour ses particularités.

Exercice : soit à concevoir un système de gestion des consultations dans un hôpital. Un patient est
accueilli par une infirmière qui se charge de lui prendre ses paramètres que sont la tension artérielle,
le poids, son nom, son prénom, son quartier de résidence. Elle lui demande en outre de préciser les
symptômes pour lesquels il s’est rendu à l’hôpital. A l’analyse desdits symptômes, elle décide si le
patient doit rencontrer un médecin généraliste ou un spécialiste. Elle envoie donc le patient chercher
à la caisse un ticket de session. Chaque spécialiste a un domaine d’études particulier et des jours
d’interventions spécifiques (2 jours par semaine). Le spécialiste peut après consultation, donner un
nouveau rendez-vous au patient. Le médecin généraliste peut référer un patient à un spécialiste

Atangana Jean Paul est un médecin sorti de la faculté de médecine en 2015, qui doit composer au
mois de novembre le concours de spécialisation en cardiologie. Louis Pépin et djamen Christelle sont
respectivement pédiatre et psychiatre

1- Identifier les classes


2- Identifier les relations d’héritage possible
3- Citer les objets de ce texte

Patient

 Nom
 Prénom
 Poids
 Quartier
 TA
 Date de naissance
 Symptômes
 Numéro patient
Infirmier

 Id
 Nom
 Prénom
 Date recrutement
 Adresse

Médecin

 Faculté

Spécialiste

 Domaine
 Jour d’intervention

f) Le polymorphisme

C’est le mécanisme par lequel, des méthodes ou fonctions dans des classes différentes portent le
même nom. Dans ce cas le compilateur se chargera d’identifier laquelle des méthodes il utilisera.

Chap2 : classes, objets et méthodes

I. Classe objet

Une classe est une généralisation de la notion de type que le programmeur définit et où l’on retrouve
à la fois les attributs et les méthodes. A titre d’exemple, lorsque l’on définit la structure étudiant on
écrit :

Type étudiant

Structure {

Matricule : chaine ;

Nom : chaine ;

Prénom : chaine ;
Age : entier ;

//méthodes

Pour 2 étudiants M et C l’accès aux attributs se fait de la manière suivante :

M. Nom : rapporte le nom de M.

C. Matricule : rapporte le matricule de C

La classe représente pour le concepteur ce que représente le plan de construction pour le maçon. On
notera qu’une classe doit avoir un nom significatif et commencer par une lettre majuscule.

1) Signature d’une méthode

C’est l’ensemble constitué par le nom de la méthode ainsi que la liste de la nature de ses arguments.
Une méthode peut être créé avec le même nom qu’une méthode existante, mais en modifiant soit le
nombre des arguments soit le type des arguments. Lorsque l’on procède de la sorte on parle de
surcharge. Le type de retour de la méthode ne fait pas partie de la signature.

Exemple :

Classe points {

Abs : entier ;

Ord : entier ;

Cote : entier ;

//méthodes

Void point3 (x : entier, y : entier) ;

Void point3 (x : entier, y : réel) ;

Void point3 (x, y, z : entier) ;

Void point3 (x, y : entier, z : réels) ;

Void point3 (x : entier ; y : entier) ;

Abscisse (A : point3) : entier

Void afficher (abs, ord) ;

2) Déclaration d’une méthode avec ou sans retour


Si une méthode possède dans son écriture une instruction telle que retourner X alors elle a pour type
de retour le type de X et dans ce cas, dans sa déclaration, son nom doit être précédé du type de ce
qu’elle retourne.

Etudiant

-Entier Age ;
-Chaine Matricule ;
-Chaine Nom ;
-Chaine Prénom ;

+ entier AfficherAge () ;
+chaine AfficherNom () ;

Lorsqu’une méthode ne retourne rien, dans sa déclaration, son nom est précédé du mot clé Void

3) Le constructeur

Lorsqu’un objet est créé à partir d’une classe, il a besoin d’une valeur initiale. C’est le rôle du
constructeur. Il s’agit d’une méthode qui porte le même nom que la classe et qui n’a aucune valeur
de retour. C’est la première méthode qui s’exécute à l’instanciation. Il est donc responsable de
l’instanciation. Par défaut, tous les langages orientés objet, fournissent un constructeur
contrairement aux autres méthodes qui ne s’exécute que si l’objet est déjà existant, le constructeur
lui, existe avant l’objet. Même si un constructeur est fourni par défaut, il est fortement conseillé au
programmeur de toujours prévoir son propre constructeur. Un objet pouvant être créé de plusieurs
façons, le constructeur est donc la méthode la plus surchargé.

Void Etudiant (matricule, name)

{ E : Etudiant :

E.matricule matri ;

E.nom name ;

}.

Void Etudiant (mat, name, surname)

{ E : Etudiant ;

E.matricule mat ;

E.nom name ;

E.prenom surname ;

}
Le constructeur a donc pour principal rôle l’initialisation des attributs de l’objet dès sa création. Le
constructeur par défaut ne possède aucun attribut. Une fois qu’un constructeur ayant un ou
plusieurs arguments est défini par le programmeur, il n’est plus possible de créer un objet sans
argument sauf si, de manière explicite, le programmeur a fait une surcharge du constructeur par
défaut.

Une fois le constructeur défini, son appel se fait de la manière suivante

NomDeLaClasse NomObjet = nouveau NomDeLaClasse(« listes paramètres »)

Exemple : Etudiant ET1 = nouveau Etudiant (« 22T927-GLO », « KAME ») ;

NomDeLaClasse NomObjet ;

NomObjet = nouveau NomDeLaClasse (liste des paramètres) ;

Exemple : Etudiant ET2 ;

ET2 = nouveau NomDeLaClasse (« 23A571 GLO », « TCHINDA », « Maxime », 17) ;

4) Notion de visibilité

Par visibilité, on entend la possibilité pour d’autres classes d’utiliser directement un élément d’une
classe. Trois niveaux de visibilité sont possibles :

 Public : matérialisé par le signe (+), signifie que les données ou les méthodes sont accessibles
dans toute l’application. Ainsi, un élément déclaré publique, peut être utilisé dans et par
n’importe quelle partie du programme
 Protégé : matérialisé par le symbole (#) signifie que l’élément n’est accessible que par les
objets de la classe, ou par ceux d’une classe dérivée (classe fille)
 Privé : symbolisé par le signe (-), cela signifie que l’élément n’est accessible que par les objets
de cette classe.

En somme, on déclarera un attribut ou une méthode privée lorsque l’on veut restreindre son accès à
la seule classe dans laquelle il est déclaré. En revanche, il sera public, si son accès est possible par ou
dans tout autre place. Il faut retenir une fois pour toute qu’en programmation orientée objet, les
seuls accès possibles aux attributs d’une classe, même en lecture seule ne peuvent se faire que par
l’entremise des méthodes de cette classe

Exercice

L’on souhaite mettre en place, un système de gestion des feu56x de signalisation dans la ville de
Yaoundé. Il s’agit d’un marché lancé par le maire de la ville. Le feu de signalisation outre sa position,
possède une hauteur et son état dépend de la couleur qu’il prend. En fonction de la couleur, il envoie
différents messages à son environnement. En considérant qu’on est pays très sérieux comme le
Cameroun ou les chauffeurs et autres usagers de la route respectent les feux, modéliser ce système

II. La communication
Lorsque deux objets décident de communiquer, le mécanisme est appelé envoi de message. En effet,
il s’agit pour le premier objet de déclencher une méthode sur le second, laquelle méthode aura
préalablement été définie, dans la classe de celui-ci. Ainsi, deux objets ne communiquent que d’une
seule manière : l’un demande à l’autre d’exécuter une méthode qui lui est propre. A titre d’exemple,
dans le cadre de la gestion des feux de signalisation, lorsque le feu passe au vert, il envoie un signal à
la voiture de tête pour que celui-ci, change sa vitesse ou bien démarre. Le feu de signalisation
demandera donc à la voiture d’exécuter sa méthode qui permet de changer la vitesse de la voiture
pour avancer. Pour que ce processus se réalise, dans la classe feu de signalisation, il y’aura une
méthode, dans laquelle, on trouvera une instruction du style VoitureTete.ChangerVitesse (50) ;

In fine, la communication nécessite deux objets : l’expéditeur dans le code duquel l’envoi se produit
et le destinataire à qui le message est destiné. Il est nécessaire que l’objet émetteur du message
dispose dans son sein, d’une déclaration de l’objet récepteur pour pouvoir faire appel aux méthodes
implémentés par sa classe créatrice

Chap3 : Les langages

Introduction

Alan Mathison Turing met sur pied une machine capable à la réception d’informations de produire
des résultats après analyse : c’est la machine de Turing. C’est donc lui qui invente les termes
informatiques. A la suite de ses travaux, KONRAD SUZE publie un article en 1948. Les années 50
viennent ouvrir la voie à la course aux langages. De nombreux langages ont ainsi été créés dont voici
une liste non-exhaustive :

 Le FORTRAN (Formula Translator) : inventé par John Backus en 1954


 Le LISP (List Processing) : inventé par John McCarthy en 1958
 Le COBOL (Common Business Oriented Language) : inventé par Grace Hopper en 1959
 Le BASIC (Beginners All-purpose Symbolic Instruction Code) : inventé en 1963 par John
Georges kemeny et Thomas Eugène Kurtz
 Le C inventé par Denis Ritchie et Ken Thompson en 1972
 Le PASCAL et MODULA inventé respectivement en 1970 et 1977 par Nicklaus Wirth
 ADA langage dont le nom fait honneur

Exercice 4,5 question 2, 7

I. Evolution des langages

L’on découpe en 5 générations les langages de programmation :

 La première génération est le langage machine. On parle aussi de langage natif.


Ce langage est composé d’instruction et donnés codées en binaire que l’ordinateur doit
traiter. C’est le seul langage que l’ordinateur peut traiter directement. Les langages de cette
génération présentaient une difficulté de compréhension mais surtout de décodage de
l’information traitée
Exemple : A1 01 10 03 06 01 12 A3 01 14 est un programme écrit en hexadécimal qui
additionne deux cases mémoires et stocke le résultat dans une 3e case
 La deuxième génération est la langage assembleur. Un code écrit en langage assembleur
pour peu que l’on connaisse la syntaxe est lisible et compréhensible. Seulement, ce langage
est intimement lié aux types de processeurs.
Ainsi le programme précédent écrit en langage assembleur donnerait ceci
MOV AX, [01 10]
ADD AX, [01 12]
MOV [01 14], AX
Le langage assembleur a perdu en popularité mais demeure utilisé
 La troisième génération se démarque par l’utilisation d’une syntaxe proche de la langue
anglaise. Les langages de cette génération sont apparus autour de 1960 et ont apportés une
meilleure lisibilité des programmes et une meilleure productivité des programmeurs. Ils ne
sont plus liés au type de processeur. L’on a introduit ici la notion de portabilité des
programmes. Dans cette catégorie, on retrouve la plupart des grands langages. ADA, ALGOL,
BASIC, COBOL, FORTRAN, C, C++, JAVA, PYTHON…. Parce que cette catégorie comporte un
nombre important de langage, on la subdivise souvent en catégorie selon le paradigme
utilisé.
 La quatrième génération est constituée des langages faisant référence aux bases de données.
Ces langages intègre la gestion de l’IHM et propose un langage moins technique et beaucoup
plus proche de la syntaxe naturelle. Il s’agit par exemple, de Microsoft Access, SQL,
PostScript…
 La cinquième génération est composée de langage visant à résoudre des problèmes par
l’utilisation de contraintes et non d’algorithmes utilisés essentiellement de manière écrite.
Les langages de cette génération de cette génération reposent beaucoup plus sur la logique
et sont utilisés en intelligence artificielle

II. Les paradigmes de programmation

Un paradigme est une façon de penser. En informatique, ce serait donc une façon de programmer,
d’appréhender un problème et de le résoudre. Certains langages sont conçus pour supporter un
paradigme particulier. C’est le cas Smalltalk et java qui supportent le paradigme orienté objet, tandis
que Haskell na supporte que la programmation fonctionnelle. D’autres langages par contre, supporte
des paradigmes multiples. C’est le cas de C++, Common Lisp, OCaml, Python, Scheme, Ruby

1. La programmation impérative

A l’origine tout programme était impératif. C’est donc le paradigme de programmation le plus
ancien. Il est caractérisé des séquences d’instructions que l’ordinateur exécute à l’effet de résoudre
un problème

2. La programmation structurée

Apparue vers 1970, l’approche structurée est considérée comme un sous-ensemble de l’approche
impérative. Elle a été développée dans le but de supprimer l’instruction go to qui réalisait des
branchements sur une instruction particulière pendant l’exécution. Elle peut être réalisée dans
n’importe quel langage de programmation.

3. La programmation fonctionnelle

Ici tout se fait à l’aide des fonctions. Le langage fonctionnel le plus ancien est LISP. Ses principales
variantes sont : Common Lisp, Scheme, Haskell
III. Compilation et interprétation d’un code

Un programme une fois écrit dans un langage de programmation ne peut être exécutable
directement par le processeur, il doit suivre des transformations intermédiaires. Deux solutions sont
connues dans le monde informatique :

 Soit on transforme le programme source en un code machine : la compilation


 Soit le programme source est décodé et exécuté au fur et à mesure

1. La compilation

C’est l’opération qui consiste à transformer le code source en code machine avant son exécution. Le
compilateur peut être vu comme une boite noire qui reçoit en entrée un code source et le
transforme en code destination équivalent en sortie. Idéalement, un compilateur est divisible en trois
parties.

a) Le front-end : est responsable de la lecture du code source et de sa transformation en


langage intermédiaire.
b) Le Middle-end : est optionnel et fait (réalise) plusieurs passages pour le traitement du
langage intermédiaire. C’est ici qu’on lieu les optimisations du programme
c) Le back-end : est responsable de produire le code final à partir du langage intermédiaire.

Pour accomplir son travail, un compilateur doit lire le code source, vérifier sa validité et générer le
code destination lorsqu’il n’y a pas d’erreur ou afficher les erreurs détectées. Lorsque le code source
est textuel, le compilateur doit analyser la séquence du caractère du code source pour en extraire
l’information structurée qu’elle contient. L’utilisation de la théorie des langages pour s’attaquer à ce
problème a emmené à diviser ces taches en deux : l’analyse lexicale, et l’analyse syntaxique

Vous aimerez peut-être aussi