27/12/2013 1 poo par jenny benois-pineau. 27/12/2013 2 introduction pourquoi poo ? crise du logiciel...

26
22/05/22 1 POO par Jenny Benois-Pineau

Upload: lisette-bouvet

Post on 03-Apr-2015

118 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 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

11/04/231

POO

par

Jenny Benois-Pineau

Page 2: 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

11/04/232

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)

Page 3: 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

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

Page 4: 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

4

POO vs PP/PI(II)

Spécification

Type abstrait Données - nom personne - la sociétéOpérations -Se présenter=<afficher les informations>

Objet…

Le nom de la personne ne peut pas être modifié;Restreindre l’accès au champ « société »

Page 5: 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

5

POO vs PP/PI(III)

La mise en œuvre C++ procéduralPersonne.hpp

struct Personne {char Nom[25];char Societe[32];

};

void SePresente(Personne P);

Personne.cpp#include <iostream.h>#include <string.h>#include "personne.hpp"

void SePresente(Personne P){ cout<<"Je m'apelle "<<P.Nom<<endl; cout<<"Je travaille à "<<P.Societe<<endl;

}int main(){

Personne Ind;strcpy(Ind.Nom, "Toto");strcpy(Ind.Societe, "ABC

SARL");SePresente(Ind);return 0;

}

Page 6: 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

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

Page 7: 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

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?

Page 8: 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

8

Classe : un moule pour les objets

Personne

+ Nom

+ Societe

+ SePresente

Classe

Objets

P

R

Q

Instancier

Page 9: 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

9

Classe C++

Personne.hppClass Personne { public: char Nom[25]; char Societe[25]; void SePresente();};

Personne.cpp#include ``Personne.hpp`` void Personne::SePresente(){ cout<<« Je m'appelle" <<Nom<<endl; cout<<"Je travaille à"<<Societe<<endl;}

utilisePersonne.cpp#include <iostream>#include <string.h>#include "personne.hpp« using namespace std;int main(){ Personne Ind; strcpy(Ind.Nom, "Toto"); strcpy(Ind.Societe, "ABC SARL"); Ind.SePresente(); return 0;

}

Fonction-membre Fonction externe – utilise les objets

Page 10: 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

11/04/2310

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

Page 11: 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

11/04/2311

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.

Page 12: 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

11/04/2312

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;

}

Page 13: 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

11/04/2313

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; };

Page 14: 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

11/04/2314

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 ”

Page 15: 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

11/04/2315

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

Page 16: 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

11/04/2316

Inclusion conditionnelle(2)

Dans un fichier .hpp #ifndef MaClasse_H #define MaClasse_H class MaClasse{

….. };#endif

Page 17: 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

11/04/2317

Branchement conditionnel

#ifdef identificateur Partie –alors

#else Partie-sinon

#endif Exemple : #ifdef VERBOSE cout<<“ Valeur a “ =<<a;

Page 18: 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

18

Classe Java

Personne.javaimport 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 d’une classe

Personne.javaimport 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[ ]){

….. } }

Page 19: 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

19

Fonctions –membres C++(1)

Personne.hppClass Personne { public: char Nom[25]; char Societe[25]; void SePresente();};Personne.CPPvoid Personne::SePresente(){ cout<<« Je m'appelle" <<Nom<<endl; cout<<"Je travaille à"<<Societe<<endl;}

Personne.hppClass Personne { public: char Nom[25]; char Societe[25]; inline void SePresente(){ cout<<Nom; cout<<Societe; }};

Fonction inline : le code est recopié à la place de l’appel pour gagner du temps d’exécution

Page 20: 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

20

Fonctions –membres C++(2)

Personne.hppClass Personne { public: char Nom[25]; char Societe[25]; void SePresente();};Personne.CPPvoid Personne::SePresente(){ cout<<« Je m'apelle" <<Nom<<endl; cout<<"Je travaille à"<<Societe<<endl;}

Personne.hppClass Personne { public: char Nom[25]; char Societe[25]; void SePresente() const{ cout<<Nom; cout<<Societe; } char* surname () const {return Nom;};};

Fonctions constantes – laissent l’objet inchangé

Page 21: 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

11/04/2321

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

Page 22: 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

11/04/2322

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

Page 23: 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

11/04/2323

Protection des membres

Personne

- Nom

- Societe

+ SePresente

+ Public

- Private

O Protected

Page 24: 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

24

Protection des données

Personne.hppClass Personne { private : char Nom[25]; char Societe[25]; public : void SePresente();};Personne.CPPvoid Personne::SePresente(){ cout<<« Je m'appelle" <<Nom<<endl; cout<<"Je travaille à"<<Societe<<endl;}

utilisePersonne.cpp#include <iostream.h>#include <string.h>#include "personne.hpp"int main(){ Personne Ind; strcpy(Ind.Nom, "Toto");Erreur de compilation strcpy(Ind.Societe, "ABC SARL");Erreur de compilation Ind.SePresente(); return 0;

}

Page 25: 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

11/04/2325

Accessibilité

Nom_Cls

private

public

Fonctions usuelles

Classe

Page 26: 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

11/04/2326

Masquage de l’informationFile.hppClass File{ private : xxxxxxxxxxx public : void enfiler(int valeur); void defiler(); int valeur_file const(); ……..};

Masquage de l’implémentation

La modification de la partie privée n’affecte pas les programmes applicatifs – efficacité du processus de développement.