1 / 20

GEF 243B Programmation informatique appliquée

GEF 243B Programmation informatique appliquée. Modules et masquage d’information. Revue. Quelles sont les trois concepts utilisés par les humains pour résoudre les problèmes complexes? Quelle est l’erreur avec ce qui suit? float Add (int* anInt, float* aFloat); void main (void) { int a;

Download Presentation

GEF 243B Programmation informatique appliquée

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. GEF 243BProgrammation informatique appliquée Modules et masquage d’information JGA Beaulieu

  2. Revue • Quelles sont les trois concepts utilisés par les humains pour résoudre les problèmes complexes? • Quelle est l’erreur avec ce qui suit? • float Add (int* anInt, float* aFloat); • void main (void) • { • int a; • float b; • myFunction (a, b); • } //main • void Add(int* param1, float* param2) • { • return ((float)*param1 + *param2); • }//Add JGA Beaulieu

  3. Synopsis • Décomposition modulaire - (un niveau plus haut) • Masquage d’information • Encapsulation • Quoi cacher • Séparation des préoccupations • Le module C • Le module C – prototypes de fonction • Un petit exemple • Construction avec des composantes JGA Beaulieu

  4. Décomposition modulaire • Jusqu’à présent nous avons vue que nous pouvons décomposer une grosse fonction monolithique (main) en de plus petites fonctions cohésives • Toutes nos fonctions que nous avons définies dans le cours ont étés misent à l’intérieur d’un seul fichier: une unité de compilation • Nous avons aussi appris comment déclarer un prototype de fonction dans nos programmes. JGA Beaulieu

  5. Décomposition modulaire • Les programmes d’ordinateur qui sont très larges n’apparaissent pas par magie • Le logiciel bien conçu, comme tout autre produit d’ingénierie doit être conçu avec une philosophie de planification et d’implémentation prudente • Tout comme un édifice, un programme logiciel doit avoir une structure bien dessinée; une architecture JGA Beaulieu

  6. Décomposition modulaire • Pour les gros programmes, il ne suffit pas seulement de décomposer un programme en fonctions • L’architecture d’un gros programme doit être exprimée en unités de compilation séparées • En C, ces unités de compilation sont des modules • Vous avez déjà utilisés des bibliothèques de modules tel que stdio, conio, dsound,… • Vous avez aussi utilisé un module développé localement, le squelette 243_lib JGA Beaulieu

  7. Masquage d’information • Information hiding • Le concept de masquage d’information provient d’un article séminale de David Parnas (1972) • Masquage d’information: « Chaque module a un secret qu’il cache des autres modules. » JGA Beaulieu

  8. Masquage d’information - Encapsulation • Le concept de masquage d’information est clef pour les concepts de décomposition et d’abstraction • On cache l’information qui peut changer et on expose une interfacestable qui ne changera PAS • Ceci est connue comme l’encapsulation • L’information est obtenue ou changée SEULEMENT en utilisant l’interface – L’information est cachée JGA Beaulieu

  9. Masquage d’information - Encapsulation • Pourquoi est-ce que le masquage d’information est important? • Si nous encapsulons l’information qui peut changer dans l’implémentation du module et que nous offrons le service du module au travers d’une interface stable, l’utilisateur du module n’a pas besoin de connaître ce qu’il y a dans l’implémentation • Je peux changer l’implémentation pour améliorer la performance, due au changements de matériel, changement de plateforme … • Donc je réduis le couplage entre les modules. Le programme est plus facile àentretenir JGA Beaulieu

  10. Masquage d’information – Quoi cacher • Quel est ce secret que je veux cacher? Il y a trois types de module pour le masquage d’information: • Masquage de comportement: Cache les choses comme les formats d’écran, impression, les menus, la communication, le changement d’états etc… • Ex: conio.h – Cache le formats d’écran et clavier • Masquage des décisions de design: Cache les structures de données et les algorithmes • Ex: tm.h – Cache les algorithmes et structures pour la gestion des tâches • Masquage de la machine: Cache les interfaces machine • Ex: 243_lib.h – Cache certaines fonctions de brickOS et types • Ex: dsound.h – Cache la façon de jouer les sons sur le matériel JGA Beaulieu

  11. Masquage d’information – Quoi cacher • Quand nous appliquons le concept de masquage d’information, nous pouvons séparer nos préoccupations et décomposer nos problèmes en unités de compilation cohésives • Tout les concepts de génie logiciel que nous avons vue jusqu’à ce point sont des concepts de design • La limite où nous pouvons implémenter ces concepts dans le code dépend du support fournit par le langage de programmation JGA Beaulieu

  12. Le module C • C nous fournit deux types de fichiers pour que nous puissions définir nos modules • Le fichier .h – ou entête de module: Contient la déclaration des fonctions et les attributs que nous voulons que les autre modules voient. Aussi connue comme interface du module • Le fichier .c – ou corps du module: Contient la définition des fonctions qui sont déclarées dans l’entête du module et autres fonctions internes ou de soutient. Connue comme implémentation du module JGA Beaulieu

  13. Le module C • Quand vous faite l’inclusion de l’entête d’un module dans votre programme, seulement les fonctions qui sont déclaré dans l’entête sont disponibles • Ce n’est JAMAIS une bonne idée de donner un accès directe à vos variables dans vos modules JGA Beaulieu

  14. Le module C - Prototypes • Un module doit avoir deux fichiers du même nom un avec l’extension .c et l’autre avec .h • (243_lib.c, 243_lib.h) • Vous devez déclarer un prototype de fonction dans le fichier entête pour chaque fonction que vous voulez que les autres modules utilisent • Vous pouvez aussi inclure des types dérivés dans l’entête. Nous allons en voir la semaine prochaine. JGA Beaulieu

  15. Exemple – grandpetit.c #include <stddef.h> #include <unistd.h> #include "compare.h" int main(void) { int firstInt = 5; int secondInt = 10; int* pIntG = NULL; int* pIntS = NULL; pIntG = Greater(&firstInt,&secondInt); pIntS = Smaller(&firstInt,&secondInt); printf("Greater: %d Smaller: %d\n", *pIntG, *pIntS); system("PAUSE"); exit(0); } //main JGA Beaulieu

  16. Exemple – compare.h //compare.h interface de compare blablabla //retourne un pointeur de type int qui pointe //au plus grand de deux ints int* Greater(int* px, int* py); //retourne un pointeur de type int qui pointe //au plus petit de deux ints int *Smaller(int* px, int* py); JGA Beaulieu

  17. Exemple – compare.c //compare.c le corps du module compare blablabla //retourne un pointeur de type int qui pointe //au plus grand de deux ints int* Greater(int* px, int* py) { return (*px > *py ? px : py); }//Greater //retourne un pointeur de type int qui pointe //au plus grand de deux ints int *Smaller(int* px, int* py) { return (*px < *py ? px : py); }//Smaller JGA Beaulieu

  18. Construction avec composantes • Avec le développement de modules partout dans le monde, les bibliothèques de fonctions et les composantes émergent à tout les jours • Ces composantes peuvent être des solutions entières ou des pièces qui peuvent être assemblées en systèmes • Le masquage d’information et le concept d’abstraction rendent possible la construction de systèmes à partir de composantes dont on ne connaît pas l’implémentation • La suite de MS-OfficeTM est dessiné avec ce concept JGA Beaulieu

  19. Quiz Time • Qu’est-ce que le masquage d’information? • Pourquoi ce concept est important? • Que veut-on dire par encapsulation? • Un fichier entête pour un module est aussi appelé _____________ du module • Le fichier corps est aussi connue comme _____________ du module JGA Beaulieu

  20. Références *Vous n’avez pas ces références, c’est pour vous donner l’information S. Ambler, The Object Primer, 2nd Ed. H. van Vliet, Software Engineering, 3rd Ed. JGA Beaulieu

More Related