270 likes | 464 Views
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++
E N D
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++ • Objectif de ce cours : appréhender les concepts objet à travers les langages C++ (essentiellement) et Java (exemples)
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
POO vs PP/PI(II) • Spécification
POO vs PP/PI(III) • La mise en œuvre C++ procédural
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
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?
Personne + Nom + Societe + SePresente Classe : un moule pour les objets Objets Classe P R Q Instancier
Classe C++ Fonction externe – utilise les objets Fonction-membre
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
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.
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; • }
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; • };
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 ”
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
Inclusion conditionnelle(2) • Dans un fichier .hpp • #ifndef MaClasse_H • #define MaClasse_H • class MaClasse{ ….. }; #endif
Branchement conditionnel • #ifdef identificateur • Partie –alors • #else • Partie-sinon • #endif • Exemple : • #ifdef VERBOSE • cout<<“ Valeur a “ =<<a;
Fonctions –membres C++(2) Fonctions constantes – laissent l’objet inchangé
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
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
Personne - Nom - Societe + SePresente Protection des membres + Public - Private O Protected
Nom_Cls private public Accessibilité Classe Fonctions usuelles