La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

27/12/2013 1 POO par Jenny Benois-Pineau. 27/12/2013 2 Introduction Pourquoi POO ? Crise du logiciel Robustesse, interchangeabilité des composantes, réutilisation.

Présentations similaires


Présentation au sujet: "27/12/2013 1 POO par Jenny Benois-Pineau. 27/12/2013 2 Introduction Pourquoi POO ? Crise du logiciel Robustesse, interchangeabilité des composantes, réutilisation."— Transcription de la présentation:

1 27/12/2013 1 POO par Jenny Benois-Pineau

2 27/12/2013 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 3 POO vs PP/PI(I) Objet = PP : type abstrait= PO : Objet = Exemple : modéliser une personne

4 4 POO vs PP/PI(II) Spécification Type abstrait Données - nom personne - la société Opérations -Se présenter= Objet … Le nom de la personne ne peut pas être modifié; Restreindre laccès au champ « société »

5 5 POO vs PP/PI(III) La mise en œuvre C++ procédural Personne.hpp struct Personne { char Nom[25]; char Societe[32]; }; void SePresente(Personne P); Personne.cpp #include #include "personne.hpp" void SePresente(Personne P) { cout<<"Je m'apelle "< { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.fr/180357/1/slides/slide_4.jpg", "name": "5 POO vs PP/PI(III) La mise en œuvre C++ procédural Personne.hpp struct Personne { char Nom[25]; char Societe[32]; }; void SePresente(Personne P); Personne.cpp #include #include personne.hpp void SePresente(Personne P) { cout<< Je m apelle <

6 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 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() Lobjet vérifie que le message correspond à un des comportements quil encapsule (vérification au moment de la compilation) Comment déclarer un objet?

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

9 9 Classe C++ Personne.hpp Class Personne { public: char Nom[25]; char Societe[25]; void SePresente(); }; Personne.cpp #include ``Personne.hpp`` void Personne::SePresente(){ cout<<« Je m'appelle" < { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.fr/180357/1/slides/slide_8.jpg", "name": "9 Classe C++ Personne.hpp Class Personne { public: char Nom[25]; char Societe[25]; void SePresente(); }; Personne.cpp #include ``Personne.hpp`` void Personne::SePresente(){ cout<<« Je m appelle <

10 27/12/2013 10 Discipline de programmation Une classe = (1) fichier.hpp (2) fichier.cpp Le pourquoi : (1)Séparation de la déclaration et dimplémentation (2)Compilation séparée

11 27/12/2013 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 derreur.

12 27/12/2013 12 DIRECTIVE « include » Fichier MaClasse.cpp #include #include MaClasse.hpp #include Util.h using namespace std; // utilisation de lespace de nommage int main(){ MaClasse C; … return 0; }

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

14 27/12/2013 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 darguments: ABS(ABC) ABC <0? ABC :- ABC

15 27/12/2013 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 dun fichier-source Résultat : MaClasse.o –fichier-objet

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

17 27/12/2013 17 Branchement conditionnel #ifdef identificateur Partie –alors #else Partie-sinon #endif Exemple : #ifdef VERBOSE cout<< Valeur a =< { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.fr/180357/1/slides/slide_16.jpg", "name": "27/12/2013 17 Branchement conditionnel #ifdef identificateur Partie –alors #else Partie-sinon #endif Exemple : #ifdef VERBOSE cout<< Valeur a =<

18 18 Classe Java Personne.java import java.awt.*; Class Personne { public String Nom; public String Societe public void Se Presente(){ System.out.println ("Je m'appelle" +Nom); System.out.println ("Je travaille à" +Societe); } public static void main (String args[ ]){ Personne P; P=new Personne(); P.nom=Personne(); P. societe=``ABC``; P.SePresente(); } //toute méthode fait partie dune classe Personne.java import java.awt.*; Class Personne { public String Nom; public String Societe public void SePresente(){ System.out.println ("Je m'appelle" +Nom); System.out.println ("Je travaille à" +Societe); } Class Test{ public static void main(String args[ ]){ ….. }

19 19 Fonctions –membres C++(1) Personne.hpp Class Personne { public: char Nom[25]; char Societe[25]; void SePresente(); }; Personne.CPP void Personne::SePresente(){ cout<<« Je m'appelle" < { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.fr/180357/1/slides/slide_18.jpg", "name": "19 Fonctions –membres C++(1) Personne.hpp Class Personne { public: char Nom[25]; char Societe[25]; void SePresente(); }; Personne.CPP void Personne::SePresente(){ cout<<« Je m appelle <

20 20 Fonctions –membres C++(2) Personne.hpp Class Personne { public: char Nom[25]; char Societe[25]; void SePresente(); }; Personne.CPP void Personne::SePresente(){ cout<<« Je m'apelle" < { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.fr/180357/1/slides/slide_19.jpg", "name": "20 Fonctions –membres C++(2) Personne.hpp Class Personne { public: char Nom[25]; char Societe[25]; void SePresente(); }; Personne.CPP void Personne::SePresente(){ cout<<« Je m apelle <

21 27/12/2013 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 27/12/2013 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, cest la méthode « const » qui est invoquée … } Java : la notion de fonction membre constante nexiste pas

23 27/12/2013 23 Protection des membres Personne - Nom - Societe + SePresente + Public - Private O Protected

24 24 Protection des données Personne.hpp Class Personne { private : char Nom[25]; char Societe[25]; public : void SePresente(); }; Personne.CPP void Personne::SePresente(){ cout<<« Je m'appelle" < { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.fr/180357/1/slides/slide_23.jpg", "name": "24 Protection des données Personne.hpp Class Personne { private : char Nom[25]; char Societe[25]; public : void SePresente(); }; Personne.CPP void Personne::SePresente(){ cout<<« Je m appelle <

25 27/12/2013 25 Accessibilité Nom_Cls private public Fonctions usuelles Classe

26 27/12/2013 26 Masquage de linformation File.hpp Class File{ private : xxxxxxxxxxx public : void enfiler(int valeur); void defiler(); int valeur_file const(); …….. }; Masquage de limplémentation La modification de la partie privée naffecte pas les programmes applicatifs – efficacité du processus de développement.


Télécharger ppt "27/12/2013 1 POO par Jenny Benois-Pineau. 27/12/2013 2 Introduction Pourquoi POO ? Crise du logiciel Robustesse, interchangeabilité des composantes, réutilisation."

Présentations similaires


Annonces Google