3. MÉTHODOLOGIE DE PROGRAMMATION
3.1 PRINCIPES GÉNÉRAUX DE LA PROGRAMMATION .1 Choix du langage de programmation
Plusieurs possibilités :
le langage peut être imposé à priori (disponibilité, stratégie d'entreprise, connaissance préalable du programmeur, etc.). La méthode de résolution choisie devra alors tenir compte de ces caractéristiques.
le choix du langage est ouvert. Il devra être fait en fonction du type du problème (calcul scientifique, gestion , application système, etc.).
Un autre point de vue est qu'un langage de programmation n'est que le support de la pensée et le programme obtenu doit être, si possible, indépendant du langage choisi.
Dans tout ce qui suit, le langage utilisé pour illustrer les exemples sera le C++.
3.1.2 Méta langage
Un métalangage est un langage utilisé pour décrire un algorithme. Des conventions sont utilisées pour décrire les différentes opérations autorisées (affectation, boucle, etc.).
3.1.3 Commentaires
Un programme est destiné à être lu. C'est pourquoi il est indispensable de le commenter.
Exemple
// Ceci est un commentaire
Situation
Une analyse de la situation du programme est nécessaire. Dans tout ce qui suit, les situations seront décrites entre les délimiteurs // .
3.1.4 Règles d'or de la programmation
Clarté
La lisibilité d'un programme est essentielle à sa maintenance et à son développement. Il faut toujours se rappeler qu'un programme est destiné avant tout à être utilisé par d'autres et qu'il est appelé à évoluer.
Dans une entreprise, tout programmeur devra, en principe, être capable de comprendre sa structure et de le modifier.
Le programme devra être présenté de telle sorte qu'on puisse comprendre, rien qu'en le voyant, sa structure globale. Il doit être clair, lisible, bien présenté.
Contre-exemple x = a; y = b;
x = x-y; y = y-x; x = y-x; y = x-y; // que valent (x,y,z) après exécution de l'instruction
Nom des objets
Les noms des objets (variables, fonctions, procédures) doivent être appropriés.
Exemple
float r; // que représente r ? float rayon // c'est mieux
Identification des procédures
Chaque procédure ou fonction doit être identifiée par une en tête qui spécifie son action, ses arguments et leur domaine de validité, ses effets de bord et ses limitations. Ces entêtes doivent respecter un format uniforme permettant l'extraction automatique d'un manuel de référence à partir du texte du programme.
Les variables devront être regroupées par type, thèmes, etc.
Des commentaires devront indiquer :
la méthode de résolution choisie,
la description des conventions utilisées pour nommer les variables,
les fonctions et les procédures utilisées,
les bibliothèques appelées,
les éventuelles astuces de programmation (à éviter en principe).
Exemple
// programme de résolution d'une équation du 2° degré // coefficients de l'équation a, b ,c à valeurs réelles // solution réelles et complexes
// Programmeur : tartempion le 10 Janvier 2018 // variables utilisées
// float a, b ,c ; // etc.
3.2 GRAMMAIRE
3.2.1 Langage et grammaire
Tout langage de programmation est défini par l'utilisation de règles très précises que le programmeur devra respecter de façon impérative. Certains langages sont très rigoureux de telle sorte que le programmeur n'ait aucun choix possible à part le bon (langage PASCAL).
D'autres sont plus permissifs (langage C).
Chaque langage a ses propres règles de grammaire.
3.2.2 Syntaxe et sémantique
Syntaxe
La syntaxe d'une instruction est son mode d'emploi. Elle est vérifiée par le compilateur ou l'interprète de commandes qui procède à une analyse syntaxique préalablement à toute exécution.
Sémantique
Sa sémantique correspond à l'action qu'elle exécute.
Pour qu'un programme fonctionne correctement, les deux conditions suivantes sont nécessaires et non suffisantes : il doit être correct sur les plans syntaxique et sémantique car certaines instructions peuvent être correctes sur le plan syntaxique et fausses sur le plan sémantique.
Exemple En C, l'instruction
if (i = 1)
est syntaxiquement correcte et sémantiquement fausse.
3.2.3 Mots clés
Le langage est constitué par un ensemble de mots clés qui représentent les instructions autorisées. Ils ont une syntaxe d'utilisation définie par sa grammaire.
Exemple
La liste ci-dessous récapitule pratiquement la totalité des mots clés du langage C.
Déclarations de type
char double enum float int long short signed sizeof struct typedef union unsigned void
Déclarations de la classe de mémorisation auto extern register static const volatile
Structures de contrôle
break case continue default do else for goto if return switch while
3.2.4 Représentation interne des objets
Les différents objets que l'on manipule peuvent être (liste non exhaustive) :
des nombres (entiers, relatifs, réels, complexes),
des caractères (français, allemand, russes, etc.),
du son,
de l'image,
etc.
Ils ont une représentation digitale interne en fonction des déclarations de type qui la masquent.
3.2.5 Objets de base du langage
Tout langage de programmation permet de manipuler des objets dits "de base". Ainsi, le C permet de manipuler des objets scalaires (entiers, réels, caractères), des vecteurs sous forme de tableaux. A chacun de ces objets est associé un ou plusieurs types :
objet déclaration de type
entier naturel int, short, unsigned entier relatif int, short, signed rationnel float, double
réel float, double
caractère char
vecteur tableau
etc.
3.2.6 Construction d'objets complexes
A partir des objets de base, il est possible de construire des objets complexes, par exemple les tableaux.
Rappelons qu'un tableau est un ensemble d'objets de même type stockés consécutivement en mémoire dont chaque élément est accessible par un indice relatif au premier élément.
Exemple
int a[100]; // un tableau de 100 entiers
Il est également possible de construire des objets de types composites appelés enregistrements ou structures.
Exemple
La structure constituée des informations nom, prenom, adresse permet de définir un individu. D'autres informations peuvent être ajoutées.
struct individu {char nom[20] ; char prenom[20] ; char adresse[50] ;};
struct complexe {float x ; float y};
3.2.7 Opérations sur les objets de base
Les opérateurs du langage permettent de faire des opérations sur les objets de base. On distingue :
les opérateurs arithmétiques +, -, *, /, % (opérateur modulo)
les opérateurs logiques et, ou , non,
les opérateurs relationnels, qui permettent de faire des comparaisons entres objets.
Certains langages permettent de redéfinir le comportement des opérateurs. Ainsi, il est possible en C++
de (re)définir l'opérateur + pour qu'il permette d'additionner des matrices. Ce principe est appelé la surcharge des opérateurs.