Vous êtes sur la page 1sur 186

0

Université de Kinshasa
Faculté polytechnique

COURS D‟INFORMATIQUE DE GESTION

Troisième graduat

Pr. E. KANGA MATONDO

ANNEE ACADEMIQUE 2013 – 2014


1

Quels les objectifs poursuivis dans ce cours ?

1. Exposer les notions fondamentales de l‟informatique de gestion ;

2. Amener les étudiants à soulever des questions et à poser un regard critique


sur les notions vues.
2

Chapitre 1.

Qu‟est-ce que l‟informatique de gestion ?

Depuis quelques années, il est devenu usuel de parler d‟ « informatique de


gestion » en tant que discipline professionnelle comme nous parlerions de génie
civil, d‟algorithmique, de mécanique rationnelle ou de santé.

Dans ce cours, nous tenterons de définir le plus clairement possible la portée et


le rôle de cette discipline en nous appuyant sur des concepts scientifiques
reconnus.

L‟informatique de gestion recouvre les connaissances et compétences qui se


trouvent à l‟intersection des disciplines de l‟informatique et de la gestion.

Mais quelle est la signification ou la portée des termes que sont l‟informatique
d‟une part et la gestion d‟autre part.

Le terme « informatique » est un néologisme construit à partir des mots «


information » et « automatique » par P. Dreyfus en 1962. Il s'agit donc d'une
discipline qui concerne le traitement automatique de l'information.

La définition acceptée par l'Académie Française est la suivante : "science du


traitement rationnel, notamment par machines automatiques, de l'information
considérée comme le support des connaissances humaines et des
communications dans les domaines techniques, économiques et sociaux".

Le terme de « gestion » signifie l‟action d‟administrer, d‟assurer la rentabilité


d‟une entreprise ;

Le dictionnaire Petit Robert (1993) le définit comme l‟action de gérer les


affaires d‟un autre, et par extension ses propres affaires. Et « gérer » est défini
comme administrer (les intérêts, les affaires d‟un autre).

A partir de cet éclairage conceptuel, nous proposons la définition suivante de


l‟informatique de gestion :
3

L‟informatique de gestion est la discipline du traitement automatique de


l‟information utile et nécessaire à l‟administration, aux intérêts ou aux
affaires des entreprises.

Informatique Informatique
Gestion
Gestion

La définition ci-dessus implique que l‟informatique est au service de la gestion


et non l‟inverse. Ce qui a fait dire à certains spécialistes en la matière que
l‟informatique doit couler dans le sillon de la gestion et non l‟inverse.

Naturellement, la subordination de l‟informatique aux impératifs de gestion ne


signifie pas la préséance des gestionnaires ou autres économistes et
administrateurs sur les informaticiens ; la subordination de l‟informatique aux
impératifs de gestion implique que les moyens informatiques devront satisfaire
pleinement et uniquement les besoins des utilisateurs.
4

Chapitre 2.

Quelles sont les caractéristiques de l‟informatique de gestion ?

Dans la discussion précédente, nous avons vu que l‟objet principal de


l‟informatique de gestion est le traitement automatique des données des
organisations en vue de renforcer leur efficacité dans la prise de décisions
relatives aux activités de gestion.

Aussi, avons-nous montré que l‟informatique de gestion est l‟espace où la


gestion et l‟informatique se rencontrent. Et cette rencontre se passe plus
précisément dans des organisations. Dans ce cadre bien défini, nous serions
tenté de nous poser la question de savoir si dans cette discipline particulière,
c‟est l‟informatique qui prend le pas sur la gestion ou c‟est l‟inverse.

La pratique sur le terrain prouve que la composante informatique et la dimension


gestion interagissent. Les exigences de gestion, par exemple, déterminent
comment l‟on doit organiser les données ; comment doit-on structurer et
exploiter les fichiers clients, stock ou fournisseurs ; quel genre d‟états en sortie
doit-on produire dans une application de facturation, de paie, de gestion
commerciale etc. En bref, pour bien faire de l‟informatique de gestion, il est
nécessaire d‟osciller entre le pôle de gestion et le pôle informatique. En d‟autres
mots, il faut posséder des connaissances aussi bien en gestion qu‟en
informatique.

Avec l‟informatique, les organisations ont vu leurs données être traitées


automatiquement et rapidement. Faut-il rappeler que le traitement automatique
implique que l‟homme n‟intervient pas entre le moment où l‟introduit les
données (input) et le moment où l‟obtient les résultats (output). De plus, ce
traitement se fait de manière systématique. Cela veut dire que l‟ordinateur n‟est
pas influencé par les événements extérieurs. Tant que le programme à exécuter
et les données à traiter n‟ont pas subi une moindre modification, nous
obtiendrons les mêmes résultats dans le temps et dans l‟espace.

Le champ d‟application de l‟informatique de gestion est vaste et concerne les


informations qui entrent, circulent, et qui sont traitées, transmises et conservées
dans les organisations telles que les entreprises, l‟administration publique, les
universités, les écoles, les partis politiques, les ONG etc.
5

L‟informatique de gestion, au regard des transactions abondantes et variées qui


se font dans l‟univers des affaires, est pratiquée par près de 75 %
d‟informaticiens au monde.

Si hier dans la plupart des milieux professionnels, les gens avaient l‟impression
que l‟informatique, et plus particulièrement l‟ordinateur, était quelque chose de
très mystérieux et accessible seulement aux personnes bien initiées dans ce
domaine, aujourd‟hui avec le progrès électronique, notamment avec la
miniaturisation, l‟informatique est à la portée de tout le monde qui fait l‟effort
de comprendre le travail que l‟ordinateur fait.

Ainsi, à titre d‟exemple, on fait de l‟informatique de gestion lorsqu‟à l‟aide d‟un


logiciel approprié, on calcule les points des étudiants en vue d‟une délibération ;
lorsque la SNEL et la Régideso prélèvent les indices de consommation et
facturent, au moyen de l‟ordinateur, les abonnés ; lorsque prenant appui sur des
programmes spécialisés, les sociétés des téléphones tels Airtel, Vodacom, Tigo,
Orange et autres suivent la traçabilité et la durée des appels ; lorsqu‟un
exploitant agricole fait avec son micro-ordinateur la comptabilité de sa ferme.

Cela étant dit, qu‟est ce qui caractérise maintenant l‟informatique de gestion ?


Pour distinguer l‟informatique de gestion des autres branches d‟informatique,
certains auteurs tels que Aumiaux (1980) ont choisi de la comparer avec
l‟informatique scientifique. Le schéma ci-après fait ressortir les caractéristiques
de l‟informatique de gestion et celles de l‟informatique scientifique.

a) En informatique de gestion

Entrée Traitement Sortie

En entrée, on enregistre des données abondantes et variées. Celles-ci se


présentent sous forme de fichiers. Nous avons, par exemple, le fichier clients,
stocks, fournisseurs, voyageurs, vente, comptes (plan comptable).

Dans le traitement, le programme quel que soit le langage utilisé (C++, pascal,
Vbasic) utilise des calculs peu complexes. Par exemple, pour calculer le salaire
d‟un agent ou la facture d‟un client, on a souvent recours aux opérations de
simples addition, soustraction, multiplication et division.
6

Salaire brut = base salariale x jours prestés


Montant = Quantité x prix unitaire

En sortie, on a souvent des résultats abondants en termes d‟états financiers, de


gestion. La SNEL édite beaucoup d‟états en sortie pour ses abonnés. Les
résultats sont libellés de façon simple. On ne recourt pas à l‟annotation
scientifique. Quel désagrément pourra-t-on causer à un agent dont le bulletin de
paie indique qu‟il a un salaire net de : 3 x 109 francs congolais.

b) En informatique scientifique

Entrée traitement Sortie

En entrée, les données sont peu nombreuses. On saisit juste les données du
problème à résoudre. Dans le traitement, on recourt aux calculs parfois très
complexes. En sortie, le résultat est souvent un condensé.
L‟ingénieur civil se retrouve souvent dans le deuxième cas de figure, dans la
pratique de son métier.

Quel est le rôle de l‟informatique de gestion ?

Comme nous le verrons dans la suite du cours, l‟informatique de gestion a trait à


la partie informatisée du sous -système d‟information des entreprises ou plus
communément aux systèmes d‟information informatisés (SSI). Mais, quel est
son rôle précisément ?

Le rôle de l‟informatique de gestion dans le cadre de systèmes d‟information


informatisés (SII) est triple : nous avons le volet « gestion », le volet «
informatique » et le volet formé du couple « informatique » et « gestion ».

- Le volet « gestion » doit fournir les compétences qui permettent de


capturer les besoins d‟automatisation des informations des systèmes
opérationnels et de pilotage. La capture des besoins sous-entend une
compréhension parfaite du métier et des finalités de l‟entreprise.
7

Cette capture des besoins se fera souvent en partenariat avec les experts
métier de l‟entreprise.

- Le volet « informatique de gestion » doit fournir les compétences


d‟analyse et de conceptualisation qui permettent de traduire les besoins
(exprimés dans le langage usuel du métier) en spécifications
informatiques (exprimées dans le langage des informaticiens).

- Le volet « informatique » doit fournir les compétences informatiques qui


permettront d‟automatiser la capture (écrans), la mémorisation (bases de
données), le traitement (programmation) et la communication (réseaux)
des données. Tout comme l‟expression des besoins requiert les experts du
métier, l‟automatisation par les moyens informatiques nécessitera souvent
le recours à des informaticiens spécialisés (bases de données,
programmation, réseaux, ateliers de génie logiciel, …)

Quels sont les métiers d‟informaticien de gestion ?

La formation conduisant aux métiers d‟informaticien de gestion dans en Rd-


Congo dure 3 ans pour le cadre inférieur (la professionnalisation) et s‟étale sur 5
ans pour le cadre supérieur (professionnalisation et conception).
Les étudiants à ce propos peuvent s'orienter soit vers la couche réseau :
"Solutions d'Infrastructure, Systèmes et Réseaux" ou "SISR") soit vers la couche
applicative ("Solutions logicielles et applications métier ou "SLAM").

Ces deux voies se complètent et ont toujours coexisté dans la pratique de


l‟informatique de gestion dans le paysage professionnel. Elles viennent renforcer
les précédentes spécialisations de la formation en Informatique de Gestion qui
ont formé des Administrateurs de Réseaux Locaux d'entreprise (ARLE) ou des
Développeurs d'Applications (DA).

SISR ou SLAM, quelle que soit la voie choisie, "le service informatique rendu
est défini comme un ensemble de solutions techniques (d'infrastructure ou
applicatives) soutenu par des activités de maintien en condition opérationnelle et
de support, sur lequel le prestataire informatique s'engage".
8

Quelles sont les missions couvertes par l'informatique de gestion ?

L'informatique de gestion couvre, côté réseau (SISR et / ou ARLE) :


l'installation, l'intégration, l'administration et la sécurisation des équipements et
des services informatiques. Cela inclut donc la configuration, le déploiement et
la maintenance des postes clients et des serveurs ainsi que les connexions liées.
Côté application (SLAM ou DA), les missions ne se limiteront pas uniquement à
la programmation. Elles englobent l'étude et la définition des besoins en amont
et, en aval, la réalisation des tests et la maintenance. L'informatique de gestion
s'oriente soit vers la couche réseau, soit vers la couche applicative.

Quels sont les postes concernés et les débouchés ?

Les emplois concernés officiellement précisés sont, côté réseau (SISR ou


ARLE) :
1) Administrateur systèmes et réseaux ;
2) Informaticien support et déploiement ;
3) Pilote d'exploitation ;
4) Support systèmes et réseaux ;
5) Technicien d'infrastructure ;
6) Technicien de production ;
7) Technicien micro et réseaux ;
8) Technicien systèmes et réseaux ;
9) Technicien réseaux – télécoms.

Du côté applicatif, les postes sont :

1) Analyste d'applications ;
2) Analyste d'études ;
3) Analyste programmeur ;
4) Chargé d'études informatiques ;
5) Développeur d'applications informatiques ;
9

6) Programmeur analyste ;
7) Programmeur d'applications ;
8) Responsable des services applicatifs ;
9) Technicien d'études informatiques.
Les perspectives sont la responsabilité de projets ou des fonctions de
management d'une équipe.

Qui sont les employeurs potentiels?

Les sous-systèmes d‟information informatisé, Les éditeurs et les directions des


services informatiques sont trois structures qui toutes affichent des besoins
autour des services fournis par les prestations informatiques précédemment
mentionnées.
10

Chapitre 3

Entreprise comme champ d‟application de l‟informatique de gestion

3.1. Portraits de l‟entreprise

En Rd-Congo, on parle de plus en plus des entreprises : elles sont à la mode et


font partie de l‟univers des Congolais. N‟est-ce pas que les étudiants y sont
intéressés pour des raisons de futur emploi ? Les médias relatent leurs aventures
heureuses ou malheureuses, en font des stars ou au contraire les couvrent
d‟opprobre. « Il faut réformer les entreprises de l‟Etat…Elles sont mal gérées. »
disent certaines télévisions. D‟autres médias s‟évertuent à vanter les bilans
reluisants des entreprises privées. Des chaînes de télévision se battent parfois
pour créer des émissions consacrées aux « Patrons ». Au regard de tout cela, on
peut se poser la question de savoir si l‟entreprise a perdu son mystère ?

Pour celui qui n‟est pas en contact étroit avec elle, une entreprise c‟est un
bâtiment, des machines, une enseigne, des produits, des salariés, un patron…
donc des éléments disparates. Or une entreprise c‟est beaucoup plus que cela.
C‟est une communauté humaine qui produit des richesses. Cette communauté a
une culture et une histoire : elle naît, se développe, connaît des échecs mais aussi
des réussites, elle surmonte des périodes critiques ou au contraire elle cesse ses
activités.

En observant les quelques entreprises congolaises, elles semblent toutes


différentes mais, en réalité, elles présentent beaucoup de points communs.
En établissant la typologie des entreprises, nous pouvons les distinguer selon
leur statut juridique, leur taille ou leur activité.

Selon la taille (chiffre d‟affaire, nombre de salariés), nous avons les petites et
moyennes entreprises et les grandes entreprises ;
Selon le statut juridique, il y a des entreprises privées (entreprises individuelles ;
sociétés en nom collectif ; sociétés anonymes) et des entreprises publiques et
semi-publiques, donc mixtes).

Selon l‟activité (secteur ou branche), nous distinguons les entreprises agricoles,


les entreprises industrielles, les entreprises prestataires de services, les
entreprises commerciales, etc.
11

3.2. Les ressources nécessaires à l‟entreprise

Toute entreprise a besoin de ressources qu‟elle se procure auprès de nombreux


partenaires et qui lui permettent de fonctionner. En d‟autres termes, elle dispose
de moyens de production : ressources humaines, financières et techniques. Elle
doit fabriquer des biens ou des services qu‟elle vend à ses clients. Elle achète
des biens et des services à ses fournisseurs.

2.3. L‟entreprise est une unité de production et de répartition

L‟activité d‟une entreprise peut être décomposée en deux phases distinctes :

- l‟activité productive, c‟est-à-dire la création des biens ou services


- l‟activité de redistribution des richesses en contrepartie des biens ou
services produits

a) L‟entreprise produit des biens ou des services

Par l‟opération de production, l‟entreprise transforme des flux d‟entrée (intrants


ou inputs) en flux de sortie (extrants ou outputs). Les intrants peuvent être
classés en 3 catégories, à savoir :

- le travail fourni par le personnel de l‟entreprise ;


- le capital technique, c‟est-à-dire les équipements (matériels, bâtiments,
etc.)
- les consommations intermédiaires, c‟est-à-dire les biens (matières
premières, produits semi-finis, énergie etc.) et / ou les services (fournis
par une agence publicitaire, une société de transport) incorporés au cours
du processus de production. Elles correspondent à tous les achats de
l‟entreprise à l‟extérieur qu‟il s‟agisse de biens ou de services.

L‟entreprise acquiert ses intrants en s‟appuyant sur les 5 marchés des facteurs de
production

1. Réservoir de la population --- marché d‟emploi --- entreprise ;


2. Réserve d‟énergie et matières premières -- marché de l‟énergie  Ese
et des matières premières -> Ese ;
3. Réserve de capital -- marché des capitaux - entreprise ;
4. Réserve de savoir - marché de l‟innovation  entreprise ;
5. Autres entreprises  marché des biens de production - entreprise ;
12

Figure

b) L‟entreprise comme une unité de répartition

La contrepartie de l‟activité de production de l‟entreprise s‟exprime en unités


monétaires. Par exemple, la société « Mabele » a réalisé un chiffre d‟affaires de
10 milliards de francs congolais. Il s‟agit de la vente des biens ou services
(extrants) qui sont des flux physiques. L‟entreprise reçoit en échange des flux
financiers (billets de banque, chèques, créances sur les clients).

Le produit de cette vente doit permettre à l‟entreprise de :

- rémunérer les facteurs de production qu‟elle a utilisés ;


- payer ses charges sociales et fiscales
- dégager un surplus destiné à assurer son avenir.

Après paiement des achats à ses fournisseurs, l‟entreprise répartit la valeur


ajoutée entre plusieurs bénéficiaires:

- le personnel de l‟entreprise est rémunéré par des salaires et des avantages


sociaux ;

- l‟Etat, les communes et les organismes sociaux perçoivent des impôts et des
cotisations sociales (INSS).

- les prêteurs (organismes financiers ou particuliers) reçoivent des intérêts qui


rétribuent les capitaux qu‟ils ont mis à la disposition de l‟entreprise pour un
temps déterminé. Les intérêts versés sont proportionnels au montant des
capitaux empruntés ;
13

- le ou les propriétaires de l‟entreprise prélèvent une partie des profits pour


rémunérer les capitaux qu‟ils ont apportés définitivement à l‟entreprise. La
partie non prélevée est conservée dans l‟entreprise pour lui permettre de
renouveler son matériel et de financer sa croissance : il s‟agit de
l‟autofinancement.

Quel est le cycle de vie d‟une entreprise ?

L‟entreprise est un organisme vivant. Comme l‟être humain, elle semble avoir
un cycle de vie : elle naît par la volonté de ses créateurs, elle se développe et
arrive à maturité, puis voit parfois son activité décliner. Ce qui la conduit à
disparaître ou à être reprise par une autre entreprise. Mais ce cycle de vie est
théorique : certaines entreprises ne connaîtront pas de phase de maturité,
d‟autres ne semblent jamais devoir mourir. La vie de l‟entreprise dépend
fortement de la qualité des hommes qui la composent et de son adaptation à son
environnement.

2.4.1. La création d‟entreprise

Toute création d‟entreprise repose sur la mise en valeur d‟une idée. A titre
d‟exemple :

« Mata Mata a une passion pour le maïs. A l’en croire, il a créé son entreprise,
une minoterie, pour résoudre le problème d’approvisionnement de la ville de
Kinshasa en farine de maïs, suite à la pénurie de cette denrée alimentaire, en
décembre 2010. IL achète une étendue (100 hectares) pour cultiver le maïs, il
monte son usine. Comme toutes les idées simples, celle-ci marche. 20 millions
de francs congolais de chiffre d’affaires en 2011 pour un effectif de 10
personnes. »

2.4.2 Le développement de l‟entreprise

La croissance de l‟entreprise ne peut s‟effectuer que si l‟idée qui a favorisé son


démarrage s‟est traduite en succès. Il faut ensuite que l‟entreprise développe son
idée en élargissant le nombre de ses clients. Pour cela, il faut que la firme :

- augmente ses moyens de production par l‟investissement ;


- s‟adapte de façon continue aux besoins des clients actuels et potentiels ;
14

- modifie son organisation pour répondre au changement de sa taille


(augmentation de l‟effectif, évolution du statut).

2.4.3. Déclin

L‟entreprise peut se trouver confrontée à des difficultés plus ou moins graves :

- mévente de ses produits : elle n‟a pas réussi à imposer ses produits ou
elle ne les a pas renouvelés à temps ;

- mauvaise perception de l‟évolution de son environnement ou perception


trop tardive : elle n‟a pas pu ou su anticiper le changement des goûts des
consommateurs ou l‟évolution des coûts (renchérissements du coût des
matières premières), elle subit les attaques de concurrents plus puissants
etc.

- erreur de gestion : les dirigeants de l‟entreprise n‟ont pas su évaluer


correctement leurs coûts : ils ont fixé des prix de vente ne permettant pas
de couvrir toutes les charges ; ils n‟ont pas réussi à motiver le personnel,
ils n‟ont pas maîtrisé les conséquences de l‟introduction des technologies
de l‟information et de communication (TIC). Notons que les erreurs de
gestion traduisent souvent l‟incompétence du chef d‟entreprise.

- Insuffisance de ressources financières : les prêteurs (banquier, Etat, etc.)


ou les fournisseurs n‟ont pas assez confiance dans l‟avenir de la firme. Le
chef d‟entreprise (entrepreneur individuel) par crainte de perdre la
maîtrise de son affaire, refuse d‟y associer des partenaires extérieurs.

Si l‟entreprise n‟arrive pas à surmonter ses difficultés, alors elle est


contrainte :

- soit à faire faillite, cette faillite peut se traduire selon le cas par une
disparition totale ou par un nouveau départ sur des bases nouvelles ;

- soit à être rachetée par une autre entreprise.


15

L‟entreprise comme un système ouvert sur l‟environnement

a) L‟entreprise et son environnement

L‟entreprise est communauté humaine qui produit des richesses. Cette


communauté n‟est pas isolée, elle entretient de multiples relations avec son
environnement, avec son personnel, ses fournisseurs, ses clients, ses apporteurs
de capitaux, ses concurrents, avec l‟Etat. Ces relations sont plus souvent
harmonieuses mais elles peuvent aussi être conflictuelles.

L‟entreprise est également un système, c‟est-à-dire un ensemble d‟éléments liés


logiquement entre eux et qui réagissent les uns sur les autres. Cet ensemble est
organisé de façon cohérente en fonction d‟un but à atteindre. Ce système ne vit
pas en vase clos : il est ouvert et doit s‟adapter en permanence à son
environnement.

b) Description de l‟environnement

Une analyse classique permet de décomposer en sous-ensembles


l‟environnement de l‟entreprise. Chaque sous-ensemble est à la fois source
d‟information mais aussi contrainte ou opportunité pour l‟entreprise. Nous
pouvons distinguer :

- l‟environnement économique : conjoncture générale, évolution des prix,


évolution des revenus, fiscalité, taux de change, concurrence etc.
- l‟environnement juridique et réglementaire : lois, les normes de
fabrication, réglementation de la concurrence, protection des inventions,
etc.
- l‟environnement culturel : styles de vie, niveau d‟éducation, formes de
communication etc.
- l‟environnement social : situation de l‟emploi, climat social, répartition
des revenus, ampleur des conflits sociaux, fréquences de négociation etc.
- l‟environnement politique : tendance à l‟interventionnisme, personnalité
des gouvernants, programmes des partis politiques etc.
- l‟environnement écologique : lutte contre la pollution.
- L‟environnement international : réglementation de Sadec, Ceac etc.
16

c) L‟entreprise en tant que système

- Qu‟est ce qu‟un système ?

Un système est un ensemble d‟éléments liés logiquement entre eux, qui, réunis,
concourent à la réalisation d‟un objectif commun.

- Les composantes d‟un système sont en interrelation

Un système est composé d‟éléments en interaction. Il ne s‟agit pas d‟une simple


juxtaposition d‟éléments mais d‟un ensemble organisé de façon cohérente en
fonction d‟un but : le tout est différent de la somme des composantes. Ainsi les
composantes d‟un ordinateur empilées les unes sur les autres ne peuvent en
aucun remplir les fonctions d‟un ordinateur. Il faut les assembler dans un certain
ordre (mettre chaque élément à sa place) pour faire fonctionner l‟ordinateur. Dès
lors, on passe d‟un simple tas de pièces à un ordinateur.

- Notion de contrôle et de rétroaction

Un système transforme des intrants (inputs) en extrants (outputs). Par exemple,


l‟ordinateur traite les données qui lui sont fournies en entrée, pour obtenir en
sortie des résultats. Un système n‟existe pas si on ne lui a pas assigné de but.
Ainsi, la raison d‟exister d‟un ordinateur est le traitement automatique des
données.

La notion de système est inséparable de celle d‟objectif et de rétroaction (feed


back). La rétroaction consiste à réguler le système. Elle permet de maintenir le
système en état de réaliser correctement son but.

2.6. L‟entreprise et son organisation

- Les fonctions

Quelle que soit sa taille, son statut juridique, son secteur d‟activité, l‟entreprise
pour réaliser son objectif général, doit effectuer de multiples tâches.
Une fonction est un regroupement de tâches et non un regroupement d‟emplois :
un même emploi peut donc assurer des tâches appartenant à des fonctions
différentes. Ainsi, par exemple, un fermier a la charge de la production mais il
est en plus gestionnaire et responsable du personnel. Inversement une même
17

fonction peut être remplie par plusieurs emplois : dans une grande boulangerie,
comme UPAK, plusieurs vendeuses assurent la fonction commerciale.

- La classification de Henri Fayol

Pour H. Fayol, les fonctions de l‟entreprise sont :

a) la fonction technique (production),


b) la fonction commerciale (« savoir acheter et vendre est aussi important
que savoir fabriquer »),
c) la fonction financière (recherche et gestion des capitaux),
d) la fonction de sécurité (protection des biens et des personnes),
e) la fonction de comptabilité (« elle doit donner sur la situation économique
de l‟entreprise des renseignements exacts, clairs et précis »,
f) la fonction administrative (« administrer, c‟est prévoir, organiser,
commander, coordonner et contrôler »).

Si H. Fayol a eu le premier, le mérite de mettre en évidence l‟existence dans


l‟entreprise de différentes fonctions, on peut lui reprocher d‟avoir accordé trop
d‟importance à la fonction comptable qui n‟est qu‟un aspect particulier du
contrôle et à la fonction sécurité.

- La classification d‟Evgrafoff

On peut classer les activités nécessaires à la vie de l‟entreprise en 4 grandes


catégories.

a) Les fonctions de direction regroupent les activités dont le rôle est de


gouverner l‟entreprise. Elles peuvent être analysées suivant six
composantes : s‟informer, décider, faire comprendre, faire pouvoir, faire
vouloir. Les fonctions de direction ont essentiellement pour rôle de fixer
des buts à atteindre et des modalités d‟action.

b) Les fonctions de distribution comprennent les activités dont le rôle est de


mettre à la disposition des clients, les biens ou les services produits par
l‟entreprise. Il s‟agit notamment des d‟études commerciales, de vente, de
publicité.

c) Les fonctions de production concernent les activités dont le rôle est de


créer les produits (ou les services) que l‟entreprise a choisi de mettre sur
le marché. Il s‟agit entre autres des fonctions de fabrication et de contrôle
de qualité.
18

d) Les fonctions logistiques correspondent aux activités dont le rôle est de


mettre à la disposition de l‟entreprise tous les moyens nécessaires. Ces
fonctions se décomposent en fonction d‟approvisionnement, fonction
d‟équipement, fonction de maintenance, fonction de gestion du personnel,
fonction financière, fonction de recherche et de développement, fonction
d‟administration générale.

L‟analyse de B. Evgrafoff (1970) est plus moderne. Elle traduit les mutations de
l‟environnement de l‟entreprise. Cependant certaines des fonctions qu‟il propose
sont souvent des fonctions annexes, voire services. Alors qu‟une fonction est un
regroupement de tâches, un service est un regroupement d‟hommes placés sous
une même autorité.

De l‟analyse de l‟entreprise en termes de fonctions, que devons-nous retenir in


fine ?

Il apparaît qu‟il existe des fonctions qui doivent de toute façon être assurées pour que
l‟entreprise puisse jouer son rôle ou simplement exister. Il s‟agit de :

Fonctions objet et finalité


__________________________________________________________________
la fonction commerciale, vendre les produits finis ou
________________________________________________________________
La fonction de production, transformer la matière
première
________________________________________________________________
la fonction d‟approvisionnement, acheter et approvisionner
________________________________________________________________
la fonction financière, gérer la trésorerie et les
moyens financiers
________________________________________________________________
la fonction administrative, prévoir, administrer, contrôler
et coordonner
________________________________________________________________
la fonction du personnel, gérer le personnel
19

- L‟entreprise et ses systèmes

N‟importe lequel de ses éléments peut avoir une influence sur l‟entreprise : la
réclamation d‟un client, la maladie d‟un salarié, la hausse du prix des matières
premières, la panne d‟une machine, un défaut de qualité chez un concurrent, par
exemple, ont des répercussions sur la bonne marche de l‟entreprise.

L‟entreprise est un système ouvert : comme dit précédemment, elle se procure


à l‟extérieur les matières premières qui vont lui permettre de fabriquer puis de
vendre des produits qu‟elle met à la disposition de son environnement.
Ses différentes opérations la conduisent à s‟adapter en permanence à son
environnement.

- L‟entreprise est un système ouvert finalisé et dirigé. Elle poursuit des buts
(profit, puissance, pérennité etc.), s‟organise pour les atteindre (définition
de plans d‟action, de budgets…), se dote de structures d‟exécution, de
direction et de contrôle.

- L‟entreprise est un ensemble de sous-systèmes en interaction. En relation


avec ce qu‟on vu plus haut, les différentes fonctions sont des sous-
systèmes : un sous-système de production, un sous-système commercial,
un sous-système financier, un sous-système approvisionnement, un sous-
système administratif, etc. Chaque sous-système entretient des relations
suivies avec les autres sous-systèmes. Ainsi, le sous-système commercial
vend ce que le sous-système production a fabriqué grâce aux capitaux
fournis par le sous-système financier et aux services rendus par le sous-
système du personnel.

A propos de l‟organigramme, représentation schématique de la structure de


l‟entreprise

L‟organigramme représente sur un seul support soit l‟organisation globale de


l‟entreprise, soit une organisation détaillée d‟une unité. L‟organigramme montre
la place de chaque fonction et par extension la place de‟ chacun dans
l‟entreprise. Il convient de signaler que l‟organigramme, aussi précis qu‟il soit,
ne rend pas toujours complètement compte de la réalité exacte du pouvoir dans
l‟entreprise. Celle-ci, étant un organisme vivant, est traversée par des courants
d‟influence, des rapports de force, des jeux de sympathie qui ont aussi leur rôle
20

et qui doivent également être pris en compte si l‟on veut comprendre exactement
ce qui s‟y passe.

- L‟organigramme selon C. Parkinson et L. Peter

Cyril Parkinson (Professeur de sciences politiques) et Laurence Peter


(Professeur de sciences de l‟éducation) ont critiqué avec humour le
fonctionnement des entreprises.

1. Loi de Parkinson

Parkinson soutient l‟idée qu‟il y a très peu de relation entre la quantité de travail
effectué dans une organisation et le nombre d‟employés. Pour expliquer ce
phénomène, il propose une explication sous forme de loi, la loi de parkinson

«Tout travail tend à se dilater pour remplir tout le temps disponible. » (…) Aussi
ne doit-on pas s’étonner de ce que les responsables administratifs se trouvent
eux-mêmes surchargés.
Parkinson pense que ces responsables réagissent alors en engageant plus de
personnel selon l’axiome « tout responsable souhaite multiplier ses subordonnés
et non ses rivaux ». Au lieu de partager son travail avec un collègue B, le
responsable A nommera des subordonnés C et D. De cette façon, A préserve sa
position en étant le seul comprenant l’ensemble du travail. Puis quand C se
plaint de trop de travail, A préserve l’équité en accordant à C 2 subordonnés E
et F, et aussi à D 2 autres subordonnés G et H. Avec un tel personnel, la
promotion de A est presque certaine. Comme entre en jeu un deuxième axiome
« les responsables se donnent mutuellement du travail », 7 personnes font
maintenant le travail d’une seule mais la routine des projets, comptes rendus,
rapports, fait que tous travaillent beaucoup et que A travaille plus dur que
jamais.

2. Le principe de Peter

Le principe de Peter, établi après l‟étude de centaines de cas d‟incompétence


dans les organisations tant privées que publiques, peut être ainsi formulé :
21

« Dans une hiérarchie, un employé tend à s’élever à son niveau


d’incompétence ». Son principe suppose une recherche constante de meilleures
performances : les gens compétents dans leur travail sont promus pour qu’ils
fassent mieux encore. La compétence dans une position est nécessaire pour une
promotion dans la suivante et ainsi de suite jusqu’à une position où l’individu
est dépassé ; alors il ne peut plus espérer une nouvelle promotion et c’est son
niveau d’incompétence. Etant donné deux conditions, suffisamment d’échelons
dans la hiérarchie et suffisamment de temps pour les franchir, tous les employés
s’élèvent et se tiennent à leur niveau d’incompétence. D’où le corollaire du
principe de Peter : « avec le temps, chaque poste tend à être occupé par un
incompétent ».

Chapitre 4

LE SYSTEME D‟INFORMATION

Quel l‟objet d‟un système d‟information ?

Par système d‟information, nous considérons à la fois les informations (au sens
le plus large du mot) utilisées par l‟entreprise et l‟ensemble des moyens mis en
œuvre pour gérer ces informations.

Il ressort d cette définition que le SI est l‟ensemble des moyens humains et


matériels, et des méthodes se rapportant au traitement des différentes formes
d‟information rencontrées dans l‟entreprise.

Explicitons un peu quelques termes de cette définition

 moyens humains : il s‟agit des différentes personnes qui manipulent,


émettent ou transmettent de l‟information utile à l‟entreprise. A part
quelques cas particuliers, quasiment tous les individus d‟une
organisation appartiennent à son système d‟information.

 Moyens matériels : on trouve principalement :

- Les machines telles que ordinateur, machine à calculer, à écrire ;


- Les supports de l‟information : papier, fiches cartonnées, bande
magnétique, Cd-rom ;
22

- Des utilitaires divers : classeurs téléphone bureaux, armoires de


rangement.

 Méthodes :

On peut trouver :

- des algorithmes, logiciels, des programmes ;


- des modèles mathématiques, statistiques, graphes, probabilités ;
- des modèles comptables (comptabilité générale ou analytique…) ;
- des modèles de la recherche opérationnelle : pert, files d‟attente…

Quel est le rôle du système d‟information ?

Le rôle du système d‟information est double :

a. Tout d‟abord satisfaire les besoins informationnels de l‟entreprise ;

Il s‟agit notamment de :

- produire des informations légales ou quasi-légales réclamées par


l‟environnement socio-économique : les factures, les bulletins de paie, les
cotisations INS, DGRAD, DGI, etc.

- déclencher les décisions programmées ;

Exemple : émission d‟un ordre d‟approvisionnement lorsqu‟un stock


atteint son point de commande ; envoi d‟une lettre de relance aux
clients dont le règlement n‟est pas intervenu n jours après l‟envoi de la
facture.

- aider à la prise des décisions non programmées en fournissant aux


décideurs de l‟organisation, un ensemble d‟information brutes ou
modélisées (statistiques, tableaux de bord, simulation, etc.) ;

b. Ensuite favoriser la communication

Il s‟agit plus exactement d‟assurer la coordination des tâches en permettant


les communications entre les individus dans l‟entreprise.
23

Qu‟est ce que l‟information ?

Nous venons de voir que le système d‟information des entreprises s‟appuie sur
les technologies de l‟informatique et plus particulièrement sur les disciplines de
l‟informatique de gestion pour son automatisation.

Maintenant, nous devons répondre plus précisément à la question : quel est le


rôle ou la portée de l‟informatique d‟une part et de l‟informatique de gestion
d‟autre part ?

Nous apporterons quelques éléments de réponse en étudiant la structure et le


fonctionnement du système d‟information des entreprises. Mais préalablement,
nous devons affiner la compréhension du terme information et sa portée dans le
néologisme « informatique » cité précédemment.

L‟information, c‟est tout élément ou fait porter à la connaissance et à


l‟interprétation des personnes. L‟information est donc une production sociale. Il
s‟agit de données vues dans un certain contexte, et qui présentent un sens et
éventuellement une conséquence qui dépend de l‟appréciation des individus.
L‟information peut devenir connaissance quand elle est analysée et structurée
puis appropriée. Les ordinateurs, eux, traitent de données sans leur attribuer de
sens.

Quels sont les besoins informationnels de l‟entreprise à satisfaire ?

1. les besoins informationnels

a. la nature des besoins

Les besoins en information d‟une entreprise sont variés.


Ainsi, pour une même opération (traitement de commande, décision d‟achat
d‟un nouveau matériel, etc.) des informations de nature différente sont souvent
nécessaires.

Généralement, on distingue les types d‟informations suivants :


24

 l‟information technique : elle concerne plus particulièrement les


machines, les ordinateurs, le matériel de bureau, mais aussi
l‟innovation technologique.

 L‟information comptable et financière : elle porte essentiellement sur


les documents tels que les factures, les écritures comptables, le bilan,
le compte de résultat, etc.

 L‟information juridique : elle a trait à différents domaines tels que la


législation sociale, le droit fiscal, le droit commercial.

 L‟information mercatique : elle a pour but de mieux connaître la


clientèle, la concurrence, la distribution, afin de mieux répondre aux
besoins des consommateurs et d‟adopter une politique commerciale
plus efficace.

 L‟information humaine et sociale : elles renseignent l‟entreprise sur les


caractéristiques du personnel (nom, adresse, numéro INSS, grade,
profil psychologique,…), ses besoins. Elles concernent non seulement
le travail mais aussi la vie sociale et familiale (situation familiale,
nombre d‟enfants).

 L‟information culturelle et politique : elle a trait aux activités sportives


artistiques. L‟information politique renseigne sur les risques
d‟implantation dans un pays politiquement instable.

 L‟information économique : elle renseigne sur les tarifs des


fournisseurs, des concurrents, les taux d‟inflation, de change.

b. l‟évolution des besoins

Le système d‟information devient de plus en plus sophistiqué du fait de la


complexification des besoins.

 Informations spécialisées

Les utilisateurs ont besoin d‟informations de plus en plus fines, spécialisées


en fonction de leurs centres d‟intérêts. Cette information doit être
personnalisée pour la rendre le plus directement utilisable par l‟intéressé et
mieux adaptée à ses besoins.
25

 Emergences de besoins transversaux

Il s‟agit de développement d‟informations pluridisciplinaires. En effet, au-


delà des informations spécialisées liées à la fonction de l‟utilisateur (un
vendeur a besoin en priorité d‟informations commerciales), celui-ci fait de
plus en plus appel à des informations rattachées à d‟autres domaines (les
vendeurs recherchent de plus en plus des informations culturelles,
juridiques).

Quelles sont les sources d‟informations ?

Dans l‟entreprise, on perd du temps, on commet des erreurs, on fait des redits et
un travail inutile du fait qu‟on ignore si l‟information nécessaire existe et où il
est possible de se le procurer.

C‟est pourquoi pour répondre aux besoins informationnels, l‟entreprise doit


connaître les différentes sources d‟informations possibles et utiles. Il y a des
sources d‟informations internes.

Nous pouvons citer :

- Les documents comptables (journal, bilan, grand livre) ;


- Les documents commerciaux (bon de commande, facture, cheque) ;
- Les rapports des délégués commerciaux ;
- Les compétences et les opinions personnelles ;

Il y a aussi des sources externes. Elles sont nombreuses. La difficulté réside dans
le choix des sources à partir des critères tels que la qualité de l‟information, son
coût, le délai pour l‟obtenir :

Exemple des sources externes : Banque du Congo, INS (Institut National des
Statistiques)

Les informations formelles et informelles

La notion d‟information étant clarifiée, nous pouvons maintenant revenir au


système d‟information et en étudier la structure et la dynamique.
26

Le système d‟information peut être découpé en deux parties ou sous-systèmes


distincts:

- le sous-système d‟information informel ;


- le sous-système d‟information formalisé.

Les informations informelles sont celles dont l‟entreprise n‟a défini ni la forme,
ni le fond; un bon exemple en est les informations échangées entre
collaborateurs lors de pause-café. Pour en revenir au domaine des ordinateurs, il
est évident que de l‟information informelle peut être traitée au moyen des outils
informatiques de l‟entreprise; par exemple au travers d‟Internet ou de la
messagerie.

L‟informatique mise en œuvre pour le traitement de ces informations


informelles ne peut donc pas être qualifiée de gestion car elle n‟automatise pas
l‟administration des intérêts ou des affaires de l‟entreprise.

Les informations formelles sont celles dont l‟entreprise a défini la forme, voire
le fond, et dont elle a besoin pour garantir un fonctionnement correct de ses
activités opérationnelles et de pilotage.

Lorsqu‟un système qualité est mis en place, ces informations correspondent à la


maîtrise des documents et des données.

Approche systémique de l‟information des entreprises

Nous venons de voir que l‟informatique de gestion automatise le traitement de


l‟information des entreprises. Si les termes d‟information et d‟entreprise sont
relativement clairs et connus pour tout en chacun, il est certainement plus
difficile d‟exprimer le lien existant entre eux; c‟est à dire: qu‟est-ce que
l‟information des entreprises?

Nous allons donner une réponse à cette question par le biais de la systémique
que nous exposons brièvement ci-après :

La systémique regroupe les démarches théoriques, méthodologiques et pratiques


relatives à l‟étude de ce qui est reconnu comme trop complexe pour pouvoir être
abordé de façon réductionniste et qui pose des problèmes de frontière, de
relations internes et externes, de structure, de loi, ou de propriétés émergentes
caractérisant le système comme tel ou des problèmes de mode d‟observation, de
représentation, de modélisation ou de simulation d‟une totalité complexe.
27

Une entreprise est un système complexe qui peut être compris à l‟aide de la
systémique; ce système-entreprise (3) peut être décomposé en trois sous-
systèmes : le sous-système opérant (SO) ; le sous-système de pilotage (SP) et le
sous système d‟information (SI).

Le sous-système opérant ou technologique active les processus métier de


l‟entreprise pour créer la valeur ajoutée; le sous-système de pilotage ou de
décision coordonne l‟ensemble de l‟activité en fonction des objectifs ;
Le sous-système d'information ou de mesure décrit, mémorise et capte
l'ensemble des événements et des transformations caractéristiques à la fois du
sous-système de décision et du sous-système d'opération (base d'information,
entrée, sortie, traitement).

Notons en passant que toute la difficulté de l‟activité de direction est de


maintenir le cap du sillon afin que les gestionnaires et les informaticiens
convergent vers un but identique.

En définitive, pour répondre à la question : « qu‟est-ce que l‟information des


entreprises ? », nous proposons la réponse suivante :

Dans une vision systémique, l‟information des entreprises est le résultat de


l‟activité du sous-système d‟information des entreprises ; le sous-système
d‟information décrit, mémorise et capte l‟ensemble des événements et des
transformations caractéristiques à la fois du sous-système de décision et du sous-
système d'opération.

Cette émergence du sous-système d‟information au service des activités


opérationnelles et de pilotage de l‟entreprise met en évidence la nécessaire
adéquation entre les services informatiques offerts et les finalités de l‟entreprise.

Nous venons de faire allusion aux « services informatiques offerts » et dès lors,
nous pouvons nous poser la question de la nature du lien entre ces services
informatiques et l‟ « informatique de gestion ».

Nous pouvons y répondre par les deux assertions suivantes :

a) L‟informatique fournit les moyens du traitement automatique de


l‟information.

b) L‟informatique de gestion s‟appuie sur l‟informatique pour automatiser le


système d‟information et rendre transparent le traitement de l‟information
utile et nécessaire aux activités opérationnelles et de pilotage des
entreprises. Cette partie du système d‟information automatisé à l‟aide de
28

la technologie des ordinateurs est souvent nommée : Système


d‟information informatisé (SII).

En substance, L‟informatique de gestion est au service de la gestion des


entreprises ; elle doit fournir les compétences et les moyens d‟automatisation
des systèmes d‟information informatisés (SII).

Les compétences ont trait à l‟expression des besoins et à leur traduction en


spécifications informatiques. Les moyens sous-entendent l‟utilisation des
technologies de l‟informatique et nécessitent des compétences aussi diverses que
la programmation, les bases de données ou les réseaux.

L‟informatique de gestion est une activité éminemment pluridisciplinaire qui


doit être menée avec méthode en recourant à de multiples compétences.

Approche systémique de l‟information des entreprises

Nous avons dit que l‟informatique de gestion automatise le traitement de


l‟information des entreprises. Si à la lumière des propos précédents les termes
d‟information et d‟entreprise sont relativement clairs et connus pour tout un
chacun, il est certainement plus difficile d‟exprimer le lien existant entre eux. Ce
qui nous amène à poser la question suivante : qu‟est-ce que l‟information des
entreprises?

Nous allons donner une réponse à cette question par le biais de la systémique
que nous exposons brièvement ci-après :

La systémique regroupe les démarches théoriques, méthodologiques et pratiques


relatives à l‟étude de ce qui est reconnu comme trop complexe pour pouvoir être
abordé de façon réductionniste et qui pose des problèmes de frontière, de
relations internes et externes, de structure, de loi, ou de propriétés émergentes
caractérisant le système comme tel ou des problèmes de mode d‟observation, de
représentation, de modélisation ou de simulation d‟une totalité complexe.

Une entreprise est un système complexe qui peut être compris à l‟aide de la
systémique; ce système-entreprise peut être décomposé en trois sous-systèmes :
le sous-système opérant (SO) ; le sous-système de pilotage (SP) et le sous
système d‟information (SI).
29

Le sous-système opérant ou technologique active les processus métier de


l‟entreprise pour créer la valeur ajoutée; le sous-système de pilotage ou de
décision coordonne l‟ensemble de l‟activité en fonction des objectifs ;
Le sous-système d'information ou de mesure décrit, mémorise et capte
l'ensemble des événements et des transformations caractéristiques à la fois du
sous-système de décision et du sous-système d'opération (base d'information,
entrée, sortie, traitement).

Notons en passant que toute la difficulté de l‟activité de direction est de


maintenir le cap du sillon afin que les gestionnaires et les informaticiens
convergent vers un but identique.

En définitive, pour répondre à la question : « qu‟est-ce que l‟information des


entreprises ? », nous proposons la réponse suivante :

Dans une vision systémique, l‟information des entreprises est le résultat de


l‟activité du sous-système d‟information des entreprises ; le sous-système
d‟information décrit, mémorise et capte l‟ensemble des événements et des
transformations caractéristiques à la fois du sous-système de décision et du sous-
système d'opération.

Cette émergence du sous-système d‟information au service des activités


opérationnelles et de pilotage de l‟entreprise met en évidence la nécessaire
adéquation entre les services informatiques offerts et les finalités de l‟entreprise.

Nous venons de faire allusion aux « services informatiques offerts » et dès lors,
nous pouvons nous poser la question de la nature du lien entre ces services
informatiques et l‟ « informatique de gestion ».

Nous pouvons y répondre par les deux assertions suivantes :

a) L‟informatique fournit les moyens du traitement automatique de


l‟information.

b) L‟informatique de gestion s‟appuie sur l‟informatique pour automatiser le


système d‟information et rendre transparent le traitement de l‟information
utile et nécessaire aux activités opérationnelles et de pilotage des
entreprises. Cette partie du système d‟information automatisé à l‟aide de
la technologie des ordinateurs est souvent nommée : Système
d‟information informatisé (SII).
30

En substance, L‟informatique de gestion est au service de la gestion des


entreprises. Elle doit fournir les compétences et les moyens d‟automatisation des
systèmes d‟information informatisés (SII).

Les compétences ont trait à l‟expression des besoins et à leur traduction en


spécifications informatiques. Les moyens sous-entendent l‟utilisation des
technologies de l‟informatique et nécessitent des compétences aussi diverses que
la programmation, les bases de données ou les réseaux.

L‟informatique de gestion est une activité éminemment pluridisciplinaire qui


doit être menée avec méthode en recourant à de multiples compétences.

Organisation et élaboration d‟un système d‟information

L‟analyse d‟un circuit d‟information nous permet de mieux comprendre la


fonction d‟un système d‟information. Mais celui-ci, en raison notamment de
l‟évolution technologique et de l‟importance grandissante de l‟information est
passé du simple traitement des données à un rôle de management de
l‟information

a. Les composantes d‟un circuit d‟information

Dans un système d‟information, les flux informationnels empruntent


différentiels circuits. C‟est pourquoi, l‟organisation ces circuits ainsi que la
qualité des moyens de transmission utilisés sont essentiels pour assurer une
bonne circulation de l‟information.
L‟information pour être utilisable doit être saisie, collecte, traitée, transmise puis
stockée.

1. les circuits d‟information

Avant d‟entreprendre l‟organisation des circuits d‟information, il faut bien


comprendre que ceux-ci peuvent avoir été définis clairement, de façon
formelle, ou bien exister de façon informelle.

L‟ensemble des circuits d‟information d‟une entreprise constitue un réseau.


Le réseau formel correspond à l‟information fonctionnelle (l‟information
technique et de gestion) alors que le réseau informel est généralement mieux
adapté aux informations de relations humaines.
31

le réseau formel

Le réseau formel est le réseau officiel de l‟information conformément à la


structure hiérarchique et fonctionnelle de l‟entreprise. Le réseau formel peut
être représenté par un organigramme par des graphes, par des diagrammes de
circulation de l‟information.

Au sein d‟un système hiérarchisé, on peut distinguer trois types


d‟informations entre les subordonnés et les supérieurs hiérarchiques :

- l‟information descendante : émise par le supérieur vers le subordonné.


Exemple : un chef de service peut dire à son secrétaire « préparez le
document relatif au paiement des agents » ;

- l‟information ascendante : émise par le subordonné vers le supérieur. Elle


permet au supérieur de joué d‟une part le rôle de régulateur en vérifiant si
les directives ont été correctement suivies, puis d‟agir en conséquence, et
d‟autre part, un rôle de récepteur en recueillant des idées, des suggestions,
des informations nouvelles issues de la base ;

- l‟information latérale : transmise entre émetteur et un récepteur de même


niveau hiérarchique.

1. 2 Le réseau informel

Le réseau informel est le réseau non officiel de l‟information. Celui-ci peut


véhiculer des informations utiles, de façon non hiérarchique, jouant alors un rôle
régulateur. Mais il peut également véhiculer des informations parasites nuisibles
pour l‟entreprise.

Le réseau informel peut avoir :

- un rôle régulateur quand il supplée de façon correcte au réseau formel


inefficace ;
- un rôle révélateur lorsque la communication dans le cadre du réseau
informel peut permettre de détecter des difficultés, des problèmes, mais
aussi des satisfactions, des idées novatrices que ne décèle pas toujours le
réseau formel ;
32

- un rôle parasite lorsqu‟il perturbe le bon fonctionnement de l‟entreprise


(rumeurs, informations confidentielles diffusées). La cause en est souvent
la rétention d‟informations.

Système d‟information informatisé (SII) et non automatisé

Le découpage en une partie formelle et une partie informelle du système


d‟information est relativement admis et reconnu par la communauté scientifique.

A son tour, le système d‟information formel peut être découpé en deux parties
ou sous systèmes distincts:

- sous-système d‟information non automatisé ;


- sous-système d‟information automatisé.

Par la suite nous parlerons de système d‟information informatisé (SII) puisque


l‟automatisation est assurée par les moyens informatiques comme nous l‟avons
vu précédemment.

Le système d‟information non automatisé résulte du traitement de données


effectué par un collaborateur (humain); naturellement, les moyens informatiques
peuvent être utilisés mais, il est de la responsabilité du collaborateur d‟assurer le
couplage entre les données qu‟il utilise et les traitements qu‟il leur applique.
Le système d‟information informatisé offre un traitement de données automatisé
par des programmes informatiques ; l‟essentiel de l‟automatisme consiste à
établir un couplage transparent pour les utilisateurs entre les traitements
informatiques d‟une part et les données utilisées d‟autre part. Ce couplage entre
les données et les multiples traitements informatiques qui les utilisent nécessite
une structuration rigoureuse des données.

Pour illustrer notre propos, prenons comme exemple, la production d‟un procès-
verbal (PV) de séance.
Dans le cadre d‟un système d‟information non automatisé, le collaborateur
utilisera un outil bureautique qui lui permettra de respecter la forme mais il lui
appartiendra d‟intégrer le contenu sur la base de ses compétences en
bureautique.

Dans le cadre d‟un système d‟information automatisé ou SII, le collaborateur


devra disposer d‟un programme qui lui demandera de saisir les différentes
données utiles et nécessaires (dates, participants, sujet, décisions etc.) et le
processus de traitement manipulera les données pour fournir le PV attendu.
33

Cet exemple met en évidence le rôle du mode de couplage entre données et


traitements.

Dans le premier cas, le collaborateur devra gérer lui-même les données de son
rapport en les sauvant probablement en tant que fichier sur un serveur de fichier;
dans ce cas l‟informatique lui fournit un programme (traitement de texte) pour
l‟aider à rédiger son rapport et une infrastructure de mémorisation de ses
données (serveur de fichier). Dans le deuxième cas, les données seront gérées
automatiquement par le SII qui les sauvegardera probablement dans une base de
données.

Quelle est la portée de l‟informatique de gestion dans ce contexte ?

Les deux partitions, système d‟information non automatisé et système


d‟information informatisé du système d‟information formel s‟appuient sur
l‟informatique.

L‟informatique de gestion, en tant que spécialité, s‟applique essentiellement au


système d‟information informatisé ; elle a comme finalité de fournir aux sous-
systèmes opérationnel (SO) et de pilotage (SP) les informations utiles et
nécessaires en cachant au bénéficiaire les contingences d‟acquisition, de
mémorisation, de traitement et de communication des données utilisées.

A notre sens, les systèmes d‟information non automatisés relèvent


prioritairement de l‟informatique et non de l‟informatique de gestion. Pour
illustrer notre propos, reprenons l‟exemple du PV. Avant l‟avènement des
traitements de texte, notre collaborateur aurait tapé son rapport à la machine à
écrire.

En cas de problème technique, il aurait sollicité le mécanicien de machines à


écrire. A travers cet exemple, il apparaît clairement qu‟il n‟y a pas de lien entre
le moyen technologique, la machine à écrire ou le traitement de texte, et
l‟impératif de gestion, l‟établissement d‟un PV.

Pour nous exprimer plus clairement, l‟installation ou le dépannage d‟une


messagerie, d‟un traitement de texte ou de réseaux informatiques ne relèvent pas
de l‟informatique de gestion mais de l‟informatique tout court.

De manière subsidiaire, le sous-système d‟information non automatisé peut


devenir partiellement l‟affaire de l‟informatique de gestion lorsque la double
compétence en informatique et en gestion est nécessaire comme par exemple
lors de la création de modèles ou de macros avec les outils bureautiques.
34

Toujours à notre sens, c‟est la nécessité de systèmes d‟information informatisés


(SII) qui justifie l‟informatique de gestion. Pour illustrer notre propos, reprenons
l‟exemple du PV.

Dans le cadre d‟une procédure du système opérationnel (SO), les collaborateurs


établissent des PV. Les données des différents PV serviront de base pour fournir
de l‟information au système de pilotage ; à l‟aide de ces informations, la
direction peut décider, par exemple, l‟engagement de nouveaux collaborateurs.

Nous voyons, par cet exemple, la communication transparente d‟informations


entre les sous-systèmes opérant (SO) et de pilotage (SP) grâce aux automatismes
supportés par le système d‟information informatisé (SII).

Quels sont les problèmes du système d‟information dans les entreprises ?

Depuis les premières heures de l‟informatique, le système d‟information de


l‟entreprise est en crise. Depuis son apparition, la technologie de l‟information
se révèle difficile à maîtriser. Le génie logiciel est apparu progressivement
comme une solution aux problèmes vécus par les entreprises. Mais quels sont
ces problèmes ?

Le premier souci des dirigeants d‟entreprise, c‟est l‟information. Pourquoi ?


Tout simplement parce que le système d‟information pose problème. La plupart
des entreprises émettent un jugement favorable sur la qualité de leurs ressources
humaines ou sur la performance de leurs moyens de production ; pratiquement
rares sont celles qui sont satisfaites de leu système d‟information. En voici
quelques raisons :

1. L‟incapacité à évoluer

L‟entreprise performante est en situation de mutation permanente. Seules les


entreprises qui sauront apprivoiser le chaos pour en faire un principe de
management pourront à l‟avenir gagner. Pour apprivoiser le chaos et en faire
une contrainte permanente pour la concurrence, il faut une culture d‟entreprise
très forte et un système d‟information d‟une très grande qualité, capable
d‟intégrer le changement comme simplement une donnée nouvelle. Peu
d‟entreprise disposent d‟un tel système. Le système d‟information ne devrait
jamais être un obstacle pour saisir des opportunités. Donc, il faut un système
d‟information qui est capable d‟intégrer des changements et d‟évoluer. En
d‟autres mots, la valeur intrinsèque d‟un système d‟information résultera plus de
35

son aptitude à évoluer rapidement que de la masse d‟instructions écrites en java,


C, C++, Pascal, Delphi ou VBasic.

2. Le manque de stratégie

La technologie de l‟information a désormais droit de cité dans la stratégie


d‟entreprise. L‟information n‟est plus seulement considérée comme une
ressource opérationnelle, mais de plus en plus comme une ressource
stratégique : le système d‟information devient un facteur de différenciation par
rapport à la concurrence. Le destin de milliers d‟entreprises est suspendu à leur
capacité à utiliser l‟information comme une ressource stratégique. De sorte que
le risque, pour beaucoup d‟entreprises, est de ne pas dépenser assez dans
l‟utilisation stratégique de leur système d‟information.

3. Incapacité à alimenter le pilotage

Le monde économique devient complexe. Les forces concurrentielles évoluent


très rapidement et sont en perpétuelle interaction. La nécessité pour les
dirigeants d‟entreprises de disposer d‟une information pertinente, précise, fiable
et disponible à temps se pose aujourd‟hui avec acuité.

Le défi que doit relever un système d‟information efficace est de fournir la


bonne information à la bonne personne au bon moment. Peu d‟entreprises
disposent aujourd‟hui d‟un tel système d‟information.

Il règne souvent, parmi les cadres supérieurs, un sentiment de malaise dû au fait


que, malgré des coûts informatiques importants, il leur est impossible d‟obtenir
l‟information dont ils ont besoin. Cette impossibilité du système d‟information à
alimenter l‟action des dirigeants contrarie parfois leur carrière personnelle. Elle
affecte, dans tous les cas, la performance de l‟entreprise.

La conséquence est que beaucoup de décisions d‟ordre stratégique, susceptibles


d‟être appuyées de façon pertinente par l‟informatique, sont prises de façon
empirique ou irrationnelle faute d‟information adéquate. Si on devrait chiffrer
les pertes économiques générées par de telles décisions, on se rendra bien
compte de l‟étendue de la catastrophe.

Qui n‟a pas en tête le cas d‟un dirigeant incapable d‟obtenir dans le délai
raisonnable, malgré un système informatique aussi important que coûteux, les
indicateurs d‟activité de son entreprise qui lui permettraient de corriger une
démarche mal conçue.
36

4. La pyramide de Maslow

La pyramide d‟Abraham Maslow (psychologue américain) nous indique qu‟il ne


sert à rien de vouloir satisfaire les besoins nobles d‟un individu (besoins
spirituels, intellectuels, etc.) tant que ses besoins d‟ordre physiologique ne sont
pas satisfaits. De même, en matière de système d‟information, il est vain de
vouloir satisfaire le pilotage tant que l‟opérationnel n‟est pas opérationnel. En
effet, les besoins en informations de pilotage résultent pour l‟essentiel de
l‟agrégation d‟informations du système opérationnel. Le système d‟information
de pilotage repose sur le système d‟information opérationnel de même que les
besoins intellectuels d‟un individu reposent sur une physiologie assumée : une
âme saine dans un corps sain. Une hiérarchie doit être instaurée dans la
satisfaction des besoins, y compris pour le système d‟information. Ce précepte
de base est trop souvent oublié.

5. Mieux vaut attendre que le plaisir

Malgré leur bonne volonté et malgré l‟énergie déployée, les départements


informatiques se trouvent confrontés à l‟impossibilité de répondre dans un délai
raisonnable aux besoins sans cesse croissants des utilisateurs. Ces derniers
mettent en place, sous la pression du marché, des solutions autonomes à base de
Micro-informatique qui ne font bien souvent qu‟aggraver l‟incohérence et la
lourdeur du système d‟information pour un coût global toujours supérieur au
coût apparent. Il est, en effet, constant d‟observer dans les entreprises que des
cadres supérieurs investissent le plus clair de leur temps à développer des
applications sur micro-ordinateurs sans professionnalisme au détriment de
l‟exercice de leur véritable métier. En plus du fait que ces expériences
n‟aboutissent pas toujours, elles conduisent la plupart du temps à l‟obtention
d‟un système jetable car non documenté ou non réalisé dans les règles de l‟art.
Les utilisateurs devraient être convaincus que, plutôt que de construire des
systèmes bourgeonnant, il est urgent d‟attendre que les techniques d‟analyse
soient mises en œuvre au sein de l‟entreprise.

6. La surpuissance du matériel

Les matériels sont de plus en plus puissants. De nombreux micro-ordinateurs


disposent actuellement d‟une mémoire centrale de plus 1 giga-octet et des
plusieurs giga-octets sur disque dur. Des machines très puissantes verront le jour
37

et elles mettront à la disposition des entreprises une puissance de traitement


jusqu‟à maintenant inégalée pour un coût très inférieur au coût d‟un mini-
ordinateur actuellement. Tous ces avantages sont les fruits du progrès
électronique. Cependant la plupart des entreprises ne tirent pas le meilleur parti
d‟énormes possibilités qu‟offre aujourd‟hui la technologie informatique.
L‟aptitude à développer des systèmes d‟information n‟a pas évolué au même
rythme que celui de la puissance des équipements matériels.

7. La maintenance

L‟essentiel des forces vives des départements informatiques consacre


aujourd‟hui le plus clair de son temps à des tâches de maintenance pour
aménager ce qui existe. Dans beaucoup d‟entreprises, il est assez curieux de
constater que la charge de maintenance représente 80 % des efforts de
développement, ne laissant que 20 % d‟allocation pour les nouveaux projets.
Donc trop d‟efforts sont déployés dans les tâches de maintenance et trop peu de
forces sont consacrées aux nouveaux projets porteurs d‟espoirs dans l‟entreprise.
Les idées nouvelles sont ainsi étouffées par la charge que représente la
maintenance.

8. L‟inexistence de dialogue

Les départements informatiques sont complètement absorbés par les tâches


fastidieuses de maintenance qu‟ils réalisent ; ce qui ne le prédispose que
faiblement à s‟ouvrir sur l‟extérieur. Conséquence, l‟informatique se replie sur
elle-même. Rien ne prédispose au dialogue les informaticiens et les utilisateurs :
absence de langage commun. Cet état des choses a dans l‟entreprise des
conséquences catastrophiques.

9. Documentation insuffisante

Bien souvent les systèmes développés ne font l‟objet que de très peu de
documentation, voire aucune dans certains cas extrêmes. Il est rare que les
applications soient exhaustivement documentées en termes de spécifications
fonctionnelles, spécifications techniques, spécifications de réalisation, et manuel
d‟utilisation. Or un logiciel, qui est par nature un objet immatériel, n‟a de valeur
et d‟intérêt que par les documents qui permettent de comprendre :

a) son mode d‟emploi, afin de l‟utiliser correctement ;


b) sa logique de fonctionnement et les options prises dans sa conception, pour le
faire évoluer ou, plus simplement, pour corriger un défaut constaté.
38

L‟insuffisance de documentation technique est un défaut dont les conséquences


touchent en premier à la pérennité du logiciel développé et, bien souvent, en
second lieu à la pérennité de l‟entreprise.

L‟insuffisance de documentation d‟utilisation est très souvent à l‟origine des


erreurs de manipulation u système informatique dont les conséquences sont
catastrophiques lorsque le système a, de surcroît, été conçu sans toutes les
sécurités nécessaires. A l‟instar de la documentation, la formation des
utilisateurs est très souvent insuffisante pour leur permettre de tirer le meilleur
parti du système qui est mis entre leurs mains.

10. Projet sans issue

Beaucoup d‟entreprises se lancent dans des projets importants de développement


de système d‟information sans véritable méthode de développement et sans
véritablement se doter d‟une conduite de projet. Conséquence, ces projets
échouent immanquablement.

Allons-nous vers une nouvelle approche du système d‟information ?

L‟évolution de la place de l‟information dans l‟entreprise

L‟information, avons-nous suffisamment dit, est un symbole qui a une


signification pour les acteurs de l‟entreprise. Elle peut se transformer en
connaissance utile à l‟accomplissement de leur travail. Cette fonction est
particulièrement importante quand les tâches sont divisées entre plusieurs
personnes ou étalées dans le temps. Rappelons-nous que traditionnellement, on
observe trois rôles joués par l‟information.

a. L‟information est un support pour l‟action.

Elle fournit des éléments pour effectuer les missions assignées. Par exemple, les
informations tarifaires permettent d‟établir la facturation. De même, les
informations du catalogue facilitent la vente.

b. L‟information conserve une trace des activités

Elle renseigne sur les actions accomplies par soi-même ou par d‟autres. La tenue
d‟une comptabilité en est le meilleur exemple.
39

c. L‟information apporte une aide à la prise de décision

Elle réduit l‟incertitude quand il faut décider. Par exemple, les ventes récentes
par catégories de produit apportent un élément pour ajuster les tarifs.

Actuellement, les technologies de l‟information et de communication ont


amplifié et étendu le rôle de l‟information dans l‟entreprise. Elles offrent, en
effet, des possibilités de mémorisation, de traitement automatique, et de
diffusion qui ouvrent de nouveaux horizons. Ce phénomène est particulièrement
perceptible dans trois courants qui influent sur la gestion des entreprises : la
dématérialisation des objets de gestion, l‟exigence de qualité et la recherche
continue d‟innovation.

1. Qu‟en est-il de la dématérialisation des objets de gestion ?

De nombreux objets de gestion ne sont plus aujourd‟hui concrétisés par les


objets physiques : leur existence est liée à la naissance et au cycle de vue
d‟informations qui les caractérisent. Par exemple, les valeurs mobilières, même
les plus classiques telles les actions et les obligations, n‟ont plus d‟existence
matérielle. Leur propriété n‟est plus assurée par la détention d‟un certificat, mais
par une inscription dans la comptabilité de la banque dépositaire d‟une ligne au
compte client. Ce sont les écritures qui font foi et non un papier détenu par le
propriétaire.

Ici l‟information n‟est plus simplement un reflet ou une trace : elle est elle-
même un objet de gestion. Les technologies de l‟information assurent sa
mémorisation et s transformation.

2. Qu‟en est-il de l‟exigence de qualité ?

Sous la pression de la concurrence, un nombre croissant d‟entreprises, à travers


le monde, se préoccupent non seulement de la qualité de leurs produits, mais
aussi de celle de leurs processus. Pour améliorer la qualité de leur
fonctionnement, les entreprises doivent notamment identifier et maîtriser les
informations qui rendent compte du déroulement de leurs processus.

Par exemple, la norme ISO 9000 a imposé d‟avoir un dispositif garantissant la


maîtrise des documents utilisés dans l‟entreprise : documents de travail,
documents techniques, documents de gestion, etc. Les acteurs doivent pouvoir
disposer en temps voulu des documents qui leur sont nécessaires. Il faut pour
cela mettre en place des procédures d‟approbation, de diffusion et de
40

remplacement des documents, ce qui entraîne une gestion d‟informations pour


chaque document.

L‟entreprise est donc conduite à gérer des informations supplémentaires pour


améliorer la qualité de sa gestion. Les technologies de l‟information, notamment
celles de l‟intranet, facilitent la mémorisation, l‟actualisation et la diffusion de
ce type d‟information.

3. Qu‟en est-il de la recherche continue d‟innovation ?

Pour se développer ou parfois pour survivre, les entreprises sont condamnées à


entrer dans un cycle continu d‟amélioration et d‟innovation. Les technologies de
l‟information sont aujourd‟hui un des moyens de développer de nouveaux
produits et/ou services pour le client. Les services en ligne offerts par certaines
banques au Congo sont un bon exemple. Le développement de l‟Internet et du
commerce électronique conduit certaines entreprises à développer des offres
particulières pour ce nouveau circuit de distribution.

Ces innovations placent l‟information au cœur de l‟activité. L‟extension de la


place de l‟information dans l‟entreprise conduit à faire évoluer la notion de
système d‟information.

Allons-nous vers une nouvelle définition du système d‟information dans


l‟entreprise ?

L‟approche classique considère que toute organisation peut être vue comme un
système, lui-même décomposé en 3 sous-systèmes en interaction : le système
opérant, le système d‟information et le système de pilotage.

Le système opérant peut être assimilé au monde réel : il représente l‟activité


productive. Le système de pilotage correspond à l‟activité de management. Le
système d‟information est une mémoire, un réservoir d‟informations entre le
système de pilotage et le système opérant.

Quand l‟organisation fonctionne, le système opérant alimente le système


d‟information avec les informations concernant les activités effectuées. Par
exemple, les détails d‟une vente réalisée. Inversement, le système opérant a
parfois besoin d‟informations qu‟il va puiser dans le sous-système
d‟information. Par exemple, un taux de remise autorisé.
41

De leur côté, les managers s‟appuient sur des informations mémorisées. Par
exemple, l‟évolution des ventes, par produit et par secteur, sur les 3 derniers
mois. Certaines de leurs décisions peuvent modifier des éléments du sous-
système d‟information. Par exemple, la modification des prix de vente pour
certains produits. Elles peuvent également avoir des conséquences sur le
système opérant. Par exemple, la modification du réseau de vente.

Système de pilotage

Système d’information

Entrée sortie

Système opérant

Selon cette approche, le système d‟information est considéré comme une image
une représentation du monde réel. Cette vue classique du système d‟information
est principalement orientée vers la construction d‟une base de données centrale,
gérant des informations de référence.

De nos jours, compte tenu de l‟évolution de la place de l‟information dans


l‟entreprise, on a besoin d‟une autre vue. Ainsi, certaines activités de l‟entreprise
se confondent avec leur représentation sous forme d‟information. Par exemple,
l‟émission d‟un ordre de prélèvement selon les modalités de remboursement
42

définies dans le contrat de crédit : la création de l‟information n‟est pas l‟image


de l‟activité, mais l‟activité elle-même.

De même la saisie d‟une commande électronique par Internet est l‟acte de


commander. La saisie en ligne d‟un numéro de carte bancaire et de sa date
d‟expiration est l‟acte de paiement.

Parfois, l‟information déclenche d‟autres activités. Par exemple, l‟information


selon laquelle un client a dépassé le délai de paiement de sa facture entraînera sa
mise en précontentieux et conduira le gestionnaire à agir. A l‟inverse, l‟analyse
des informations sur la consommation d‟un client peut conduire à lui proposer
des produits particuliers susceptibles de l‟intéresser.

On peut donc considérer le système d‟information comme une des facettes de


l‟entreprise. Décrire un système d‟information revient à proposer une façon de
regarder ce qu‟est l‟entreprise et comment elle fonctionne.
Les autres vues sont notamment la structure : l‟entreprise vue à travers son
organigramme et la répartition des responsabilités et du pouvoir ; la vue
stratégique : l‟entreprise est vue sous un angle de ses décideurs, de ses relations
avec l‟environnement, de ses avantages clés.

A la lumière de cette nouvelle approche, nous pouvons définir le système


d‟information comme étant la partie du réel constituée d‟informations
organisées, d‟événements ayant un effet sur ces informations, et acteurs qui
agissent sur ces informations ou à partir de ces informations, selon des processus
visant une finalité de gestion et utilisant les technologie de l‟information
(C.Morley et all, 2001, p.6).

Précisons les termes de cette définition.

. Partie du réel : le système d‟information n‟est pas considéré comme une image
du monde réel, mais comme une partie de l‟entreprise. On s‟intéresse
particulièrement aux informations et à leur organisation, aux événements, aux
acteurs et aux processus.

. Informations organisées : les informations que l‟entreprise a choisi de gérer,


prédéfinies et structurées.

. Evénement : quelque chose qui se produit, que l‟entreprise veut prendre en


compte et qui aura des conséquences sur les activités effectuées et sur les
informations gérées.
43

. Acteur : un être humain ou une machine qui crée, manipule, transforme les
informations ou qui est sollicité par la présence ou la valeur de certaines
informations.

. Processus : plan d‟ensemble indiquant comment les acteurs agissent et


collaborent au moyen des informations gérées pour traiter une catégorie
d‟événements.

. Finalité de gestion : ce qui oriente la définition du système d‟information, son


objectif de gestion.

. Technologies de l‟information : la construction des processus s‟appuie sur les


fonctionnalités offertes par les technologies permettant de mémoriser, de traiter,
d‟analyser et de diffuser l‟information.

Les gestionnaires sont donc directement concernés par la définition d‟un


système d‟information

Système d‟information

Acteurs < …………………………………………..> information

Processus

S‟appuie permet

Système informatique

Matériels <………………………………………………..> logiciel

Applications et
Base de données
44

Chapitre 5

Le système informatique

Nous vivons à l‟âge de la révolution informatique. Comme toute révolution, elle


est globale, profonde et durable dans ses effets. Elle est aussi fondamentale dans
notre organisation sociale et économique aujourd‟hui. Elle modifie petit à petit
les modes de pensée et le style de chaque individu dans notre siècle.

Pour la petite histoire, la révolution industrielle fut caractérisée par


l‟augmentation de la puissance physique de l‟homme ; elle était l‟amplification
de la force musculaire. Le simple fait d‟appuyer sur un bouton permettait à une
machine telle que le moulin de moudre rapidement le maïs. Grâce au
mouvement d‟un levier, une pelleteuse pouvait ramasser une grande quantité de
caillasse. Les machines évitaient à l‟homme de gaspiller son énergie en gestes
répétitifs.

On peut dire par analogie que la révolution informatique est l‟accroissement des
capacités mentales de l‟homme, l‟amplification du cerveau humain. Le simple
fait d‟appuyer sur le bouton permet à la machine d‟effectuer des calculs
compliqués, de prendre des décisions complexes, de stocker en mémoire et de
retrouver de grandes quantités d‟information. Les ordinateurs évitent, ainsi, à
l‟homme de gaspiller son énergie mentale en opérations répétitives.

L‟ordinateur est une machine qui peut effectuer des tâches intellectuelles de
routine en exécutant très rapidement des opérations simples. La simplicité des
opérations (l‟addition ou a comparaison de deux nombres en sont des exemples
typiques) est compensée par la vitesse à laquelle elles sont exécutées (environ un
million à la seconde).

Disons un mot sur l vitesse de l‟ordinateur.


En effet, l‟unité centrale d‟un ordinateur classique exécute entre un et dix
millions „opérations par seconde. Bien que ces opérations soient très
élémentaires, la vitesse remarquable de leur exigeant

Un système informatique est un ensemble organisé d‟objets techniques


(matériels, logiciels, applications et base de données) dont la mise en œuvre
réalise l‟infrastructure d‟un système d‟information et lui permet de fonctionner.
Le système informatique est une autre façon de parler de l‟ordinateur.
45

L‟ordinateur au départ était conçu comme une machine capable de faire des
calculs numériques complexes. Le terme anglo-saxon « computer » qui veut dire
calculateur en dit long. Ainsi, la plupart des applications étant scientifiques,
l‟ordinateur ne se trouvait que dans des centres de recherche et dans des
universités. Et le langage de programmation comme le Fortran en tirait une
bonne fortune.

a) L‟ordinateur en tant que machine à traiter les données numériques et


alphanumériques.

Dans sa deuxième phase, l‟ordinateur apparaît comme une machine de


traitement logique d‟une donne discrète quelconque et non seulement
numérique. Dans cette perspective, on a saisi l‟utilité de l‟ordinateur dans le
domaine de gestion où le calcul joue un rôle réduit. C‟est dans ce cadre que le
langage cobol a été conçu. Avec l‟avènement de micro-ordinateur, on note un
foisonnement remarquable des logiciels de traitement de texte, de tableur, de
gestion de base de données.

b) L‟ordinateur en tant que outil de communication

Actuellement l‟ordinateur est considéré comme un outil de communication.


C‟est l‟avènement de l‟Internet. Celui-ci est un ensemble de réseaux reliés entre
eux (réseau de réseaux). Avec la world wide web (ou web) que l‟on peut
littéralement traduire par « la toile d‟araignée mondiale ». On peut communiquer
les textes et les images, visionner des photographies et d‟écouter des documents
sonores.

Dans ces trois contextes, l‟ordinateur manipule des chiffres binaires (0 ou 1).
Cela ne veut pas dire qu‟à l‟intérieur il y a des 0 et des 1. C‟est une façon de se
symboliser les informations qui sont introduites, traitées et stockées en termes de
pulsions électriques dans l‟ordinateur. Il apparaît que pour symboliser l‟état de n
ampoules électriques, allumées ou éteintes, la représentation binaire est la plus
simple qui soit en adoptant la convention suivante :

1 = « état allumé », 0 = » état éteint ». Par conséquent, un ensemble de deux


ampoules peut se trouver dans 22 = 4 états distincts que l‟on note alors :

0 0 état « 0 »
0 1 état « 1 »
1 0 état « 2 »
1 1 état « 3 »
46

Plus généralement, un ensemble de n ampoules peut se trouver dans 2n états


différents. Il faut rapprocher ceci du fait qu‟avec n chiffres binaires on peut
compter de 0 à 2n – 1.

3.2. Les systèmes de numération

Si les ai représentent l‟ensemble des symboles utilisés pour exprimer un nombre


dans une base B, un nombre réel R s‟écrit :

An an-1….a1 a0, a-1 a-2…….


--------------- -------------
Partie entière partie fractionnaire

et sa valeur est :

R = an Bn +an-1 Bn-1 + ….. + a0 B0 + a-1 B-1 + a-2 B2 + …


------------------ --------------------------------
Partie entière partie fractionnaire

En décimal l‟ensemble ai est constitué des symboles : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Ainsi 1045 = 1*103 + 0*102+ 4*101 +5*100

En binaire : 0 et 1
Par analogie, un chiffre binaire aura aussi une valeur pouvant être
1, 2, 22, 23, 24

NB. Le chiffre binaire est souvent abrégé en bit qui est l‟acronyme de l‟anglais
Binary digit. Un paquet de 8 bits forme un octet ou byte en anglais.

Lorsqu‟on travaille en système binaire, une valeur devient rapidement très


longue à écrire : 101000001001
En système décimal, lorsqu‟un nombre est trop long, on regroupe les chiffres par
paquet de trois et on les sépare par des points.
En système binaire, c‟est pareil. On regroupe les chiffres par paquet de trois
pour obtenir un chiffre octal (base 8) : 0, 1, 2, 3, 4, 5, 6, 7.
On peut aussi les regrouper par paquet de quatre chiffres pour avoir un chiffre
hexadécimal (base 16) : 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F.

Le rapport entre le binaire (base 2) et l‟octal (base 8) est de 23, c‟est-à-dire il faut
3 chiffres binaires pour avoir un chiffre octal. Tandis qu‟entre le binaire et
47

l‟hexadécimal (base 16) le rapport est de 24, c‟est-à-dire que 4 chiffres binaires
équivalent à 1 chiffre hexadécimal.

Donc les nombres hexadécimaux présentent un double avantage : ils sont courts
à écrire et ils permettent un passage immédiat à la représentation binaire et
réciproquement.

3.3. Notion de poids

En base 10 le nombre 2543 est composé de différents chiffres ayant des valeurs
différentes. Le 3 représente les unités, le 4 les dizaines, le 5 les centaines et le 2
les milliers. On peut dire que le 2 sur ce nombre en base 10 a plus de valeur
(poids) que le 3. En binaire c‟est pareil : dans 10111111, le 1 est appelé le bit
représentant le poids le plus fort. Ainsi le 1 est appelé le bit à la valeur la plus
faible. Le tableau 1 donne les valeurs des quelques poids exprimées en
Base 10, Base 2, Base 8 et Base 16.

Base B3 B2 B1 B0 B-1 B-2

10 1000 100 10 1 0,1 0,01

2 8 4 2 1 0,5 0,25

8 512 64 8 1 0,125 0,015625

16 4096 256 16 1 0,0625 0,00390625

Les puissances de la base B0, B1 …... B-1 ... sont appelées les poids.

3.4. Tableau de correspondances Base 10, Base 2, Base 8, Base 16

Base 10 Base 2 Base 8 Base 16

0 0000 0 0
1 0001 1 1
2 0010 2 2
3 0011 3 3
4 0100 4 4
48

5 0101 5 5
6 0110 6 6
7 0111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F

Le système hexadécimal (base 16) couvre toutes les combinaisons de 4 bits


possibles entre 0000 et 1111.

3.5. Conversion des nombres de Base 10 en binaire, octal et hexadécimal

Le moyen le plus rapide est d‟effectuer des divisions successives par 2, par 8 et
par 16 en retenant la présence d‟une partie fractionnée.

Exemple : Que vaut 15 en base 2 ?

15 / 2 = 7 reste 1
7 / 2 = 3 reste 1
3 / 2 = 1 reste 1
1 / 2 = 0 reste 1

La lecture des restes de la division successive de façon inversée : 1111

Que vaut le nombre décimal 15, 432 en base 2 ?


La partie entière est 15 et la partie décimale est 0,432. La partie entière vaut
1111. Tandis que la partie décimale fait l‟objet d‟une multiplication successive
en reportant la partie entière résultante dans le nombre binaire.

Ainsi 0, 432 x 2 = 0,864 -> 0


0,864 x 2 = 1,728 -> 1
0,728 x 2 = 1,459 -> 1
0,459 x 2 = 0,914 -> 0
0,914 x 2 = 1,836 -> 1
0,836 x 2 = 1,672 -> 1

Contrairement à la partie entière, la lecture des reports se fait du haut en bas.


49

Donc 15,432 vaut approximativement 1111,01101. Il s‟agit d‟un nombre à


fraction continue vu que représente 15,432 en base 10 ne peut être représenté
que par approximations successives en base 2.

Que vaut 42 en base 8 ?

42 : 8 = 5 reste 2
5 : 8 = 0 reste 5

Donc 42 en base 10 vaut 52 en base 8.

Que vaut 42 en base 16 ?

42 : 16 = 2 reste 10 qui en hexadécimal  A


2 : 16 = 0 reste 2
Donc 42 en base 10 vaut 2A en hexadécimal.

3.6. La conversion de binaire, octal et hexadécimal en décimal

(111)2 = 1*22 + 1*21+1*20 = 7

(1111)2 = 1 x 23 + 1 x 22 + 1 x 21 + 1 x 20 = 15

(111,01)2 = 1 x 22 + 1 x 21 + 1 x 20, 0 x 2-1 + 1 x 2- 2 = 4+2+1, 0 x 0,5 + 1 x 0,25


= 15,25
Ce même principe est valable pour l‟octal (base 8) et l‟hexadécimal (base 16)

(642)8 = 6 x 82 + 4 x 81 + 2 x 80 = 6 x 64 + 4 x 8 + 2 x 1 = 418

(12,4) = 1 x 81 + 2 x 80, 4 x 8-1 = 1 x 8 + 2 x 1, 4 x 0,125 = 10,5


(A 3 F)16 = A x 162 + 3 x 161 + F x 160 = 10 x 256 + 3 x 16 + 15 x 1 = 2623
3.7 La conversion octal, hexadécimal en binaire et vice versa

567 en octal - 101 110 111 en binaire. Ici chaque chiffre octal correspond à
trois bits.

3 4 2 1 en octal  011 100 001 en binaire.

A 8 F en hexadécimal  1010 1000 1111 en binaire. Ici chaque chiffre


hexadécimal correspond à 4 bits ou chiffres binaires.
50

1001101011, 11001 - 2 6 B, C 8. En effet, un nombre binaire se convertira


en hexadécimal en partant de part et d‟autre de la position de la virgule et en
découpant le nombre par tranche de 4 chiffres binaires ou bits et en interprétant
chaque tranche. Le dernier chiffre 8 de l‟exemple précédent est obtenu en faisant
une extension de « 0 » à droite du dernier « 1 ».

3.8. Les opérations avec les binaire, octal, hexadécimal

a) addition et soustraction

111 10010 (5 6 5)8 AB2 D


+ 111 + 1011 + (3 3 3)8 + 54D + 7
_______ _________ __________ __________ ____

1110 11101 11 2 0 FFF 14

1000 10010 3F 2
- 111 - 1011 - 1A4
_____ ________ ______
1 1111 24E

(523)8 - (77)8 = 4 24

Lorsque la soustraction n‟est possible on emprunte la base. Ainsi pour le cas ci-
dessus :
8 + 3 = 11 – 7 = 4
8+1= 9–7=2
Reste 4

(356)16 - (DF) 16 = 277

On emprunte la base 16, ainsi on a 16 + 6 = 22 – 15 = 7


16 +5 = 21 – 13 – 1 = 7
3–1=2

a) multiplication et division

- binaire

11,11
x 1,1
-------
51

1111
1111
------
101,101

- En octal

43
x 26
-------
322
106
-------
1402

- En hexadécimal

A3
x3
----
1E9

Division

111 : 10 = 11,1

En octal et hexadécimal, il est facile de transiter par le décimal.

Hexadécimal

40 : 4 = (10)8 équivaut en décimal à 64 : 4 = 16

Octal

40 : 4 = (10)8 équivaut en décimal à 32 : 4 = 8


52

3.9. La représentation du signe

L‟idée qui vient le plus naturellement à l‟esprit consiste à dire que le bit de poids
fort symbolise le signe et le reste la valeur absolue du nombre. Si le premier bit
est 0 alors le nombre est positif sinon il est négatif. Selon cette conversion,
représentée sur 4 bits :

+ 5 s‟écrit 0101
- 5 s‟écrit +1101
___ ____
0 10010

L‟addition ne donne pas une valeur qui correspond à la valeur attendue. Pour
surmonter cette difficulté, on a eu recours au complément à 2.
Ainsi :

-5 donne 0101
1 0 10
+ 1
_______
10 11

+5 ---- 0 1 0 1
- 5 ---- 1 0 1 1
___ _______
0 10 0 0 0

En ignorant le report au-delà de la position du signe on obtient bien 0.


Remarquons que si nous travaillons sur un nombre binaire représenté en
symbolisme hexadécimal, le complément à 2n devient un complément 16p. On
obtiendra la représentation hexadécimale de l‟opposé en complémentant chaque
chiffre à F et en ajoutant.

0 1 0 0 1 1 0 1 -- 4D (FF – 4D =B2)

1011 0010 B2
1 + 1
____________ ___
1 0 1 1 0 0 1 1 ----- B3
53

Donc, on obtient le complément à 2 en cherchant l‟opposé de chaque bit, puis


ajouter 1.

Chapitre 6

5.1. Les algorithme et la pratique de la programmation

La littérature appropriée renseigne que le premier ordinateur date des années


1947. Au moment où nous rédigeons ce cours en 2013, cela fait au moins 66
ans. Et dans cet intervalle, la révolution informatique a touché plusieurs aspects
de la vie humaine. Comme nous l‟avons déjà dit, l‟ordinateur s‟est infiltré dans
la quasi totalité des secteurs de la vie des gens dans notre pays et ailleurs : de la
gestion des appels téléphoniques à la signalisation routière, de la réservation des
places dans une compagnie aérienne à la production des journaux, de la gestion
d‟un compte bancaire à la connexion Internet à domicile.

Dans les domaines scientifiques, c‟est pareil. L‟informatique est omniprésente.


A titre d‟exemple :

- En Economie et gestion : la gestion des stocks, la facturation, la gestion des


ressources humaines, le contrôle de gestion, la gestion de la production etc.

- En science : analyse des données expérimentales (chimie, biologie,


physique), la résolution de grands ensembles d‟équations, la navigation
spatiale.

- En sciences sociales : analyse des résultats d‟enquête, la modélisation


prospective des populations (démographie), sondage d‟opinion
- En ingénierie : calculs de résistance, pertes de chaleur, consommation
d‟énergie, simulation.

- En pédagogie et psychologie : enseignement programmé, l‟intelligence


humaine et intelligence artificielle.

- En médecine : diagnostic des maladies, la gestion des dossiers médicaux etc.


54

- En littérature et arts : analyse des textes littéraires, la production des films


animés, la composition musicale.

- En loisirs : jeux vidéo, jeux d‟échecs etc.

Comme on le remarque, l‟informatique est une discipline tentaculaire. Elle


comporte plusieurs aspects depuis l‟impact des ordinateurs sur la société aux
détails technologiques impliqués dans leur conception.

Quel que soit le domaine, l‟ordinateur a un seul but. C‟est manipuler


rapidement, systématiquement et sans erreur une quantité d‟informations.
En clair, cela revient à dire que l‟ordinateur doit :

a) mémoriser des données numériques et alphanumériques ;

b) rechercher des données mémorisées ;

c) effectuer des opérations de calcul avec des données ;

d) faire des comparaisons entre les données ;

e) trier et classer les données ;

f) actualiser, c‟est-à-dire corriger, supprimer les données qui existent et ajouter


de nouvelles informations ;

Pour manipuler les données, quelle que soit l‟application, on a besoin d‟un
algorithme. Celui-ci est une notion fondamentale en informatique : donc sans
algorithme il n‟y aurait pas de programme, et sans programme il n‟y aurait rien à
exécuter. Les algorithmes sont fondamentaux en un autre sens : ils sont à la fois
indépendants du langage dans lequel ils sont énoncés et de l‟ordinateur qui les
exécute.

Cette indépendance des algorithmes nous pousse à dire que tous les ordinateurs
peuvent globalement mener à bien les mêmes opérations de base. Il faut noter
des différences de détail et de rapidité, mais en règle générale les capacités des
ordinateurs actuels sont les mêmes. Bien plus, ces capacités n‟ont pas été
affectées par l‟innovation technologique. Cette innovation ne changera pas ce
que les ordinateurs font, même si elle affecte la vitesse, le coût et la fiabilité.
Cela revient à dire que les algorithmes peuvent être conçus et étudiés
indépendamment de la technologie du moment. Les résultats resteront valables
en dépit de l‟arrivée de nouveaux ordinateurs et de nouveaux langages de
programmation.
55

Pour les spécialistes de la science informatique, les algorithmes sont plus


essentiels que les langages de programmation et les ordinateurs. Un langage de
programmation n‟est qu‟un moyen pratique d‟énoncer un algorithme, et un
ordinateur est un simple processeur qui exécute. Donc le langage de
programmation et l‟ordinateur ne sont que des moyens, le but étant l‟exécution
de l‟algorithme et le déroulement du traitement correspondant.

Lorsqu‟il y a de nouvelles applications, il faut concevoir des algorithmes pour


mener à bien les traitements concernés. La conception d‟un algorithme est une
activité intellectuelle difficile, beaucoup plus difficile que de traduire
l‟algorithme en programme. La conception requérant la créativité et l‟intuition,
nous pouvons dire qu‟il n‟y a pas de règles générales. En d‟autres mots, il
n‟existe aucun algorithme pour concevoir des algorithmes.

Dans la vie courante nous sommes confrontés à de nombreux problèmes. Pour


les résoudre nous mettons en place un plan reprenant les étapes à suivre pour :

b) concevoir une procédure qui une fois appliquée amènera à une solution du
problème. C‟est ce qu‟on appelle algorithme. En d‟autres, l‟algorithme est
un ensemble des règles opératoires dont l‟application permet de résoudre un
problème énoncé au moyen d‟un nombre fini d‟opérations.

c) Résoudre effectivement le problème en appliquant cette méthode. Cette mise


en pratique de l‟algorithme s‟appelle processus ou traitement.

Ainsi dans la vie courante, un algorithme peut prendre la forme de :

- mode d‟emploi ;
- recette de cuisine ;
- itinéraire routier ;
- notice de montage
- calculer la racine carrée
- la multiplication de deux nombres etc.…

Résoudre un problème en prenant appui sur l‟ordinateur, ne peut se faire que s‟il
a été préalablement décomposé en problèmes plus simples, résolubles par
l‟ordinateur, se présentant sous forme d‟une suite d‟opérations à exécuter les uns
après les autres sans intervention extérieure (A. Gribaumont et al 1979).

A partir de ce qui précède, on peut définir l‟algorithme comme une suite logique
des prescriptions élémentaires effectuées en un nombre fini de pas en vue de
56

résoudre un problème et une classe de problème (M.Bertini et Y Tallineau


1978, p. 11).

Les problèmes des algorithmes.

La calculabilité

La notion d‟algorithme est très ancienne. Elle dépasse l‟informatique et les


ordinateurs. Depuis l‟antiquité l‟homme a cherché à automatiser les tâches
répétitives. En témoignent la multiplication égyptienne ou le calcul du PGCD de
deux nombres naturels donné par Euclide :

Règle 1. - poser les 2 nombres a, b. Passer à la règle suivante.

Règle 2 - comparer les nombres posés (a = b ou a < b ou a > b) ; passer à la


règle suivante.

Règle 3 - si les nombres posés sont égaux, chacun d‟eux donne le résultat
cherché. Le processus de calcul s‟arrête. Sinon passer à la règle suivante.

Règle 4 - si le premier nombre posé est plus petit que le deuxième, permuter les
2 nombres, continuer à poser les 2 nombres.
Règle 5 – soustraire le deuxième des nombres posés du premier et poser deux
nombres : celui qui est soustrait et la différence. Passer à la règle 2.

Dans l‟histoire de l‟informatique, l‟on s‟est rendu compte qu‟il y a beaucoup de


choses qu‟un ordinateur ne peut pas faire. En fait, ce que l‟ordinateur peut
calculer est infime par rapport à ce qu‟on aimerait calculer. Ces questions sont
globalement classées sous le titre « calculabilité », c‟est-à-dire l‟étude de ce qui
est informatisable et de ce qui ne l‟est pas. En fait ce thème soulève la question
des limites des méthodes algorithmiques.

La formalisation de la calculabilité a commencé dans la décennie 1930 afin de


répondre à des problèmes fondamentaux de logique mathématique, dont celui de
David Hilbert (1862-1943) sur le problème de la décision.
Le projet de D. Hilbert était de concevoir un système mathématique formel dans
lequel tous les problèmes puissent être formulés avec précision en termes de
propositions vraies ou fausses. Son idée était de trouver un algorithme qui
57

permette de déterminer, pour une proposition donnée d‟un système formel, si


cette proposition était vraie ou fausse. Hilbert estimait que ce problème était
fondamental dans le domaine mathématique. Dommage pour ce projet, car dans
les années 1930 de nombreuses recherches montrèrent que le problème de la
décidabilité (en allemand, Entscheindungsproblem) n‟était pas calculable. Cela
signifie qu‟il n‟existe d‟algorithme du type de celui que Hilbert désirait tant
obtenir.

En 1931 Kurt Gödel publia le célèbre théorème de l’incomplétude. Ce théorème


démontrait entre autres choses qu‟il n‟existe pas d‟algorithme dont l‟entrée soit
une proposition quelconque sur les entiers et dont la sortie dise toujours si la
proposition en question est vraie ou fausse. En d‟autres mots, jusqu‟au début du
vingtième siècle les mathématiciens étaient persuadés qu‟on pouvait un peu à la
manière des élèves en géométrie, démontrer toutes les vérités mathématiques par
déduction. Gödel a démontré deux résultats mathématiques :

- il se peut que dans certains cas, on puisse démontrer une chose et son
contraire (inconsistance)
- il existe des vérités mathématiques qu‟il est impossible de démontrer
(incomplétude).

La conséquence du théorème d’incomplétude est que la vérité ne peut pas être


exprimée en termes de démonstrabilité. Une chose prouvable n‟est pas
nécessairement vraie et une chose vraie n‟est pas toujours prouvable. A la suite
des travaux de Kurt Gödel, d‟autres mathématiciens tels Alonso Church, Alan
Turing et tant d‟autres découvrirent de nombreux autres problèmes qui ne
comportaient aucune solution algorithmique. Disons un mot sur la thèse de
Church -Turing.

5.1.2. La thèse de Church -Turing.

On l‟appelle thèse parce qu‟il s‟agit d‟un résultat qui ne peut pas être prouvé, car
il affirme l‟équivalence entre un concept intuitif, à savoir les fonctions
mécaniquement calculables et un concept formel, à savoir, les diverses
définitions des fonctions récursives. Elle s‟appelle la thèse de « Church »
puisque c‟est Alonso Church, mathématicien américain, qui en a eu le premier
l‟idée. Elle s‟appelle la thèse de Church - Turing puisque les machines de Turing
donnent une véritable idée de ce que « mécanique « veut dire.

En effet, pour prouver qu‟il n‟y a pas d‟algorithme pour un problème donné, des
mathématiciens ont tenté de définir exactement ce que l‟on entend par
algorithme. Gödel le définit comme une suite de règles pour établir la forme de
fonctions mathématiques complexes à partir de fonctions mathématiques plus
58

simples. A. Church utilisa un formalisme appelé « calcul lambda ». A .Turing


utilisa une machine hypothétique appelée « machine de Turing » pour définir
l‟algorithme comme un ensemble d‟instructions pour sa machine simple.

Toutes les définitions en apparence différentes sont en fait équivalentes. En


termes concrets, si on peut faire un calcul à partir d‟un algorithme défini d‟une
certaine manière, alors on peut aussi le faire à partir d‟un des autres algorithmes.
A la suite des progrès réalisés par les chercheurs dans les années 1930
(S. Kleene, Herbrand et d‟autres), les deux propositions suivantes furent
généralement admises :

(1) toutes les définitions rationnelles du concept algorithme connues à ce jour


sont équivalentes.
(2) Toute définition rationnelle du concept algorithme établie par la suite sera
en fait équivalente aux définitions connues.

Voilà la quintessence de la thèse de Church - turing. Jusqu‟aujourd‟hui aucun


fait n‟est venu démontrer le contraire et la thèse de Church -Turing est
universellement reconnue. La thèse de Church -Turing affirme simplement que
nous pensons avoir une bonne définition de ce qu‟est un algorithme. Chacun
d‟entre nous pressent ce que signifie accomplir une tâche d‟après une procédure
ou de façon mécanique. On comprend directement le sens de l‟organisation
d‟instructions ou d‟étapes successives nécessaires à l‟accomplissement d‟une
tâche pour ensuite charger une personne ou une machine de l‟exécution
routinière.

La thèse de Church - Turing nous confirme dans l‟idée que les définitions
précises du terme « algorithme » utilisées en informatique correspondent en fait
aux idées non formalisées que nous avons. Donc, chaque fois que nous
décrivons un certain nombre d‟étapes dont nous sentons qu‟elles peuvent être
parcourues d‟une manière purement routinière, il existe un algorithme formel, au
sens informatique du terme, pour la même tâche.

Dans une formulation simple et moderne, on peut dire que l‟algorithme est toute
chose qui peut être exécutée par un ordinateur. Dans cette perspective, tout
algorithme qui a été exécuté sur un ordinateur donné peut être exécuté sur
n‟importe quel autre ordinateur.

L‟équivalence entre tous les ordinateurs modernes d‟une part, et d‟autre part
entre eux et les machines de Turing ou autres définitions du concept
d‟algorithme est une confirmation de la thèse de Church - Turing. Cette
propriété remarquable des algorithmes est appelée universalité. En rapport avec
les ordinateurs, nous disons que l‟universalité signifie que tout ordinateur est
59

équivalent à tout autre ordinateur en ce sens qu‟ils peuvent tous accomplir les
mêmes tâches.

La complexité de l‟algorithme

La complexité est un autre problème auquel on se trouve confronté lorsqu‟on


construit les algorithmes. En effet, l‟exécution d‟un programme par un
ordinateur a toujours un coût : amortissement de l‟achat de cet ordinateur,
consommation électrique, temps perdu par l‟utilisateur attendant le résultat etc.

Ainsi, en testant deux programmes, on peut se rendre compte que l‟un est plus
rapide que l‟autre. C‟est ce que l‟on appelle l‟efficacité d‟un algorithme. Pour la
mesurer ou la quantifier, on s‟intéresse à la complexité de l‟algorithme.

Deux paramètres essentiels servent à mesurer le coût ou la complexité d‟un


algorithme : le temps d‟exécution (que l‟on pense au proverbe le temps c‟est de
l‟argent), et l‟espace mémoire requis. En termes techniques, on parle
respectivement de complexité temporelle et de complexité spatiale.

Pour être concret, on peut dire que la mesure de la complexité vise à obtenir des
résultats sur les principales caractéristiques d‟un algorithme à partir desquels on
pourra dériver une estimation précise des ressources pour l‟exécution de cet
algorithme sur une certaine machine.

L‟analyse des algorithmes permet notamment de pouvoir :

- Comparer entre eux différents algorithmes résolvant le même problème ;


- Déterminer si un algorithme donné est exécutable en un temps acceptable sur
des données d‟une certaine taille.

Par exemple, soit T un tableau de n entiers que l‟on désire trier dans l‟ordre
croissant. On suppose que l‟on dispose de deux algorithmes permettant de
réaliser ce travail :

- L‟algorithme 1 triant le tableau en n2 opérations ;


- L‟algorithme 2 triant le tableau en n log2 n opérations.

Pour exécuter nos deux algorithmes, nous disposons de deux machines


(ordinateurs) M1 et M2.
60

M 1 est capable d‟effectuer 229 opérations par seconde (pentium 4) ;


M2 est capable d‟effectuer 225 opérations par seconde (D86 DX 33).
L‟algorithme 1 est exécuté sur M1 et l‟algorithme 2 sur M2. Le tableau à traiter
comporte 220 entiers. Les temps d‟exécution sont les suivants :

Algorithme 1 sur M1 :

(220)2 / 229 secondes = 211 secondes soit approximativement 34 minutes.

Algorithme 2 sur M2

(220 x 20) / 225 secondes = .625 secondes

Au regard de ces résultats, nous pouvons conclure qu‟il ne suffit pas d‟avoir une
machine puissante, encore faut-il développer de bons algorithmes.

5.2. De l‟algorithme au programme

Un programme est une description codée d‟un algorithme ; celle-ci est donnée
en respectant des règles strictes de combinaison d‟éléments simples. Ces règles
définissent ce que l‟on convient d‟appeler un langage de programmation.
L‟intérêt du programme provient de l‟utilisation d‟un langage de
programmation.

Les règles strictes qui définissent le langage de programmation sont pré-établies


et standardisées. On dispose, en général, d‟un système qui permet de transformer
la description d‟un algorithme, donnée par un programme, en un ensemble
d‟instructions élémentaires d‟une machine de traitement d‟information. Ce
système de transformation est appelé compilateur (ou interpréteur).
Exemple. Pascal et C++ sont deux langages de programmation pour lesquels des
compilateurs existent sur la plupart des ordinateurs.

5.2.1. Justification du programme

Dans le cadre du contrat entre le demandeur et le programmeur, le programmeur


est le résultat tangible du travail du programmeur. Mais ce dernier a l‟obligation
de justifier le programme conçu, c‟est-à-dire de convaincre le demandeur que
programme possède les caractéristiques qu‟il attendait. Les caractéristiques
primordiales sont l‟exactitude et l‟efficacité.
61

5.2.2. Spécification du programme

En vue d‟une utilisation correcte du programme par le demandeur, le


programmeur doit aussi lui fournir la spécification du programme. Celle-ci est
constituée par l‟ensemble des informations qui doivent être connues par le
demandeur afin d‟utiliser correctement le programme. Le contenu d‟une
spécification permet au demandeur de présenter correctement les données pour
une activation du programme et d‟interpréter correctement les résultats obtenus
lorsque l‟activation se termine. La spécification est le mode d‟emploi du
programme.

Remarque : Dans certains textes, le terme « spécifier un programme » est


employé dans le sens de « définir le problème ».

5.3. Les caractéristiques d‟un programme

5.3.1. Exactitude

Un programme ne peut présenter un intérêt pour le demandeur que dans la


mesure où celui-ci peut l‟activer aveuglément, c‟est-à-dire qu‟il peut accorder
une confiance totale aux résultats produits. Cependant, la production des
résultats d‟un programme n‟est pas une conséquence directe de l‟existence du
programme : il faut que le programme soit exécuté par une machine de
traitement de l‟information. Pour décider de l‟exactitude d‟un programme, on ne
tiendra pas compte de la phase d‟exécution sur l‟équipement réel.

Supposons que le demandeur et le programmeur sont d‟accord quant à la


définition du problème, l‟ensemble des cas de données possibles, et la forme à
donner à la représentation des résultats. Un résultat n‟est produit qu‟après toute
une série d‟étapes : un algorithme doit être imaginé ; un programme, basé sur cet
algorithme, doit être conçu ; le programme doit être compilé afin d‟obtenir une
séquence d‟instructions élémentaires d‟une machine d‟un type donné ;
finalement un exemplaire de la machine doit prendre en charge l‟exécution de la
séquence d‟instructions élémentaires. Les deux dernières étapes entraînent
l‟intervention d‟éléments (compilateur, ordinateur de traitement) dont
l‟exactitude et la fiabilité ne sont généralement pas sous le contrôle du
programmeur. C‟est pourquoi on fait l‟hypothèse de l‟exactitude du compilateur
utilisé et de la fiabilité de l‟ordinateur. En d‟autres termes, on considère que le
62

choix des équipements pour les deux dernières étapes est la responsabilité du
demandeur.

Pour le programmeur, montrer l’exactitude du programme conçu revient à


montrer que pour tout élément appartenant à un ensemble bien défini de
données, l’exécution (par une machine supposée fiable) du programme (sous
forme issue d’un compilateur supposé correct) produira le résultat
correspondant du problème énoncé.

On exclut de la responsabilité du programmeur les éléments sur lesquels il n‟a


pas un contrôle direct, à savoir :
a. la partie de la définition du problème qui dépend du demandeur ;
b. la fiabilité du compilateur et de l‟ordinateur de traitement.

Exemple : Supposons qu‟un demandeur a transmis au programmeur une norme


de calcul d‟un élément comptable ; le programme conçu est correct s‟il respecte
fidèlement la norme donnée, on ne peut lui reprocher d‟éventuelles erreurs dans
l‟établissement de la norme elle-même. Le programmeur n‟est pas responsable
du modèle de gestion qu‟il n‟a pas conçu. De même, il ne peut être tenu par une
défaillance non –apparente de l‟équipement de traitement qui aurait faussé les
résultats lors de l‟exécution.

5.3.2. Comment convaincre de l‟exactitude d‟un programme ?

En acceptant les limites de la notion d‟exactitude d‟un programme, il reste à


établir comment le programmeur peut convaincre le demandeur de l‟exactitude
du programme.

a. Utilisation de tests.

Supposons que l‟on effectue x activations d‟un programme donné et que, à


chaque activation, on change le cas d‟application du programme (les données
initiales du cas de problème à résoudre). Supposons que chaque activation s‟est
terminée en produisant un résultat et que nous possédons une méthode qui
permet de vérifier que ce résultat est bien le résultat attendu. Que peut-on
conclure d‟une telle expérience ?

Deux issues sont possibles :

- Ou bien, certaines activations n‟ont pas produit le résultat attendu ; on peut


en conclure que le programme ne possède pas la caractéristique de pouvoir
63

être exécuté aveuglément pour une valeur arbitraire des données ; en d‟autres
termes, il est erroné ;

- Ou bien, les x activations ont, toutes sans exception, produit le résultat


attendu ; peut-on en conclure que le programme est correct ? Pas
nécessairement ; les x activations ne permettent pas de présumer quelle
pourrait être l‟issue d‟une autre série de y activations pour d‟autres valeurs
données.

Les tests sont utiles pour montrer l‟existence d‟erreurs, mais ils ne peuvent pas
établir l‟absence d‟erreurs.

Remarque : seul le test exhaustif (qui couvre tous les cas de données) pourrait
établir l’absence d’erreurs. Mais, un tel test est presque toujours impraticable
vu le nombre de cas à considérer et l’obligation de posséder une méthode de
vérification de chaque résultat.

b. Appel à l‟autorité

Nous dirions qu‟il y a justification du programme par appel à l‟autorité si le


programmeur invoque le fait que le programme conçu est basé sur une méthode
de résolution du problème dont la qualité est reconnue.

Cette forme de justification est insuffisante. En effet, il faut également montrer


que le programme est bien la mise en œuvre de la méthode reconnue. L‟objet de
la justification est simplement déplacé. Montrer l‟équivalence entre le
programme et la méthode est d‟autant plus difficile que la méthode fait appel à
des notions qui sont imparfaitement représentées par le programme. Une notion
est imparfaitement représentée si toutes les propriétés de la notion ne se
retrouvent pas dans la représentation utilisée par le programme.

Exemple : la notion nombre réel et la représentation d‟un nombre réel sur un


équipement de traitement ne respectent pas les mêmes propriétés. Une première
différence vient du fait que seuls quelques nombres réels sont représentés. Le
caractère discret de cette représentation est à l‟origine des erreurs d‟arrondi et
du non respect de certaines propriétés des opérations sur les réels.

c. Argumentation

L‟argumentation que doit fournir le programmeur est une explication rigoureuse


du raisonnement suivi lors de la conception du programme. Cette explication
64

doit montrer que le programme couvre correctement l‟ensemble des données


possibles.

5.3.3. Efficacité

L‟exactitude d‟un programme n‟est pas la seule caractéristique qui compte pour
le demandeur. Celui-ci s‟intéresse aussi à l‟efficacité du programme.
L‟efficacité d‟un programme est une mesure des ressources à mettre en œuvre
pour produire le résultat attendu du programme. Un programme sera d‟autant
plus efficace que la quantité de ressources à mettre en œuvre sera faible.

5.3.4. Les ressources

Elles sont de trois types différents :

- Le nombre d‟opérations ;
- L‟espace de stockage (espace – mémoire) ;
- Le nombre de transferts d‟information entre zones de stockage.

Connaître l‟efficacité d‟un programme permet de comparer un programme à


d‟autres programmes (conçus pour résoudre le même problème) et de faire un
choix parmi ceux-ci. Il est aussi important de pouvoir estimer a priori
l‟efficacité d‟un programme. De cette manière, on peut renoncer à essayer de
développer des programmes dont l‟estimation a priori de l‟efficacité a révélé
qu‟ils seront peu efficaces.

- Les opérations

Les opérations d‟une machine ne prennent pas toutes le même temps. Une
opération de multiplication ou de division peut prendre cinq à six fois plus de
temps qu‟une addition ou une soustraction. Par contre, dans le cas d‟une
multiplication ou d‟une division par un facteur qui est une puissance de la base
de représentation des nombres, ces opérations retrouvent un temps d‟exécution
comparable à l‟addition.

Donc, le temps total des opérations – machine de l‟exécution d‟un programme


est une fonction du nombre et du type des opérations mises en œuvre.

- La mémoire
Un compromis peut exister entre l‟augmentation de l‟espace mémoire requis par
un programme et la diminution du temps total de l‟exécution du programme.
65

Une augmentation de l‟espace mémoire peut provenir de la conservation des


résultats intermédiaires dont la disposition permet de réduire le nombre
d‟opérations à effectuer.

- Transferts entre zones de stockage

Les unités de traitement possèdent deux types de stockage :

a. Une zone dont l‟accès est rapide pour l‟unité d‟exécution des
instructions : la mémoire centrale ;
b. Une zone de capacité de stockage beaucoup plus importante mais dont
l‟accès est relativement lent : la mémoire de masse.
Par exemple, une unité de traitement peut avoir une mémoire centrale
d‟une capacité de 5 millions d‟informations élémentaires et une mémoire
auxiliaire d‟une capacité de 500 millions d‟informations élémentaires.

Par contre, accéder à une information en mémoire auxiliaire pour la


transférer en mémoire centrale peut exiger un temps équivalent à
l‟exécution de 20 mille instructions de la machine. Des considérations sur
la minimisation de ces transferts seront primordiales dans les applications
qui manipulent de grandes quantités d‟informations qui ne peuvent résider
en mémoire centrale.

3.2.2. Trois types d‟efficacité

Nous considérons 3 types d‟efficacité pour un programme donné :

- L‟efficacité inhérente à l‟algorithme ;


- L‟efficacité dans un contexte technologique ;
- L‟efficacité spécifique à un équipement.

L‟efficacité inhérente à l‟algorithme est l‟estimation d‟un ordre de grandeur du


temps (et l‟espace mémoire) requis pour une exécution, en fonction de la taille
des données.

L‟efficacité dans un contexte technologique tient compte de caractéristiques


propres à toute une famille d‟équipements. Ces caractéristiques peuvent
modifier considérablement la pertinence en pratique de l‟efficacité inhérente à
l‟algorithme.
66

Par exemple, de nombreux équipements actuels mettent en œuvre le concept de


mémoire virtuelle. Dans de nombreuses applications, le programmeur ne peut
pas ignorer cette situation.

L‟efficacité spécifique à un équipement donné intervient quand on désire


exploiter toutes les possibilités d‟amélioration de l‟efficacité d‟un programme.
Des modifications sont apportées au programme afin de tenir compte des
particularités d‟exécution d‟une machine donnée.

Remarque : l’efficacité la plus importante du point de vue de la conception des


programmes est celle inhérente à l’algorithme. Elle intervient en guidant le
programmeur dans ses choix de conception afin de réduire l’ordre de grandeur
du temps d’exécution. En effet, il est très difficile de compenser l’inefficacité
inhérente d’un algorithme par un accroissement de la capacité de traitement.

3.3. La robustesse

C‟est l‟aptitude à bien réagir lorsque l‟on s‟écarte des conditions normales
d‟utilisation.

3..4. L‟extensibilité

C‟est la facilité avec laquelle un programme pourra être adapté pour satisfaire à
une évolution des spécifications.

3.5. La portabilité

C‟est la facilité avec laquelle on peut exploiter un même logiciel dans


différentes implémentations.
67

Chapitre 7.

La pratique de la programmation

6.1. Définition

La programmation est une activité qui consiste à écrire un programme selon les
spécifications bien définies. La spécification détermine le type de données à
traiter et le résultat attendu.

Une condition nécessaire, mais non suffisante, pour faire la programmation est
la connaissance d‟un langage de programmation dans lequel le programme doit
être rédigé. Dans notre cas, c‟est le langage C++ et/ou le java. Il faut apprendre
les règles relatives à l‟utilisation du C pour résoudre les problèmes abordés dans
notre cours. Ces règles précisent :
- le vocabulaire utilisable ;
- la manière de combiner les « mots » du vocabulaire pour construire des
programmes ;
- la signification associée aux différentes constructions du langage.

En plus d‟une connaissance correcte du langage de programmation à utiliser, il


est indispensable de disposer d‟une méthode guidant le processus de
construction du programme demandé. En effet, en l‟absence de méthode, la
résolution d‟un problème de programmation s‟apparente à un puzzle dont les
pièces sont les constructions légales du langage de programmation. On ne
saurait véritablement espérer construire le programme demandé en secouant les
pièces du puzzle jusqu‟à l‟obtention d‟un programme correct. C‟est cependant
ce que tentent de faire beaucoup d‟amateurs qui assemblent leurs programmes
en tâtonnant.
68

D‟une manière générale, l‟objectif de la programmation est de permettre


l‟automatisation d‟un certain nombre de tâches, à l‟aide des automates
programmables.

Un automate est un dispositif capable d‟assurer, sans intervention humaine, un


enchaînement d‟opérations, correspondant à la réalisation d‟une tâche donnée.
Comme exemple d‟automates, on peut citer l‟ordinateur.

L‟automate est dit « programmable » lorsque l‟enchaînement d‟opérations


effectuées peut être modifié à volonté, pour permettre un changement de la tâche
à réaliser, ou un changement dans la manière de réaliser cette tâche. Dans ce cas,
la description de la tâche à accomplir se fait par le biais d‟un programme, c‟est-
à-dire une séquence d‟instructions et de données susceptibles d‟être traitées.

En résumé, programmer c‟est donc décomposer la tâche à automatiser sous la


forme d‟une séquence d‟instructions et de données adaptées à l‟automate utilisé.
Mais quelles sont ces instructions et données adaptées dans le cas où l‟automate
programmable est l‟ordinateur ?

6.2 Instructions et langage machine.

Nous savons qu‟un ordinateur, en schématisant à l‟extrême, est constitué :

- d‟un microprocesseur ou processeur, capable d‟exécuter (réaliser) un jeu


donné d‟opérations élémentaires.
- d‟une mémoire centrale, dans laquelle sont stockées les données en cours de
traitement, ainsi que le programme lui-même.
- de bus, ports d‟entrée – sorties et périphériques.

Le jeu d‟instructions (langage) que l‟ordinateur est capable de traiter est donc
tout naturellement déterminé par le processeur.

Les instructions comprises par un processeur sont appelées les instructions


machine de ce processeur.
Le langage de programmation qui utilise ces instructions est appelé le langage
machine qui est une suite de bits ou chiffres binaires.

6.3. Les générations de langage


69

Au cours du temps, différents types de langages de programmation firent leur


apparition et furent regroupés en générations. Bien qu‟il s‟agisse d‟une
classification différente de celle des machines, les générations de langages sont,
du moins pour les premières, liées sur le plan chronologique aux générations de
machines, et aux performances de leurs composants.

- La première génération

Au début c‟était le langage machine. Dans le cas des ordinateurs de premières


générations, la mémoire n‟est pas encore utilisée pour le stockage du
programme. Celui-ci est placé sur des cartes et/ou rubans perforés. On l‟imagine
facilement, la production des programmes était fastidieuse, et leu relecture et
modification presque impossible. Par ailleurs, les programmes écrits pour une
machine ne pouvaient pas être exécutés sur une autre machine.

- La deuxième génération

Elle est marquée par le langage d‟assemblage. Afin de rendre les programmes
plus faciles à écrire et à corriger, on a rapidement pensé à remplacer les
séquences de bits par des symboles, les instructions machines étant codées par
des mnémoniques et les données par des caractères alphanumériques associés.

Le nouveau langage ainsi produit s‟appelle un langage d‟assemblage ou langage


assembleur.

Exemple 0101 0110 0101

« LOAD » «6» «5»

- La troisième génération

Dans la lancée apparurent les langages évolués. Le but est de fournir au


programmeur la possibilité d‟utiliser des instructions et des structures de
données de plus haut niveau, afin de rendre plus facile l‟écriture des
programmes et d‟améliorer la productivité. Ces langages sont plus accessibles,
plus proches de notre manière de penser et de conceptualiser les problèmes. Les
langages évolués sont nombreux. Citons à titre d‟exemple : basic, cobol, pascal,
c, ada.

- La quatrième génération

Parallèlement aux langages évolués, des langages encore plus spécialisés, voir
des méta-langages, ont fait leur apparition. On peut citer les langages
70

d‟intelligence artificielle (prolog, lisp), les langages objets (c++), certains


langages de gestion (L4G)

6.4. Le programme source, programme objet

Si nous utilisons des instructions sophistiquées, comment alors les rendre


compréhensibles pour l‟ordinateur qui doit les exécuter ? En effet, nous l‟avons
vu, une solution est de disposer d‟un programme capable de transformer une
séquence d‟instructions de haut niveau (aussi appelée code source ou
programme source) en une séquence d‟instructions machine (aussi appelée code
objet ou binaire).

Les programmes qui convertissent un programme source quelconque écrit dans


un langage de programmation, en un programme objet sont appelés traducteurs.
Selon ses caractéristiques, un programme traducteur est assembleur, un
compilateur ou un interpréteur.
Il est important de bien comprendre la différence entre traduction effectuée par
un assembleur ou un compilateur et celle réalisée par un interpréteur.
Les compilateurs et assembleurs traduisent tous deux les programmes dans leur
ensemble : tout le programme doit être fourni au compilateur pour la traduction.
Une fois cette traduction effectuée, son résultat (code objet) peut être soumis au
processeur pour traitement.

Un langage de programmation pour lequel un compilateur est disponible, est


appelé un langage compilé.

Les interpréteurs traduisent les programmes instruction par instruction, et


soumettent immédiatement chaque instruction traduite au processeur pour
exécution. Un langage de programmation pour lequel un interpréteur est
disponible est appelé un langage interprété.

Naturellement, chacune de ces techniques possède des avantages et des


inconvénients, qui la rend plus ou moins adaptée suivant le contexte :

- De manière générale, on peut dire que les langages interprétés sont bien
adaptés pour le développement rapide :

a) le cycle de test est plus court qu‟avec les langages compilés,


b) il est souvent possible de modifier ou rectifier le programme en
cours d‟exécution (test),
c) et ces langages offrent généralement une plus grande liberté
d‟écriture.
71

A l‟inverse, les langages compilés sont à utiliser de préférence pour les


réalisations opérationnelles, ou les programmes de grande envergure :

a) les programmes obtenus sont plus efficaces : d‟une part le compilateur


peut effectuer des optimisations plus facilement que l‟interpréteur,
puisqu‟il possède une visibilité globale sur le programme, et d‟autre part,
l‟effort de traduction n‟est fait qu‟une seule fois.
b) Par ailleurs, la visibilité globale offerte au compilateur permet une
meilleure détection des erreurs, lors de la compilation.

6.5. Variété des applications

L‟utilisation de l‟informatique dans les 3 types d‟application, calcul scientifique,


gestion d‟informations et commande de processus, a conduit à la production
d‟une grande diversité de programmes :

- Petits utilitaires, « drivers » (librairie de fonctions permettant de piloter un


matériel). Cela demande un effort d‟une équipe d‟une à 2 personnes. (1.000 à
10.000 lignes de code source).

- Petits logiciels (agenda électronique, gestionnaire des fichiers) Cela demande


un effort de 3 à 12 personnes. (1.000 à 50.000 lignes).

- Progiciels, logiciels complets (traitement de textes, commande de central


téléphonique). Une équipe de 5 à 20 personnes.

- Gros systèmes (aéronautique, système d‟exploitation, systèmes experts).


Effort : de milliers de personnes.

La programmation structurée (procédurale) et la programmation orientée


objet

La programmation analytique ou top-down programming consiste à analyser


l‟image que l‟on veut obtenir, à déterminer les parties de cette image, repérer les
sous-ensembles d‟objets, en bref à découper l‟image jusqu‟à la domination
parfaite de sa structuration. Cette méthode revient à décomposer la fonction
globale en sous-fonctions hiérarchisées par le processus d‟analyse et ce, en
descendant niveau par niveau. Elle se fonde sur une mise en évidence de la
72

structure du problème. A l‟origine de ces idées Dijkstra a lancé le concept de


programmation structurée.

La programmation structurée a manifestement fait progresser la qualité de la


production des logiciels. Mais avec le recul, il faut bien reconnaître que ses
propres fondements lui imposaient des limitations. En effet, la programmation
structurée reposait sur ce que l‟on nomme souvent l‟équation de Wirth, à savoir :

Algorithmes + structures de données = programmes

Bien sûr, elle a permis de structurer et partant d‟en améliorer l‟exactitude et la


robustesse. On avait espéré que la programmation structurée permettrait aussi
d‟en améliorer l‟extensibilité et la réutilisabilité. On s‟est aperçu que
l‟adaptation ou la réutilisabilité d‟un logiciel conduisait souvent à « casser » le
module intéressant, et ceci parce qu‟il était nécessaire de remettre en cause une
structure de données. Précisément, ce type de difficultés émane directement de
l‟équation de Wirth, qui découple totalement les données des procédures
agissant sur ces données.

En substance, en programmation structurée ou procédurale, le programme


(fonction, procédure) agit sur des données. Les fonctions et les procédures
travaillent à distance sur les données. L‟accent étant mis sur l‟action, on cherche
à répondre à la question : « Que veut-on faire ? ». Du fait de la dissociation entre
les données et les fonctions / procédures, il se pose un problème lorsqu‟on
change les structures de données.

Les données

Fonction 1

Fonction 2

Fonction 3
73

En plus de cela, les procédures s‟appellent entre elles et peuvent modifier les
mêmes données. Mais il va se poser un problème lorsqu‟on veut modifier une
procédure : comment avait-elle été appelée ?

Le courant de la programmation orientée objet (P.O.O) est né dans les années


1960, dans le milieu de la recherche en programmation. Il et étranger à
l‟émergence et à l‟évolution des méthodes d‟analyse. Il a comme origine la
construction de nouveaux langages répondant à des objectifs précis. (C.Morley
et all, 2001, p.18).
Le premier, Simula, a été développé en Norvège. L‟objectif initial était de
simuler le comportement d‟un système, ayant des parties pouvant fonctionner
parallèlement, en l‟occurrence de systèmes utilisés en recherche nucléaire. La
structure des langages existants, où un programme est composé d‟une suite
d‟instructions devant être exécutées successivement, ne pouvait convenir.

En poussant jusqu‟au bout la logique d‟une programmation modulaire, les


chercheurs ont élaboré un langage permettant de décrire une organisation entre
modules ayant des caractéristiques stables et des comportements possibles.

La séparation classique entre données et programmes fut ainsi remise en


question. La programmation orientée objet est donc fondée sur le concept objet,
à savoir une association des données et des procédures (qu‟on appelle méthodes)
agissant sur ces données. Par analogie avec l‟équation de Wirth, on pourrait dire
que l‟équation de la P.O.O est : méthodes + données = objet.

En P.O.O, un programme est une société d‟entités. Lors de son exécution, les
entités collaborent pour résoudre le problème final en s‟envoyant des messages.
Un objet est une collection de variables sans organisation implicite. Les
variables d‟un objet sont simplement des membres de l‟objet. On désigne les
membres d‟un objet par leur nom.

On réunit, donc, dans le même objet des informations et des actions de


transformation de ces informations : ainsi naquit le concept d‟encapsulation.

Ensuite fut introduite la notion de classe, définie comme une entité chapeau,
permettant de décrire les comportements communs à un ensemble d‟objets.

Enfin apparut le principe de l‟héritage : une classe peut être constituée de sous-
classes, chacune de ces dernières « héritant » des caractéristiques et des
comportements de la classe à laquelle elle est rattachée, et pouvant en plus
posséder des informations et des actions qui lui sont propres.
74

Le second langage initiateur de l‟objet, Smalltalk, résulte de travaux commencés


au début des années 1970, dans un laboratoire de recherche de Xerox. L‟objectif
était de développer le logiciel d‟un outil bureautique personnel, avec ne interface
à base d‟icônes et de multifenêtrage, pionnier des écrans qui nous sont familiers
aujourd‟hui.

En plus des concepts d‟objet, de classe et d‟héritage empruntés à Simula, les


chercheurs introduisent la notion de message, information envoyée à un objet et
provoquant en réponse e déclenchement d‟actions associées à cet objet. Un objet
peut être vu comme une boîte noire, sur laquelle on peut agir par envoi des
messages. Inversement, il réagit à la réception des messages. Le grand intérêt
d‟un objet est la possibilité de le réutiliser dans des contextes différents,
puisqu‟il est décrit indépendamment de son environnement. Cette approche est
devenue familière dans la constitution d‟interfaces, où les objets graphiques
(boutons, boîtes de choix, boîtes de dialogue) constituent la base d‟une
bibliothèque de composants.

En résumé, ces deux langages ont apporté quatre concepts fondamentaux du


courant objet : classe ; encapsulation ; héritage ; message.

Toutes ces caractéristiques sont bien développées dans les langages orienté objet
tels que C++, Java, Vbasic, Visual Dbase etc.

6.7 LA DESCRIPTION DE L‟ALGORITHME

L‟algorithme de façon simpliste est une manière de tout prévoir. Pour le décrire,
on peut recourir à plusieurs formalismes. Dans ce cours nous allons en
développer deux et cela de façon parallèle. Il s‟agit de :

a) langage de description d‟algorithme (pseudo code) ;


b) l‟ordinogramme.

Le langage de description d‟algorithme (LDA) est un ensemble de mots (verbes


et expressions) et l‟ordinogramme est un schéma pour représenter l‟algorithme.
75

6.7.1. Les symboles utilisés en ordinogramme

Traitement (calcul, affectation) entrée - sortie

Test (pour prendre une décision) Début - fin

Disque dur (mémoire de masse)

renvoi

Entrée - sortie

6.7.2. Les structures de base en programmation

a) La séquentialité

L‟ordinateur est une machine séquentielle. Ce qui signifie que les instructions
sont exécutées :
- une à la fois
- dans l‟ordre où elles apparaissent dans le texte du programme.
76

a.1) Les instructions de lecture (entrée)

Elles sont notées lire variables et signifient la saisie des données, c‟est-à-dire la
communication des données à l‟ordinateur.
Exemple : Lire quantité
Lire résultat

a.2) Les instructions d‟écriture (sortie).

Elles sont notées écrire expression, écrire variable. Elles indiquent l‟affichage
ou l‟impression d‟un message et / ou du contenu d‟une variable ou du résultat
d‟un calcul.

Exemple : Ecrire « introduire la quantité achetée »


Ecrire « le montant dû est de : «, montant
Ecrire résultat
Ecrire x, y, (x +y) / 2

a.3) Les instructions d‟assignation (affectation ou transfert)

Représentée par variable  expression, cette instruction sert à assigner une


valeur ou une expression à une valeur.

Exemple : x  4 cette instruction signifie pour l‟ordinateur, ranger la


valeur 4 à la place x. Le nom de la variable correspond à la place qui lui est
réservée (adresse).

A0
I  I+1
Montant  quantité * prix_unitaire

Dans une instruction d‟assignation, le type d‟expression (membre de droite) doit


correspondre au type de la variable de destination (peut recevoir une valeur
entière.

Action Effet

A 5 la valeur 5 est placée dans la zone A


B 8 la valeur 8 est placée dans la zone B
A B le contenu de B (8) est placé dans A qui
voit en même temps son premier contenu disparaître. Donc on aura dans A la
valeur 8 et dans B la valeur 8.
77

b) Les choix ou test

La sélection ou le choix est une structure qui permet de tester une condition et
d‟exécuter un traitement en cas de satisfaction de la condition.
Nous distinguons deux sortes de sélection :

b.1. La sélection simple

Si condition alors traitement(s)


Sinon traitement(s)
Fsi

Exemple :

si point >= 50 alors écrire « il passe de classe »


Sinon écrire « il reprend l‟année »
Fsi

b.2 La sélection multiple

Selon que condition traitement1


Ou que condition traitement2
Ou que condition traitement3
Ou que condition traitement4
…………
Autrement traitement n
Fselon que

Selon que point >= 90 écrire « la plus grande distinction »


Ou que point >= 80 et <90 écrire « grande distinction »
Ou que point >=70 et < 80 écrire « distinction »
Ou que point >=60 et <70 écrire « satisfaction »
Autrement écrire « ajourné ».
Fselon que

C. La boucle
78

Cette structure permet d‟exécuter plusieurs fois un traitement. Elle nécessite la


fixation d‟une condition d‟arrêt de la boucle. Il y a 3 sortes de boucle :

C.1. tant que … condition faire


Traitement(s)
Ftant que

Exemple :

Tant que not (compteur =10) faire


Compteur  compteur + 1
Ftant que
Cette boucle pré-testée contrôle d‟abord la condition avant l‟exécution du
traitement.

C.2 répéter
traitement(s)
jusqu‟à condition

Cette boucle post-testée exécute d‟abord le traitement et contrôle la condition


après. Ainsi, cette boucle exécute au moins une fois le traitement.

Exemple : répéter
Compteur  compteur + 1
Jusqu‟à compteur = 10.

C.3 pour variable de … à … faire

fpour

Exemple :

pour compteur de 1 à 10 faire


KK+1
fpour

Les boucles tant que et répéter sont utilisées lorsqu‟on ne connaît pas d‟avance
le nombre de fois que la boucle va tourner. Tandis que la boucle pour est
79

employée quand on connait d‟avance le nombre de tours. Elle est souvent


utilisée dans le traitement des tables (vecteur et matrice).

6.7.3. La déclaration des variables et constantes

Une variable est une zone mémoire portant un nom appelé identifiant et dont la
valeur peut changer en cours d‟exécution du programme. Chaque variable doit
être déclarée de façon individuelle avant de figurer dans un programme. Une
variable est associée à un type de donnée.

Exemple : entier A …… A est une variable de type entier.


Réel B …… .B est une variable de type réel.
Entier C …….C est une variable de type entier.
Car D …… D est une variable de type caractère.
Bool E ……E est une variable de type logique ou booléen.

A  40 C  15

Un type n‟a pas d‟existence physique. C‟est une définition d‟un ensemble des
propriétés. Donc, selon l‟information que l‟on souhaite manipuler, il est
essentiel de choisir son type. Cela induit ce qui suit :

a) le code de représentation binaire approprié pour conserver cette


information en mémoire d‟ordinateur ;

A titre d‟exemple, la valeur entière 40 qui se trouve dans la variable A, dans une
représentation binaire, aura 101000 et prendra en mémoire 6 bits significatifs.
La valeur entière qui se trouve dans C se représente en binaire par 1111 et
occupera 4 bits significatifs. L‟opération A  A – C donnera
40 – 15 = 25, c‟est-à-dire 101000 – 1111 = 11001.
b) l‟interprétation de ce code pour établir la correspondance entre langage et
la représentation informatique ;
c) les opérations autorisées sur l‟information : par exemple, les types entier
et réel sont utilisés pour effectuer des calculs. Dans ce registre il faut
signaler qu‟une variable de type entier ne peut que recevoir des nombres
entiers. Tandis qu‟une variable de type réel peut recevoir les nombres
entiers et les nombres décimaux.

Exemple : A  40 (bon) A  5,5 (mauvais)


B  40 (bon) B  5,5 (bon)

Une constante est une zone mémoire portant un nom appelé identifiant et dont le
contenu ne varie pas pendant le déroulement du programme. Une constante doit
80

être déclarée avant d‟être utilisée dans le programme. A cette occasion une
valeur lui est attribuée de façon définitive.

Une constante sert au paramétrage du programme. Paramétrer un programme,


c‟est éviter le plus possible les valeurs numériques dans le corps du programme
et les regrouper dans la zone de définition notamment aux constantes. Ainsi, si
on veut modifier le paramètre, on change seulement la valeur au niveau de
constante.

Remarque : Pour nommer les variables et les constantes, il est souhaitable


d‟employer des noms porteurs de signification. Par exemple la variable « qté
« fait penser à la quantité et la variable « pu » nous fait penser au prix unitaire.

6.7.4. Etude des cas

Cas 1.

On demande de lire deux nombres entiers A et B, et d‟afficher en sortie leur


somme, produit, différence et quotient

Début
Entier a, b, som, reste, quot, prod
Lire a, b
Som  a + b
Reste  a – b
Quot  a / b
Prod  a * b

Ecrire som, reste, quot, prod


Fin.

Cas 2.

On demande de lire deux nombres entiers A et B positifs et d‟afficher en sortie


leur produit et leur quotient sans utiliser les opérateurs * et /.

Début
Entier A, B, prod, quot, cpt
Lire A, B
(* calcul de produit en utilisant la boucle
Tant que not (cpt = B) faire
81

Prod  prod + A
Cpt  cpt + 1
Ftantque
Écrire prod
(*calcul du quotient en utilisant la boucle

Cpt  0
Tant que not (A<B) faire
AA–B
Cpt  Cpt + 1
Ftantque
Ecrire Cpt.
Fin

Cas 3.

On demande de lire deux nombres entiers positifs A et B. En sortie, il faut


trouver et afficher le PGCD de ces deux nombres.

(Première solution)

Début
Entier A, B, résultat
Lire A, B
Tant que not (A = B) faire
Si A > B alors A  A – B
Sinon B  B – A
Fsi
Ftant que
Ecrire « le pgcd de ces deux nombres = « A
Fin
82

(Deuxième solution)

Début
Entier A, B, M, N, R, PGCD
Lire A, B
MA
NB
Tant que not (N = 0) faire
R  M mod N
MN
N R
Ftant que
Pgcd  M
Ecrire PGCD
Fin

Exercice sur les compteurs et les accumulateurs

Un compteur est une variable qui par incrémentation permet de compter le


nombre de fois, des objets, des individus etc. Par exemple, si on demande de
compter le nombre des étudiants dans une classe. Dans le pseudo code, on utilise
la formule suivante :
compteur  compteur + 1
AA+1

Cas 4

On demande de lire une série de 10 nombres entiers positifs puis de calculer et


d‟afficher leur moyenne arithmétique.

Début
entier nbre, cpt, moy
tant que not (cpt = 10) faire
lire nbre
moy  moy + nbre
cpt  cpt + 1
ftant que
moy  moy / Cpt
écrire moy
83

Fin

Cas 5

On demande de lire une série de 10 nombres entiers positifs puis déterminer


combien des nombres pairs et des nombres impairs ont été saisis.

Début
entier nbre, cpt, pair, impair
tant que not (cpt = 10) faire
lire nbre
nbre  nbre mod 2
si nbre = 0 alors pair  pair + 1
sinon impair  impair + 1
fsi
cpt  cpt + 1
ftant que
écrire « le nombre des nombres pairs = « pair
écrire « le nombre des nombres impairs = « impair
Fin

Exercice sur la recherche de plus grand de deux ou trois nombres

Cas 6

On demande de lire deux nombres entiers positifs A et B puis déterminer le plus


grand de ces nombres.

Début
entier a, b
lire a, b
si a > b alors écrire « le plus grand est : « a
sinon écrire « le grand est : « b
fsi
Fin

Cas 7

On demande de lire trois nombres entiers positifs A, B et C, puis déterminer le


plus grand de ces nombres.

Début
84

entier a, b, c, max
lire a, b, c
si a > b alors max  a
sinon max  b
fsi
si c > max alors max  c
fsi
écrire max
Fin

(Deuxième solution)
Début
entier a, b, c, max
lire a, b, c
selon que (a > b) et (a > c) max  a
écrire max
ou que (b > a) et (b > c) max  b
écrire max
autrement Max  C
Ecrire Max
Fselon que
Fin
Cas 8 : exercice sur l‟interversion des nombres

On demande de lire trois nombres entiers positifs a, b, c, puis les afficher en


ordre croissant, c‟est-à-dire le plus petit, le moyen et le plus grand.

Début
entier a, b, c, sauve
lire a, b, c
si a < b alors sauve  a
ab
b sauve
fsi
si a < c alors sauve  a
a c
c  sauve
fsi
si b < c alors sauve  b
b c
c sauve
fsi
écrire a, b, c
85

Fin

Cas 9 : Calcul de l‟amortissement

Voyons un peu comment calculer l‟amortissement annuel d‟un bien qui se


déprécie avec le temps (par exemple, un immeuble, des machines, etc.). Il existe
trois méthodes pour calculer l‟amortissement : linéaire, dégressif à taux constant
et dégressif à taux variable. Dans le cadre de ce cours, nous voulons écrire un
algorithme nous permettant de sélectionner n‟importe laquelle de ces méthodes
pour chaque jeu de calculs.

Les calculs commencent par la lecture de la valeur originale (non dépréciée) de


l‟élément, sa durée de vie, c‟est-à-dire le nombre d‟années couvertes par
l‟amortissement, ainsi qu‟un entier indiquant la méthode retenue. On calcule
ensuite l‟amortissement annuel et le solde (non amorti) pour chaque année.

La méthode de l‟amortissement linéaire est la plus facile (nombre total


d‟années) : le quotient correspond au montant de l‟amortissement annuel. Par
exemple, si on amortit en 10 ans un bien qui coûte 8.000 $, l‟amortissement
annuel équivaut à 8.000 $ / 10 = 800 $, de sorte que le bien se déprécie de 800 $
chaque année. Dans ce cas, on constate que l‟amortissement annuel demeure le
même d‟année en année.

Avec la méthode de l‟amortissement décroissant à taux constant, la valeur du


bien décroît d‟un pourcentage constant chaque année. (Donc le montant effectif
de l‟amortissement varie d‟une année à l‟autre). Pour obtenir le facteur
d‟amortissement, nous divisons 2 par la durée de vie du bien. On multiplie ce
facteur par la valeur du bien au début de chaque année (et non pas la valeur
d‟origine du bien). Ce qui donne l‟amortissement annuel.

Supposons, par exemple, que nous voulons calculer l‟amortissement d‟un bien
qui a coûté 8000 $ et dont la durée de vie s‟élève à 10 ans, avec la méthode de
l‟amortissement décroissant à taux constant. Le facteur d‟amortissement est
2/10 = 0,20. L‟amortissement pour la première année se calcule comme suit :
0,20 x 8000 $ = 1600 $. Celui de la deuxième année est de : 0,20 x (8000 $ -
1600 $) = 0,20 x 6400 $ = 1280 $ ; pour la troisième année, nous avons : 0,20 x
5120 $ = 1024 $ et ainsi de suite.

Avec la méthode d‟amortissement dégressif à taux variable, la valeur du bien


décroît d‟un pourcentage qui est différent à chaque année. Le facteur
d‟amortissement est une fraction dont le dénominateur correspond à la somme
86

des chiffres de 1 à n, où n représente la durée de vie de l‟élément. Pour une


durée de vie de 10 ans, le dénominateur devient :
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55
Pour la première année, le numérateur est n, pour la deuxième année, ce sera
(n - 1), pour la troisième année (n - 2) et ainsi de suite. On obtient
l‟amortissement annuel en multipliant le facteur d‟amortissement par la valeur
originale du bien.

A titre d‟exemple, reprenons le bien d‟une valeur initiale de 8000 $ avec une
durée de 10 ans. L‟amortissement pour la première année sera de
(10 / 55) x 8000 $ = 1454,55 $ ; pour la seconde année : (9 / 55) x 8000 $ =
1309,09 $ et ainsi de suite.

L‟algorithme qui permet de résoudre ce problème est le suivant :

Val : c‟est la valeur du bien.


Org : c‟est la valeur originale du bien, c‟est-à-dire la valeur originale de Val.
Amort : c‟est l‟amortissement annuel
N : c‟est le nombre d‟années pendant lesquelles on fait l‟amortissement
Cpt : c‟est un compteur
Choix : c‟est un entier qui indique la méthode utilisée
Drapeau : c‟est variable booléenne

Début
Entier val, org, amort, n, cpt, choix
Bool drapeau

(* initialisation de drapeau
Drapeau  vrai

Répéter
Lire choix
Si choix <> 4 alors lire val
Lire n
Fsi
Selon que choix = 1 (*méthode linéaire)
Amort = val / n
pour cpt de 1 à n faire
Val = val – amort
Ecrire cpt, amort, val
Fpour
87

Ou que choix = 2 (*méthode amortissement décroissant à taux constant)

Pour cpt de 1 à n faire


Amort  2 * val / n
Val  val- amort
Ecrire cpt, amort, val
Fpour

Ou que choix = 3 (*méthode d‟amortissement dégressif à taux variable)


Org  val
Pour cpt de 1 à n faire
Amort  (n- cpt+1) * org / (n * (n+1) / 2)
Val  val – amort
Ecrire cpt, amort, val
Fpour
Autrement
Drapeau  faux
Ecrire « fin du programme et au revoir «
Jusqu‟à drapeau = faux
Fin

Cas 10 : exercices d‟application à faire seul à domicile

- Lire le côté d‟un carré puis calculer et afficher la surface


- Lire la longueur et la largeur d‟un rectangle puis calculer et afficher le
périmètre et la surface de ce rectangle.
-
lire les coefficients de l‟équation du second degré ax2 + bx + c puis calculer
et afficher les racines de cette équation.

- Déterminer si un triangle est rectangle, connaissant la longueur des 3 côtés

- Dans une promotion de 100 étudiants, on demande de lire une série des 5
cotes obtenues par chaque étudiant à la session d‟examen. Le maximum de
chaque cours est de 20 points. Calculer et afficher les nombres d‟étudiants
qui ont obtenu :
a) la plus grande distinction
b) la grande distinction
c) la distinction
d) la satisfaction
e) la mention ajourné
f) la mention refusé.
88

- Ecrire un algorithme qui permet de faire la table de multiplication par 10.

6.7.5. Notion de modularité

On peut écrire aisément des programmes sous une forme modulaire, permettant
ainsi la décomposition d‟un problème global en une séquence de sous-
programmes individuels. La modularisation offre des avantages importants :
Tout d‟abord, elle épargne la programmation redondante (répétée) du même jeu
d‟instructions, pour les tâches à exécuter plus d‟une fois. De plus, le recours au
module de programme réduit de façon appréciable la longueur d‟un programme.
Il faut aussi retenir la clarté logique résultant de la décomposition d‟un
programme en modules individuels et concis. De tels programmes sont faciles à
écrire et à déboguer. On distingue généralement deux types de module, à savoir
la procédure et la fonction.

6.7.6. Les procédures

Une procédure ou sous-routine est une structure de programme autonome


incluse dans un programme global. On peut référencer une procédure
simplement en écrivant son nom. Quand une procédure est appelée, le contrôle
se trouve automatiquement transféré au début de la procédure. Les instructions
d‟action à l‟intérieur de la procédure s‟exécutent ensuite, prenant en
considération toute déclaration spéciale propre à la procédure. Quand toutes les
instructions d‟action ont été exécutées, le contrôle retourne automatiquement à
l‟instruction qui immédiatement l‟instruction d‟appel à la procédure.

Exemple :

Début
Entier a, b, c
Procédure maximum
Début
Entier max
Si a > b alors max  a
89

Sinon max  b
Fsi
Si c > max alors max  c
Fsi
Ecrire max
Fin
(* appel de la procédure)
Lire a, b, c
Tant que not (a = 0) faire
Maximum
Lire a, b, c
Ftant que

Cet algorithme contient une procédure appelée maximum. Les variables a, b et c


sont déclarées à l‟extérieur de cette procédure.

Qu‟est ce qu‟un fichier ?

Jusqu‟ici on lisait les données à partir du clavier. Cela nous obligeait à taper
plusieurs fois les données, une fois obtenu le résultat des premières données.
Pour éviter cela, nous allons recourir au fichier.

Un fichier est une collection homogène des données. En ce sens, chaque fichier
porte sur un objet bien déterminé : fichier client, fichier produit, fichier vente,
fichier commande, fichier facture, fichier agents, fichier étudiants etc. Donc les
informations qui se trouvent dans un fichier donné se rapportent à son objet. On
le définit aussi comme un ensemble d‟enregistrements. La notion de fichier est
intimement liée au support sur lequel il est enregistré. Ainsi, on parle de fichier
physique et de fichier logique. Le premier se réfère au support physique et le
second se rapporte à la copie qui est transférée dans la mémoire centrale pour
être traité par le programme.

Les données dans un fichier sont organisées soit séquentiellement, soit en accès
direct, soit encore de façon indexée séquentielle. Dans l‟organisation
séquentielle, les données sont traitées les unes après les autres, c‟est-à-dire selon
l‟ordre de leur enregistrement sur le support. Ce type d‟organisation est simple à
faire, mais prend beaucoup de temps lorsqu‟il est question de retrouver une
information dont on a besoin. Pour corriger cette faiblesse, on recourt à
l‟organisation à accès direct. Ici les données sont retrouvées grâce aux adresses.
90

Un fichier est un ensemble d‟enregistrements, avons-nous dit et un


enregistrement est un ensemble de zones ou champs. Dans un fichier, une zone
est utilisé comme identifiant ou clé. On la souligne pour la distinguer des autres
zones.

Exemples :

1) Fichier étudiant : {num, nom, sexe, nation, promotion, adresse}

La zone num est l‟identifiant. Notons que chaque zone a un type de données à
recevoir. Dans cet exemple, toutes les zones sont de type chaîne.

2) Fichier commande : {num_cde, date, produit, qte}

La zone num_cde est l‟identifiant. La zone qté est de type entier.


L‟ensemble des zones forme la structure du fichier.

Comment traite-ton un fichier ?

Un fichier doit être ouvert avant son traitement et fermé après celui-ci. Pour
accéder aux données du fichier, on doit le lire. En informatique, on peut
imprimer les données d‟un fichier, les visualiser, faire une recherche, faire une
mise à jour des données. Dans ce cours, il est question d‟écrire des algorithmes
pour des traitements simples du fichier.

Exercices sur le fichier.

Cas 12.

Soit en entrée, un fichier séquentiel appelé « nombre » dont la structure est la


suivante : {num, Nbre1, Nbre2}. Ce fichier contient des entiers positifs Nbre1 et
Nbre2. En sortie, on demande trouver le PPCM de Nbre1 et Nbre2 pour chaque
enregistrement.

NB : le PPCM de 2 nombres est le quotient du produit de ces 2 nombres par leur


PGCD. (PPCM = Nbre1 * Nbre2 / PGCD de Nbre1 et Nbre2)

Début
Fichier nombre des enregistrements
91

Entier A, B, PGCD, PPCM, Produit


Ouvrir nombre
Lire enregistrement dans nombre
Tant que not eof de nombre faire
A  Nbre1
B  Nbre2
Produit  A * B
Tant que not (A = B) faire
Si A > B alors A  A – B
Sinon B  B – A
Fsi
Ftant que
PPCM  Produit / A
Ecrire « le PPCM de « Nbre1 « et « Nbre2 « = » PPCM
Lire enregistrement dans nombre
Ftant que
Fermer nombre
Fin

Cas 13.

Soit un fichier séquentiel appelé « vente » dont la structure est la suivante :


{num, produit, qtév, pu}. En sortie, on demande de calculer le montant total de
toutes les ventes réalisées.

Début
Fichier vente des enregistrements
Entier montant_partiel, montant_total
Ouvrir vente
Lire enregistrement dans vente
Tant que not eof de vente faire
montant_partiel  qtev * pu
montant_total  montant_total + montant_partiel
Lire enregistrement dans vente
Ftant que
Ecrire montant_total
Fermer vente
Fin

Cas 14.
92

Soit un fichier séquentiel appelé « client » et structuré de la manière suivante :


{num-cl, nom, produit, qte, pu}. En sortie, on demande d‟imprimer le listing
reprenant pour chaque client les données suivantes :
{N° d‟ordre, nom, mont, rabais, net à payer}

Règle de gestion : le rabais de 2% est accordé au montant supérieur à 50.000


FC. Et le net à payer est la différence entre le montant et le rabais

Début
Fichier vente des enregistrements
Entier cpt
Réel rabais, mont, net
Chaine noms
Ouvrir vente
Lire enregistrement dans vente
Tant que not eof de vente faire
Mont  qte * pu
Si mont > 50.000 alors rabais  mont * 0.02
Sinon rabais  0
fsi
net  mont – rabais
cpt  cpt + 1
noms  nom
Ecrire cpt, noms, mont, rabais, net
Lire enregistrement dans vente
Ftant que

Fermer vente
Fin

A quoi sert la table en programmation ?

Définition : la table est un regroupement des données de même type disposées


en ligne et en colonne auxquelles il est facile de se référer. En programmation, la
table est une structure interne, c‟est-à-dire qu‟elle est déclarée comme un
ensemble des variables mémoires contiguës.

Etant une structure interne, la table offre un traitement plus rapide que le fichier.
En ce sens, les données étant toutes chargées dans la table en mémoire centrale
93

sont traitées rapidement, ce contrairement au fichier où l‟on doit par le biais de


l‟instruction de lecture, faire un va et vient entre la mémoire externe et la
mémoire interne.

a) Les dimensions de table

La table à une dimension s‟appelle aussi vecteur. Pour référencer chaque


élément du vecteur on se sert d‟un indice qui est en fait une variable. La table ci-
dessus s‟appelle « A » et a une taille de 6 éléments qui sont des entiers positifs.

A [1..5] des entiers


La variable i est l‟indice de la table

A [1] contient la valeur 3


A [3] contient la valeur 198

Au lieu décrire ainsi, on peut recourir à l‟indice i. Ainsi A [i]

3 9 198 67 5 88

La table à deux dimensions s‟appelle tableau ou matrice. Pour référencer chaque


élément de matrice on se sert de deux indices. Le premier se rapporte à la ligne
et le second à la colonne. Cette matrice ci-dessous s‟appelle « tab » et elle a 4
lignes et 7 colonnes. Elle a deux indices, i pour la ligne et j pour colonne.

Tab [i, j]

23 78 90 76 112 65 44
45 27 345 23 345 33 32
56 11 100 41 12 22 51
98 90 287 9 14 55 72

Tab [i, j] fait référence à la ligne 4 et à la colonne 5, si i = 4 et j = 5. Il s‟agit de


l‟élément 14.

Exercices sur la table


94

Cas 15

Soit dans la mémoire centrale un vecteur A de 10 éléments. On demande de le


charger des entiers positifs tout d‟abord et ensuite de calculer et afficher la
somme de tous éléments du vecteur.

Début
Vecteur A [1..10] des entiers
Entier i, som, nbre
i0
som  0
nbre  0
(* chargement du vecteur
Pour i de 1 à 10 faire
Lire nbre
A [i]  nbre
Fpour
Pour i de 1 à 10 faire
Som  som + A [i]
Fpour
Ecrire som
Fin

Cas 16
Soit dans la mémoire centrale une matrice « A « de 10 lignes et 10 colonnes,
chargée de nombres entiers positifs. On demande en sortie de calculer et
d‟afficher la somme de chaque ligne.

Début
Matrice A [1..10, 1..10] des entiers
Entier i, j, som
Pour i de 1 à 10 faire
Pour j de 1 à 10 faire
Som  som + A [i, j]
Fpour
Ecrire som
Som  0
Fpour
Fin

cas 17 :
95

Soit en mémoire centrale une matrice qui s‟appelle « tab » de 10 lignes et 10


colonnes, chargée des entiers positifs. On y trace une diagonale qui va de (1,1) à
(10,10). On demande alors de calculer la somme des éléments qui se trouvent
dans la matrice triangulaire supérieure.

Tab [1..10, 1..10]

23 55 88 99 10 54 98 96 12
11
17 23 56 90 76 786 45 987 123

45 12 56 76 5 7 9 122

34 123 111 453 765 123 876

89 354 100 876 900 453

15 54 71 21 34

66 333 765 999

44 77 111

33 44

22

Début
Matrice tab [1.. 10, 1..10] des entiers
Entier i, j, som
Pour i de 1 à 10 faire
Pour j de i de 10 faire
Som  som + tab [I, j]
Fpour
Fpour
Ecrire som
96

Fin

Cas 18 :

Même énoncé qu‟au cas 17. Cependant, on demande de calculer les


éléments qui se trouvent seulement sur la diagonale.

Début
Matrice tab [1..10, 1..10] des entiers
Entier i, som

Pour i de 1 à 10 faire
Som  som + tab [i, i]
Fpour
Ecrire som
Fin

Qu‟est ce qu‟un langage de programmation ?

6.8 ETUDE DE LANGAGE C ++

6.8.1. Présentation

Développé dans les laboratoires d‟AT et T Bell au début des années 1980 par
Bjarne Stroustrup, le langage C++ est un langage :

- à typage fort,
- compilé
- et orienté objet (pOO c‟est-à-dire programmation orientée objet)
97

Schématiquement : C++ = C + typage fort + objets (classes)

Pour pouvoir être compilé en une séquence binaire exécutable, le code source
doit fournir au compilateur un point d‟entrée. Par convention, ce point d‟entrée
est en C++ une fonction intitulée main

Compilateur C++

Fichier source ------ traduction ------------ fichier exécutable

Hello.cc commande: C++ hello.cc – O hello hello

#include <iostream>
Void main ( ) 0101010000011111
{ 0111111000001010
Cout << “ hello world ! “ 0010111011111100

<< endl;
}

6.8.2. La structure générale d‟un programme C++

Le programme C++ le plus simple et le plus inutile (puisqu‟il ne fait rien) est :

Void main ( )
{
}

Ce programme va progressivement être enrichi et en particulier, on peut y


ajouter des commentaires, qui en C++ peuvent revêtir deux formes différentes :

- Commentaires orientés ligne : de la forme « // … «


98

// Exemple de commentaires orienté ligne,


// C‟est-à-dire commentaire délimité à gauche par //
// Seulement (implicitement délimité à droite par
// Le caractère de fin de ligne

- Commentaires orientés bloc : de la forme « /* …. */ »


/* Exemple de commentaire orienté bloc
C‟est-à-dire commentaire délimité à gauche et à droite (le commentaire peut
s‟étendre sur plusieurs lignes) */

Une version commentée du programme précédent pourrait donc être :

// Exemple de petit programme C++ ne faisant rien


// (Le formatage n‟est bien sûr là
// que pour faciliter la lecture)

Void main ( )

{
/*
Corps du programme
(à définir par la suite
*/
}

6.8.3. Les données et les traitements

Comme dans tout langage de programmation évolué, C++ offre la possibilité


de :
a) Définir des données (aspect statique du langage), et
b) Mettre en œuvre des traitements (aspect dynamique)

L‟aspect orienté objet de C++ va ensuite permettre d‟intégrer les données et les
traitements dans une structure unique appelée objet. Cet aspect de chose ne sera
pas développé dans ce cours d‟introduction.

Voici un exemple de programme C++

On veut réaliser un programme qui résout une équation du second degré :


99

Ax2 + b x + c = 0

Pour a, b et c fixés, les solutions réelles d‟une telle équation sont :

#include <cmath>
# include <iostream>
Void main ( )
{
Float a (0.0)
Float b (0.0)
Float c (0.0)
Float delta (0.0)

Cin >> a >> b >> c;

Delta = b*b – 4*a*c;


If (delta < 0.0)
{
Cout << “pas de solutions réelles ! “ << endl;
}
Else if (delta = = 0.0)
{
Cout << une solution unique : « << - b / 2* a << endl ;
}
Else
{
Cout << « deux solutions : « ( -b – sqrt (delta)) / 2*a
<< « , « (-b +sqrt (delta)) / 2*a << endl ;
}
}
6.8.4. Les variables: definition

Pour pouvoir être utilisée dans un programme C++, une donnée doit être
associée à une variable, c‟est-à-dire un élément informatique qui sera manipulé
par le programme. Une variable est décrite à l‟aide de trois caractéristiques :

a) Sa valeur littérale : qui permet de définir sa valeur. Par exemple, si la


donnée est un nombre, sa valeur littérale pourra être (selon les
conventions de représentation) : 123, - 18, 3.1415, 2e- 13, Ox3A5.

b) Son identificateur : qui est le nom par lequel la donnée est désignée dans
le programme.
100

c) Son type : qui correspond à une classification de la donnée.

6.8.4. La déclaration et l‟initialisation de variables

Dans les langages fortement typés comme C++, la création d‟une variable se fait
à l‟aide d‟une déclaration, et l‟association effective d‟une valeur à la variable
créée se fait à l‟aide d‟une initialisation.

- Les déclarations doivent obligatoirement être faites avant toute utilisation de


la variable ;

- Les initialisations doivent impérativement être faites avant toute utilisation


de la variable.

Pour ce point précis, notons que le compilateur n‟interdit pas l‟utilisation d‟une
variable non initialisée, mais il exclut l‟utilisation des variables non déclarées.

En C++, la syntaxe de la déclaration d‟une variable est :

< type> <identificateur> ;

Où type est l‟identificateur du type de la variable déclarée, et identificateur


est l‟identificateur de la variable.

Exemple : int i ;
float exemple_de_variable ;

6.8.5. Les principaux types élémentaires définis en C++

Bool : les valeurs logiques « vraie » (true) et « fausse » (false)

Int : les nombres entiers


Long : les nombres entiers
Float : les nombres réels (ce type permet de représenter 7 chiffres)

Double : les nombres réels (ce type permet approximativement quinze


chiffres significatifs pour représenter des nombres réels).

Char : les caractères (alphanumériques)


101

Un identificateur de variable ou de constante peut être n‟importe quelle


séquence composée de lettres, de chiffres ou du caractère souligné « _ », et
débutant par une lettre ou le caractère souligné. Remarquons qu‟on ne peut
pas utiliser des mots réservés comme identificateur.

Exemple : X
B5
Tailleur
Nb_etudiants

6.8.6 Les valeurs littérales

. Valeurs littérales de type entier : 1, 34, 89

. Valeurs littérales de type réel : 0.0, 1.23


Remarquons que :
0.123 peut aussi s‟écrire .123
12.3e 4 correspond à 12.3 104 (soit 1230000)
12. 3e -4 correspond à 12.3 10-4 (soit 0.00123)

. Valeurs littérales de type caractères : „a‟ , „ ! „

Il est possible, en C++, d‟affecter une valeur à une variable au moment de a


déclaration. La syntaxe de la déclaration – initialisation est :

< type > < identificateur > ( <valeur> ) ;

Où valeur est n‟importe quel littéral ou expression du type indiqué.

Exemple :

Int i ( 3 ) ;
Float exemple_de_variable (3.14) ;
Char c („ a‟) ;
Int j ( i ) ;
Float x ( 2.0 * exemple_de_variable) ;
102

6.8.7. Les variables et les constantes

En C++, la nature modifiable (variable) ou non modifiable (constante) d‟une


donnée peut être définie lors de la déclaration-initialisation, au moyen du mot
réservé const.

Exemple : const int j (2) ;

La constante j de type entier est déclarée, et initialisée à la valeur 2. Cette valeur


ne pourra plus être modifiée par le programme, plus exactement toute tentative
de modification sera rejetée par le compilateur, qui signalera une erreur.

6.8.8. L‟instruction d‟affectation

L‟instruction d‟affectation consiste à attribuer (affecter) une valeur à une


variable.

En C++, la syntaxe d‟une affectation est :

< identificateur > = <valeur> ;

Où valeur est une valeur littérale ou une expression de même type que la
variable référencée par l‟identificateur.

Exemple : i = 3 ;

6.8.9. Les instructions d‟entrée / sortie

Les instructions d‟entrée – sortie (E/S) permettent les interactions du programme


avec son environnement (extérieur). Les mécanismes d‟E/S doivent en
particulier donner au programmeur la possibilité :
a) De prendre en compte, au sein du programme, des données issues de
l‟extérieur, comme des informations saisies au clavier ou lues dans des
fichiers.
b) D‟afficher des données à l‟écran.
c) De sauvegarder les résultats produits pour d‟éventuelles réutilisations.
103

6.8.10. Instruction pour affichage à l‟écran

Cout << <expression1> << < expression2> <<….. << <expressionn >

Affiche à l‟écran les valeurs des expressions < expressioni >

Les chaînes de caractères doivent être indiquées entre guillemets, tandis que les
caractères simples sont eux indiqués entre apostrophes « „ «.

Les valeurs affichées ne sont pas délimitées par défaut (pas d‟espaces
séparateurs). Les délimiteurs sont donc à indiquer explicitement par exemple par
„ „ ou « « .

Exemple 1 :

Int a (1) ;
Cout << „ [ „ << - a << « , «

<< a << „ ] „ << end ;

Ces instructions produisent comme résultat :

[- 1, 1]

Exemple 2 :
Int i (2);
Float x (3.14);
Cout << « => « << 2 * i +5 << « , « << x << endl;

Le résultat de ces instructions est : => 9, 3.14

Le manipulateur endl représente le retour de ligne. Il permet donc de passer à la


ligne suivante lors de l‟affichage.

6.8.11 Instruction pour la lecture au clavier

Cin >> <var1> >> < var2 > >> … >> < var- n> ;

Permet à l‟utilisateur de saisir au clavier une liste de valeurs val1, val2,.. valn
qui seront stockées dans les variables < var1>.
104

Exemple :
Int i ;
Double x ;

L‟instruction cin >> i >> x ; permettra de lire au clavier un entier suivi


d‟un réel, et affectera l‟entier lu à la variable i et le réel à la variable x.

Exemple de programme

#include <iostream>
Void main ( )
{
Int i ;
Double x;
Cout << “valeurs pour i et x : “ flush;
Cin >> i >> x ;
Cout << « => « << i << « , « << x << endl ;

Remarque

Pour pouvoir utiliser les instructions d‟E/S, il faut inclure, en début de


programme, le fichier header iostream, au moyen de la directive :
# include <iostream>.

Le manipulateur flush permet d‟assurer l‟affichage de la ligne courante, en


l‟absence de saut de ligne.

6.8.12. Les opérateurs et expressions

En plus des instructions, tout langage de programmation fournit des opérateurs


permettant de manipuler les éléments prédéfinis. Les définitions des opérateurs
sont souvent étroitement associées au type des éléments sur lesquels ils sont
capables d‟opérer.

Ainsi, les opérateurs arithmétiques (+, -, /, *, …) sont définis pour les types
numériques (entiers et réels par exemple), les opérateurs logiques ( ! , &&, | | )
sont définis eux (en particulier) pour le type booléen.
105

Les expressions sont des séquences bien formées combinant (éventuellement à


l‟aide de parenthèses) des opérateurs et des arguments (qui peuvent être des
valeurs littérales, des variables ou des expressions).

Par exemple : (2*(13 – 3) / (1 + 4 )) est une expression numérique bien formée,


alors que )3+)5*(- 2 ne l‟est pas.

Les opérateurs arithmétiques sont (dans l‟ordre de priorité d‟évaluation) :

* Multiplication

/ Division

% Modulo

+ Addition

- Soustraction

Le modulo est le reste de la division entière.

Du fait que les opérateurs ont non seulement une syntaxe, mais aussi une
définition opératoire, une expression peut être évaluée, c‟est-à-dire associée à la
valeur littérale correspondant au résultat de l‟expression.
Ainsi, l‟évaluation de l‟expression (2*(13 – 3) / (1+4) correspond à la valeur
littérale de type entier 4.

Fonctionnement de l‟ordre de priorité des opérateurs

(1) (2) (1) (1) (2)


2 * 3 - 21 / 3 % 4 + 5

(2 * 3) - (21 / 3 % 4) + (5)
106

Exemple d‟utilisation d‟expression pour l‟affectation :

Z = (x + 3 ) % y ;

Z = (3 * x + y) / 10 ;

Z = (x = 3 *y) + 2 ;

Remarque : C++ fournit un certain nombre de notations abrégées pour des


affectations particulières

Affectation Notation abrégée

x+=y
x=x+y; x-=y
idem pour (/, *, %, - ) x*=y
x/=y
x%=y

x=x+1 ++x

Affectation – opération Affectation simple

Num + = 3 ; num = num + 3 ;

Val * = num + 4 ; val = val * (num + 4) ;

Res / = div * = div ; res = res / (div = div * div)

6.8.13 Les expressions logiques


107

Au sens strict, une expression logique (ou une condition) est une expression
booléenne, c‟est-à-dire de type booléen) qui peut avoir comme résultat : soit la
valeur « vraie « , dans ce cas on dit que la condition est vérifiée, soit la valeur
« fausse », et dans ce cas, la condition n‟est pas vérifiée.

Des conditions logiques plus complexes peuvent être construites, à l‟aide


d‟opérateurs spécifiques : les opérateurs de comparaison et les opérateurs
logiques. Les opérateurs de comparaison, appelés aussi opérateurs relationnels)
sont (dans l‟ordre de priorité d‟évaluation)

Opérateur opération

< strictement inférieur

<= inférieur ou égal

> strictement supérieur

>= supérieur ou égal

== égalité

!= différence (non-égalité)

Exemple de conditions correspondant à des expressions relationnelles :

(x >= y)

(x +y = = 4)

( ( x > y ) = = (y > z))

Les opérateurs logiques permettent de combiner plusieurs conditions entre elles.


Selon leur ordre de priorité d‟évaluation, ces opérateurs sont repris dans le
tableau ci-après.
108

opérateur Opération
! NON logique (négation)

&& Et logique (conjonction)

|| Ou logique

Exemple de conditions complexes :

a) ((z ! = 0) && (2*(x-y) / z < 3))


b) ((z) && (2*(x-y) / z < 3))
c) ((x >= 0) | | ((x*y > 0) && ! (y*z > 0)))

Remarque : les conditions (a) et (b) sont logiquement équivalentes.

Les opérateurs logiques ET, OU et NON sont définis par les tables de vérités
usuelles.

A B Non A A ET B A OU B
V V F V V
V F F F V

F V V F V
F F V F F

6.8.14. Séquence ou bloc

Pour pouvoir être utilisée, les instructions d‟un programme C++ doivent être
regroupées en entités appelées séquences d‟instructions ou blocs. Ces séquences
sont explicitement délimitées par les accolades « { « et « } « :
109

{
Int tmp (a) ; // échange du contenu
a=b; // de deux variables
b = tmp ;
}

Par convention, on alignera les accolades l‟une sous l‟autre, et on indentera la


séquence d‟instructions correspondent au bloc.

6.8.15. Branchement conditionnel : if

Le branchement conditionnel est une structure de contrôle qui permet la mise en


œuvre de traitements variables, définis par des conditions d‟applications
spécifiques.

La syntaxe générale d‟un branchement conditionnel est :

If (<condition>) {<instructions-1 : si condition vérifiée>}


[ else { <instructions-2 : si condition non vérifiée>}]

N.B : la notation […] indique une partie optionnelle.

L‟expression <condition> est tout d‟abord évaluée. Si la condition est vérifiée,


la séquence d‟instructions <instructions-1 :… > est exécutée ; sinon , c‟est
l‟éventuelle séquence alternative <instructions-2 :.. >, introduite par le mot
réservé else, qui sera exécutée.

Exemple :
If (x ! = 0) {cout << 1/x << endl ;}
Else {cout << « erreur « << endl ;

Il est également possible d‟enchaîner plusieurs conditions :

If (<condition-1>)
{
<instructions-1 : si condition-1 vérifiée>
}
Else if (<condition-2>)
{
110

<instructions-2 : si condition-2 vérifiée>


}

Else if (<condition-n>)
{
<instruction-n : si condition-n vérifiée>
}
[ else
{
<instructions par défaut>
}]

L‟expression « condition-1 » est tout d‟abord évaluée ; si elle est vérifiée, le


bloc « instructions-1 » est exécutée, et les alternatives ne sont pas examinées.
Sinon (condition-1 non vérifiée), c‟est l‟expression <condition-2) qui est
évaluée, ainsi de suite. Si aucune de N conditions n‟est vérifiée, et que la partie
optionnelle else est présente, c‟est le bloc « instructions par défaut » associé qui
sera finalement exécuté.

6.8.16. Sélection à choix multiple : switch

La sélection à choix multiple permet parfois de remplacer avantageusement un


enchaînement de branchements conditionnels, en permettant de sélectionner une
instruction en fonction des valeurs possibles d‟une expression de type entier ou
caractère.
La syntaxe générale d‟une sélection à choix multiple est :

Switch (<expression>)
{
Case <Constante-1> : <instruction-1> ;

Case <constante-n> : <instruction-n> ;
[ default : <instructions> ; ]
}
L‟expression « expression » est évaluée, puis comparée successivement à
chacune des valeurs <constante » introduites par le mot réservé case. En cas
d‟égalité, le bloc (ou l‟instruction) associé est exécuté. Dans le cas où il n‟y a
aucune « constante » égale à la valeur de l‟expression, l‟éventuel bloc introduit
par le mot réservé default est exécuté.

Exemple de sélection :
111

Switch (a + b)

{
Case 0 : a = b ; // exécute seulement lorsque (a+b) vaut 0
break ;
case 2 :
case 3 : b = a ; // lorsque (a + b) vaut 2 ou 3

case 4 :
case 5 : a = 0 ; // lorsque (a + b) vaut 2, 3, 4 ou 5
break ;
default

Remarque :

Lorsque, dans une instruction switch, le contrôle a été effectivement transféré à


une étiquette, l‟exécution se poursuit de façon linéaire jusqu‟à ce qu‟on
rencontre une instruction break. Celle-ci transfère explicitement le contrôle à la
première instruction qui suit le corps du switch. S‟il n‟existe pas de break, les
case suivant celui vers lequel le programme a été dérouté sont tous exécutés les
uns à la suite des autres.

6.8.17 Les boucles : while

Les boucles permettent la mise en œuvre répétitive d‟un traitement, contrôlé à


posteriori ou a priori par une condition de continuation.

La syntaxe de la boucle « repéter « est :

Do
{
< actions >
{ while (<conditions>)
Exemple :
Do
{
Cout << « valeur de i (>= 0) : « ;
Cin >> i ;
Cout << « => « << i << endl ;
}
While (i < 0) ;
112

La syntaxe de la boucle tant que est :

While (<condition>)

{
< actions >
}

Exemple :

While ( x > 0)
{
Cout << x ;
X/=2;
}

La syntaxe générale de la boucle pour est:

For (<initialisation> ; <condition> ; <mise à jour>)

{
<actions>
}

Exemple : affichage du carré des nombres entre 0 et 10

For (int i (0) ; i <=10 ; + + i)


{
Cout << i * i << endl ;
}

N.B: il est à noter que la variable de contrôle de la boucle est déclarée et


initialisée dans la boucle for.

Lorsque plusieurs instructions d‟initialisation ou de mise à jour sont nécessaires,


elles sont séparées par des virgules (et évaluées de la gauche vers la droite).
113

For (int i (0), s (0) ; i < 0 ; s + = i, ++ i)


{
Cout << i << s << endl;

Le langage Java

Comme le C++ , Java est un langage de Programmation Orienté


Objet (POO) créé par James Gosling et Patrick Naughton, employés de Sun
Microsystems, avec le soutien de Bill Joy (co-fondateur de Sun, en 1982). Il a
été présenté officiellement le 23 mai 1995 au SunWorld. C'est un langage en
évolution rapide et permanente, Java 2 est la version stabilisée du JDK (Java
Development Kit, c'est-à-dire le kit de développement pour Java). L‟objectif
principal de Java est d‟augmenter la productivité des programmeurs tout en leurs
facilitant la conception et l‟édition des codes sources.
Java possède un certain nombre de caractéristiques qui ont
largement contribué à son énorme succès :
 Java est interprété ;
 Java est portables (indépendant de toute plate-forme) ;
 Java est Orientée Objet ;
 Java est simple ;
 Java est fortement typé ;
 Java est multi tâche (grâce aux threads) ;
114

Sun a défini trois plateformes d'exécution (ou éditions) Java pour


des cibles distinctes selon les besoins des applications à développer, nous
pouvons citer :
- Java 2 Standard Edition (J2SE / Java 2 SE) : environnement
d'exécution et ensemble complet d'API (Interfaces de programmation)
pour des applications de type desktop. Cette plate-forme sert de base en
tout ou partie aux autres plateformes.
- Java 2 Enterprise Edition (J2EE / Java 2 EE) : environnement
d'exécution reposant intégralement sur Java SE pour le développement
d'applications web et d'entreprises.
- Java 2 Micro Edition (J2ME / Java 2 ME) : environnement d'exécution
et API pour le développement d'applications sur appareils mobiles et
embarqués dont les capacités ne permettent pas la mise en œuvre de Java
SE.

En Java 2 Standard Edition (J2SE), l'on développe deux genres de programmes :


 Les applications, qui sont des logiciels classiques s'exécutant
directement sur une plate-forme spécifique, soit à travers une machine
virtuelle java, soit directement en code exécutable par le système
d'exploitation (code natif).
 Les applets, qui sont des programmes java insérés dans un document
HTML s'exécutant à travers la machine virtuelle java (JVM) du
navigateur lisant le document HTML (des pages web).

Notons que, dans le cadre de ce cours, nous nous intéressons


uniquement aux applications dites classiques de la plate-forme J2SE. Java n‟est
qu‟un langage, alors que la Programmation Orientée Objet est une méthode de
conception qui regorge en elle-même un ensemble de concepts que nous
proposons d‟étudier ci-dessous.
115

Java comme langage de programmation orientée objet

Pour bien fixer cette notion que nous avons déjà présentée, nous aimerions y
revenir à ce niveau. Cette approche que nous voulons pédagogique permettra
aux étudiants d‟établir directement un lien entre cette notion de P.O.O et le
langage java.

La Programmation Orientée Objet ou la conception par objets est la méthode qui


conduit à des architectures logicielles fondées sur les objets que tout système ou
sous-système manipule en vue de l‟obtention du résultat final. Cette méthode
offre une manière claire de concevoir une architecture faite des modules
autonomes, facilitant l‟implémentation multiplateforme.

Pour mieux appréhender le concept de POO en java, les notions suivantes


doivent faire l‟objet d‟une analyse assez approfondie :
1. l‟Objet ;
2. la Classe ;
3. le Constructeur et les autres Méthodes ;
4. l‟Héritage et le Polymorphisme ;
5. l‟Interface et le Polymorphisme ;
6. les instructions de base en Java (primitives, opérateurs,
structures de contrôle, les tableaux, la classe String,
exceptions et lecture des données passées au clavier).

I.1. L‟OBJET
Le principe fondamental est que le langage Java doit permettre
d'exprimer la solution d'un problème à l'aide de ses éléments. Un programme
traitant des images doit manipuler des structures de données représentant des
116

images, et non leur traduction sous forme de suite de 0 et de 1, c'est-à-dire sous


une forme binaire. Les structures de données manipulées par un programme de
gestion de personnel doivent représenter des personnes, avec toutes les
informations pertinentes, qu'il s'agisse de texte, de dates, de nombres, d'images
ou autres.
En POO, tout est donc objet. Le terme Objet est peut-être mal
choisi : Il ne fait pas référence aux objets par opposition aux êtres animés. Objet
signifie simplement "élément de l'univers". Pour chaque instance d'une classe, le
code est le même, seules les données sont différentes à chaque objet.

Comment créer un objet ?

Avant de créer un objet ou d‟instancier une classe, il faut


préalablement savoir sa nature (c'est-à-dire la classe à laquelle l‟objet
appartient). Ainsi pour créer par exemple les objets chaise, tables et lit, on
écrira :
Meuble chaise = new Meuble(‘’chaise’’, 30, 20) ; // la chaise est un meuble
Meuble table = new Meuble(‘’table’’, 20, 50) ; // la table est un meuble
Meuble lit = new Meuble(‘’lit’’, 40, 100) ; // le lit est également un meuble

Il faut noter que chaque objet joue un rôle particulier (à travers ses
différentes méthodes ainsi que ses attributs) dans l‟univers du problème à traiter,
de sorte à ce qu‟il puisse s‟échanger des informations avec d‟autres objets
(encapsulation de données) et constituer un système (programme). Ainsi au
cours de l‟exécution d‟un programme (son processus), les objets crées ou
instanciés se mettent en action afin de calculer le résultat du problème posé dans
la nature. Les objets appartiennent ensuite à des classes bien définies.
I.2. LA CLASSE
Les objets appartiennent à des catégories appelées classes.
L'ensemble des classes découpe l'univers (Par univers, il faut entendre
117

évidemment l‟univers du problème à traiter). Si notre problème concerne des


enseignants, nous pouvons créer une classe que nous appellerons
« Enseignant ». Et que celle-ci regroupera des objets tels que Assistant, Chef de
travaux et Professeur. Peu importe que cette division ne soit pas pertinente dans
l'univers réel. Il suffit qu'elle le soit dans celui du problème à traiter.
Une classe est principalement composée de deux parties (membres) :
- Les attributs ou champs de classe (l‟entête) : ce sont des variables ou
des constantes dont les contenus sont accessibles et manipulables par
toutes les méthodes ;
- Les méthodes ou fonctions utilisateurs (le corps) : ce sont des blocs
d‟instructions permettant d‟effectuer des tâches bien précises dans le
déroulement du programme. On distingue 3 sortes de méthodes : le
constructeur (méthode particulière portant le même nom que sa classe et
permettant la création d‟instances de ladite classe), accesseurs en lecture
ou méthode d’accès (permettant d‟accéder à des valeurs stockées dans les
attributs privés) ainsi que les accesseurs en écriture ou méthode de
modification (permettant d‟affecter des valeurs aux attributs).

Comment créer une classe ?


Rappelons qu‟une classe est une catégorie d‟objets ayant un
ensemble des caractéristiques communes.
Ainsi pour créer la classe Meuble, on écrira :
Public class Meuble {
//1. Attributs de classe :
Private String nom = “defaut”;
Private int taille = 0;
Private int prix = 0;
//2. Corps de la classe (les méthodes) :
// Constructeur
Public Meuble(String nom, int taille, int prix) {
This. nom = nom;
This.taille = taille ;
This.prix = prix ;
}
118

// Les accesseurs en lecture


Public String getNom () {
Return this.nom;
}
Public int getTaille() {
Return this.taille ;
}
Public int getPrix() {
Return this.prix ;
}
Public void AfficherInfos() {
System.out.println(„‟ Nom : „‟ + nom + ‟‟, prix :‟‟ + prix + ‟‟ et taille :
‟‟+taille) ;
}
// Les accesseurs en écriture
Public void setNom (String nom) {
This.nom = nom;
}
Public void setTaille(int taille) {
This.taille = taille;
}
Public void setPrix(int prix) {
This.prix = prix ;
}
}

I.3. CONSTRUCTEUR ET METHODES


I.3.I. Le Constructeur
Un constructeur est une méthode spéciale d'une classe dont la seule
fonction est d'instancier un objet (créer l‟instance de ladite classe). Comme en C,
une classe Java peut posséder plusieurs constructeurs (on parle de la redéfinition
ou de la surcharge), il est possible de pratiquer des initialisations d'attributs dans
un constructeur. Comme toutes les méthodes, un constructeur peut ou ne pas
avoir de paramètres (c'est-à-dire tout ce qui est compris entre les parenthèses).
Suivant l‟exemple du point précédent (la classe Meuble), le
constructeur est le suivant :
Public Meuble (String nom, int taille, int prix) { //constructeur

}
119

C‟est à l‟aide de ce constructeur qu‟il est ainsi possible d‟instancier


la classe Meuble comme suit :
Meuble table = new Meuble („‟Table‟‟, 50, 40) ;

 A gauche du signe =, le mot Meuble (nom de la classe) désigne la classe à


laquelle appartient l‟objet table (son type).
 A droite du signe =, le mot new (opérateur unaire, il permet d‟instancier
un objet du type Meuble que l‟on affecte à la variable table du même
type) suivit du constructeur Meuble(…), qui reçoit un paramètre composé
de la chaîne de caractères „‟Table‟‟ (le nom de l‟instance créée) et deux
valeurs numériques, respectivement la taille et le prix de la table.

Cette ligne d‟instruction suffit pour que la machine virtuelle Java (JVM) alloue
un espace mémoire nécessaire à cet objet lors de l‟exécution du programme.
I.3.2. La Méthode
La méthode (tout comme le constructeur) est une fonction qui
implémente les traitements de la classe. Elle représente une encapsulation des
instructions qui déterminent le fonctionnement d'une classe. Sans méthodes pour
agir, une classe ne fait rien de particulier, dans ce cas elle ne fait que contenir
des attributs. L‟ensemble de méthodes, en dehors du constructeur, définissent
donc le rôle que jouent les instances d‟une classe donnée dans l‟univers du
problème à résoudre (le programme).

Comment déclarer une méthode ?


Une méthode comporte un en-tête et un corps. Celui-ci contient des
instructions qui seront exécutées lors de l‟appel de la méthode. La déclaration et
l‟implémentation d‟une méthode se fait par exemple de la manière ci-dessous :
Public void setNom (String nom) {
This.nom = nom;
120

Le mot clé Public (appelé qualificateur), définit la visibilité d‟une


méthode. Ici Public veut dire que la méthode est donc visible depuis l‟extérieur
de la classe, contrairement au mot Private.
Le mot clé void signifie que la méthode setNom() ne retourne rien
ou n‟a pas de valeur de retour (on l‟appel donc méthode de modification). Noter
que lorsqu‟une méthode retourne une valeur (primitive ou objet), son nom doit
être précédé du type de la valeur considérée. En d‟autres termes, une méthode
d‟accès ou accesseur en lecture prend le type de la valeur qu‟elle retourne. C'est-
à-dire concrètement, que si elle devrait retourner une valeur du type int son nom
serait précédé du mot clé int, soit : public int setNom(){…}.
Entre parenthèses, on retrouve le paramètre, c'est-à-dire la liste de
variables passées à la méthode. Selon l‟exemple précédent, le paramètre est la
variable nom du type String (c'est-à-dire une chaîne de caractères, que nous
verrons plus loin dans ce cours).
Le corps de la méthode est compris entre les accolades et rappelons
que c‟est dans celui-ci que l‟on implémente toutes les instructions à exécuter
lors de son appel par d‟autres méthodes ou, par contre, par elle-même (on parle
alors de la récursivité).
121

I.3.2.1 Surcharge d’une méthode


La surcharge d'une méthode permet de définir plusieurs fois une
même méthode avec des arguments différents. Lors que la méthode est
surchargée, le compilateur choisit la méthode qui doit être appelée en fonction
du nombre et du type des arguments. Ceci permet de simplifier l'interface vis-à-
vis des autres classes.
Une méthode est surchargée lorsqu'elle exécute des actions différentes
selon le type et le nombre de paramètres transmis. Il est donc possible de donner
le même nom à deux méthodes différentes à condition que les signatures de ces
deux méthodes soient différentes. La signature d'une méthode comprend le nom
de la classe, le nom de la méthode et les types des paramètres.
Ainsi, le constructeur de la classe Meuble peut être surchargé ou
redéfini de la manière suivante :
Public Meuble (String nom, int taille, int prix) { //premier
constructeur
This.nom = nom ;
This.taille = taille ;
This.prix = prix ;
}
// Voici ci-dessous le constructeur surchargé
Public Meuble (String nom){ //deuxième constructeur
This.nom = nom ;
}

Il n'est pas possible d'avoir deux méthodes de même nom dont tous les
paramètres sont identiques et dont seul le type retourné diffère, telles que :
122

Public int getSomme (int a, int b) {


Return (int)(a+b) ; //elle retourne un int comme somme
}

Public double getSomme (int a, int b){


Return (double)(a+b); //elle retourne un double comme somme
} //cette redéfinition n’est pas possible en java !

I.3.2.2 Les accesseurs


L'encapsulation permet de sécuriser l'accès aux données d'une classe.
Ainsi, les données déclarées private à l'intérieur d'une classe ne peuvent être
accédées et modifiées que par des méthodes définies dans la même classe. Si
une autre classe veut accéder aux données de la classe, l'opération n'est possible
que par l'intermédiaire d'une méthode de la classe prévue à cet effet.
Ces appels de méthodes sont appelés échanges de message ou
encapsulation. Un accesseur est une méthode publique qui donne l'accès à une
variable d'instance privée. Pour une variable d'instance, il peut ne pas y avoir
d'accesseur, un seul accesseur en lecture ou un accesseur en lecture et un autre
en écriture. Par convention, les accesseurs en lecture commencent par get et les
accesseurs en écriture commencent par set.
Ainsi, suivant l‟exemple précédent, la classe Meuble pocède les
accesseurs ci-dessous :
// Les accesseurs en lecture ou méthodes d’accès : destinés à retourner un attribut de classe
Public String getNom () {
Return this.nom;
}
Public int getTaille() {
Return this.taille ;
}
Public int getPrix() {
Return this.prix ;
}
Public void AfficherInfos() {
System.out.println („‟ Nom : „‟+ nom +‟‟, prix :‟‟+prix+‟‟.‟‟) ;
}
// Les accesseurs en écriture ou méthode de modification : destinés à modifier un attribut de
//classe
Public void setNom (String nom) {
This.nom = nom;
123

}
Public void setTaille(int taille) {
This.taille = taille;
}
Public void setPrix(int prix) {
This.prix = prix ;
}

Pour un attribut de type booléen (contenant soit true, soit false), il est
possible de faire commencer l'accesseur en lecture par is au lieu de get.

I.3.2.3 La méthode « main »


La méthode main est une méthode de classe (déclarée static) qui
permet d‟exécuter une application Java. Elle reçcoit en paramètre un tableau de
chaînes de caractère représentant les arguments envoyés par la machine virtuelle
et crée enfin l‟objet principal du programme. Ainsi, pour que la classe Meuble
précédente soit exécutée il faut y ajouter la méthode main comme suit :
Public class Meuble {
//1. Attributs de classe :
Private String nom = “defaut”;
Private int taille = 0;
Private int prix = 0;
//2. Corps de la classe (les méthodes) :
// Constructeur
Public Meuble(String nom, int taille, int prix) {
This. nom = nom;
This.taille = taille ;
This.prix = prix ;
}
// Les accesseurs en lecture
Public String getNom () {
Return this.nom;
}
Public int getTaille() {
Return this.taille ;
}
Public int getPrix() {
Return this.prix ;
}
Public void AfficherInfos() {
System.out.println(„‟ Nom : „‟+ nom +‟‟, taile : ‟‟+taille+‟‟ et prix :
‟‟+prix+‟‟.‟‟) ;
124

// Les accesseurs en écriture


Public void setNom (String nom) {
This.nom = nom;
}
Public void setTaille(int taille) {
This.taille = taille;
}

Public void setPrix(int prix) {


This.prix = prix ;
}

Public static void main(String[] args){

Meuble table = new Meuble („‟table‟‟, 12, 30) ; // création de l’objet table
String infos = table.AfficherInfos(); //récupération de
l’info
System.out.println(infos); //Affichage de l’info

System.out.println(table.getNom()); //Affichage du nom


System.out.println(table.getTaille()); //affichage de la taille
System.out.println(table.getPrix()); //Affichage du prix de la
table
}
}
Résultat de l‟exécution :
Nom : table, taille : 12 et prix : 30.
Table
12
30

I.4. HERITAGE ET POLYMORPHISME


L'héritage est un mécanisme qui facilite la réutilisation du code et la
gestion de son évolution. Elle définit une relation entre deux classes :
 une classe mère ou super classe : celle dont on hérite les caractères;
 une classe fille ou sous classe : celle qui hérite de caractères de sa classe
mère;
Classe mère

Héritage simple
Classe fille
125

Grâce à l'héritage, les objets d'une classe fille ont accès aux données
(attributs ou champs) et aux méthodes de la classe mère et peuvent les étendre,
c'est-à-dire que les sous classes peuvent redéfinir les variables et les méthodes
héritées. Pour les variables, il suffit de les redéclarer sous le même nom avec un
type différent. Les méthodes sont redéfinies avec le même nom, les mêmes types
et le même nombre d'arguments, sinon il s'agit d'une surcharge.
Le polymorphysme est ainsi la possibilité qu‟ont les objets ou les
instances d‟appartenir à deux classes (on parlera de l‟héritage simple) ou à plus
de deux classes (on parle de l‟héritage multiple). C'est-à-dire qu‟un objet peut
appartenir à une structure ou une autre suivant l‟angle sous lequel on aborde le
problème.
Par exemple, il paraît naturel de définir une classe Etudiant comme
dérivant de la classe Homme parce qu‟un étudiant hérite de caractères des
Hommes. Alors, pour matérialiser l‟héritage dans un code java, les mots extends
et super s‟avèrent indispensables.
Public class Homme {
Private String nom = „‟ „‟;

Public Homme(String nom){


This.nom = nom;
}

Public String getNom(){


Return nom;
}

Public void sePresenter(){


System.out.println („‟Je m‟appel „‟+nom) ;
}
}

Selon l‟exemple précédent, la classe Homme est considérée comme une super
classe ou classe mère. Pour l‟étendre, la classe Etudiant doit être définie de la
manière suivante :
126

Public class Etudiant extends Homme { // Etudiant étend Homme


Private String Universite = „‟‟‟ ;

Public Etudiant (String nom, String univ){


Super(nom); //initialization implicite du constructeur de la mère
This.Universite = univ;
}

Public void etudier(){


sePresenter(); // parce que un étudiant est un homme
System.out.println („‟Je suis étudiant à „‟+Universite) ;
}

Public static void main (String args[]){


Etudiant Et1 = new Etudiant („‟SULA BOSO‟‟, „‟UNIVERSITE DE
KINSHASA‟‟) ;
Et1.etudier() ; //correct : tout étudiant peut étudier
Et1.sePresenter() ; //correct : car un étudiant est tout d‟abord un Homme

Homme H1 = new Homme („‟SERGE‟‟) ;


H1.etudier() ; //incorrect :
H1.sePresenter() ; //correct : tout homme peut se présenter
}
}

Dans la méthode main, rémarquez que l‟objet Et1, instance de la


classe Etudiant, hérite de la méthode sePresenter() qui est implémentée dans la
classe Homme. Cette instruction est correcte pour la simple bonne raison que la
classe Etudiant étend la classe Homme. Et donc tout étudiant peut se présenter
comme font les hommes. Par contre l‟inverse n‟est pas possible, car H1 entant
que Homme ne peut étudier parce que la méthode etudier() est définie dans la
classe Etudiant (la classe fille). L‟objet ET1 est alors dit objet polymorphe
alors que H1 ne l‟est pas.
I.5. INTERFACE ET POLYMORPHISME
Un étudiant peut être de sexe féminin (une Femme), tout comme
être sportif, travailleur etc. En effet, un objet peut également appartenir à plus de
deux classes considérant l‟angle sous lequel on aborde le sujet. Avec l'héritage
multiple, une classe peut hériter en même temps de plusieurs super classes. Ce
127

mécanisme n'existait pas en java avant l‟avenement de l‟interface. Les interfaces


permettent donc de mettre cela en oeuvre.
Une interface est un ensemble de constantes et de déclarations de
méthodes correspondant un peu à une classe abstraite. C'est une sorte de
standard auquel une classe peut répondre. Tous les objets qui se conforment à
cette interface (qui implémentent cette interface) possèdent les méthodes et les
constantes déclaréees dans celle-ci. Plusieurs interfaces peuvent être
implémentées dans une même classe. Les interfaces se déclarent avec le mot clé
interface et sont intégrées aux autres classes avec le mot clé implements.

Classe mère 1 Classe mère


Héritage 2
multiple Classe mère 3

Ainsi, l‟exemple précédent peut être


Classe fille amélioré de la manière suivante :

 Les classes Homme, Femme, Travailleur et Sportif seront déclarées


interfaces et toutes leurs méthodes seront abstraites, c'est-à-dire que
celles-ci n‟auront pas de corps ;
 En suite, la classe Etudiant implémentera toutes les interfaces déclarées.

Interface Homme :
Public interface Homme {
String sexe = „‟Masculin‟‟ ; //une constante

Public String getSexeHomme() ; //method getSexeHomme() sans corps


Public void presenterFemme() ; // presenterFemme() sans corps
Public void parler();
}

Interface Femme :
Public interface Femme {
String sexe = „‟Féminin‟‟ ; //une constante

Public String getSexeFemme() ; //method getSexeFemme() sans corps


Public void presenterMari() ; // presenterMari() sans corps
Public void parler();
}
128

Interface Travailleur :
Public interface Travailleur {
Public void travailler();
Public void parler();
}

Interface Sportif :
Public interface Sportif {
Public void lutter();
Public void parler();
}

Classe Etudiant :
Pour que les instances de la classe Etudiant soient polymorphes, il
faudra que celle-ci implémente toutes les interfaces présentées au dessus comme
suit :
public class Etudiant implements Homme, Femme, Sportif, Travailleur {

String universite = "";


String nom = "";

public Etudiant(String univ, String nom){


this.universite = univ;
this.nom = nom;
}

public void presenterFemme() {


System.out.println("Ma femme s'appelle Jeanne");
}

public void parler() {


System.out.println("je m'appel "+nom+", je suis étudiant à "+universite);
}

public String getSexeHomme() {


return Homme.sexe;
}

public void presenterMari() {


System.out.println("Mon mari s'appelle Jean");
}
129

public String getSexeFemme() {


return Femme.sexe;
}

public void lutter() {


System.out.println("je lutte pour avoir une victoire");
}

public void travailler() {


System.out.println("Je travail chez tigo");
}

public static void main(String[] args){ //début de la méthode main


Etudiant et1 = new Etudiant ("UNIKIN", "Tom");
et1.parler();

Femme f1 = et1; //un étudiant peut être femme (mariée)


f1.parler();
f1.presenterMari();
f1.presenterFemme(); //incorrect :

Homme h1 = et1; //un étudiant peut être Homme


h1.parler();
h1.presenterFemme();
h1.presenterMari(); // incorrect :

Travailleur tr1 = et1; //un étudiant peut être travailleur


tr1.parler();
tr1.travailler();
tr1.presenterFemme(); //incorrect :

Sportif sp1 = et1; //un étudiant peut être sportif


sp1.parler();
sp1.lutter();
sp1.travailler(); // incorrect : un sportif ne peut pas travailler

h1 = sp1; // incorrect : sp1 n'est pas polymorphe


h1 = tr1; // incorrect : tr1 n'est pas polymorphe
f1 = sp1; // incorrect : sp1 n'est pas polymorphe
f1 = tr1; // incorrect : tr1 n'est pas polymorphe

//alors que et1 est un objet polymorphe


} // fin de la méthode main
}

I.6. INSTRUCTIONS DE BASE EN JAVA


I.6.1. Les primitives
130

En réalité, tout n'est pas objet en Java. Par souci de simplicité et


d'efficacité, Java est un langage fortement typé. Comme en Pascal, en Java vous
devez déclarer un objet ou une variable avec son type avant de l'utiliser. Java
dispose donc de types prédéfinis ou types élémentaires ou primitifs. Les types
servent à déterminer la nature du contenu d'une variable, du résultat d'une
opération, d'un retour de résultat d‟une méthode.
Le tableau ci-dessous présente la synthèse des types primitifs que
l‟on distingue en java :
131

Signalons qu'en java toute variable qui sert de conteneur à une


valeur d'un type élémentaire précis doit préalablement avoir été déclarée sous ce
type.
Exemple de déclaration et utilisation des types élémentaires :
Public class principal {
Public static void main(String[] args){
int a = 10;
double b = 12.5;
int c = (int)b; //le transtypage : changement de type
boolean rep = true;
char letter = „b‟;
String nom = „‟Jean-claude‟‟ ;
System.out.println(lettre); //affichera b
System.out.println(a); //affichera 10
System.out.println(b); //affichera 12.5
System.out.println(c); //affichera 12
System.out.println(rep); //affichera true
System.out.println(nom) ; //affiche Jean-claude

}
}
Notons que le type String ne s‟ajoute pas à la liste des éléments
primitifs parce qu‟en réalité une chaîne des caractères est un objet, instance de la
classe String qui, en revanche, implémente plusieurs méthodes (que nous vous
proposons de voire plus tard) qui permettent de manipuler des chaînes.
I.6.2. les opérateurs
132

Les opérateurs sont des connecteurs qui permettent de définir la


relation qu‟une variable peut avoir avec elle-même ou avec d‟autres variables.
Ainsi, en java on distingue les opérateurs suivants, regroupés en familles :
 Opérateur d‟affectation =
 Opérateurs de comparaison ==, !=, <=, <, > et >=
 Opérateurs arithmétiques +, -, *, / et %
 Opérateur logique !, && et ||
 Opérateur d‟incrémentation ++
 Opérateur de décrémentation - -
 Opérateur unaire new

Analysons les exemples ci-dessous :


Public class principal {
public static void main(String[] args){
Int a = 20 ;
System.out.println(a); //affiche 20
Int b = a + 15 ;
System.out.println(b); //affiche 35
Int C = b % 2 ;
System.out.println(C); //affiche 1
Boolean res1 = (a==b) ;
System.out.println(res1); //affiche false
C ++ ;
System.out.println(C); //affiche 2
C--;
System.out.println(C); //affiche 1
Boolean res2 = ((a<b)&&(C!=a));
System.out.println(res2); //affiche true
System.out.println( !res2); //affiche false
}
}

I.6.3. les structures de contrôle


Dans ce point, nous allons étudier différentes structures qui
permettent de contrôler l‟exécution ou le déroulement d‟un programme java (son
processus). Car en effet, des traitements sont effectués à l‟intérieur des objets.
Pour ces traitements, nous avons besoins d‟un certain nombre de structures de
133

contrôle identiques à celles que l‟on retrouve dans d‟autres langages de


programmation traditionnels. Citons principalement :
- Les instructions de choix conditionnel (if…else et switch) ;
- Et les instructions de boucles (for et while).

a. Les instructions de choix conditionnels

Un programme ne peut rien faire s'il n'est pas capable de prendre


des décisions, c'est-à-dire d'effectuer ou non un traitement en fonction de
l'évaluation d'une expression logique (une condition).
Le choix avec « if » :
L'instruction if prend pour paramètre une expression de type
boolean placée entre parenthèses. Cette expression est évaluée et produit un
résultat valant true ou false. Si le résultat est true, l'instruction ou le bloc suivant
est exécuté. Si le résultat est false, l'instruction ou le bloc suivant est ignoré.

La syntaxe de l'instruction if peut donc être décrite de la façon suivante :


If (expression) instruction1;
else instruction2 ;
Ou
If (expression) {
Oui
instruction1; Test Instructions
instruction2;
Non

Instruction n; Instructions
} else {
Instruction6 ;
Instruction7 ;

Instruction n ;
134

}
Exemple : 1) un programme java qui permet d‟afficher un message à l‟écran
disant si une valeur numérique donnée est paire ou pas.
Public class Programme {
Public static void main (String[] args){
int a = 120;
int reste = a%2;
boolean cond = (reste==0) ;
if(cond==true)System.out.println(a+“ est une valeur paire‟‟) ;
else System.out.println(a+ “ est une valeur impaire”);
}
}
Résultat :
120 est une valeur paire

2) un programme java qui compare deux entiers et affiche le plus grand :


Public class Programme {
Public static void main (String[] args){
int a = 120;
int b = 20;
if(a<b)System.out.println (b+“ est le plus grand !‟‟) ;
else System.out.println (a+ “ est le plus grand !”);
}
}
Résultat de l‟exécution :
120 est le plus grand !

Les cas avec « switch » :


L‟instruction switch est exécutée en séquences. Comme pour une
autoroute, il y a plusieurs entrées possibles et plusieurs sorties possibles. Dans
cette instruction, les entrées sont représentées les mots case tandis que les sorties
par break ;. Une entrée est possible lors que la variable entre parenthèses
135

correspond à des constantes (en numérique ou en caractère). Sa syntaxe est la


suivante :
Switch(variable){
Case constante1 : instruction1;
Break;
Case constante2 : instruction 2;
Break;
Case constante3 : instruction3;
Break;
Default : instruction_par_défaut;
Break;
}

Exemple : un programme java qui permet d‟afficher un message à l‟écran si la


valeur numérique donnée est paire ou pas (cette fois, nous utilisons le switch).
Public class Programme {
Public static void main (String[] args){
int a = 120;
int rest = a % 2;

switch(rest){
case 0 : System.out.println (a+" est paire !");
break;
case 1 : System.out.println (a+" est impaire !");
break;
default : System.out.println ("Rien à signaler !");
break;
}
}
}
Résultat :
120 est paire !

b. Les instructions de boucle

La boucle « for » :
136

La boucle for est une structure employée pour exécuter une


instruction ou un bloc d'instructions un nombre de fois en principe connu à
l'avance. Elle utilise la syntaxe suivante :
for (initialisation ; test ; incrémentation) {
instructions;
}
Exemple : un programme qui écrit dix fois à l‟écran le mot « Bonjour ».
Public class Programme {
Public static void main (String[] args){
for (int i=0 ; i<10 ; i++) System.out.println ("Bonjour !");
}
}

Résultat de l‟exécution :
Bonjour !
Bonjour !
Bonjour !
Bonjour !
Bonjour !
Bonjour !
Bonjour !
Bonjour !
Bonjour !
Bonjour !

La boucle « while » :
Il arrive fréquemment qu'une boucle doive être exécutée tant qu'une
condition est ou n'est pas remplie, sans que cette condition porte sur une forme
d'indice. L'instruction while est prévue pour le cas où la condition doit être
testée avant toute exécution. Elle est utile lorsque le nombre maximal
d'itérations (répétitions) n'est pas connu à l'avance, et lorsque la condition de
sortie est indépendante de celui-ci.
Initialization;
while (test){
Instructions ;
137

Incrémentation ou actualisation;
}
Ou
Initialization;
do {
Instructions ;
Incrémentation ou actualisation;
} while (test) ;
Exemple : un programme qui écrit dix fois à l‟écran le mot « Bonjour ». (avec
while).
Public class Programme {
Public static void main (String[] args){
int i=0;
while (i<10) {
System.out.println ("Bonjour !");
i ++;
}
}
}
Résultat de l‟exécution :
Bonjour !
Bonjour !
Bonjour !
Bonjour !
Bonjour !
Bonjour !
Bonjour !
Bonjour !
Bonjour !
Bonjour !

Exemple : un programme qui affiche la liste des diviseurs d‟un nombre affecté à
une variable numérique. Et en même temps affiche à côté de chaque diviseur le
mot « pair » si celui-ci est pair, si non le programme affiche le mot « impaire ».
Public class Programme {
Public static void main (String[] args){
int nombre = 100;
for(int i=1; i<=nombre; i++){
138

if((nombre%i)==0){
if((i%2)==0)System.out.println(i+" pair.");
else System.out.println(i+" impair.");
}
}
}
}
Résultat de l‟exécution :
1 impair.
2 pair.
4 pair.
5 impair.
10 pair.
20 pair.
25 impair.
50 pair.
100 pair.

Notons qu‟une structure de contrôle peut être insérée dans une


autre, alors on parle de l‟imbrication. Ainsi, il est possible d‟insérer plusieurs
structures de contrôle à l‟intérieur de n‟importe quel autre en java. Cela dépend
alors de la complexité du problème à résoudre ou simplement de son algorithme.
I.6.4. Les tableaux (tableaux statiques)
En Java, les tableaux sont des structures pouvant contenir un
nombre fixe d'éléments de même nature. Il peut s'agir d'objets ou de primitives.
Chaque élément est accessible grâce à un indice correspondant à sa position
dans le tableau. Les tableaux Java sont des objets, même lorsqu'ils contiennent
des primitives. Ils doivent être déclarés comme tous les objets.
Java dispose de deux syntaxes équivalentes pour la déclaration des tableaux :
int[] x; ou int x[];

L'initialisation est l'opération dont le résultat est la création d'un


objet tableau. Elle devra donc indiquer la taille du tableau. La syntaxe à
employer est la suivante :
int[] tableau = new int[dimension]; ou int[] tableau = {1, 2, 3, 4, 5};
139

Dimension est le nombre d'éléments que le tableau pourra contenir, considéré


comme fixe dès lors que celui-ci est initialisé. Il existe également des tableaux
statiques multidimensionnels, il s‟agit en fait de tableaux des tableaux, c'est-à-
dire des matrices (tableaux composés de lignes et de colonnes) qui peuvent être
déclarés et initialisés de la manière suivante :
int[][] matrice = new int[nombre_des_lignes] [nombre_des_colonnes]; ou
int[][] matrice = {{1, 2, 3, 4},{5, 6, 7, 8}}; (forme très peu utilisée)

Pour parcourir le contenu d‟un tableau, nous devons utiliser des


structures de boucle (for ou while), voir des boucles imbriquées lors qu‟il s‟agit
des tableaux multidimensionnels.
Exemple 1: Dans le code suivant nous créons un tableau statique, que nous
initialisons et dont nous parcourons le contenu à l‟aide de boucles:
Public class Programme {
Public static void main (String[] args){
//création et initialisation du tableau
int[] tableau = new int[5];

//chargement manuel:
tableau[0] = 1;
tableau[1] = 2;
tableau[2] = 3;
tableau[3] = 4;
tableau[4] = 5;

//chargement automatique avec boucle for


for(int i=0; i<tableau.length; i++)tableau[i] = (i+1);

//chargement automatique avec boucle while


int j = 0;
while(j<tableau.length){
tableau[j] = (j+1);
j++;
}

//affichage manuel du contenu du tableau


System.out.println("affichage manuel du contenu du tableau :");
System.out.println(tableau[0]);
System.out.println(tableau[1]);
System.out.println(tableau[2]);
140

System.out.println(tableau[3]);
System.out.println(tableau[4]);

//affichage automatique du contenu avec boucle for


System.out.println("affichage automatique du contenu avec boucle for :");
for(int i=0; i<tableau.length; i++)System.out.println(tableau[i]);

//affichage automatique du contenu avec boucle while


System.out.println("affichage automatique du contenu avec boucle while :");
int k = 0;
while(k<tableau.length){
System.out.println(tableau[k]);
k++;
}
}
}
Résultat de l‟exécution :
affichage manuel du contenu du tableau :
1
2
3
4
5
affichage automatique du contenu avec boucle for :
1
2
3
4
5
affichage automatique du contenu avec boucle while :
1
2
3
4
5

Exemple 2: Le programme suivant charge dans chaque cellule du tableau


multidimensionnel une valeur incrémentée à chaque tour, puis affiche celle-ci.
Public class Programme {
Public static void main (String[] args){
//création et initialisation du tableau
int[][] tableau = new int[5][5];
int valeur = 0;
//chargement automatique avec boucle for
for(int i=0; i<tableau.length; i++){
for(int j=0; j<tableau.length; j++){
//chargement
141

tableau[i][j] = valeur;
//affichage sur une ligne (sans saut)
if(valeur<10)System.out.print("0"+tableau[i][j]+" ");
else System.out.print(tableau[i][j]+" ");
//incrémentation
valeur ++;
}
//saut de ligne
System.out.println();
}
}
}
Résultat de l‟exécution :
00 01 02 03 04
05 06 07 08 09
10 11 12 13 14
15 16 17 18 19
20 21 22 23 24

I.6.5. Le vecteur (tableaux dynamiques)


Les tableaux statiques permettent de gérer de façon simple et
efficace des collections d'objets de même type. Leur principal inconvénient est
que leur taille est fixe.
Cependant, il est très facile de créer des tableaux à taille variable
grâce à l‟API Vector (en français : vecteur). La syntaxe de la création et
l‟initialisation d‟un vecteur est la suivante :
Vector tableau = new Vector() ;
Cette classe définit un certain nombre des méthodes essentielles dont nous en
énumérons quelques unes ci-dessous :
- addElement(Objetc obj) : reçoit un objet en paramètre afin de charger le
vecteur ;
- contains(Object obj) : reçoit un objet en paramètre et retourne la valeur
true si le vecteur contient l‟élément spécifié en paramètre, si non false ;
- elementAt(int index) : retourne un objet situé à l‟indice spécifié en
paramètre ;
142

- remove(Object obj) : supprime du vecteur la première occurrence de


l‟objet passé en paramètre ;
- removeAllElements() : vide le vecteur ;
- size() : retourne la taille du vecteur, c'est-à-dire le nombre d‟éléments que
celui-ci contient ;
- isEmpty() : retourne true si le vecteur est vide, si non false ;

Exemple d‟utilisation de la classe Vector :


Public class Programme {
Public static void main (String[] args){
//déclaration et initialisation du vecteur
Vector tableau = new Vector();
//avant chargement du vecteur
System.out.println("isEmpty() : "+tableau.isEmpty());
System.out.println("size() : "+tableau.size());
System.out.println("contains(Objetc obj) :
"+tableau.contains("SERGE"));

//chargement du vecteur avec boucle


for(int i=0; i<10; i++)tableau.addElement("Element "+i);

//parcours du contenu à l'aide de la boucle for


System.out.println("Parcours du contenu à l'aide de la boucle for");
for(int i=0; i<tableau.size(); i++)System.out.println("- "+tableau.elementAt(i));

//parcours du contenuu à l'aide de la boucle while


System.out.println("Parcours du contenu à l'aide de la boucle while");
int indice = 0;
while(indice<tableau.size()){
System.out.println("- "+tableau.elementAt(indice));
indice ++;
}
}
}
Résultat de l‟exécution :
isEmpty() : true
size() : 0
contains(Objetc obj) : false
Parcours du contenu à l'aide de la boucle for
- Element 0
- Element 1
- Element 2
- Element 3
- Element 4
143

- Element 5
- Element 6
- Element 7
- Element 8
- Element 9
Parcours du contenu à l'aide de la boucle while
- Element 0
- Element 1
- Element 2
- Element 3
- Element 4
- Element 5
- Element 6
- Element 7
- Element 8
- Element 9

I.6.6 La classe « String » et la manipulation des chaînes de caractères


En java, les chaînes de caractères ne sont pas des tableaux des
caractères mais tout simplement des objets instances de la classe String.
Entant que chaîne, ces objets jouissent de particularités suivantes :
- Il est possible de les créer au moyen d‟un initialiseur (texte écrit entre
guillemets), sans passer par l‟opérateur « new » ;
Exemple : String txt = „‟Salut‟‟ ;
- Java définit un opérateur de concaténation : l‟opérateur « + » ;
Exemple : Systemm.out.println („‟2 + 3 = „‟ + (2+3) + „‟ !‟‟) ;
Voici quelques méthodes définies dans la classe String :
Soit la chaîne : String txt = ‘’Bonjour tout le monde ’’ ;
 txt.length() : retourne le nombre des caractères de txt ;
 txt.charAt(1) : retourne „‟o‟‟, le caractère de rang „‟1‟‟. Les rangs des
caractères vont de 0 à txt.length()-1 ;
 txt.equals(autresChaine) : retourne „‟true‟‟ si les deux chaînes ont la
même valeur ;
 txt.trim() : retourne une chaîne sans espace de début et de fin ;
 txt.toUpperCase() : retourne une chaîne transformée en majuscule ;
 txt.toLowerCase() : retourne une chaîne transformée en minuscule ;
144

 txt.split(ACouper) : retourne un tableau des chaînes venant du découpage


de txt en fonction du critère en paramètre ;

Analysons l‟exemple ci-dessous : un programme java (développé selon la


méthode Orientée Objet) qui compte et affiche le nombre de fois qu‟une voyelle
donnée est reprises dans une phrase.
Classe CompteurVoyelle :
public class CompteurVolyelle {

//les attributs ou champs de la classe

private int nbre_voyelle = 0;


private String voyelle = "";
private String phrase = "";
private Vector liste_voyelle = new Vector();

//constructeur

public CompteurVolyelle(String phrase, String voyelle) {


this.phrase = phrase;
this.voyelle = voyelle;
initialiser_voyelles(); //appel de la méthode (branchement)
}

private void initialiser_voyelles() {


liste_voyelle.addElement("a");
liste_voyelle.addElement("e");
liste_voyelle.addElement("i");
liste_voyelle.addElement("o");
liste_voyelle.addElement("u");
liste_voyelle.addElement("y");
}

private void Compter() {


String[] tableauVoyelle = phrase.split("");
for (int i = 0; i < tableauVoyelle.length; i++) {
if (tableauVoyelle[i].equals(voyelle)) {
nbre_voyelle++;
}
}
}

public void parler() {


if (liste_voyelle.contains(voyelle)) {
145

Compter();
System.out.println("Phrase [" + phrase + "]");
System.out.println("La voyelle [" + voyelle + "] y est reprise " + nbre_voyelle + "
fois.");
}else {
System.out.println("[" + voyelle + "] n'est pas reconnue comme voyelle !");
System.out.println("Impossible de compter !");
}

public static void main(String[] args) {


String phrase = "je suis en république démocratique du congo";
String voyelle = "t";
CompteurVolyelle compteur = new CompteurVolyelle(phrase, voyelle);
compteur.parler();

System.out.println();
voyelle = "u";
compteur = new CompteurVolyelle(phrase, voyelle);
compteur.parler();

}
}
Résultat de l‟exécution du programme :
[t] n'est pas reconnue comme voyelle !
Impossible de compter !

Phrase [je suis en république démocratique du congo]


La voyelle [u] y est reprise 5 fois.

I.6.7 La gestion des exceptions


Dans tout programme, le traitement des erreurs représente une tâche
importante, souvent négligée par les programmeurs. Java dispose d'un
mécanisme très efficace pour obliger, autant que possible, les programmeurs à
prendre en compte cet aspect de leur travail, tout en leur facilitant la tâche au
maximum.
La gestion des exceptions est prévue pour traiter des erreurs
détectées pendant l‟exécution du programme. Il permet en outre de distinguer
146

clairement l‟endroit du programme où l‟erreur peut arriver de l‟endroit du


programme où l‟erreur est traitée.
Avec le mécanisme des exceptions, le programmeur a la possibilité :
- de traiter l‟erreur directement par la méthode dans laquelle l‟erreur s‟est
produite, on dit que l‟erreur est récupérée ;
- ou alors, propager l‟erreur pour être traitée au niveau supérieur (par la
méthode appelante), et ainsi de suite. On recourt à la propagation d‟erreur
au cas où la méthode dans laquelle l‟erreur a été constatée n‟est pas
compétente pour faire son traitement. En remontant les étages, si aucune
méthode du programme ne récupère l‟exception, cette dernière est alors
traitée automatiquement et conduit en général à une erreur fatale (erreur
pouvant interrompre l‟exécution du programme).

Classification des exceptions


Les exceptions sont des Objets, instances de la classe Exception ou des ses
classes dérivées. La classe Exception hérite elle-même de la classe générale
Throwable. De ce fait, toutes les exceptions sont caractérisées par un attribut de
type String, un texte qui spécifie le message d‟erreur associé à l‟exception.
a. Récupération de l’exception :

En java, l‟instruction try…catch permet de récupérer la levée d‟une exception


en écrivant le code de traitement, comme par exemple la classe Calculateur ci-
dessous :
public class Calculateur {
int a = 0;
int b = 0;

public Calculateur(int a, int b){


this.a = a;
this.b = b;
}

private int calculerDivision(){


int rep = 0;
try{
147

rep = a / b; //instruction susceptible de générer


l‟exception
}catch(Exception e){
System.out.println("Une exception vient d'être capturée et traitée
!");
rep = a / 1;
}
return rep;
}

public void Afficher(){ //la méthode appelante


int resultat = calculerDivision();
System.out.println("a/b = " +resultat);
}

public static void main(String[] args){


Calculateur c1 = new Calculateur(12, 2);
c1.Afficher();
System.out.println();
c1 = new Calculateur(12, 0);
c1.Afficher();
}

}
Résultat de l‟exécution :
a/b = 6

Une exception vient d'être capturée et traitée !


a/b = 12

Dans le code ci-dessus, c‟est la méthode calculerDivision() qui récupère


l‟exception levée et la traite après avoir affiché un message à l‟écran.
b. Propagation de l’exception :

L‟instruction throws Exception placée à l‟en-tête de la méthode,


permet de propager une exception. Elle signale que la méthode considérée est
également susceptible de générer une exception mais qui sera traitée par la
méthode appelante. Alors, la classe Calculateur devient :
public class Calculateur {

int a = 0;
148

int b = 0;

public Calculateur(int a, int b){


this.a = a;
this.b = b;
}

private int calculerDivision() throws Exception{ //exception propagée


int rep = 0;
rep = a / b;
return rep;
}

public void Afficher(){ //récupération et traitement de l‟exception par l‟appelante


int resultat;
try {
resultat = calculerDivision();
} catch (Exception ex) {
System.out.println("Une exception vient d'être capturée et traitée !");
resultat = a / 1;
}
System.out.println("a/b = " +resultat);
}

public static void main(String[] args){


Calculateur c1 = new Calculateur(12, 2);
c1.Afficher();
System.out.println();
c1 = new Calculateur(12, 0);
c1.Afficher();
}

}
Résultat de l‟exécution :
a/b = 6

Une exception vient d'être capturée et traitée !


a/b = 12

I.6.8 Lecture de données tapées au clavier


Aucun programme ne peut se passer de communiquer avec le
monde extérieur. Cette communication consiste à recevoir des données à traiter,
et à renvoyer les données traitées. La première opération constitue une entrée, la
seconde une sortie. Les programmes que nous avons réalisés jusqu‟ici ne
149

comportaient aucune entrée, car ils traitaient les données qui avaient été incluses
dans le programme lui-même. Dans ce point, nous allons étudier une possibilité
d‟entrée de données aux programmes Java.
Pour effectuer une entrée de donné simple en Java, la démarche se
résume en quelques opérations suivantes :
- Ouverture d'un moyen de communication (BufferedReader);
- Lecture des données (InputStreamReader et System.in) ;
- Fermeture du moyen de communication (.close()).

Exemple : Un programme java qui lit un texte passé au clavier et retourne le


même texte en majuscule :
public class Calculateur {
public static void main(String[] args){
BufferedReader tempon = null;
String donnee = "";
System.out.println ("Veillez taper votre texte : ");
try{
tempon = new BufferedReader(new
InputStreamReader(System.in));
donnee = tempon.readLine();
tempon.close();
}catch(Exception e){
System.out.println ("Un problème lors de lecture des données
!");
donnee = "Pas de texte.";
}
System.out.println ("résultat : "+donnee.toUpperCase());
}
}
Résultat de l‟exécution :
Veillez taper votre texte :
la republique democratique du congo
résultat : LA REPUBLIQUE DEMOCRATIQUE DU CONGO

Notons que les données passées au clavier sont accessibles grâce à


la méthode .readLine() de la classe BufferedReader, sous forme des chaînes de
caractères (String). Cependant, le programme ne pourra pas uniquement lire et
manipuler des chaînes mais également d‟autres types de données, tels que des
150

int, des doubles, des long, etc. Il y a alors nécessité de les reconvertir au format
natif avant des les utiliser dans le programme. La conversion de type
(transtypage ou casting) est donc le mécanisme approprié à cet effet.
Conversion de types :
En Java, les conversions de type se font par des méthodes. Ces
méthodes sont implémentées dans des API de la librairie J2SE (String, Integer,
Long, Float, Double et Boolean).
a. Conversion des valeurs numériques en chaînes de caractères

Il suffit de faire une concaténation avec une chaîne des caractères vide :
public class Calculateur {
public static void main(String[] args) {
int a = 12;
String aa = a+"";
}
}

b. Conversion d’une chaîne des caractères en entier

public class Calculateur {


public static void main(String[] args) {
String a = "12";
int aa = Integer.parseInt(a);
}
}

c. Conversion d’une chaîne des caractères en double

public class Calculateur {


public static void main(String[] args) {
String a = "12";
double aa = Double.parseDouble(a);
}
}

d. Conversion d’une chaîne des caractères en long

public class Calculateur {


public static void main(String[] args) {
151

String a = "12";
long aa = Long.parseLong(a);
}
}

e. Conversion d’une chaîne des caractères en boolean

public class Calculateur {


public static void main(String[] args) {
String a = "true";
boolean aa = Boolean.parseBoolean(a);
}
}
152

EXERCICES
I. LES CLASSES ET LES OBJETS

Exercice 1.1 : Réaliser une classe POINT permettant de représenter un point


sur un axe. Chaque point sera caractérisé par un nom (de type char) et une
abscisse (de type double). On prévoira :
- Un constructeur recevant en argument le nom et l’abscisse d’un point ;
- Une méthode affiche imprimant (en fenêtre console) le nom du point et
son abscisse ;
- Une méthode translate effectuant une translation définie par la valeur de
son argument.

Ecrire un programme utilisant cette classe pour créer un point, en afficher les
caractéristiques, le déplacer et en afficher à nouveau les caractéristiques.

Exercice 1.2 : Que fournit le programme suivant :


public class A {
private int nbre = 20;
private int decal;

public A (int coeff){


this.nbre *= coeff;
this.nbre += decal;
}

public void affiche(){


System.out.println("nbre = " + nbre + " decal = " + decal);
}

public static void main(String[] args){


A a = new A(5);
a.affiche();
}
}
153

II. L‟HERITAGE ET LE POLYMORPHISME

Exercice 2.1 : On dispose de la classe suivante :


public class Point {
private int x, y;

public void initialise(int x, int y){


this.x = x;
this.y = y;
}

public void deplace(int dx, int dy){


x +=dx;
y +=dy;
}

public int getX(){


return x;
}

public int getY(){


return y;
}
}
- Réaliser une classe PointA, dérivée de Point disposant d’une méthode
affiche affichant (en fenêtre console) les coordonnées d’un point.
- Ecrire un petit programme utilisant le deux classes Point et PointA.
- Que se passerait-il si la classe Point ne disposait pas des méthodes getX()
et getY().

Exercice 2.2 : On dispose de la classe suivante :


public class PointT {
private int x, y;

public void setPointT(int x, int y){


this.x = x;
this.y = y;
}

public void deplace(int dx, int dy){


x +=dx;
y +=dy;
}

public void afficher_Coordonnees(){


System.out.println("Coordonnées : "+x+"-"+y);
}
}
154

Réaliser une classe PointNom, dérivée de Point permettant de manipuler des


points définis par deux coordonnées (int) et un nom (caractère). On y
retrouvera les méthodes suivantes :
- PointNom pour définir les coordonnées et le nom d’un objet de type
PointNom ;
- setNom pour définir seulement le nom d’un tel objet ;
- affCoordNom pour afficher les coordonnées et le nom d’un objet de type
PointNom.

Ecrire un petit programme utilisant la classe PointNom.

III. LES INSTRUCTIONS DE CONTROLE

Exercice 3.1 : Quelles erreurs ont été commises dans chacun des groupes
d’instructions suivants. On suppose que les variables concernées sont d’un type
primitif numérique et qu’elles ont été correctement déclarées (un groupe ne
comporte aucune erreur) :

public class Quelle_erreur {

public static void main(String[] args) {


int a,b,n,p,max;
//groupe 1
if(a<b)System.out.println ("ascendant")
else System.out.println("non ascendant");

//groupe 2
if(a<b){
System.out.println ("ascendant");
max = b
}

//groupe 3
switch (n) {
case 2:System.out.println ("petit");
break;
case p :System.out.println ("petit");
break;
}

//groupe 4
final int LIMITE = 20;
switch (n) {
case LIMITE - 1:System.out.println ("un peu trop petit");
break;
155

case LIMITE : System.out.println ("ok");


break;
case LIMITE + 1 :System.out.println ("un peu trop grand");
break;
}
}
}

Exercice 3.2 : Soit le programme suivant :


public class ExoII4a {
public static void main(String[] args) {
int i, n, som;
som = 0;
for(i=0; i<4; i++){
System.out.println((i+1)+") donner un entier : ");
n = Clavier.LireEntier();
som += n;
}
System.out.println(" Somme : "+som);

}
}

Ecrire un programme réalisant la même chose en employant à la place de


l’instruction for :
1. Une instruction while ;
2. Une instruction do…while ;

IV. LES TABLEAUX

Exercice 4.1 : Ecrire un programme qui :


- Lit dans un tableau 5 valeurs flottantes fournies au clavier ;
- En calcule et en affiche la moyenne, la plus grande et la plus petite
valeur.

Exercice 4.2 : Ecrire une classe utilitaire UtilTab disposant des méthodes
statiques suivantes ;
- Somme qui fournit la somme des valeurs d’un tableau des réels (doubles)
de taille quelconque ;
- Incre qui incrémente d’une valeur donnée toutes les valeurs d’un tableau
de réels (double).
156

Ecrire un petit programme d’essai. Pour faciliter les choses, on pourra


également doter la classe UtilTab d’une méthode d’affichage des valeurs d’un
tableau de réels.
V. LA CLASSE STRING

Exercice 5.1 : Ecrire un programme qui lit un mot ou une phrase au clavier et
qui indique combien de fois sont présentes chacune des voyelles a, e, i, o, u ou y,
que celle-ci soient écrites en majuscules ou en minuscules, comme dans cet
exemple :
Tapez votre mot ou phrase :
LA REPUBLIQUE DEMOCRATIQUE DU CONGO EST EN PAIX MAINTENANT
Il comporte :
5 fois la lettre a
7 fois la lettre e
4 fois la lettre i
3 fois la lettre o
4 fois la lettre u
0 fois la lettre y

Exercice 5.2 : Ecrire un programme qui lit une phrase au clavier et qui indique
combien de voyelles celle-ci contient, comme dans cet exemple :
Tapez votre mot ou phrase :
la republique democratique du congo
Il comporte 15 voyelles !
157

Chapitre 7.

Conduite d‟un projet informatique

1. Le schéma directeur

Un schéma directeur est un dessein d‟ensemble qui comporte les traits essentiels
du dessein de l‟entreprise, c‟est-à-dire du système d‟information cible dont elle a
l‟ambition de se doter, ainsi que des efforts qui seront nécessaires à la réussite
de cette ambition.

La phase schéma directeur a donc pour objet de planifier le développement du


système d‟information cible, c‟est-à-dire d‟identifier, de qualifier, de justifier, de
prioriser et de planifier les projets de développement du système d‟information
qui serviront au mieux la stratégie de l‟entreprise.

A cet effet, le schéma directeur partitionne l‟entreprise en domaines d‟activité. Il


répond à une question : à quels besoins stratégiques de l‟entreprise satisfait
chacun des projets ?

2. Etude préalable

Dans tout projet de développement, avant de lancer définitivement un chantier,


il sied de s‟assurer sur certains points que la réalisation cadrera réellement avec
le budget initialement prévu, que les paramètres sociaux ou les contraintes de
l‟environnement ont été appréhendées exhaustivement et correctement, que la
faisabilité technique est assurée, que les mesures d‟accompagnement ont été
prévues, que la justification du projet est réellement fondées. Tel est l‟objet de
l‟étude préalable.

L‟étude préalable détermine le plan de développement et de mise en place


(étapes intermédiaires, moyens, planning, enjeux, bilan des coûts). Tout ceci est
formalisé dans un dossier d‟étude préalable qui doit permettre :

- au maître d‟ouvrage de comprendre ce qui lui est proposé par le maître


d‟œuvre afin de prendre les bonnes décisions pour la suite (arrêt,
continuation selon la trajectoire prévue ou selon une trajectoire corrigée).
- De constituer la base de travail pour les phases suivantes.

Lors de l‟étude préalable appelée aussi étude d‟opportunité, on fait l‟étude de


l‟existant. Pour ce faire, on s‟appuie sur l‟organigramme pour comprendre la
158

structure de l‟entreprise (les postes et leurs relations réciproques, ascendantes,


horizontales etc.). Dans cette approche, on établit le schéma de circulation des
informations. Le rapport, à la fin de cette étude, doit ressortir les points forts et
faibles sur les plans humains (y-a-t il des gens formés en informatique ?),
financier (quel est coût de l‟informatisation ?), matériel (est-on doté des
matériels appropriés ?).

En cas d‟acceptation du rapport par le comité directeur de l‟entreprise, on peut


passer alors à la conception.
159

Chapitre 8.

Résolution des problèmes impliquant la conception et la réalisation d‟une base


de données.

Les bases de données

Quel est le point de vue du gestionnaire sur la gestion de base de données ?

L‟information est considérée de nos jours comme une ressource stratégique dans
beaucoup d‟entreprises. Cela revient à dire qu‟une mauvaise gestion de
l‟information peut entraîner une désorganisation ou un chaos au sein de
l‟entreprise.

Quelle serait notre réaction, en tant que dirigeant d‟une entreprise qui utilise
l‟informatique, si l‟on nous disait qu‟il est trop difficile et trop coûteux d‟obtenir
certains renseignements utiles que nous réclamons sur les employés ?

Et pour justifier cela, on invoque les raisons suivantes :

a) l‟information requise se trouve dans plusieurs fichiers qui sont organisés


différemment.
b) Tous les fichiers sont organisés de manière à fonctionner avec des
programmes d‟application différents, mais aucun d‟entre eux ne produit
l‟information voulue dans le bon format.

Au regard de ces explications, en tant que dirigeant, nous serons probablement


mécontent et déçu du traitement par ordinateur. C‟est le sentiment qu‟éprouvent
les utilisateurs lorsqu‟une organisation a recours à des systèmes de traitement de
fichiers où les données sont organisées, stockées et traitées dans des fichiers
indépendants.

Ce qui précède justifie le recours à la méthode de gestion de base de données où


les fichiers sont consolidés en un fonds commun d‟enregistrements accessibles
par divers programmes d‟application.

En plus, un progiciel important, nommé système de gestion de base de données


(SGBD), sert d‟interface entre les utilisateurs et les bases de données. Les
utilisateurs ont ainsi facilement accès aux enregistrements d‟une base de
données. Par exemple, si toutes les données concernant un étudiant étaient
160

stockées dans une base de données commune, on pourrait utiliser une fonction
de langage d‟interrogation du SGBD pour obtenir facilement l‟information
désirée.

Pendant de nombreuses années, les systèmes d‟information se concentraient


essentiellement sur le traitement des fichiers. Les données nécessaires pour
chaque application d‟utilisateur étaient stockées dans des fichiers indépendants.
Le traitement consistait à utiliser des programmes informatiques différents.
Notons que la méthode de traitement des fichiers est toujours utilisée, mais
plusieurs difficultés importantes limitent son efficacité et son efficience pour des
applications des utilisateurs.

Quels sont les problèmes engendrés par le traitement des fichiers pour les
applications des utilisateurs ?

- La duplication des données

Les fichiers de données indépendantes comprennent une foule de données qui e


répètent : les mêmes données (comme le nom, adresse du client) sont
enregistrées et stockées dans plusieurs fichiers. Cette redondance des données
pose de sérieux problèmes lors de la mise à jour, puisqu‟il faut mette au point et
coordonner des programmes distincts afin d‟assurer la mise à jour de caque
fichier. La mise à jour des fichiers est processus coûteux et laborieux qui accroît
les exigences de mémoire externe de l‟ordinateur.

- Le manque d‟intégration des données

La dispersion des données dans des fichiers indépendants complique l‟accès des
utilisateurs à l‟information lors des demandes qui font appel à des données
stockés dans plusieurs fichiers différents. Il faut créer des programmes différents
pour extraire les données de chaque fichier indépendant. En raison de la
longueur et la lenteur de cette démarche, certaines entreprises se voient dans
l‟incapacité de fournir l‟information désirée aux utilisateurs ou à la direction.
Parfois les utilisateurs doivent extraire manuellement l‟information requise dans
divers rapports produits par chaque application, et rédiger des rapports
personnalisés à l‟intention de la direction.

- La dépendance des données

Dans les systèmes de traitement des fichiers, les principales composantes


(l‟organisation des fichiers, leur emplacement physique dans les mémoires et le
logiciel d‟application utilisé pour accéder aux fichiers) sont interdépendantes.
Ainsi, les changements de disposition et de structure des données et les
161

changements dans les enregistrements d‟un fichier entraînent des modifications


dans tous les programmes qui utilisent ce fichier.

Les figures ci-dessous montrent les opérations bancaires effectuées par les
systèmes de traitement de fichiers. On remarque que le recours à des
programmes informatiques distincts et à des fichiers indépendants selon la
méthode de traitement de fichiers appliquée aux comptes d‟épargne, aux prêts à
tempérament et aux comptes chèques.

Traitement des comptes chèques

Etats des comptes du client

Mise à jour du fichier programme de comptes chèques


Des comptes chèques

Traitement des prêts à tempérament

Rapports d‟analyse des prêts

Mise à jour du fichier programme de prêts à tempérament


Des prêts à tempérament
162

Traitement des comptes épargne

Quittance du client

Opérations du client

Mise à jour du fichier programme de comptes épargne


Des comptes d‟épargne

La solution à ces problèmes est le recours à la base de données. Celle-ci est un


ensemble intégré d‟enregistrements et de fichiers liés selon une logique. Les
données stockées dans l base de données sont indépendantes de programmes qui
les utilisent.

Traitement des opérations des clients

Programme des
Comptes chèques
Pgr. Compte prg. Prêt à
Epargne tempérament

Système de gestion de bases de données


163

Base de données sur la clientèle

Quel est le point de vue de l‟informaticien de gestion sur la base de


données ?

1. Conception d‟un schéma relationnel. Il s‟agit de savoir définir un schéma


relationnel complet et correct, comprenant des tables, des contraintes, des vues.
2.
Langages d‟interrogation et de manipulation. L‟accent est mis sur SQL et ses
fondements, et sur l‟intégration de SQL avec un langage de programmation
comme le C.
De plus, le cours comprend une introduction aux problèmes de concurrence
d‟accès, dont la connaissance est nécessaire aux développeurs d‟applications
basées sur des SGBD. Des travaux pratiques avec le SGBD ORACLE
permettent de mettre en œuvre les techniques étudiées.

L‟accent est donc plutôt mis sur les notions de base (qu‟est-ce qu‟un SGBD,
qu‟une base de données, qu‟un langage d‟interrogation) et leur application
pratique. Il demandé d‟avoir acquis à la fin du cours les connaissances
nécessaires à l‟utilisation d‟un SGBD par un informaticien non-spécialiste:
création d‟un schéma, insertion, mise-à-jour, destruction, interrogation de
données, et compréhension des mécanismes de concurrence intervenant dans la
gestion d‟un SGBD. En revanche, tout ce qui relève de la compréhension des
mécanismes internes d‟un SGBD (représentation physique, évaluation de
requêtes) ou des fondements théoriques du modèle relationnel n‟est pas abordé
ici.

Pour bien comprendre le point de vue de l‟informaticien sur cette question, nous
pensons que la première chose à faire est d‟établir quelques points de
terminologie.

Qu‟est-ce qu‟une donnée ? C‟est une information quelconque comme, par


exemple : voici une personne, elle s‟appelle Kanga. C‟est aussi une relation
entre des informations : Kanga enseigne le cours d‟informatique de gestion.
164

Des relations de ce genre définissent des structures.

Une base de données est un ensemble, en général volumineux, de telles


informations, avec une caractéristique essentielle : on souhaite les mémoriser de
manière permanente. D‟où la définition ci-après :

Une Base de données est un gros ensemble d‟informations structurées


mémorisées sur un support permanent.

On peut remarquer qu‟une organisation consistant en un (ou plusieurs) fichier(s)


stockés sur mémoire externe est conforme à cette définition. Si nous disions que
c‟est un ensemble de fichiers ne présentant qu‟une complexité assez faible, il
n‟y aurait pas là matière à longue dissertation. Malheureusement l‟utilisation
directe de fichiers soulève beaucoup de problèmes tels que:

- La lourdeur d‟accès aux données. En pratique, pour chaque accès, même


le plus simples, il faudrait écrire un programme ;

- Le manque de sécurité. Si tout programmeur peut accéder directement aux


fichiers, il est impossible de garantir la sécurité et l‟intégrité des données ;

- L‟absence de contrôle de concurrence. Dans un environnement où


plusieurs utilisateurs accèdent aux mêmes fichiers, des problèmes de
concurrence d‟accès se posent.

D‟où le recours à un logiciel chargé de gérer les fichiers constituant une base de
données, de prendre en charge les fonctionnalités de protection et de sécurité et
de fournir les différents types d‟interface nécessaires à l‟accès aux données. Ce
logiciel (le SGBD) est très complexe et fournit le sujet principal de ce chapitre.

En particulier, une des tâches principales du SGBD est de masquer à l‟utilisateur


les détails complexes et fastidieux liés à la gestion de fichiers. Cela étant dit,
nous pouvons formuler la définition suivante :

Un Système de Gestion de Bases de Données (SGBD) est un logiciel de haut


niveau qui permet de manipuler les informations stockées dans une base de
données.

La complexité d‟un SGBD est essentiellement issue de la diversité des


techniques mises en œuvre, de la multiplicité des composants intervenant dans
son architecture, et des différents types d‟utilisateurs (administrateurs,
programmeurs, non informaticiens, ...) qui sont confrontés, à différents niveaux,
au système.
165

En résumé, un SGBD est destiné à gérer un gros volume d‟informations,


persistantes (années) et fiables (protection sur pannes), partageables entre
plusieurs utilisateurs et/ou programmes et manipulées indépendamment de leur
représentation physique.

Que doit-on savoir pour utiliser un SGBD ?

L‟utilisation d‟un SGBD suppose la compréhension et le savoir-faire en


fonctionnalités suivantes :

1. Définition du schéma de données en utilisant les modèles de données du


SGBD.
2. Opérations sur les données : recherche, mises-à-jour, etc.
3. Partager les données entre plusieurs utilisateurs. (Mécanisme de transaction).
4. Optimiser les performances, par le réglage de l‟organisation physique des
données. Cet aspect relève plutôt de l‟administration et ne sera évoqué que dans
l‟introduction.

Commentons dans l‟ordre ces différents points.

- Définition du schéma de données

Un schéma est simplement la description des données contenues dans la base.


Cette description est conforme à un modèle de données qui propose des outils de
description (structures, contraintes et opérations).

En fait, dans un SGBD, il existe plusieurs modèles plus ou moins abstraits des
mêmes objets, à savoir :

- Le modèle conceptuel : la description du système d‟information ;


- Le modèle logique : interface avec le SGBD ;
- Le modèle physique : fichiers.
-
Ces différents modèles correspondent aux niveaux dans l‟architecture d‟un
SGBD. Prenons l‟exemple du modèle conceptuel le plus courant : le modèle
Entité/Association. C‟est essentiellement une description très abstraite qui
présente les avantages suivants :

- L‟analyse du monde réel


- La conception du système d‟information
- La communication entre différents acteurs de l‟entreprise
166

En revanche, il ne propose pas d‟opérations. Or définir des structures sans


disposer d‟opérations pour agir sur les données stockées dans ces structures ne
présente pas d‟intérêt pratique pour un SGBD. D‟où, à un niveau inférieur, des
modèles dits “logiques” qui proposent :

1. Un langage de définition de données (LDD) pour décrire la structure, incluant


des contraintes.
2. Un langage de manipulation de données (LMD) pour appliquer des opérations
aux données.
Ces langages sont abstraits : le LDD est indépendant de la représentation
physique des données, et le LMD est indépendant de l‟implantation des
opérations. On peut citer une troisième caractéristique : outre les structures et les
opérations, un modèle logique doit permettre d‟exprimer des contraintes
d‟intégrité sur les données.

Exemple :

nom character 15, not null;

âge integer between 0 and 100;

débit = crédit;
167

Bien entendu, le SGBD doit être capable de garantir le respect de ces


contraintes. Quand on conçoit une application pour une BD, on tient compte
(plus ou moins consciemment) de cette architecture en plusieurs niveaux.

Typiquement : (1) On détermine la structure logique ; (2) on décide la structure


physique ; (3) on écrit les programmes d‟application en utilisant la structure
logique, enfin (4) Le SGBD se charge de transcrire les commandes du LMD en
instructions appropriées appliquées à la représentation physique.

Cette approche offre de très grands avantages : Tout d‟abord elle ouvre
l‟utilisation des SGBD à des utilisateurs non-experts : les langages proposés par
les modèles logiques sont plus simples, et donc plus accessibles, que les outils
de gestion de fichiers.

Ensuite, on obtient une caractéristique essentielle : l‟indépendance physique. On


peut modifier l‟implantation physique sans modifier les programmes
d‟application. Un concept voisin est celui d‟indépendance logique : on peut
modifier les programmes d‟application sans toucher à l‟implantation.

Enfin le SGBD décharge l‟utilisateur, et en grande partie l‟administrateur, de la


lourde tâche de contrôler la sécurité et l‟intégrité des données.

Quelles opérations effectue-t-on sur les données ?

Il existe 4 opérations classiques (ou requêtes):

1. La création (ou insertion).


2. La modification (ou mise-à-jour).
3. La destruction.
4. La recherche.

Ces opérations correspondent à des commandes du LMD. La plus complexe est


la recherche en raison de la variété des critères.

Pour l‟utilisateur, une bonne requête a les caractéristiques suivantes. Tout


d‟abord elle s‟exprime facilement : l‟idéal serait de pouvoir utiliser le langage
naturel, mais celui-ci présente trop d‟ambigüités.
168

Ensuite le langage ne devrait pas demander d‟expertise technique (syntaxe


compliquée, structures de données, implantation particulière ...). Il est également
souhaitable de ne pas attendre trop longtemps (à charge pour le
SGBD de fournir des performances acceptables).

Enfin, la réponse doit être fiable.

Une bonne partie du travail sur les SGBD consiste à satisfaire ces besoins. Le
résultat est ce que l‟on appelle un langage de requêtes, et constitue une
caractéristique essentielle de chaque SGBD. Le langage le plus répandu à
l‟heure actuelle est SQL.

A propos de l‟optimisation

L‟optimisation (d‟une requête) s‟appuie sur l‟organisation physique des


données. Les principaux types d‟organisation sont les fichiers séquentiels, les
index séquentiels (denses. secondaires, arbres B) et le regroupement des données
par hachage.

Un module particulier du SGBD, l‟optimiseur, tient compte de cette organisation


et des caractéristiques de la requête pour choisir le meilleur séquencement des
opérations.

Comment gérer la Concurrence d‟accès ?

Plusieurs utilisateurs doivent pouvoir accéder en même temps aux mêmes


données. Le SGBD doit savoir :

– Gérer les conflits si les deux font des mises-à-jour ;


– Offrir un mécanisme de retour en arrière si on décide d‟annuler des
modifications en cours ;
– Donner une image cohérente des données si l‟un fait des requêtes et l‟autre des
mises-à-jour ;

Le but est d‟éviter les blocages, tout en empêchant des modifications


anarchiques.
169

LE MODÈLE ENTITÉ/ASSOCIATION

Considérons une table livre stockant des ouvrages avec quelques informations
de base, dont l‟auteur. Voici une représentation de cette table.

Titre année nomAuteur prénomAuteur AnnéeNaiss

Cuisine 1999 Malewa Cecile 1960


Algorithme 2013 Kanga Emmanuel 1952
Adolescence 2013 Muamba Louis 1951
Psychosociale 2011 Kanga Emmanuel 1952
Apa 2008 Mabenza Betty 1995
Université 2000 Bumba Monga 1952

Nous constatons que même pour une information aussi simple, il est facile
d‟énumérer tout un ensemble de problèmes potentiels. Tous ou presque
découlent d‟un grave défaut de la table ci-dessus : il est possible de représenter
la même information plusieurs fois.

Anomalies lors d‟une insertion

Rien n‟empêche de représenter plusieurs fois le même titre. Pire : il est possible
d‟insérer plusieurs fois le titre Algorithme en le décrivant à chaque fois de
manière différente, par exemple en lui attribuant une fois comme auteur Kanga
puis une autre fois Bumba, etc.

Une bonne question consiste d‟ailleurs à se demander ce qui distingue deux


titres l‟un de l‟autre, et à quel moment on peut dire que la même information a
été répétée.

Peut-il y avoir deux livres différents avec le même titre par exemple ? Si la
réponse est non, alors on devrait pouvoir assurer qu‟il n‟y a pas deux lignes dans
la table avec la même valeur pour l‟attribut titre. Si la réponse est oui, il reste à
170

déterminer quel est l‟ensemble des attributs qui permet de caractériser de


manière unique un livre.

Anomalies lors d‟une modification

La redondance d‟information entraîne également des anomalies de mise à jour.


Supposons que l‟on modifie l‟année de naissance de Kanga pour la ligne
Algorithme et pas pour la ligne Psychosociale. On se retrouve alors avec des
informations incohérentes.

Les mêmes questions que précédemment se posent d‟ailleurs. Jusqu‟à quel point
peut-on dire qu‟il n‟y a qu‟un seul auteur nommé Kanga, et qu‟il ne doit donc y
avoir qu‟une seule année de naissance pour un auteur de ce nom ?

Anomalies lors d‟une destruction

On ne peut pas supprimer un titre sans supprimer du même coup son auteur. Si
on souhaite, par exemple, ne plus voir le livre Apa figurer dans la base de
données, on va effacer du même coup les informations sur Mabenza Betty.

Quelle est la bonne approche ?

Pour éviter les anomalies exposées ci-dessus, une bonne approche consiste à :

1.être capable de représenter individuellement les titres et les auteurs, de


manière à ce qu‟une action sur l‟un n‟entraîne pas systématiquement une action
sur l‟autre ;

2. définir une méthode d‟identification d‟un titre ou d‟un auteur, qui permette
d‟assurer que la même information est représentée une seule fois ;

3. préserver le lien entre les titres et les auteurs, mais sans introduire de
redondance.

Commençons par les deux premières étapes. On va d‟abord distinguer la table


des livres et la table des réalisateurs. Ensuite on décide que deux livres ne
peuvent avoir le même titre, mais que deux auteurs peuvent avoir le même nom.
Afin d‟avoir un moyen d‟identifier les auteurs, on va leur attribuer un numéro,
désigné par code. On obtient le résultat suivant.
171

Table livre

titre année

Cuisine 1999
Algorithme 2013
Adolescence 2013
Psychosociale 2011
Apa 2008
Université 2000

Table auteur

Code nomAut PrenomAut AnnéeNaiss

1 Malewa Cécile 1960

2 Kanga Emmanuel 1952

3 Mwamba Louis 1951

4 Mabenza Betty 1955

5 Bumba Monga 1952

Nous constatons que maintenant il y a plus de redondance dans la base de


données. Par exemple, l‟auteur Kanga n‟apparaît plus qu‟une seule fois, ce qui
172

élimine les anomalies de mise à jour évoquées précédemment. Il reste à


représenter le lien entre les livres et les auteurs, sans introduire de redondance.
Maintenant que nous avons défini les identifiants, il existe un moyen simple
pour indiquer quel est l‟auteur qui a écrit un livre: associer l‟identifiant du
metteur en scène au film. On ajoute un attribut codeAut dans la table livre, et on
obtient la représentation suivante.

Table livre

titre année codeAut

cuisine 1999 1
Algorithme 2013 2
Adolescence 2013 3
Psychosociale 2011 2
APA 2008 4
Université 2000 5

La nouvelle table des Livres doit être mise en relation avec la table des auteurs.

Cette représentation est correcte. La redondance est réduite au minimum puisque


seule la clé codeAut a été déplacée dans une autre table (on parle de clé
étrangère).

Vérifions maintenant si toutes les anomalies que nous avons évoquées ont été
éliminées.

a) Anomalie d‟insertion.

Maintenant que l‟on sait quelles sont les caractéristiques qui identifient un livre,
il est possible de déterminer au moment d‟une insertion si elle va introduire ou
non une redondance. Si c‟est le cas on doit interdire cette insertion.

b) Anomalie de mise à jour.

Il n‟y a plus de redondance. Ainsi, toute mise à jour affecte l‟unique instance de
la donnée à modifier.

c) Anomalie de destruction.
173

On peut détruire un livre sans affecter les informations sur l‟auteur.

Ce gain dans la qualité du schéma n‟a pas pour contrepartie une perte
d‟information. Il est en effet facile de voir que l‟information initiale (autrement
dit, avant décomposition) peut être reconstituée intégralement.
En prenant un livre, on obtient l‟identité de son auteur, et cette identité permet
de trouver l‟unique ligne dans la table des auteurs qui contient toutes les
informations sur cet auteur.

Ce processus de reconstruction de l‟information, dispersée dans plusieurs tables,


peut s‟exprimer avec SQL.

Concepts de bases de données

Quel est le rôle d‟une colonne dans une table ?

En nous référant aux différentes tables décrites précédemment on admet qu‟une


ligne regroupe des informations sur une entité. Dans cette optique, la valeur
d‟une colonne représente une propriété de cette entité. Cependant toutes le
colonnes ne jouent pas le même rôle vis-à-vis des entités représentées par les
lignes d‟une table.

Qu‟est ce qu‟un identifiant ?

Cette colonne permet d‟identifier une entité et elle aussi la ligne qui représente
cette dernière dans la table. C‟est le cas de code.

Qu‟est ce qu‟une clé étrangère ?

C‟est une colonne qui est une copie de l‟identifiant d‟une autre table. Chacune
de ses valeurs joue le rôle d‟une référence à une ligne de cette table. On
l‟appelle clé étrangère.

Qu‟est ce qu‟un identifiant primaire ?

On peut dans une table imposer plus d‟identifiant. Par exemple une table qui
reprend les informations signalétiques d‟une population dotée d‟une couverture
sociale pourrait inclure, entre autres, une colonne num-inscription et une
colonne num-carte-identité, chacune constituant un identifiant. Parmi les
identifiants d‟une table, l‟un est choisi comme le plus représentatif. Il sera
174

déclaré identifiant primaire, les autres étant les identifiants secondaires de la


table. Toute table possède un identifiant primaire et un nombre quelconque
(éventuellement nul) d‟identifiants secondaires (J.L.Hainaut, 2005, p.35).

Qu‟est ce qu‟une contrainte référentielle ?

Une valeur d‟une clé étrangère constituée de la colonne RA d‟une table B (ou
étant donné l‟existence d‟identifiants multicomposants, constituée d‟un groupe
de colonnes de référence) est destinée à désigner une ligne d‟une table A.
Concrètement, on peut imposer que pour toute valeur de RA dans B, il y ait une
ligne de la table A identifiée par cette valeur. On en déduit une propriété très
importante appelée contrainte référentielle. Celle stipule que l‟ensemble des
valeurs d‟une clé étrangère est à tout instant une partie de l‟ensemble des valeurs
de l‟identifiant primaire de la table référencée.

1.2 Modélisation, cycles de vie et méthodes

1.2.1 Pourquoi et comment modéliser ?

Qu’est-ce qu’un modèle ?

Un modèle est une représentation abstraite et


simplifiée, c’est-à-dire, qui exclut certains
détails, d’une entité (phénomène, processus, système,
etc.) du monde réel en vue de le décrire, de
l’expliquer ou de le prévoir. Modèle est synonyme de
théorie, mais avec une connotation pratique : un
modèle, c’est une théorie orientée vers l’action
qu’elle doit servir.

Concrètement, un modèle permet de réduire la


complexité d’un phénomène en éliminant les détails
qui n’influencent pas son comportement de manière
significative. Il reflète ce que le concepteur croit
important pour la compréhension et la prédiction du
phénomène modélisé. Les limites du phénomène modélisé
dépendant des objectifs du modèle.

Voici quelques exemples de modèles :


175

*Modèle météorologique –*

A partir de données d’observation (satellite, …),


il permet de prévoir les conditions climatiques pour
les jours à venir.

*Modèle économique –*

Il peut par exemple permettre de simuler


l’évolution de cours boursiers en fonction
d’hypothèses macro-économiques (évolution du chômage,
taux de croissance, …).

*Modèle démographique –*

Il définit la composition d’un panel d’une


population et son comportement, dans le but de
fiabiliser des études statistiques, d’augmenter
l’impact de démarches commerciales, etc.

*Plans –*

Les plans sont des modèles qui donnent une vue


d’ensemble du système concerné. Par exemple, dans le
bâtiment, pour la construction d’un immeuble, il faut
préalablement élaborer de nombreux plans :

* plans d’implantation du bâtiment dans son


environnement ;

* plans généraux du bâtiment et de sa structure


;
* plans détaillés des différents locaux,
bureaux, appartements,

* plans des câblages électriques ;

* plans d’écoulements des eaux, etc.

Les trois premiers exemples sont des modèles que l’on


qualifie de prédictifs. Le dernier, plus conceptuel,
176

possède différents niveaux de vues comme la plupart


des modèles en génie logiciel.

Pourquoi modéliser ?

Modéliser un système avant sa réalisation permet de


mieux comprendre le fonctionnement du système. C’est
également un bon moyen de maîtriser sa complexité et
d’assurer sa cohérence. Un modèle est un langage
commun, précis, qui est connu par tous les membres de
l’équipe et il est donc, à ce titre, un vecteur
privilégié pour communiquer. Cette communication
est essentielle pour aboutir à une compréhension
commune aux différentes parties prenantes (notamment
entre la maîtrise d’ouvrage et la maîtrise d’œuvre
informatique) et précise d’un problème donné.

Dans le domaine de l’ingénierie du logiciel, le


modèle permet de mieux répartir les tâches et
d’automatiser certaines d’entre elles. C’est
également un facteur de réduction des coûts et des
délais. Par exemple, les plateformes de modélisation
savent maintenant exploiter les modèles pour faire de
la génération de code (au moins au niveau du
squelette) voire des allers-retours entre le code et
le modèle sans perte d’information. Le modèle est
enfin indispensable pour assurer un bon niveau de
qualité et une maintenance efficace. En effet, une
fois mise en production, l’application va devoir être
maintenue, probablement par une autre équipe et, qui
plus est, pas nécessairement de la même société que
celle ayant créée l’application.

Le choix du modèle a donc une influence capitale sur


les solutions obtenues. Les systèmes non triviaux
sont mieux modélisés par un ensemble de modèles
indépendants. Selon les modèles employés, la démarche
de modélisation n’est pas la même.

Qui doit modéliser ?


177

La modélisation est souvent faite par la maîtrise


d’œuvre informatique
(MOE). C’est malencontreux, car les priorités de la
MOE résident dans le fonctionnement de la plate-forme
informatique et non dans les processus de
l’entreprise.

Il est préférable que la modélisation soit réalisée


par la maîtrise d’ouvrage (MOA) de sorte que le
métier soit maître de ses propres concepts. La MOE
doit intervenir dans le modèle lorsque, après avoir
défini les concepts du métier, on doit introduire les
contraintes propres à la plate-forme informatique.

Il est vrai que certains métiers, dont les priorités


sont opérationnelles, ne disposent pas toujours de la
capacité d’abstraction et de la rigueur conceptuelle
nécessaires à la formalisation.
La professionnalisation de la MOA a pour but de les
doter de ces compétences. Cette professionnalisation
réside essentiellement dans l’aptitude à modéliser le
système d’information du métier : le maître mot est
/modélisation/. Lorsque le modèle du système
d’information est de bonne qualité, sobre, clair,
stable, la maîtrise d’œuvre peut travailler dans de
bonnes conditions. Lorsque cette professionnalisation
a lieu, elle modifie les rapports avec l’informatique
et déplace la frontière des responsabilités, ce qui
contrarie parfois les informaticiens dans un premier
temps, avant qu’ils n’en voient apparaître les
bénéfices.

Maîtrise d’ouvrage et maîtrise d’œuvre

*Maître d’ouvrage (MOA) : *

Le MOA est une personne morale (entreprise,


direction etc.), une entité de l’organisation. Ce
n’est jamais une personne.

*Maître d’œuvre (MOE) : *


178

Le MOE est une personne morale (entreprise,


direction etc.) garante de la bonne réalisation
technique des solutions. Il a, lors de la
conception du SI, un devoir de conseil vis-à-vis du
MOA, car le SI doit tirer le meilleur parti des
possibilités techniques.

Le MOA est client du MOE à qui il passe commande d’un


produit nécessaire à son activité.

Le MOE fournit ce produit ; soit il le réalise lui-


même, soit il passe commande à un ou plusieurs
fournisseurs (« entreprises ») qui élaborent
le produit sous sa direction.

La relation MOA et MOE est définie par un contrat qui


précise leurs engagements mutuels.

Lorsque le produit est compliqué, il peut être


nécessaire de faire appel à plusieurs fournisseurs.
Le MOE assure leur coordination ; il veille à la
cohérence des fournitures et à leur compatibilité. Il
coordonne l’action des fournisseurs en contrôlant la
qualité technique, en assurant le respect des délais
fixés par le MOA et en minimisant les risques.

Le MOE est responsable de la qualité technique de la


solution. Il doit, avant toute livraison au MOA,
procéder aux vérifications nécessaires (« recette
usine »).

1.2.2 Le cycle de vie d’un logiciel

Le cycle de vie d’un logiciel (en anglais software


life cycle), désigne toutes les étapes du
développement d’un logiciel, de sa conception à sa
disparition.

L’objectif d’un tel découpage est de permettre de


définir des jalons intermédiaires permettant la
validation du développement logiciel, c’est-à-dire la
179

conformité du logiciel avec les besoins exprimés, et


la vérification du processus de développement,
c’est-à-dire l’adéquation des méthodes mises en
œuvre.

L’origine de ce découpage provient du constat que les


erreurs ont un coût d’autant plus élevé qu’elles sont
détectées tardivement dans le processus de
réalisation.

Le cycle de vie permet de détecter les erreurs au


plus tôt et ainsi de maîtriser la qualité du
logiciel, les délais de sa réalisation et les coûts
associés.

Le cycle de vie du logiciel comprend généralement au


minimum les étapes suivantes :

a)Définition des objectifs :

Cette étape consiste à définir la finalité du projet


et son inscription dans une stratégie globale.

b) Analyse des besoins et faisabilité

C’est-à-dire l’expression, le recueil et la


formalisation des besoins du demandeur (le client) et
de l’ensemble des contraintes, puis l’estimation de
la faisabilité de ces besoins.

c)Spécifications ou conception générale

Il s’agit de l’élaboration des spécifications de


l’architecture générale du logiciel.

d) Conception détaillée

Cette étape consiste à définir précisément chaque


sous-ensemble du logiciel.

e)Codage (Implémentation ou programmation)


180

C’est la traduction dans un langage de programmation


des fonctionnalités définies lors de phases de
conception.

f) Tests unitaires

Ils permettent de vérifier individuellement que


chaque sous-ensemble du logiciel est implémenté
conformément aux spécifications.

g) Intégration

L’objectif est de s’assurer de l’interfaçage des


différents éléments (modules) du logiciel. Elle fait
l’objet de tests d’intégration consignés dans un
document.

h) Qualification (ou recette)

C’est-à-dire la vérification de la conformité du


logiciel aux spécifications initiales.

i) Documentation

Elle vise à produire les informations nécessaires


pour l’utilisation du logiciel et pour des
développements ultérieurs.

j) Mise en production

C’est le déploiement sur site du logiciel.

k) Maintenance

Elle comprend toutes les actions correctives


(maintenance corrective) et évolutives (maintenance
évolutive) sur le logiciel.

La séquence et la présence de chacune de ces


activités dans le cycle de vie dépendent du choix
181

d’un modèle de cycle de vie entre le client et


l’équipe de développement. Le cycle de vie permet de
prendre en compte, en plus des aspects techniques,
l’organisation et les aspects humains.

Modèles de cycles de vie d’un logiciel

A) Modèle de cycle de vie en cascade

Une illustration...
Figure 1.1: Modèle du cycle de vie en cascade

Le modèle de cycle de vie en cascade a été mis au


point dès 1966, puis formalisé aux alentours de 1970.

Dans ce modèle le principe est très simple : chaque


phase se termine à une date précise par la production
de certains documents ou logiciels.
Les résultats sont définis sur la base des
interactions entre étapes, ils sont soumis à une
revue approfondie et on ne passe à la phase suivante
que s’ils sont jugés satisfaisants.

Le modèle original ne comportait pas de possibilité


de retour en arrière. Celle-ci a été rajoutée
ultérieurement sur la base qu’une étape ne remet en
cause que l’étape précédente, ce qui, dans la
pratique, s’avère insuffisant.

L’inconvénient majeur du modèle de cycle de vie en


cascade est que la vérification du bon fonctionnement
du système est réalisée trop tardivement: lors de la
phase d’intégration, ou pire, lors de la mise en
production.

B. Modèle de cycle de vie en V


182

Une illustration...
Figure 1.2: Modèle du cycle de vie en V

Le modèle en V le cycle de vie le plus connu et


certainement le plus utilisé. Il s’agit d’un modèle
en cascade dans lequel le développement des tests et
du logiciel sont effectués de manière synchrone.

Le principe de ce modèle est qu’avec toute


décomposition doit être décrite la recomposition et
que toute description d’un composant est accompagnée
de tests qui permettront de s’assurer qu’il
correspond à sa description.

Ceci rend explicite la préparation des dernières


phases (validation (construction du logiciel),
et permet ainsi d’éviter un écueil bien connu de la
spécification du logiciel : énoncer une propriété
qu’il est impossible de vérifier objectivement après
la réalisation.

Cependant, ce modèle souffre toujours du problème de


la vérification trop tardive du bon fonctionnement du
système.

C. Modèle de cycle de vie en spirale

Proposé par B. Boehm en 1988, ce modèle est beaucoup


plus général que le précédent. Il met l’accent sur
l’activité d’analyse des risques :

Chaque cycle de la spirale se déroule en quatre


phases :

1. détermination, à partir des résultats des cycles


précédents, ou de l’analyse préliminaire des besoins,
des objectifs du cycle, des alternatives pour les
atteindre et des contraintes ;

2. analyse des risques, évaluation des alternatives


et, éventuellement maquettage ;
183

3. développement et vérification de la solution


retenue, un modèle « classique » (cascade ou en V)
peut être utilisé ici ;

4. revue des résultats et vérification du cycle


suivant.

L’analyse préliminaire est affinée au cours des


premiers cycles. Le modèle utilise des maquettes
exploratoires pour guider la phase de conception du
cycle suivant. Le dernier cycle se termine par un
processus de développement classique.

d. Modèle par incrément

Dans les modèles précédents un logiciel est décomposé


en composants développés séparément et intégrés à la
fin du processus.

Dans les modèles par incrément un seul ensemble de


composants est développé à la fois : des incréments
viennent s’intégrer à un noyau de logiciel développé
au préalable. Chaque incrément est développé selon
l’un des modèles précédents.

Les avantages de ce type de modèle sont les


suivants :

* chaque développement est moins complexe ;


* les intégrations sont progressives ;
* il est ainsi possible de livrer et de mettre en
service chaque incrément ;
* il permet un meilleur lissage du temps et de
l’effort de développement grâce à la possibilité de
recouvrement (parallélisation) des différentes
phases.

Les risques de ce type de modèle sont les suivants :

* remettre en cause les incréments précédents ou


pire le noyau ;
* ne pas pouvoir intégrer de nouveaux incréments.
184

Les noyaux, les incréments ainsi que leurs


interactions doivent donc être spécifiés globalement,
au début du projet. Les incréments doivent être aussi
indépendants que possibles, fonctionnellement mais
aussi sur le plan du calendrier du développement.

1.2.4 Méthodes d’analyse et de conception

Les méthodes d’analyse et de conception fournissent


une méthodologie et des notations standard qui aident
à concevoir des logiciels de qualité.

Il existe différentes manières pour classer ces


méthodes, dont :

*La distinction entre composition et décomposition :*


Elle met en opposition d’une part les méthodes
ascendantes qui consistent à construire un logiciel
par composition à partir de modules existants et,
d’autre part, les méthodes descendantes qui
décomposent récursivement le système jusqu’à arriver
à des modules programmables simplement.

*La distinction entre fonctionnel (dirigée par le


traitement) et orientée objet : *

Dans la stratégie fonctionnelle (également


qualifiée de structurée) un système est vu comme un
ensemble hiérarchique d’unités en interaction, ayant
chacune une fonction clairement définie.

Les fonctions disposent d’un état local, mais le


système a un état partagé, qui est centralisé et
accessible par l’ensemble des fonctions.

Les stratégies orientées objet considèrent qu’un


système est un ensemble d’objets interagissants.
Chaque objet dispose d’un ensemble d’attributs
décrivant son état et l’état du système est
décrit (de façon décentralisée) par l’état de
l’ensemble.
185

Vous aimerez peut-être aussi