• Aucun résultat trouvé

Rappel des concepts de la programmation orientée objet et application en langage C++.

N/A
N/A
Protected

Academic year: 2022

Partager "Rappel des concepts de la programmation orientée objet et application en langage C++."

Copied!
7
0
0

Texte intégral

(1)

1

Interface Homme Machine

Nadine CULLOT nadine.cullot@u-bourgogne.fr

Bureau G218 Sebti FOUFOU sebti.foufou@u-bourgogne.fr

2

Objectifs du cours

„

Rappel des concepts de la programmation orientée objet et application en langage C++.

„

Etude du développement d’applications avec une interface graphique (de type Windows) en Visual C++

(Visual Studio 2005 – Standard)

„ Etude approfondie des MFC (Microsoft Fondation Classes)

„ Développement d’applications à l’aide de l’assistant

„ Architectures Documents/Vues

3

Modalités de Contrôle des Connaissances

„

Un partiel : note de contrôle continu (CC)

„

Un projet : note de TP (TP)

„

Un examen final : note de contrôle écrit (CE)

„

Note module = (0,5*CC + 0,5*TP + CE)/2

„

Projet réalisé en binôme ou trinôme

„

Exposé oral, Rapport Ecrit, Démonstration

4

Plan – POO

„

Les concepts de base de la POO

„

Encapsulation / Classe

„

Héritage / Sous-Classes / Classes dérivées

„

Polymorphisme

Les concepts de base de la POO Introduction

„

Intuitivement, un objet est une représentation d’une entité du monde réel,

„

Par exemple un livre, une personne …

„

Un objet est caractérisé par un ensemble de propriétés

„

Un livre possède un numéro d’ISBN, un titre, …

„

Une personne a un nom, un prénom, …

„

Les objets peuvent avoir des liens entre eux

„

Une personne possède un livre.

„

Un livre est écrit par une personne.

Les concepts de base de la POO Introduction

„ On peut parler d’objets en particulier

„ Livre : « Le Langage C++ »

„ Personne : « Bjarne Stroustrup »

„ Mais tous les objets d’une même « catégorie » ont les mêmes propriétés

„ On peut donc aussi parler d’ensemble d’objets

„ Description d’une classe d’objets : classe Livre

„ Description d’un objet particulier : une instance de la classe

„ Classe Livre

„ titre, ISBN, …

„ Un objet particulier

„ Titre = « Le langage C++ », ISBN=« 2-7440-1089-8 »

(2)

7

Les concepts de base de la POO Introduction

„

La description des objets d’une classes et de leurs propriétés s’accompagne de la description

„

Des opérations applicables sur cet objet

„

Par exemple, pour un livre, on peut avoir besoin de

„

Connaître les propriétés du livre

„

Modifier certaines propriétés (ex: prix)

„

8

Les concepts de base de la POO Introduction

„

L’encapsulation en POO consiste à décrire un ensemble d’objets à l’aide :

„

D’une classe, avec les propriétés des objets et les opérations/méthodes de manipulation de ces objets

„

Des droits d’accès sont définis sur les propriétés/attributs et sur les méthodes.

9

Les concepts de base de la POO Introduction

„

Dans le cadre du développement d’un site de e- commerce pour une librairie,

„

l’analyse des objets – métiers du domaine pour la gestion du catalogue a conduit à la définition de classes et de relations entre ces classes.

„Un livre est écrit par un ou plusieurs auteurs.

„Un auteur peut avoir écrit un ou plusieurs livres.

„Un livre est édité par un seul éditeur qui peut éditer plusieurs livres.

„Un livre possède un thème qui peut avoir plusieurs sous- thèmes.

„Un catalogue (de la librairie) est organisé en rayons.

„Un rayon est composé de plusieurs livres …

10

Les concepts de base de la POO Introduction

„ Cette analyse a conduit à la définition du diagramme de classes UML suivant :

LIVRE Titre Sous-titre [0-1]

ISBN Langue DateParution Prix

AUTEUR Nom Prénom Est_écrit_par

1..* 1..*

THEME Nom 1..*

1..*

Sous-thème

EDITEUR Nom Pays

Edite 1..*

1 RAYON Nom CATALOGUE

1..*

1 1..*

1

Les concepts de base de la POO Les classes

„

On s’intéresse plus particulièrement à la description d’un livre qui est identifié (pour simplifier)

„ par numéro d’ISBN, son titre, sa date de parution, son prix, son éditeur et son ou ses auteurs.

„

On souhaite définir :

„ Des méthodes d’observation pour connaître les propriétés d’un livre,

„ Des méthodes de mise à jour / modification pour modifier les valeurs de ses propriétés,

„ Des méthodes d’entrées/sorties pour saisir et afficher un livre.

Les concepts de base de la POO Les classes

class Livre { private :

CString ISBN;

CString titre;

float prix;

Date dateParution;

Auteur tabA[10];

int nbA;

public:

Livre();

Livre(CString is);

virtual ~Livre();

void setISBN(CString);

void setTitre(CString);

void setPrix(float);

void ajoutAuteur(Auteur);

void setDateP(Date);

CString getISBN();

CString getTitre();

Date getDateP();

int getNbAuteur();

Auteur getAuteur(int);

void saisie();

void affiche();

};

(3)

13

Les classes

„ Dans la description des attributs de la classe, on suppose que les classes Date et Auteur ont été définies par ailleurs.

„ La classe CString est une classe de la bibliothèque MFC de C++, elle définit un type chaîne de caractères (qui n’existe pas en C).

„ Un tableau de 10 auteurs maximum est géré.

„ Les attributs sont définis avec des droits d’accès « privés »

private : CString ISBN;

CString titre;

float prix;

Date dateParution;

Auteur tabA[10];

int nbA;

14

Les classes

„

Les droits d'accès

sur les membres d'une classe peuvent être :

„ private

„ Les membres placés en mode privé ne sont accessibles qu'aux membres de la classe elle-même.

„ protected

„ Les membres placés en mode protégé sont accessibles aux membres de la structure elle-même et aux membres des classes descendantes (dans une chaîne d'héritage).

„ public

„ Les membres placés en mode public sont accessibles par tout membre situé dans la portée de la classe (en général dans tout le texte source).

15

Les concepts de base de la POO Les classes

„ Les méthodes d’observation de la classe livre.

„ Elles permettent de connaître les propriétés du livre.

„ La syntaxe est : Type-retour classe ::

nom_méthode(paramètres) { corps de la méthode }

„ L’opérateur :: est appelé opérateur de résolution de portée, il indique ici que la méthode appartient à la classe Livre

CString Livre :: getISBN() {return ISBN;

}

CString Livre :: getTitre() { return titre;}

Date Livre :: getDateP() {return dateParution;

}

int Livre :: getNbAuteur() {return nbA;}

Auteur Livre :: getAuteur(int i) {return tabA[i];

}

16

Les concepts de base de la POO Les classes

„ Les méthodes de mise à jour/modification de la classe livre permettent de modifier les valeurs des propriétés du livre.

„ Les attributs de la classe sont directement accessibles dans les méthodes de la classe.

„ L’ajout d’un auteur est fait directement à partir de l’auteur passé en paramètre et supposé déjà construit avant l’appel de la méthode.

void Livre :: setISBN(CString is) {ISBN = is;}

void Livre :: setTitre(CString t) {titre = t;}

void Livre :: setPrix(float p) {prix = p;}

void Livre :: ajoutAuteur(Auteur a) { if (nbA <10)

tabA[nbA++]=a; }

void Livre :: setDateP(Date d) { dateParution=d;}

Les concepts de base de la POO Les classes

„ Les constructeurs/ destructeurs sont des méthodes particulières qui permettent l’initialisation des valeurs d’un objet.

„ Le constructeur par défaut d’un objet est automatiquement appelé lors de la déclaration d’un objet.

„ On peut définir plusieurs constructeurs pour un objet :

„Un constructeur dit « par défaut » qui n’a pas de paramètres.

„Des constructeurs avec paramètres qui permettent d’initialiser certains attributs de l’objet avec les valeurs des paramètres.

„Attention : à la différence de java, l’opérateur new est réservé en C++ à l’allocation dynamique explicite, il n’est donc utilisé que pour allouer de l’espace pour un pointeur (comme en C).

„ Le constructeur est une méthode qui porte le même nom que la classe.

Les concepts de base de la POO Les classes

„

Le destructeur est une méthode qui est appelée lors la variable est « libérée ».

„

Par exemple, pour une variable locale à une méthode, à la fin de la méthode.

„

Le destructeur est en général défini s’il est nécessaire de libérer de l’espace mémoire alloué dynamiquement.

„

Le destructeur porte le même nom que la classe

précédé par le symbole ~.

(4)

19

Les concepts de base de la POO Les classes

„ La classe Livre possède deux constructeurs :

„ Un constructeur par défaut qui initialise le numéro d’ISBN à 0, et le nombre d’auteurs à 0.

„ Un constructeur avec un paramètre qui permet de fixer le numéro d’ISBN.

„ Le destructeur est défini, mais vide. Il n’y a pas d’actions particulières à appliquer.

Livre::Livre() {

ISBN=0; nbA=0;

}

Livre :: Livre (CString is) {

ISBN=is; nbA=0;

}

Livre::~Livre() {

}

20

Les concepts de base de la POO Les classes

„ Il existe en C++ un autre type de constructeur appelé constructeur par

« copie ».

„ Son rôle est de créer une copie d’une instance existante d’un objet :

„ traitement réalisé par défaut : recopie bit à bit d’une zone de mémoire vers une autre

„ en général suffisant, sauf lorsque de l’allocation dynamique doit être réalisée pour construire l’objet cible

„ Le constructeur par copie est appelé à chaque fois qu’il est nécessaire de recopier une instance :

„ lors d’une déclaration d’une instance si l’initialisation est faite à l’aide de la valeur d’une autre

„ lors du passage par valeur d’une instance à une fonction

„ lors du renvoi d’une instance par une fonction

„ l’utilisation de l’affectation ne provoque pas l’appel du constructeur par copie

21

Les concepts de base de la POO Les classes

„

Les méthodes d’entrées/sorties (en mode console)

„ Elles permettent de saisir les valeurs d’un objet ou de les afficher.

„

Les instructions d’E/S du langage C fonctionnent en C++, comme les instructions

„ printf, scanf, …

„

Mais les bibliothèques C++ offrent des classes dédiées aux E/S sur périphériques standard, sur fichiers ou en mémoire/chaînes de caractères.

22

Les concepts de base de la POO Les classes

„ La notion de flot est liée au concept de circulation de données entre un producteur (source) et un consommateur (destination).

„ quatre flots standard sont définis en C++

„ cout pour les sorties standard à l’écran

„ cin pour les entrées standard au clavier

„ cerr pour les messages d’erreurs, par défaut à l’écran

„ clog pour les messages d’erreurs avec un tampon

„ trois sous-ensembles d’opérations

„ iostream.h opérations liées aux périphériques standard

„ fstream.h opérations liées aux fichiers disque

„ strstrea.h opérations sur les chaînes de caractères

Les concepts de base de la POO Les classes

„ Les opérateurs << et >> sont définis sur les flots.

„ cout << "ISBN ?";

„ Affiche le message à l’écran

„ cin >> ISBN;

„ Permet la saisie de la valeur de l’ISBN

„ ATTENTION : Les opérateurs << et

>> existent sur tous les types de base (int, float, …) et certains types de la bibliothèque C++.

„ Mais il n’existe pas par défaut pour les classes Auteur et Date utilisées ici, mais on peut les définir (par surcharge).

void Livre :: saisie()

{ cout << "ISBN ?"; cin >> ISBN;

cout << "Titre ?"; cin >> titre;

cout << "Prix ? "; cin >> prix;

cout << "date de parution ?"; cin <<

dateP;

do

{cout << "Nombre d'auteurs (<=10) ?";

cin >> nbA;}

while (nbA <0 || nbA >10);

for (int i=0; i<nbA; i++)

{ cout << "Auteur numéro " << i << "?";

cin >> tabA[i]; } }

Les concepts de base de la POO Les classes

„

La méthode « affiche » affiche toutes les informations d’un livre.

„

Ici, les informations concernant la date et les auteurs sont affichées en utilisant l’opérateur <<

qui devra être défini dans les classes Auteur et Date.

void Livre :: affiche()

{ cout << "ISBN : " << ISBN << endl;

cout << "Titre :" << titre << endl;

cout << "Prix : " << prix << endl;

cout << " Date :" << dateParution

<< endl;

for (int i=0; i<nbA; i++) cout << tab[i] << endl;

}

(5)

25

Les concepts de base de la POO Les classes

„

Exemples d’utilisation de la classe Livre.

„

Livre liv1;

„// déclare un livre – appel du constructeur par défaut

„

Livre liv2("3-456-456-7");

„// déclare un livre – appel du constructeur avec paramètres

„

Livre liv3 = Livre ("3-456-456-7");

„// autre forme de déclaration et appel du constructeur avec paramètres

„

Livre liv4=liv2;

„// initialisation avec un autre livre – appel du constructeur par copie

26

Les classes

Surcharge des méthodes et des opérateurs

„

Les méthodes d’une classe peuvent être

« surchargées »

„

C’est à dire que l’on peut définir dans une même classe plusieurs méthodes de même nom mais qui diffèrent par leurs paramètres.

„

Supposons que l’on souhaite définir une deuxième méthode d’affichage :

„void Livre :: affiche (int);

„Avec un paramètre qui indique l’attribut à afficher.

27

Les concepts de base de la POO

Les classes

Surcharge des méthodes et des opérateurs

„

La classe Livre peut alors être complétée:

„

Dans l’entête, on ajoute :

„class Livre { ..

void affiche(int);

}

„

Dans le corps, on ajoute

void Livre :: affiche (int code)

{ // code souhaité ….}

„

Le compilateur choisit la bonne méthode à l’aide du profil des méthodes.

28

Les concepts de base de la POO

Les classes

Surcharge des méthodes et des opérateurs

„

C++ offre aussi un mécanisme puissant de surcharge des opérateurs (inexistant en java).

„

Tous les opérateurs de C++ peuvent être surchargés.

„ Arithmétique +, -, /, *

„ Comparaison < <= > >= != ==

„ Logique && || !

„ Incrémentation ++ --

„ mais aussi l’opérateur de « sélection » []

„ Etc …

Les concepts de base de la POO

Les classes

Surcharge des méthodes et des opérateurs

„

La surcharge d’un opérateur consiste à définir cet opérateur pour un objet d’une classe définie par le programmeur.

„

Par exemple, pour la classe Livre, on souhaite surcharger l’opérateur de comparaison ==, en utilisant l’ISBN comme critère de comparaison.

„ i.e. que l’on veut permettre l’écriture de la comparaison de 2 livres sous la forme

„if (liv1 == liv2) …

„ Et que la comparaison s’effectue sur l’ISBN

Les concepts de base de la POO

Les classes

Surcharge des méthodes et des opérateurs

„

On ajoute dans la classe Livre, le code suivant :

„

Entête :

„bool operator==(Livre);

„

Implémentation

bool Livre :: operator== (Livre lv) { if (ISBN == lv.ISBN)

return true;

else return false;

}

(6)

31

Les concepts de base de la POO

Les classes

Surcharge des méthodes et des opérateurs

„

La surcharge de l’opérateur est définie comme une méthode de la classe.

„

Elle effectue la comparaison de l’objet courant avec l’objet en paramètre.

„

On peut appeler cet opérateur de 2 façons (avec Livre liv1, liv2; …)

„ if ( liv1.operator==(liv2)) …

„ if (liv1 == liv2) …

„

La deuxième forme est la forme couramment utilisée (forme dite en infixe).

32

Les concepts de base de la POO

Les classes

Surcharge des méthodes et des opérateurs

„

On peut aussi surcharger les opérateurs de flots

<<, >> pour des classes n’importe quelle classe.

„

On souhaite par exemple surcharger l’opérateur de flots de sortie << pour afficher un livre.

„

On peut faire la même chose pour la saisie d’un livre, i.e. surcharger l’opérateur >>.

33

Les concepts de base de la POO

Les classes / Les méthodes/classes amies

„ Méthodes amies

„ Idée intuitive : possibilité de donner des droits spéciaux

„ de manipulation des champs privés ou protégés d'une classe

„ à une méthode “externe” à la classe.

„ nécessité de “nommer” cette méthode comme ayant des droits spéciaux dans la classe concernée

„ concept de méthode amie d’une classe

„ C’est une méthode :

„ qui n'est pas membre de la classe

„ mais qui a le droit de manipuler les membres privés et protégés de la classe

„ La déclaration se fait par le mot-clé "friend"

34

Les concepts de base de la POO Les classes dérivées

„ Possibilité de définir de nouveaux objets à partir des objets existants

„ Hiérarchie de généralisation/ spécialisation

„ Une classe descendante hérite des propriétés de sa classe mère (attributs et méthodes)

„ Elle peut être spécifiée :

„ par enrichissement par rapport à sa classe mère (ajout de nouveaux champs ou ajout de nouvelles méthodes)

„ par substitution i.e. surcharge de certaines méthodes (et par héritage direct de certaines autres)

Les concepts de base de la POO Les classes dérivées

„ Les droits en héritage

„ Pour définir une classe comme héritière d'une autre classe, il faut indiquer le nom de la classe ancêtre et les droits d'héritage

„ Ces droits d'héritage peuvent être :

„ public

„ Les membres sont hérités avec les droits d'accès de leur classe de base (excepté les membres privés de la classe ancêtre qui sont inaccessibles dans la classe héritière )

„ private

„ Les membres sont hérités avec des droits d'accès restreints par rapport à ceux de leur classe de base (en fait tout membre hérité devient privé, c'est le mode implicite d'héritage).

Les concepts de base de la POO Les classes dérivées

„

La syntaxe de définition d'une classe héritière :

class classe_dérivée : mode_héritage classe_ancêtre {

//déclarations des nouveaux membres } ;

(7)

37

Les classes dérivées

„

On souhaite définir une classe « spécialisée » de livres pour décrire les livres anciens.

„

LivreAncien : qui comporte une propriété spécifique qui est sa « cotation » et un attribut qui donne des informations sur l’histoire du livre.

„Ajout de 2 attributs

„

Ajout des méthodes permettant de travailler sur ces nouvelles propriétés et surcharge des méthodes de saisie et d’affichage.

38

Les classes dérivées

class LivreAncien : public Livre {

private : float cotation;

CString histoire;

public:

LivreAncien();

LivreAncien(CString);

virtual ~LivreAncien();

void setCotation(float);

void setHistoire(CString);

float getCotation();

CString getHistoire();

void affiche();

void saisie();

};

„ La classe comporte 2 constructeurs.

„ 2 nouveaux attributs

„ 4 nouvelles méthodes (get et set) sur les nouveaux attributs

„ Et la surcharge des méthodes de saisie et d’affichage.

39

Les concepts de base de la POO Les classes dérivées

void LivreAncien :: affiche() { Livre:: affiche();

cout << "Cotation : " << cotation << endl;

cout << "Histoire : " << histoire << endl;

}

void LivreAncien :: saisie() { Livre:: saisie();

cout << "Cotation ? "; cin >> cotation ; cout << "Histoire ? "; cin >> histoire ; }

„ Les instructions :

„ Livre:: affiche();

„ Livre :: saisie();

„ Provoque l’appel des méthodes affiche et saisie de la classe Livre.

„ Puis les autres instructions sont exécutées.

40

Les concepts de base de la POO Les classes dérivées

„

Constructeurs et héritage

„ Lorsque le constructeur d’une classe héritière est appelé, le constructeur de la classe mère doit également être appelé.

„ On a successivement :

„ appel du constructeur de la classe mère

„ appel des constructeurs des membres de la classe héritière

„ exécution des instructions du corps du constructeur de la classe héritière

„ Sans indication particulière, c’est le constructeur par défaut de la classe mère qui est appelé.

Les concepts de base de la POO Les classes dérivées

„ L’appel au constructeur par défaut de LivreAncien

„ Provoque tout d’abord l’appel du constructeur de Livre

„ Puis les autres instructions sont exécutées.

„ Le même principe est appliquée pour le constructeur avec paramètres.

„ L’appel du constructeur de la classe mère est fait par : Livre(is)

LivreAncien::LivreAncien() : Livre()

{ cotation=0;

histoire="";

}

LivreAncien::LivreAncien(CString is) : Livre(is)

{ cotation=0;

histoire="";

}

Les concepts de base de la POO Les classes / Les classes dérivées

„

Exemple :

„

Description des classes Date, Auteur, Livre et LivreAncien

„

Avec surcharge des opérateurs de comparaison (==) et de flots d’E/S (<<, >>)

„

Programme de test de ces classes avec une application qui gère une tableau de Livre (Livre ou LivreAncien) et la possibilité

„

d’ajouter des livres

„

d’afficher les livres

Références

Documents relatifs

Le lundi, nous soignons tout particu- lièrement notre plan de tra vail sur lequel nous pouvons déjà noter avec précision les bandes calcul et français à faire

g) Progrès en pourcentage des membres du personnel de sexe féminin titulaires d’un engagement de longue durée, par catégorie, de 2015 à 2020 ... Répartition des membres du

Je demande à ce syndicat  de me communiquer les informations académiques et nationales de gestion de ma carrière auxquelles il a accès via les informations fournies aux élus de

Je demande à ce syndicat  de me communiquer les informations académiques et nationales de gestion de ma carrière auxquelles il a accès via les informations fournies aux élus de

Je demande au SNES de me communiquer les informations académiques et nationales de gestion de ma carrière auxquelles il a accès à l’occasion des commissions paritaires et

Je demande au SNES de me communiquer les informations académiques et nationales de gestion de ma carrière auxquelles il a accès à l’occasion des commissions paritaires et

Je demande au SNES de me communiquer les informations académiques et nationales de gestion de ma carrière auxquelles il a accès à l’occasion des commissions paritaires et

Nous avons donc choisi une approche modulaire, en développant séparément un outil qui compare les diagrammes et énumère leurs différences (cf. section 5) et un outil qui interprète