1 / 26

POO

POO. par Jenny Benois-Pineau. Introduction. Pourquoi POO ? Crise du logiciel Robustesse, interchangeabilité des composantes, réutilisation du code, extensibilité, protection Langages : Java , Smalltalk, Eiffel, C++

shona
Download Presentation

POO

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. POO par Jenny Benois-Pineau

  2. Introduction • Pourquoi POO ? • Crise du logiciel • Robustesse, interchangeabilité des composantes, réutilisation du code, extensibilité, protection • Langages : Java, Smalltalk, Eiffel, C++ • Objectif de ce cours : appréhender les concepts objet à travers les langages C++ (essentiellement) et Java (exemples)

  3. POO vs PP/PI(I) • Objet =<ensemble des données avec les opérations associées> • PP : type abstrait=<données et traitements> • PO : Objet =<données et traitements encapsulés> • Exemple : modéliser une personne

  4. POO vs PP/PI(II) • Spécification

  5. POO vs PP/PI(III) • La mise en œuvre C++ procédural

  6. POO vs PP/PI(IV) • Les inconvénients • Séparation des données des traitements • Contrôles difficiles : … Personne Ind; SePresente(Ind); - le résultat??? • Accès libre à toutes les composantes->possibilité de modifier malencontreusement

  7. POO : encapsulation • Objet P rassemble dans une même entité – encapsule- les données et les comportements • Un objet contrôle ses comportements : P.SePresente() vs SePresente(P) • On envoie un « message » à objet pour déclencher un traitement P.SePresente() • L’objet vérifie que le message correspond à un des comportements qu’il encapsule • (vérification au moment de la compilation) • Comment déclarer un objet?

  8. Personne + Nom + Societe + SePresente Classe : un moule pour les objets Objets Classe P R Q Instancier

  9. Classe C++ Fonction externe – utilise les objets Fonction-membre

  10. Discipline de programmation • Une classe = • (1) fichier .hpp • (2) fichier .cpp • Le pourquoi : • (1)Séparation de la déclaration et d’implémentation • (2)Compilation séparée

  11. Directives de pré-compilateur • Lorsque on parle de compilation du programme on sous-entend traitement du code source par • -pré-compilateur • -compilateur proprement dit du fichier – résultant de la précompilation • -fonctions du pré-compilateur : inclusion des fichiers, définitions des constantes et des macro-commandes, inclusion conditionnelle, pilotage des messages d’erreur.

  12. DIRECTIVE « include » • Fichier MaClasse.cpp • #include <iostream> • #include “MaClasse.hpp ” • #include “Util.h” • using namespace std; // utilisation de l’espace de nommage • int main(){ • MaClasse C; • … • return 0; • }

  13. Directive « define » • Directive « define » est utilisée pour la définition des constantes, des macro-fonctions, • Syntaxe : • #define identificateurchaîne de substitution • Ex : • #define TailleMax 1000 • classe Tableau{ • int Tab[TailleMax]; • int longueur_eff; • };

  14. Definition des macro-fonctions • #define identificateur(paramètre,…) • Exemple : • #define ABS(x) x<0? x:-x • …. • x=-2; • ABS(x); • cette affectation sera substituée par • x<0?x:-x • Veiller à la correspondance du nombre et du type d’arguments: • ABS(”ABC”)  “ ABC ”<0?  ”ABC ”:- ”ABC ”

  15. Inclusion conditionnelle(1) • Compilation séparée : permet de corriger les erreurs de syntaxe, des erreurs de correspondance des déclarations aux implémentations, … pour chaque classe séparément. • g++ -c MaClasse.cpp –compilation d’un fichier-source • Résultat : MaClasse.o –fichier-objet

  16. Inclusion conditionnelle(2) • Dans un fichier .hpp • #ifndef MaClasse_H • #define MaClasse_H • class MaClasse{ ….. }; #endif

  17. Branchement conditionnel • #ifdef identificateur • Partie –alors • #else • Partie-sinon • #endif • Exemple : • #ifdef VERBOSE • cout<<“ Valeur a “ =<<a;

  18. Classe Java

  19. Fonctions –membres C++(1)

  20. Fonctions –membres C++(2) Fonctions constantes – laissent l’objet inchangé

  21. Fonctions constantes(1) • On déclare les objets constants afin de ne pas pouvoir les changer (héritage du langage C) • class point { public : • double x; • double y; • void affiche(); }; const point c; c.affiche(); //erreur de compilation

  22. Fonctions constantes(2) ….. public : • Double x; • Double y; • void affiche(); //les deux fonctions sont identiques • void affiche () const; // mais! • }; …. int main(){ const point c; c.affiche(); //compilation normale, c’est la méthode « const » qui est invoquée … } Java : la notion de fonction membre constante n’existe pas

  23. Personne - Nom - Societe + SePresente Protection des membres + Public - Private O Protected

  24. Protection des données

  25. Nom_Cls private public Accessibilité Classe Fonctions usuelles

  26. Masquage de l’information

More Related