POO par Jenny Benois-Pineau 25/03/2017.

Slides:



Advertisements
Présentations similaires
Réalisation d’un Framework pour la création de jeux d'arcades
Advertisements

Introduction au Langage C,C++
Erratum C Surcharge For(int x=0; … 2.
Programmation Orienté Objet en C++
Cours n° 7 Standard Template Library II.
Le langage C++ Les types structurés
Simulateur de chaîne de production par Icobjs
Cours n° 9 Conception et Programmation à Objets
1 Tableaux des objets C++ si on connaît le nombre dobjets nécessaires davance on peut utiliser des tableau dobjets dans les fonctions dusage class Personne.
POO.
1 Les technologies XML Cours 1 : Les Web Services et Architectures Orientées Services Fé vrier Version 1.0 -
Programmation Orientée Objet (POO)
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
Introduction à la POO: Les classes vs les objets
1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif.
2ième Classe (Mercredi, 13 Octobre) C++ Intro CSI2572.
Création d’un langage d’action pour un logiciel MDA
Olivier DERUELLE Erwan FOUYER Maxime JOUIN Rodolphe LOUE
Analyse et Conception orientée objet
Principes de programmation (suite)
L’orienté objet: hier, aujourd’hui et demain
POO : Programmation Orientée Objet
Interfaces (fin) classes locales et internes, Object, clonage.
[photo d'un système] Schéma ordonnancement XML Évaluation Code C Modélisation Solution GÉNÉRATEUR AUTOMATIQUE DE CODE pour OUTIL DE MODÉLISATION-IMPLANTATION.
Bases de la programmation en C++
Structures de données IFT-2000
Structures de données IFT Abder Alikacem Espace de nommage Département d’informatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000 Abder Alikacem Espace de nommage Département dinformatique et de génie logiciel Édition Septembre 2009 Département dinformatique.
Structures de données IFT-2000 Abder Alikacem Introduction au cours Semaine 1 Département dinformatique et de génie logiciel Édition Septembre 2009.
GPA789 Analyse et conception orientées objet 1 Professeur: Tony Wong, Ph.D., ing. Chapitre 6 Correspondance UML et C++
Cours 6 Interfaces, classes imbriquées (début). Chapitre IV Interfaces, classes imbriquées, Object.
Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié 1 Cours n° 4 Polymorphisme II.
Sandrine BUENDIA Guillaume GALLET.
Patrons de conceptions de créations
Une introduction à Java
Le modèle relationnel Le modèle relationnel est une représentation de la structure de la base de donnée, permettant de la développer à laide dun logiciel.
Introduction à la programmation orientée objets
Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié 1 Cours n° 3 Polymorphisme I.
1 Exemples Construction et implantation de types de données abstraits.
2.1 - Historique Chapitre 2 : Introduction au langage C++
4 Introduction des objets. Les chaînes et tableaux
La notion de type revisitée en POO
et quelques rappels sur certains éléments du langage C
A LA RECHERCHE D'UNE OFFRE D'EMPLOI
« Validation Formelle de Systèmes Interactifs »
Introduction à la programmation objet en C++
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
C++ L’HERITAGE Fayçal BRAÏKI DUT INFORMATIQUE.
Les opérateurs L’amitié Les opérateurs Introduction
Les surcharges d'opérateurs
Chapitre III Introduction aux objets et aux classes.
Power AMC-Rational Rational Rose, Étude comparative
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Conception de Programmes - IUT de Paris - 1ère année – Cours 6 - Les opérateurs L’amitié Les opérateurs –Introduction –Surcharge par fonction.
Conception de Programmes - IUT de Paris - 1ère année Cours 2 – Références et passage de paramètres Les Références –Introduction aux références.
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O. et au.
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O.
Chapitre VII Techniques plus avancées à travers le concept de classe.
Introduction à la programmation objet avec java
Projet SwitcHome Cahier des charges techniques Adeline COUPE, Hélène DRAUX, Ismaïla GIROUX, Loïc TACHET.
Chapitre 2 Rappels objet et Présentation des diagrammes UML
Chapitre 2 Rappels objet et Présentation des diagrammes UML
Introduction à la Programmation Orientée Objet
22 Concepts de base du langage Java. 2-2 Objectifs A la fin de ce cours, vous serez capables de : Identifier les éléments essentiels de Java Identifier.
Conception de Programmes - IUT de Paris - 1ère année Les classes Introduction Déclaration d’une classe Utilisation d’une classe Définition des.
Réalisation d’un Framework pour la création de jeux d'arcades Groupe MUS-D : FHAL Jonathan KÖNIG Mélanie MAILLET Laurent MANESCHI Romain NOVAK Audrey Encadrant.
الأكاديمية الجهوية للتربية والتكوين لجهة مكناس تافيلالت نيابة مكناس
الهيئة العامة لحماية المستهلك أساليب الترويج وتأثيراتها على المستهلك خليفة التونكتي - مستشار المنافسة - 1.
Transcription de la présentation:

POO par Jenny Benois-Pineau 25/03/2017

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) 25/03/2017

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 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é »

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

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?

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

Classe C++ Fonction externe – utilise les objets Fonction-membre 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" <<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 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 25/03/2017

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. 25/03/2017

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; } 25/03/2017

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; }; 25/03/2017

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 ” 25/03/2017

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 25/03/2017

Inclusion conditionnelle(2) Dans un fichier .hpp #ifndef MaClasse_H #define MaClasse_H class MaClasse{ ….. }; #endif 25/03/2017

Branchement conditionnel #ifdef identificateur Partie –alors #else Partie-sinon #endif Exemple : #ifdef VERBOSE cout<<“ Valeur a “ =<<a; 25/03/2017

Classe Java public static void main (String args[ ]){ Personne P; 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 d’une classe public void SePresente(){ Class Test{ public static void main(String args[ ]){ …..

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" <<Nom<<endl; cout<<"Je travaille à"<<Societe<<endl; } 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

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" <<Nom<<endl; cout<<"Je travaille à"<<Societe<<endl; } void SePresente() const{ cout<<Nom; cout<<Societe; char* surname () const {return Nom;}; 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 25/03/2017

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 25/03/2017

Protection des membres Personne - Nom - Societe + SePresente + Public - Private O Protected 25/03/2017

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" <<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"); Ind.SePresente(); return 0;

Accessibilité Classe Nom_Cls private public Fonctions usuelles 25/03/2017

Masquage de l’information File.hpp Class 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. 25/03/2017