Cours de Modélisation
Cours de Modélisation
Cours de Modélisation
Programme
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é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.
1. Modularité
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
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
Point2
Abscisse
Ordonné
Initialiser ()
Déplacer abs
(dx)
Déplacer ord
(dy)
Déplacer (dx,
dy)
Supprimer ()
Afficher abs ()
Afficher ord ()
Afficher ()
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
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.
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
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.
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
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é.
{ E : Etudiant :
E.matricule matri ;
E.nom name ;
}.
{ 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.
NomDeLaClasse NomObjet ;
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
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 :
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 :
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.
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