cours it2 introduction à la programmation orientée objet en c++

67
Cours IT2 Introduction à la programmation orientée objet en C++

Upload: bianca-raymond

Post on 03-Apr-2015

110 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Cours IT2 Introduction à la programmation orientée objet en C++

Cours IT2

Introduction à la programmation orientée objet en C++

Page 2: Cours IT2 Introduction à la programmation orientée objet en C++

La création d’un logiciel, c’est un tout

L’analyse (UML, HBDS, SADT, Merise…) L’algorithmique ( Pseudo-code, ADL …) La programmation (ADA, C/C++, VB, JAVA…)

Analyse

Problème sans formulation précise

Enoncé précis du problème

Langage courant

Ecriture des algorithmes

Langage algorithmique

Algorithmique

Programme

Programmation

Langages deprogrammation

Page 3: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire général

Page 4: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire : Programmation

La programmation représente usuellement le codage, c’est-à-dire la rédaction du code source d'un logiciel.

On utilise plutôt le terme « développement » pour dénoter l'ensemble des activités lié à la création d'un logiciel.

Page 5: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire : Programmation

La programmation dans le domaine informatique : C’est l'ensemble des activités qui permettent

l'écriture des programmes informatiques. C’est une étape importante de la conception

du logiciel.

Pour écrire le résultat de cette activité, on utilise un langage de programmation.

Page 6: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire : Langage de programmationUn langage de programmation :

Un code de communication, permettant à un être humain de dialoguer avec une machine en lui soumettant des instructions et en analysant les données matérielles fournies par le système, généralement un ordinateur.

Permet à la personne qui rédige un programme, de faire abstraction de certains mécanismes internes, généralement des activations et désactivations de commutateurs électroniques, qui aboutissent au résultat désiré.

Page 7: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire : Langage de programmationA une visée opérationnelle

(contrairement au langage mathématique): une fonction ou un programme retournent une « valeur ».

Un « langage de programmation » est toujours un compromis entre la puissance d'expression et la possibilité d'exécution.

Page 8: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire : Les types de programmationEn informatique, la programmation

impérative est un paradigme de programmation qui décrit les opérations en termes d'états du programme et de séquences d'instructions exécutées par l'ordinateur pour modifier l'état du programme.

Page 9: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire : Les types de programmationLa programmation structurée peut être

vue comme un sous-ensemble, ou une branche, de la programmation impérative, un des paradigmes majeurs de la programmation.

Elle est célèbre pour son combat pour la suppression de l'instruction goto ou du moins pour la réduction de son usage.

Page 10: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire : Les types de programmationLa programmation orientée objet (POO)

ou programmation par objet, est un paradigme de programmation informatique qui consiste en la définition et l'assemblage de briques logicielles appelées objet.

Un objet représente un concept, une idée ou toute entité du monde physique, comme une voiture, une personne ou encore une page d'un livre.

Page 11: Cours IT2 Introduction à la programmation orientée objet en C++

Les langages de programmation

Le programme est un simple fichier texte : fichier source

Le fichier source contient les lignes de programmes : code source

Ce fichier source une fois terminé doit être compilé ou interprété

Le langage machine

Le langage de programmation

Page 12: Cours IT2 Introduction à la programmation orientée objet en C++

Langages non structurés

Une suite d’actions à exécuter dans l’ordre de leur arrivée sans se soucier de les ordonner ou de les regrouper.

Début programmeEntrer dans cuisineAllumer Lumière

Ouvrir réfrigérateurPrendre oeufFermer réfrigérateur

Ouvrir réfrigérateurPrendre beurreFermer réfrigérateur

Fin Programme

Quasiment identiques

Page 13: Cours IT2 Introduction à la programmation orientée objet en C++

Langages structurés

Un langage « structuré » permet un découpage du programme ce qui le rend beaucoup plus lisible et beaucoup plus modulable qu’un programme écrit en langage « non structuré ».Action PrendreDansRéfrigérateur (objet)

Ouvrir RéfrigérateurPrendre objetFermer Réfrigérateur

Fin PrendreDansRéfrigérateur

Action EntrerDansCuisine ()Entrer dans cuisineAllumer lumière

Fin EntrerDansCuisine

Début programmeEntrerDansCuisinePrendreDansRéfrigérateur ( )PrendreDansRéfrigérateur (beurre)

Fin programme

oeuf

Module avec un paramètre

Module sans paramètre

Appels du module avec deux paramètres différents

Page 14: Cours IT2 Introduction à la programmation orientée objet en C++

Langages orientés objet

Tout est décrit sous forme de classes.Une classe est un ensemble d’éléments

ayant les mêmes caractéristiques et un objet est une instance d’une classe.

On programme les objets eux-mêmes et les interactions entre ces objets.

Les membres d’une classe sont : Attributs. Méthodes.

Page 15: Cours IT2 Introduction à la programmation orientée objet en C++

Langages OO

Page 16: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire : La compilation

Le langage interprété : Le code source est traduit au fur et à mesure. La traduction se fait via un interpréteur.

Le langage compilé : Le code source est traduit une fois pour toutes

sous forme de code objet via un programme appelé compilateur.

Deux phases : Compilation (vérification de la syntaxe) ; édition de liens.

Page 17: Cours IT2 Introduction à la programmation orientée objet en C++

La compilation comment ça marche?

Plusieurs objectifs: Vérifier la correction syntaxique et lexicale Vérifier la sémantique (le plus possible)

autrement dit le typage correct Produire du code dans un langage plus simple

proche de la machine Produire des briques de code assemblables

Page 18: Cours IT2 Introduction à la programmation orientée objet en C++

La compilation comment ça marche?

Codesource

Compilateur

Codeobjet

Bibliothèques

Codeobjet

Codeexécutable

Édition de liens Codesource

Page 19: Cours IT2 Introduction à la programmation orientée objet en C++

La compilation, ses effets…

On peut obtenir Du code natif

Avantage: rapide à l’exécution Inconvénients: à recompiler en changeant de

matériel, choix entre fourniture du binaire ou du source au client

Du code intermédiaire interprété par une machine virtuelle (choix de java)

Avantages: code portable, code mobile Inconvénient: exécution beaucoup plus lente

Page 20: Cours IT2 Introduction à la programmation orientée objet en C++

Avantages/Inconvénientspour langage compilé/langage interprété

Langage compilé Autonome Plus rapide à l’exécution Garantit une meilleure sécurité au code source

Langage interprété Plus souple Moins gourmand en mémoire

NB: certains langages sont à la fois compilés et interprétés (JAVA LISP)

Page 21: Cours IT2 Introduction à la programmation orientée objet en C++

Des exemples de langages

Langage Type Compilé/Interprété Domaine d’application

Basic Non structuré Interprété ApprentissageCobol Structuré Compilé GestionFortran Structuré Compilé CalculsPL1 Structuré Compilé IndustrieC Structuré Compilé Programmation systèmePascal Structuré (il existe

une version objet)Compilé Enseignement

ADA Structuré (il existeune version objet)

Compilé Militaire, aérospatiale

LISP Structuré Interprété et compilé Intelligence artificielleVisual Basic Orienté objet Interprété ou compilé Interfaces homme-machineC++ Orienté objet Compilé IndustrieJava Orienté objet Interprété et compilé Industrie – InternetPerlPHP

Orienté objetOrienté objet Interprété

Interprété Industrie– administration réseauWeb

Page 22: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire : Algorithme (1/4)

Algorithmique ou algorithmie = l’ensemble des activités logiques qui relèvent des algorithmes. Origine : le nom du mathématicien Al

Khuwarizmi, qui, au IXe siècle écrivit le premier ouvrage systématique sur la solution des équations linéaires et quadratiques.

Dans le cas général, l’algorithmique s’effectue au moyen de calculs.

Page 23: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire : Algorithme (2/4)

Algorithme = Moyen pour un humain de présenter la résolution par

calcul d’un problème à une autre personne physique (un autre humain) ou virtuelle (un calculateur).

Énoncé dans un langage bien défini d’une suite d’opérations permettant de résoudre par calcul un problème.

Types d’algorithme Si ces opérations s’exécutent en séquence, on parle

d’algorithme séquentiel. Si les opérations s’exécutent sur plusieurs processeurs

en parallèle, on parle d’algorithme parallèle. Si les tâches s’exécutent sur un réseau de processeurs

on parle d’algorithme réparti ou distribué.

Page 24: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire : Algorithme (3/4)

Intérêt d’un algorithme : Présenter de manière intelligible la suite

d’opérations à effectuer. Obliger le concepteur à prendre du recul par

rapport à sa méthode. Écrire de façon indépendante d’un langage de

programmation et « re transposable » ensuite dans tout langage de programmation.

Pouvoir démontrer à l’aide d’outil mathématique la réalisation de ce qu’on désire obtenir.

Page 25: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire : Algorithme (4/4)

Inconvénient : Peut être vu comme une perte de temps pour le

concepteur (pas de résultat tangible tout de suite).

Parfois trop indépendant du langage qu’on va utiliser (il faut aussi savoir en tenir compte).

Page 26: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire : Variable (1/6)

Dans un langage de programmation, une variable est un espace de stockage pour un résultat. Cependant, les possibilités d'une variable sont intimement liées au langage de programmation auquel on fait référence.

Page 27: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire : Variable (2/6) Par exemple, une variable en C++ aura six

caractéristiques : Son nom, c'est à dire sous quel nom est déclaré la variable ; son type, c'est la convention d'interprétation de la séquence de

bits qui constitue la variable. Le type de la variable spécifie aussi la longueur de cette séquence ( 8 bits, 32 bits, 64 bits) ;

sa valeur, c'est la séquence de bits elle-même ; son adresse, c'est l'endroit dans la mémoire ou elle est

stockée ; sa visibilité, c'est un ensemble de règles qui fixe qui peut

utiliser la variable ; sa durée de vie, c'est la portion de code dans laquelle la

variable existe, il ne faut pas confondre la durée de vie d'une variable locale et sa visibilité.

Page 28: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire : Variable (3/6)

Il existe des conventions d’écriture pour les identificateurs (ou noms de variables) qui dépendent des langages de programmation : Généralement, la première lettre du nom est soit

une lettre (minuscule ou majuscule), soit un _ (blanc souligné).

Les autres caractères doivent être des lettres, des chiffres ou le blanc souligné.

La sensibilité à la casse n’est pas systématique et dépend des langages.

Page 29: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire : Variable (4/6)

On parle de typage fort lorsque le langage impose que les variables soient déclarées dans un type et utilisées dans ce type (ex: Ada ou C++).

On parle de typage faible lorsque le langage admet qu'une variable puisse changer de type au cours de son existence (en particulier pour se conformer à la sémantique d'une expression).

Page 30: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire : Variable (5/6)

On distingue généralement quatre opérations sur les variables, chacune pouvant revêtir des formes syntaxiques différentes. La déclaration permet de déclarer un nom de variable,

éventuellement de lui associer un type, ainsi qu'une valeur initiale ;

l’affectation consiste à attribuer une valeur à une variable ;

la lecture consiste à utiliser la valeur liée à la variable ; la suppression réalisée soit automatiquement soit par

une instruction du langage.

Page 31: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire : Variable (6/6)

En programmation, une variable locale est déclarée à l'intérieur du corps d'une fonction.

En programmation, une variable globale est une variable déclarée à l'extérieur du corps de toute fonction ou classe, et pouvant donc être utilisée n'importe où dans le programme.

Page 32: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire : Fonctions

En informatique, une fonction est un ensemble d’instructions réalisant une certaine tâche. On utilise parfois le synonyme routine, notamment à propos des fonctions bas-niveau des systèmes d’exploitation.

Une fonction prend zéro, un ou plusieurs paramètres et renvoie toujours un résultat.

Page 33: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire : Fonctions

En plus de calculer un résultat à partir de paramètres, la fonction informatique peut avoir des effets de bord : par exemple afficher un message à l‘écran, jouer un son, ou bien piloter une imprimante.

Une fonction qui n'a pas d'effets de bord, et qui renvoie systématiquement la même valeur de retour pour les mêmes paramètres, est appelée fonction pure.

Page 34: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire : ProcédureEn informatique, une procédure est une

fonction qui ne renvoie pas de résultat.On peut cependant remarquer que sous cette

définition les procédures sont rares dans un langage comme le C où avoir une valeur de retour est la norme. On qualifie ainsi de procédure des fonctions d’affichage ou d’analyse de flux qui ont pour valeur de retour un nombre mesurant la réussite ou non de l'exécution de ladite « fonction ».

Page 35: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire : Les types de données

Les types simples : Chaînes de caractères. Nombres (entiers & réels). Booléens (vrai ou faux).

Les types prédéfinis : Tableaux de types simples ou définis par

l’utilisateur.

Les types définis par l’utilisateur. Le type point muni d’une coordonnée X (double) et

d’une coordonnée Y (double).

Page 36: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire: Les chaînes de caractèresLes chaînes de caractères :

On doit souvent définir leur taille. Elles utilisent des jeux de caractères, le plus

connu étant les caractères ASCII. Il existe des fonctions permettant de les

manipuler plus aisément. En C++ : char Nom[], c’est un tableau de

caractères en fait

Page 37: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire : Les entiers

Les entiers : Ils sont représentés en binaire (autrement dit ils

sont une suite de 0 et de 1 qui correspond à l’écriture du nombre en base 2).

Byte : 0 à 255 ; en C++ char Integer : de –32 768 à 32 767 ; en C++ short

ou int Long : de –2 à +2 milliards environ. En C++

long

Page 38: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire : Les réels (1/4) Les réels :

Les nombres à virgule flottante sont les nombres les plus souvent utilisés dans un ordinateur pour représenter des valeurs non entières. Ce sont des approximations de nombres réels.

Les nombres à virgule flottante possèdent un signe s (dans {-1, 1}), une mantisse m (aussi appelée significande) et un exposant e. Un tel triplet représente un réel s.m.be où b est la base de représentation (généralement 2 sur ordinateur, mais aussi 16 sur certaines anciennes machines, 10 sur de nombreuses calculatrices, ou éventuellement toute autre valeur).

Page 39: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire : Les réels (2/4)

En faisant varier e, on fait « flotter » la virgule décimale. Généralement, m est d'une taille fixée.

Ceci s'oppose à la représentation dite en virgule fixe, où l'exposant e est fixé.

La norme IEEE 754 (reprise par la norme internationale CEI 60559) spécifie deux formats de nombres en virgule flottante et les opérations associées.

Page 40: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire: Les réels (3/4)

Les deux formats fixés par la norme IEEE 754 sont sur 32 bits (« simple précision ») et 64 bits (« double précision »). La répartition des bits est la suivante, où 1 ≤ M < 2 :

Encodage Signe Exposant

Mantisse Valeur

Simple précision

32 bits 1 bit 8 bits 23 bits -1^s*M*2^(e-127)

Double précision

64 bits 1 bit 11 bits

52 bits -1^s*M*2^(e-1023)

Page 41: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire: Les réels (4/4)

En C++, on a les deux types de réels: Float pour la simple précision Double pour la double précision

Dans le cadre de calculs, il est préférable d’utiliser les double

Page 42: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire : Les tableaux (1/2)

Les tableaux : Type qui permet d’utiliser des indices pour ranger

des éléments de même type dans une structure ressemblant à un tableau.

Suivant les langages, les indices débutent à 0 ou à 1.

On peut aussi avoir des tableaux à plusieurs dimensions.

En réalité, tout se passe comme si un chaînage existait entre l’indice du tableau et l’élément qu’il contient.

Page 43: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire : Les tableaux (2/2)

En C++ : « tab[] ou *tab » : suite de variables de même type, un tableau

indic&é par des int (obligatoire) « tab[i] » est la variable d’indice i (attention les indices

commencent à 0) le pointeur tab contient en fait l’adresse du premier élément(« tab = = &(tab[0]) ») . Un tableau est alloué :

statiquement par « MonType tab[NBMAX]; » (puis libéré « automatiquement »)

– ou dynamiquement• en C++ « tab = new MonType[NBMAX]; » puis libéré par « delete[] tab;

tab = NULL; »• ou en C « tab = (MonType*)malloc(NBMAX*sizeof(MonType); » puis

libéré par « free(tab); tab = NULL; »

Page 44: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire: les pointeurs

Ils désignent l’adresse d’un élément et peuvent être placés en paramètre

Cela permet de gérer les variables en entrée-sortie par exemple

On les note par *suivi du nom de la variable concernée

Page 45: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire de la programmation orientée objet

Page 46: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire: POO

La programmation orientée objet (POO) ou programmation par objet, est un paradigme de programmation informatique qui consiste en la définition et l'assemblage de briques logicielles appelées objets 

Un objet représente un concept, une idée ou toute entité du monde physique, comme une voiture, une personne ou encore une page d'un livre.

Page 47: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire: objet

Un objet est une structure de données valuées et organisées (état de l’objet) et qui répond à un ensemble de messages (comportement de l’objet). Les données ou champs qui décrivent sa structure

interne sont appelées ses attributs ; L'ensemble des messages forme ce que l'on appelle

l'interface de l'objet ; c'est seulement à travers de celui-ci que les objets interagissent entre eux. La réponse à la réception d'un message par un objet est appelée une méthode  ; elle décrit comment est réalisé le message.

Page 48: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire: l’encapsulation

Les attributs (ou plus exactement leur représentation informatique) et les méthodes sont cachés : ils forment une boîte noire. C'est le principe d'encapsulation. On peut modifier la structure interne des objets

ou les méthodes associées aux messages sans impact sur les utilisateurs des objets.

Exemple: un nombre complexe

Page 49: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire: double sens sur l’encapsulation

Deux significations: Regrouper des caractéristiques au sein d’une

même classe: principe de la POO Cacher certains membres d’une classe à

certaines autres classes avec un choix éventuel de confidentialité différent suivant les « relations » entre les classes

Page 50: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire: héritage

L’héritage permet de décrire des classes de plus en plus précises, héritant de caractéristiques de classes plus générales La classe la plus précise est appelée classe

dérivée ou classe fille La classe dont elle est issue est appelée

surclasse ou classe mère

Page 51: Cours IT2 Introduction à la programmation orientée objet en C++

Vocabulaire: polymorphisme

Polymorphisme ad hoc (surcharge) Fonctions ou méthodes de même nom, avec des

fonctionnalités similaires pour des classes sans rapport entre elles

Exemple la fonction affiche Polymorphisme paramétrique (généricité)

Fonctions de même nom avec des paramètres différents (nombre ou type)

Exemple une fonction addition Polymorphisme d’héritage (dérivation)

Possibilité de redéfinir une méthode dans une classe fille

Exemple une fonction mouvement pour un jeu d’échec

Page 52: Cours IT2 Introduction à la programmation orientée objet en C++

Les instructions C & C++

Page 53: Cours IT2 Introduction à la programmation orientée objet en C++
Page 54: Cours IT2 Introduction à la programmation orientée objet en C++
Page 55: Cours IT2 Introduction à la programmation orientée objet en C++
Page 56: Cours IT2 Introduction à la programmation orientée objet en C++

La structure des programmes en C C++

Page 57: Cours IT2 Introduction à la programmation orientée objet en C++

Les sources C++ et les commentaires

Les sources C++ sont des fichiers textes extension « .h » : pour les fichiers d’entêtes (déclarations à importer :

constantes, variables globales, prototypes des classes et des fonctions, etc.)

extension « .cpp » : pour les fichiers d’implémentation (corps des fonctions et méthodes, variables de classe, etc.)

La traduction en exécutable se déroule comme suit : Précompilation (interprétation des ordres # : #include, #define) Compilation séparée Édition de liens (statique ou dynamique)

Les commentaires sont écrits sur une ou plusieurs lignes : // tout ce qui suit jusqu’à la fin de la ligne est en commentaire (style

C++) /* tout ce qui suit jusqu’au symbole symétrique est en

commentaires (style C) */

Page 58: Cours IT2 Introduction à la programmation orientée objet en C++

/* les ordres # pour le précompilateur */

#include "iostream.h"

#define ValeurMaximum 12345

/* les définitions de types de variables */

typedef long tEntier;

/* les (prototypes de) fonctions */

tEntier Incremente(tEntier val) {return val + 1;}

/* les appels de fonctions */

void main() {

tEntier mon_entier ; mon_entier = (tEntier)ValeurMaximum ;

cout << Incremente(mon_entier) << endl;

}//main

Exemple d’un source #include signifie « importer »iostream.h gère les flux d’entrées/sorties

#define signifie « chercher/remplacer »

typedef crée un nouveau type de variable à partir d’un type existant (ici long)

"return val+1;" signifie (en ADL) :Incremente val+1 ;

*La fonction principale : c’est le point

de départ unique de l’exécution…

On peut écrire plusieurs instructions sur la même ligne…

cout est le gestionnaire du flux sortant standard (l’écran)

Page 59: Cours IT2 Introduction à la programmation orientée objet en C++

On peut programmer en C, en C++ ou mixer les deux

Le C pas de classe mais des structures ou des énumérations Des allocations de pointeurs

Le C++ Des classes La gestion des pointeurs ne se fait pas de la même

façon qu’en C

Il n’y a aucune contre-indication théorique à mixer les deux

Page 60: Cours IT2 Introduction à la programmation orientée objet en C++

En C: le .h

#include "stdio.h" /*utilisation de la bibliothèque C d’entrées/sorties standards*/#include "string.h" /*utilisation de la bibliothèque des chaînes de caractères en C*//*Longueur maximum des noms*/#define LongMaxNom 100

typedef enum { /*énuméré (genre des personnes) : fille ou garçon*/tGenre_fille=1, /*la constante tGenre_fille vaut 1*/tGenre_garcon /*la constante tGenre_garcon vaut automatiquement 2*/

} tGenre;

typedef struct { /*type de variable représentant une personne*/tGenre genre; /*garcon ou fille ?*/unsigned char age; /*âge (entier compris en 0 et 255)*/float taille; /*taille en mètres (flottant en simple précision)*/char nom[LongMaxNom+1]; /*nom (LongMaxNom caractères maximum)*/

} tPersonne;

Page 61: Cours IT2 Introduction à la programmation orientée objet en C++

En C : le .c

/* Fonction d’affichage de la civilité en fonction du genre et de l’âge*/void AfficheCivilite(tPersonne personne) {

switch (personne.genre) {case tGenre_fille :

if (personne.age<(float)25) { printf(" %s ","Mademoiselle");} else { printf(" %s ","Madame");}/*if*/break;

default:printf(" %s ","Monsieur");

}/*switch*/}/*AfficheCivilite*/

/* Fonction d’affichage d’une variable de type tPersonne*/void Affiche(tPersonne personne, int sautdeligne) {

AfficheCivilite(personne);printf("%s (age : %d ; taille : %4.2f m)",personne.nom,(int)personne.age,personne.taille);if (sautdeligne) { /* <=> if (sautdeligne<>0) */

printf("\n");/*} else {*/}/*if*/

}/*Affiche*/

Page 62: Cours IT2 Introduction à la programmation orientée objet en C++

En C : le .c

/* Fonction d’affichage de la civilité en fonction du genre et de l’âge*/void AfficheCivilite(tPersonne personne) {

switch (personne.genre) {case tGenre_fille :

if (personne.age<(float)25) { printf(" %s ","Mademoiselle");} else { printf(" %s ","Madame");}/*if*/break;

default:printf(" %s ","Monsieur");

}/*switch*/}/*AfficheCivilite*/

/* Fonction d’affichage d’une variable de type tPersonne*/void Affiche(tPersonne personne, int sautdeligne) {

AfficheCivilite(personne);printf("%s (age : %d ; taille : %4.2f m)",personne.nom,(int)personne.age,personne.taille);if (sautdeligne) { /* <=> if (sautdeligne<>0) */

printf("\n");/*} else {*/}/*if*/

}/*Affiche*/

Page 63: Cours IT2 Introduction à la programmation orientée objet en C++

En C : le main

int main(int argc, char *argv[]) {tPersonne unepersonne; /*déclaration d'une variable locale*/printf("Programme %s (%d parametres)\n",argv[0],argc-1);/*initialisation de la variable*/if (Initialise(& unepersonne,tGenre_garcon,(unsigned char)57, (float)1.765,"Robert")) { Affiche(unepersonne,1);} else {

fprintf(stderr,"Le nom est trop long !!!\n");}/*if*/if (Initialise(& unepersonne,tGenre_fille,(unsigned char)55, (float)1.67,"Raymonde"))

Affiche(unepersonne,1);else fprintf(stderr,"Le nom est trop long !!!\n");return 0;

}/*main*/

Page 64: Cours IT2 Introduction à la programmation orientée objet en C++

En C++ le .H

#include "iostream" //utilisation de la bibliothèque standard C++ de flux d'entrées/sorties

#include "string" //utilisation de la bibliothèque standard C++ des chaînes de caractères

using namespace std; //Pour ne pas être obligé d'écrire std::string partout

//Longueur maximum des noms#define LongMaxNom 100

typedef enum { //énuméré (genre des personnes) : fille ou garçontGenre_fille=1, //la constante tGenre_fille vaut 1tGenre_garcon //la constante tGenre_garcon vaut automatiquement 2

} tGenre;

Page 65: Cours IT2 Introduction à la programmation orientée objet en C++

En C++ le .H (suite)

class cPersonne { //type de variable objet représentant une personnepublic:

tGenre genre; //fille ou garçon ?unsigned char age; //âge (entier compris en 0 et 255)float taille; //taille en mètres (flottant en simple précision)string nom; //nom (VARIABLE DE LA CLASSE std::string)// Méthode ("inline") d’affichage de la civilité en fonction du genre et de l’âgevoid AfficheCivilite() const { switch (genre) { // genre n'est pas un paramètre case tGenre_fille : if (age<(float)25) { cout << " Mademoiselle ";

} else { cout << " Madame "; }/*if*/ break;

default: cout << " Monsieur "; }/*switch*/}//AfficheCivilite//Prototype de la méthode ("outline") d'initialisationbool Initialise(tGenre genre,unsigned char age,float taille,char nom[]);//Prototype de la méthode ("outline") d'affichagevoid Affiche(bool sautdeligne=true) const ; //sautdeligne a par défaut la valeur true//Prototype du constructeur (d'initialisation) par défautcPersonne(tGenre Genre=tGenre_fille,unsigned char Age=(unsigned char)0, float Taille=(float)0, char Nom[]="");

}; //cPersonne

Page 66: Cours IT2 Introduction à la programmation orientée objet en C++

En C++ le Cpp

//Corps de la méthode "Initialise" de la classe "cPersonne"bool cPersonne::Initialise(tGenre genre,unsigned char age,float taille,char nom[]) {

this->genre = genre; // this-> remplace le paramètre "anonyme" (objet déclencheur)this->age = age; // si les paramètres n'avait pas le même nom que les membresthis->taille = taille; // il n'y aurait pas besoin de lever les ambiguïtésthis->nom = nom; // donc pas besoin de this-> (qui serait implicite Cf. Affiche)if (strlen(nom)>LongMaxNom) { return false; //} else {}//ifreturn true;

}//cPersonne::Initialise

// Fonction d’affichage d’un objet (une variable de la classe) cPersonnevoid cPersonne::Affiche(bool sautdeligne) const {

char temp[4+1]; sprintf(temp,"%4.2f",taille);AfficheCivilite(); cout << nom.c_str() <<" (age : "<< (int)age << " ; taille : "<< temp <<" m)";if (sautdeligne) { // <=> if (sautdeligne==true) cout << endl; //} else {}//if

}//CPersonne::Affiche

//Corps du constructeur (d’initialisation) par défaut de la classe "cPersonne"cPersonne::cPersonne(tGenre Genre,unsigned char Age,float Taille,char Nom[]) {

Initialise(Genre,Age,Taille,Nom);}//cPersonne::cPersonne

Page 67: Cours IT2 Introduction à la programmation orientée objet en C++

En c++ le cpp

void main(int argc, char *argv[]) {cout << "Programme " << argv[0] << " (" << (argc-1) << " parametres)"<<endl;

//Construction de l'objet : déclaration et initialisation grâce au constructeurcPersonne unepersonne(tGenre_garcon,(unsigned char)57, (float)1.765,"Robert");

if (unepersonne.nom.length() <= LongMaxNom) { unepersonne.Affiche(true);} else {

cerr << "Le nom est trop long !!!" << endl;}//if

if (unepersonne.Initialise(tGenre_fille,(unsigned char)55, (float)1.67,"Raymonde")) unepersonne.Affiche();

else cerr << "Le nom est trop long !!!" << endl;}//main