et Programmation Objet

Dimension: px
Commencer à balayer dès la page:

Download "et Programmation Objet"

Transcription

1 FACULTE POLYTECHNIQUE DE MONS Service d Informatique et Programmation Objet Mohammed Benjelloun 2 ème Bachelier Année académique

2 Table des matières Avant-propos Chap 1 : Les structures et fonctions membres Principes des structures Structures et fonctions membres Exercices Chap 2 : Les listes simplement chaînées Généralités Listes Simplement chaînées Exercices Chap3 : Les Classes Classes et objets Concept d encapsulation Création d'objets Affectation d objets Déclaration d une fonction membre Notions de constructeur et de destructeur Constructeurs par défaut Constructeur de copie Listes d initialisation des constructeurs Affectation d un objet par un autre de la même classe Tableau d objets Surcharge des opérateurs Exercices Chap4 : Les patrons et amis Patrons de fonctions Classe template : patron de classes Utilisation d un patron de classes M.BENJELLOUN Info II S. Informatique

3 4.4. Fonctions et classes amies Fonctions amies Méthodes amies Classes amies Exercices Chap5 : L'héritage Classes de base et classes dérivées Mode de dérivation Héritage public Redéfinition de membres dans la classe dérivée Redéfinition des fonctions membres Redéfinition des données membres Héritage et Constructeurs/destructeurs Polymorphisme Exercices Chap6 : La bibliothèque STL Introduction Les conteneurs Vector List Les itérateurs Les algorithmes Exercices Syllabus2d_2 : Transparents des séances d exercices M.BENJELLOUN Info II S. Informatique

4 Avant-propos Ces notes constituent le support des travaux pratiques et des exercices dans le cadre de l'enseignement du cours d'informatique II de la deuxième année de bachelier à la Faculté Polytechnique de Mons. Il représente aussi une partie du cours Programmation et Algorithmique dispensé aux étudiants d IG Charleroi. Lors des séances d'exercices, où la présence est obligatoire, un complément de matière sera abordé. Donc le présent document ne peut être considéré comme complet. Ce cours s appuie sur des notions préliminaires de programmation procédurale. La syntaxe du langage C++ ainsi que les notions fondamentales de programmation ont été étudiées durant le cours d Informatique I et sont supposées acquises. Durant ce cours, les notions fondamentales de la programmation orientée objet sont abordées. Nous commençons par un rappel sur les structures auxquelles nous introduisons les fonctions membres. Le chapitre 2 peut être considéré comme une brève introduction aux listes simplement chaînées dont le rôle est de remédier aux limitations des tableaux statiques ou dynamiques. Avec le chapitre sur les classes, généralisation de la notion de type défini par l'utilisateur, nous abordons véritablement les possibilités de "programmation (orientée) objets". Nous introduisons la définition d une classe, la notion de méthode, l encapsulation et le type de membre (publique, privé, protégé), ainsi que les notions très importantes de constructeur et de destructeur indispensables à ce type de programmation. Nous montrons aussi comment définir une famille de fonctions ou de classes paramétrées par un ou plusieurs types grâce à la notion de patron de fonctions et de classes. Par la suite nous proposons un principe propre à la programmation orientée objet : l'héritage qui permet de créer une nouvelle classe à partir d'une classe existante. Un autre concept des langages objet qui découle directement de l'héritage est le polymorphisme. Pour terminer, nous esquissons la bibliothèque STL (Standard Template Library : Bibliothèque standard générique.) qui est certainement l un des atouts de C++ et qui peut être considérée comme un outil très puissant. Comme la programmation par l exemple vaut mieux que tous les beaux discours, nous avons illustré et agrémenté ces notes, comme les Slides des séances d'exercices, de nombreux programmes permettant à l étudiant d assimiler les principales notions présentées. Tous les programmes sont fournis complets avec le résultat de leur exécution. Le code source de ces programmes est accessible sur le site Web de la Faculté. Nous ne pouvons qu insister sur la quasi-nécessité de les tester, et mieux encore de les comprendre et de les modifier. En ce qui concerne les exercices, nous incitons l étudiant à les programmer, car la programmation est un art qui s apprend en pratiquant. Vous l aurez compris, ces notes n ont pas la prétention d expliquer en détail tous les concepts du C++, mais se proposent en tant qu introduction à la programmation orientée objet. Ce syllabus ne peut donc être considéré comme autosuffisant pour apprendre tout le

5 langage C++. En effet, la matière est vaste et le temps attribué est court. Mais la programmation orientée objet, sera approfondie durant le cours de 3 ème année en préparation au master d Informatique et Gestion. Nous renvoyons, néanmoins le lecteur désireux d'en savoir plus à l'un des très nombreux ouvrages de référence sur le C++, notamment à: Claude Delannoy Programmer en langage C++, Eyrolles, 2004 ou l édition 2007 Très bon livre pour commencer le C++, livre très pédagogique et assez complet. Plusieurs chapitres sont dédiés aux composants de la bibliothèque standard du C++. John R. Hubbard Programmer en C++, Collection Schaum s Ediscience, Dunod Un ouvrage expliquant les concepts de base de la programmation C++ à l'aide d'exemples. On y trouve entre autre: Classes, Surcharge d'opérateurs, Composition et héritage, Modèles et itérateurs, C++ standard et les vecteurs, Classes conteneur. John R. Hubbard Structures de données en C++, Collection Schaum s Ediscience, Dunod Ce volume est complémentaire au précédent. Près de 455 exercices et problèmes résolus sont décortiqués pour une meilleure compréhension. On y trouve entre autre : Classes, Listes, Tables, Arbres, classes conteneurs standard, algorithmes génériques. 2 Sur le Web : Cours, tutoriels, livres électroniques et Docs sur C++ : Mega Cours C++ en français Je voudrais remercier ici les collègues du Service d'informatique qui ont pris soin de relire ces notes et de suggérer corrections et améliorations. Je suis bien conscient qu'il reste des erreurs et/ou des imprécisions. Merci au lecteur assidu de les signaler! Si vous notez la moindre erreur ou si vous souhaitez me proposer vos suggestions, n'hésitez pas à le faire à l adresse suivante :

6 Chap 1 : Les structures et fonctions membres Ce chapitre est un prolongement du chapitre 8 du syllabus de la 1 ère année de bachelier sur l'utilisation des structures en C++. Certaines notions du chapitre 8 vont être rappelées ici, brièvement ; d'autres, complètement nouvelles comme les fonctions membres, seront introduites Principes des structures Une structure est un ensemble de variables (de types éventuellement différents), définissant un nouveau type sous un seul nom, adapté à une gestion spécifique et à une manipulation facile des données. Une structure se définit par un identificateur suivant le mot-clé struct, ainsi que par une liste de champs ou membres définis par un identificateur d'un type donné. Par exemple, pour gérer les coordonnées d'un point (abscisse et ordonnée) ou des étudiants, on pourra définir les types suivants : struct point { int x; int y; ; struct Etudiant { int Id; string Nom; ; Quant à x et y, on dit que ce sont des champs ou des membres de la structure point, alors que Nom et Id sont des champs de la structure Etudiant. On déclare ensuite des variables du type point (Etudiant) par des instructions telles que : struct point a, b; struct Etudiant Etud1, Etud2; Etudiant Etud[10] ; // a et b deux variables de type structure point // Etud est un tableau de 10 éléments de type structure Etudiant Celle-ci réserve l'emplacement pour des structures nommées a et b de type point, Etud1 et Etud2 de type Etudiant et finalement un tableau de 10 éléments de type Etudiant. L'accès aux membres de a, b ou de Etud1 et Etud2 se fait à l'aide de l'opérateur point (.). Par exemple, a.y désigne le membre y de la structure a et Etud1.Nom désigne le nom du Etudiant Etud1. Rq En C++ le mot clé struct n'est pas nécessaire devant la structure lors de la déclaration. En C++, nous allons pouvoir, dans une structure, associer aux données constituées par ses membres des méthodes qu'on nommera "fonctions membres".

7 Chap 1 : Les structures et fonctions membres Structures et fonctions membres Supposons qu en plus de la déclaration des données Id et Nom, nous souhaitions associer à la structure Etudiant deux fonctions : void Saisie() : pour saisir l identifiant et le nom d un seul Etudiant ; void Affiche() : pour afficher les information d un seul Etudiant. Voici comment nous pourrions éventuellement déclarer la structure Etudiant : struct Etudiant { int Id; string Nom; void Saisie() ; void Affiche() ; ; Dans la déclaration d'une structure, il est permis (mais généralement peu conseillé) d'introduire les données et les fonctions dans un ordre quelconque (nous avons systématiquement placé les données avant les fonctions). Le programme suivant reprend la déclaration du type Etudiant, la définition de ses fonctions membres et un exemple d utilisation dans la fonction main : #include <iostream> #include <string> using namespace std ; struct Etudiant { int Id; string Nom; void Saisie() ; // Saisir un élément void Affiche() ; ; // Définition des fonctions membres du type Etudiant ---- void Etudiant::Saisie() { cout << "donnez un identifiant : "; cin >> Id; cout << "donnez un nom : " ; cin >> Nom; void Etudiant::Affiche() { cout << " Identifiant ="<< Id << endl; cout << " Son nom : "<< Nom << endl; void main(){ Etudiant Etud3, Etud[3]; cout << "----> Etud >"<< endl; for(int i=0 ; i<3 ; i++){ Etud[i].Saisie(); Etud[i].Affiche(); cout << "----> Etud3 ---->"<< endl; Etud3.Saisie(); // accès à la fonction Saisie du Etudiant Etud1 Etud3.Affiche(); Programme 1.1.

8 Chap 1 : Les structures et fonctions membres 5 SOLUTION ----> Etud > donnez un identifiant : 0 donnez un nom : Etud0 Identifiant =0 Son nom : Etud0 donnez un identifiant : 1 donnez un nom : Etud1 Identifiant =1 Son nom : Etud1 donnez un identifiant : 2 donnez un nom : Etud222 Identifiant =2 Son nom : Etud > Etud3 ----> donnez un identifiant : 33 donnez un nom : ETUD33 Identifiant =33 Son nom : ETUD33 Dans l'en-tête, le nom de la fonction Etudiant::Saisie(), signifie que la fonction Saisie() est celle définie dans la structure Etudiant. En l'absence de ce "préfixe" (Etudiant::), nous définirions effectivement une fonction nommée Saisie(), mais celle-ci ne serait plus associée à Etudiant; il s'agirait d'une fonction "ordinaire" et non plus de la fonction membre de la structure Etudiant. Dans les fonctions Saisie() et Affiche(), il faut remarquer l utilisation de Id et du Nom qui ne sont ni des arguments de fonctions ni des variables locales. En fait, ils désignent les membres Id et Nom de la structure Etudiant. L association est réalisée par Etudiant:: de Rq l en-tête des fonctions. Voici un autre exemple utilisant cette fois ci la structure point. #include <iostream> using namespace std ; struct point { int x ; int y ; // Déclaration des fonctions membres (méthodes) void initialise(int, int) ; void affiche() ; ; void Affiche2(point A, point B){ // fonction non membre cout << "\n...je suis dans Affiche2..."<<"\n" ; A.affiche(); B.affiche(); // --- Définition des fonctions membres du type point --- void point::initialise (int abs, int ord) { x = abs ; y = ord ; void point::affiche () { cout << "Je suis en " << x << " " << y << "\n" ;

9 Chap 1 : Les structures et fonctions membres 6 void main() { point a, b, TabPoint[3]; a.initialise (3, 7) ; a.affiche () ; b.x = 10; b.y = 20 ; b.affiche (); for(int i=0 ; i<3 ; i++){ TabPoint[i].initialise(i, i+4); TabPoint[i].affiche(); SOLUTION Affiche2(a, b); Programme 1.2. Je suis en 3 7 Je suis en Je suis en 0 4 Je suis en 1 5 Je suis en Je suis dans Affiche2... Je suis en 3 7 Je suis en Rqs Dans le cas des structures, un appel tel que a.initialise (3,7) ; pourrait être remplacé par: a.x = 3 ; a.y = 7 ; Dans un programme, nous pouvons évidemment mélanger fonctions membres et fonctions non membres. Exercices 1.1. Ecrire un programme qui gère un ensemble de Personnes (Nmax=10). Chaque Personne aura une structure avec un identifiant Id de type entier et un nom de type string dont la déclaration est: struct Personne { int Id; string nom; ; Ce programme doit gérer en boucle le menu suivant : 1 : Saisie et Affichage 2 : Ajouter au (début, milieu ou fin) et Affichage 3 : Supprimer le début et Affichage 4 : Tri selon NOM et Affichage 5 : Tri selon Id et Affichage 6 : Quitter Le menu sera affiché via une fonction, les choix seront traités via l instruction case. Votre programme utilisera une série de fonctions permettant de séparer les tâches Transformez l exercice précédent en utilisant dans la structure deux fonctions membres saisie() et affichage(). Apporter les modifications nécessaires à la structure, aux fonctions et au programme.

10 Chap 2 : Les listes simplement chaînées 2.1. Généralités Jusqu'à présent, nous n'avons travaillé qu'avec des structures de données statiques, dont l'espace mémoire occupé pouvait être défini avant l'exécution. Dans le cas d une déclaration d un tableau de structure par la syntaxe: struct Etudiant Tab[100] ; Cette déclaration permet de réserver automatiquement une zone mémoire d une longueur de 100 éléments de type Etudiant. Les cellules du tableau sont alors accessibles par Tab[0] à Tab[99]. Cependant, le problème réside dans le fait que la déclaration du tableau avec une dimension constante fige le nombre d éléments de ce tableau. Autrement dit, même si un programme n a besoin que de 20 éléments, on réservera malgré tout 100 cellules de type Etudiant. Comme nous l avons déjà vu en 1 ère Bachelier, nous pouvons remédier à cela en utilisant les pointeurs. Les instructions deviennent dans ce cas-ci : struct Etudiant *Tab; Pour pouvoir stocker en mémoire une valeur de type Etudiant, il faut donc explicitement demander une adresse disponible en utilisant le mot réservé new et la libérer avec delete. L allocation dynamique de la mémoire correspondant au nombre de cellules est maintenant au gré de l utilisateur. On peut, par exemple, lui demander d introduire un nombre N, puis nous réservons l espace mémoire strictement nécessaire. cout<< " Dimension du Tableau N : " ; cin >> N; // Allocation mémoire : new[] Tab = new Etudiant[N]; // Restituer la mémoire : delete[] delete[] Tab; Supposons qu à un moment donné dans le programme même, nous n ayons plus besoin que de (N-5) éléments. La logique, comme nous désirons optimiser la gestion de la mémoire, est de libérer la place de mémoire pour 5 cellules. Mais cela ne peut se faire ni automatiquement ni directement. Donc cela reste bien sûr limitatif. En effet, cela ne permet pas d'exploiter les structures tels que les listes chaînées, les piles, les arbres, structures fondamentales pour de nombreux algorithmes Listes Simplement chaînées Une liste chaînée est une séquence d'objets dynamiques dont chacun contient une indication explicite vers l'élément suivant. Une liste est faite de cellules. Chaque cellule contient un élément de la liste et l'adresse de l'élément suivant (structure de même type).

11 Chap 2 : Les listes simplement chaînées 8 Considérons donc la définition d'une liste simplement chaînée de structures contenant des strings. "Etud1" "Etud2" "Etud3" "Etud4" NULL Chaque cellule de la liste chaînée peut être définie comme une structure: struct Etudiant { string Nom; struct Etudiant *next; ; // Etudiant suivant Chaque cellule comporte donc une zone mémoire pour stocker son contenu (ici string Nom), ainsi qu'une zone mémoire pour stocker un pointeur vers la cellule suivante (c'est-à-dire l'adresse de la cellule suivante). Pour pouvoir travailler avec une liste simplement chaînée, il faut connaître l'adresse de sa première cellule. Nous définirons donc un pointeur: struct Etudiant *debut; Si les tableaux permettent un accès direct aux éléments, les listes chaînées en sont dépourvues. La définition et la nature même de la liste chaînée font apparaître que l on ne peut parcourir intégralement la liste qu en partant du premier élément et en visitant les éléments l un après l autre. En contrepartie nous gagnons en souplesse lorsqu il s agit de modifier la liste. Des opérations telles que : ajout, suppression d un élément à une position quelconque dans la liste, la suppression avec libération de mémoire d un nombre quelconque d éléments consécutifs, Voici un programme simple mais complet, dans lequel nous traitons un certain nombre d opérations sur la liste. Par exemple : l'insertion d'une nouvelle cellule en début de liste, le parcours de la liste pour l affichage, l effacement d'une cellule, la libération de la mémoire. #include <iostream> #include <string> using namespace std ; typedef struct Etudiant{ string Nom; struct Etudiant *next; // le lien : pointeur sur la cellule suivante liste; //insérer un nouvel élément en tête de liste et retourner un pointeur sur la liste. liste *insere_en_tete(string x, liste *lis ) { liste *c; c = new liste ; // créer une cellule if (c!=null){ c Nom=x; // assignation de x c next=lis; // assignation de suivant: chaîner avec la première cellule de la liste lis=c; return (lis); // chaînage: faire pointer la tête de liste vers la nouvelle cellule.

12 Chap 2 : Les listes simplement chaînées 9 void parcours (liste *lis) { liste *p; p = lis; cout << "Affichage : "<< endl; while ( p!= NULL) { cout << p Nom << endl; p = p next; cout <<endl<<endl; void liberation (liste *lis) { liste *p; p = lis; while ( p!= NULL) { lis=lis next; delete p; p = lis; void main() { int i, n; string Name; liste *debut; debut=null; // si p=null, donc fin de liste // liste vide cout << "nombre d'elements N: " ; cin >> n; // cout << "\n Creer une liste avec insertion en tete de liste + affichage \n"; for(i=1; i<=n; i++){ cout << "\n Nom "<< i << " : "; cin >> Name; debut=insere_en_tete(name, debut); parcours(debut); // Affichage // cout << "Inserer une nouvelle cellule apres la cellule debut " << endl; liste *p; p = new liste; p Nom = "Nouveau"; p next = debut next; debut next = p; parcours (debut); // cout << "Supprimer la 1ere cellule " << endl; liste *q; q=debut; debut=debut next; delete q; // mémoire dynamique n'est plus utilisée doit être libérée. parcours (debut); // // Libération cout << " Liberation de la memoire "; liberation (debut); Programme 2.1.

13 Chap 2 : Les listes simplement chaînées 10 nombre d'elements N: 3 Creer une liste avec insertion en tete de liste + affichage Nom 1 : premier Nom 2 : second Nom 3 : nom3 Affichage : nom3 second premier S O L U T I N Inserer une nouvelle cellule apres la cellule debut Affichage : nom3 Nouveau second premier Supprimer la 1ere cellule Affichage : Nouveau second premier Liberation de la memoire Exercices 2.1. Transformer l exercice 1.2. en remplaçant le tableau statique de structures Personne par une liste simplement chaînée.

14 Chap 2 : Les listes simplement chaînées 2.2. Parcours Vita 11 Ecrire un programme permettant de manipuler plusieurs listes dont le nombre est NL< Nmax=15. Il s agit d un Parcours Vita avec NL activités et un nombre de participants NP<Nmax. Les informations caractérisant chaque participant dans la liste sont les suivantes: Nom : chaîne de caractères Code : un caractère (A, B, ) Créer la (les) structure(s) nécessaire(s) à ce problème. Les fonctions Saisie(..) et Affichage(..) pour chaque élément (participant) sont déclarées dans la structure participant. Ce programme doit gérer en boucle le menu suivant : 1- SaisieL Liste1 et Affichage 2- Liste1 TO Liste2 et Affichage 3- Parcours et Affichage 4- Fin 1- Saisie Liste1 et Affichage: Est constitué au moins de deux fonctions : SaisieL (.) ; Dans cette fonction on demandera et on testera le nombre de participants (NP) à saisir et on effectuera la saisie des participants dans une liste par insertion en tête. Par exemple si NP=4 et l utilisateur introduit au clavier : (NomD D) puis (NomC C) puis (NB B) et enfin (NA A) La liste est : Affichage(.) ; (NA A) --- (NB B) --- (NomC C) --- (NomD D) 2- Liste1 Liste2 et Affichage: Ici, comme si les participants sautent, un par un, de la poutre1 (Liste1) à la poutre2 (Liste2). On applique (FIFO), c'est-àdire, on retire d abord le D de Liste1, on insère D dans Liste2 et on affiche liste1 et liste2. Liste1 : (NA A) --- (NB B) --- (NomC C) Liste2 : (NomD D) Puis on transfert (NomC C) de Liste1 vers Liste2. Ce dernier sera inséré dans Liste2 après (NomD D). Liste1 : (NA A) --- (NB B) Liste2 : (NomD D) --- (NomC C) Tant que liste1 n est pas vide, on continue. A la fin on aura l affichage suivant : Liste1 : Vide Liste2 : (NomD D) --- (NomC C) --- (NB B) ----(NA A) Attention : Ici on affiche l état des deux listes chaque fois qu un participant passe de la liste1 à la liste2. Il faut soigner tous les affichages afin de bien suivre et comprendre les différentes séquences. 3- Parcours et Affichage: Ici on demandera à l utilisateur le nombre NL et on y fera traverser les NP participants comme le montre la figure générale (début). On affiche toutes les listes chaque fois que toute l équipe passe d une liste à l autre. Si par exemple NL=3 on affichera: Liste1 : (NA A) --- (NB B) --- (NomC C) --- (NomD D) Liste2 : Vide Liste3 : Vide Liste1 : Vide Liste2 : (NomD D) --- (NomC C) --- (NB B) ----(NA A) Liste3 : Vide Liste1 : Vide Liste2 : Vide Liste3 : (NA A) --- (NB B) --- (NomC C) --- (NomD D) RQs : Utilisez les règles de bonnes pratiques étudiées durant les travaux pratiques telles que l indentation syntaxique, la programmation modulaire, libérer la mémoire d un élément supprimé!!

15 Chap3 : Les Classes Le but de ce chapitre est d introduire les concepts de base des objets. Ainsi, les termes de "programmation (orientée) objets", de classe, d'objet, de méthode, d encapsulation et type de membre (publique, privé) vont être définis. Ce chapitre n a pas la prétention d expliquer en détail ce type de conception, mais se propose d en introduire les idées maîtresses en préambule à l étude du langage C++. Afin d illustrer par la programmation ces concepts, ce chapitre est agrémenté de nombreux programmes permettant à l étudiant d assimiler les principales notions et de comprendre quelques subtilités de cette matière. Pour plus de précisions, le lecteur pourra se reporter aux références. Des notions comme l'héritage, le polymorphisme, seront abordées dans d autres chapitres de ce syllabus Classes et objets Une classe définit un regroupement de données et de fonctions ou méthodes. D'un point de vue syntaxique, une classe ressemble beaucoup à la définition d une structure, il suffit de remplacer le mot clé struct par le mot réservé class; préciser quels sont les membres publics (fonctions ou données) et les membres privés en utilisant les mots clés public et private. struct Etudiant { int Id; string Nom; void Saisie(); void Affiche(); ; Class Etudiant { private : // Cachées aux fonctions externes int Id; string Nom; // Accessibles depuis l'extérieur de la classe void Saisie(); void Affiche(); ; La déclaration d une classe commence par le mot-clé class suivi du nom de la classe et se termine par le point-virgule obligatoire. Le nom de la classe dans cet exemple est Etudiant. On appelle objet, une donnée d'un type class, c est une instanciation d une classe. Class Etudiant Etud1 ; // Etudiant est une classe, Etud1 est une instance d un objet. fonction membre ou méthode, un membre d'une classe qui est une fonction (Saisie), donnée membre, un membre qui est une variable (Id et Nom). Le C++ introduit des concepts de programmation orientée objet. Un des concepts majeurs est l'encapsulation des données.

16 Chap3 : Les Classes Concept d encapsulation Dans la classe Etudiant, toutes les fonctions membres sont désignées comme public et toutes les données membres comme private; les premières étant accessibles depuis l extérieur de la classe, les secondes l étant seulement depuis la classe. L'association de membres et fonctions au sein d'une classe, avec la possibilité de rendre privées certains d'entre eux, s'appelle l'encapsulation des données, un des concepts majeurs de la programmation orientée objet. Intérêt de la démarche: puisqu'elles ont été déclarées privées, les données membres Id et Nom ne peuvent être modifiées autrement que par un appel de la fonction Saisie(). En effet, l'encapsulation est un mécanisme consistant à rassembler les données et les méthodes au sein d'une classe en cachant l'implémentation de l'objet: cacher l'information contenue dans un objet et ne proposer que des méthodes ou des fonctions de manipulation de cet objet. Ainsi les propriétés contenues dans l'objet seront assurées/validées par les méthodes de l'objet et ne seront plus de la responsabilité de l'utilisateur extérieur. Les fonctions membres doivent pouvoir servir d'interface pour manipuler les données membres. L'utilisateur extérieur ne pourra pas modifier directement l'information et risquer de mettre en péril les propriétés comportementales de l'objet. L'encapsulation permet donc de garantir l'intégrité des données contenues dans l'objet. On place l'étiquette public devant les fonctions membres dédiées à la manipulation des données membres. En effet, si l'utilisateur de la classe ne peut pas modifier les données membres directement, il est obligé d'utiliser l'interface (les fonctions membres) pour les modifier, ce qui peut permettre au créateur de la classe d'effectuer des contrôles... Le C++ implémente l'encapsulation en permettant de déclarer les membres d'une classe avec le mot réservé public, private ou protected. Ainsi, lorsqu'un membre est déclaré : public, il sera accessible depuis n'importe quelle classe ou fonction. private, il sera uniquement accessible d'une part, depuis les fonctions qui sont membres de la classe et, d'autre part, depuis les fonctions autorisées explicitement par la classe (par l'intermédiaire du mot réservé friend (voir plus loin) ). protected, il aura les mêmes restrictions que s'il était déclaré private, mais il sera en revanche accessible par les classes héritières (voir plus loin). Dans la classe Etudiant, les membres nommés Id et Nom sont privés, tandis que les fonctions membres nommées Saisie() et Affiche() sont publiques. Les expressions public: et private: peuvent apparaître un nombre quelconque de fois dans une classe. Les membres déclarés après private: (resp. public:) sont privés (resp. publics) jusqu'à la fin de la classe, ou jusqu'à la rencontre d'une expression public: (resp. private:).

17 Chap3 : Les Classes 14 class XY { private : private :... ; Dans l exemple suivant, seule la fonction ft() pourra être appelée à partir de n importe quelle fonction du programme. Par contre il n est possible d accéder aux champs x et y que par l intermédiaire de la fonction membre public ft(). Ainsi l accès aux différents champs de la classe est contrôlé. class point { private : int x, y; void gt( ); // fonction membre privée void ft( ) ; // fonction membre public // champs membres privés de la classe ; Le C++ n'impose pas l'encapsulation des membres dans leurs classes. On pourrait donc déclarer tous les membres publics, mais en perdant une partie des bénéfices apportés par la programmation orientée objet. Il est de bon usage de déclarer toutes les données privées, ou au moins protégées, et de rendre publiques les méthodes agissant sur ces données. Ceci permet de cacher les détails de l'implémentation de la classe. Si l'on rend publics tous les membres d'une classe, on obtient l'équivalent d'une structure. Ainsi, ces deux déclarations définissent le même type point : struct point { int x, y; void gt( ); void ft( ); ; class point { int x, y; void gt( ); void ft( ); ; Dans une classe, tout ce qui n est pas déclaré public est privé par défaut. Ainsi, ces deux déclarations sont équivalentes : class point { private : int x, y; void gt( ); void ft( ); ; class point { int x, y; void gt( ); void ft( ); ;

18 Chap3 : Les Classes Création d'objets En C++, il existe deux façons de créer des objets, c'est-à-dire d'instancier une classe : de façon statique de façon dynamique La création statique d'objets consiste à créer un objet en lui affectant un nom, de la même façon qu'avec une variable : Nom_de_la_classe Nom_de_l_objet; Etudiant Etud1 ; // Etudiant est une classe, Etud1 est une instance de la classe Etudiant. Ainsi, l'objet est accessible grâce à son nom... La création dynamique d'objet est une création d'objet par le programme lui-même en fonction de ses «besoins» en objets. La gestion dynamique des objets se fait de la même manière que la gestion dynamique de la mémoire pour des variables simple (int, float, ) ou structures. C est la manipulation, comme nous l avons vu en 1 ère année Bachelier, des pointeurs en utilisant les opérateurs spécifiques : new, delete, new[] et delete[]. L opérateur new permet d'allouer de la mémoire, alors que l opérateur delete la restitue. La syntaxe de new est très simple, il suffit de faire suivre le mot clé new du type de la variable à allouer, et l'opérateur renvoie directement un pointeur sur cette variable avec le bon type. Par exemple, l'allocation d'un objet Etudiant se fait comme suit : Etudiant *Etud; Etud = new Etudiant; // pointeur vers la classe Etudiant // création de l'objet «dynamique» grâce au mot clé new L accès aux "membre public" se fait de la manière suivante : Etud Saisie(); ou (*Etud).Saisie(); Etud Affiche(); Etud Nom ; La syntaxe de delete est plus simple, puisqu'il suffit de faire suivre le mot clé delete du pointeur sur la zone mémoire à libérer : delete Etud; Les opérateurs new[] et delete[] sont utilisés pour allouer et restituer la mémoire pour les types tableaux. L'emploi de l'opérateur new[] nécessite de donner la taille du tableau à allouer. Ainsi, on pourra créer un tableau de 500 objets de la manière suivante : Etudiant *Tableau=new Etudiant[500]; et détruire ce tableau de la manière suivante : delete[] Tableau; Tout objet créé dynamiquement, c'est-à-dire avec le mot-clé new devra impérativement être détruit à la fin de son utilisation grâce au mot clé delete. Dans le cas contraire, une partie de la mémoire (celle utilisée par les objets créés dynamiquement) ne sera pas libérée à la fin de l'exécution du programme...

19 Chap3 : Les Classes Affectation d objets On a déjà vu que l on peut affecter à une structure la valeur d'une autre structure de même type. Ainsi, avec les déclarations suivantes : struct point { int x, y; ; struct point A, B; Nous pouvons écrire sans problème : A = B ; Cette instruction recopie l'ensemble des valeurs des champs de B dans ceux de A. Elle joue le même rôle que : A.x = B.x ; A.y = B.y ; En C++, cette possibilité d affectation globale s'étend aux objets de même type. Elle correspond à une recopie des valeurs des membres données, que ceux-ci soient publics ou non. Ainsi, avec ces déclarations (notez qu'ici nous avons prévu, artificiellement, x privé et y public) : class point { int x ; int y ; ; point A, B ; L instruction : B = A ; provoquera la recopie des valeurs des membres x et y de A dans les membres correspondants de B. Contrairement à ce qui a été dit pour les structures, il n'est plus possible ici de remplacer cette instruction par : B.x = A.x ; B.y = A.y ; En effet, si la deuxième affectation est légale, puisque ici y est public, la première ne l'est pas, car x est privé. Notez bien que l'affectation B = A est toujours légale, quel que soit le statut (public ou privé) des membres données. On peut considérer qu'elle ne viole pas le principe d'encapsulation, dans la mesure où les données privées de B (c'est-à-dire les copies de celles de A) restent toujours inaccessibles de manière directe Déclaration d une fonction membre En ce qui concerne la définition des fonctions membres d'une classe, elle se fait de la même manière que celle des fonctions membres d'une structure (qu'il s'agisse de fonctions publiques ou privées). Il existe deux façons de définir ces fonctions membres, en définissant : le prototype et le corps de la fonction à l'intérieur de la classe en une opération ; le prototype de la fonction à l'intérieur de la classe et le corps de la fonction à l'extérieur.

20 Chap3 : Les Classes 17 La seconde solution est généralement celle la plus utilisée. Ainsi, puisque l'on définit la fonction membre à l'extérieur de sa classe, il est nécessaire de préciser à quelle classe cette dernière fait partie. On utilise pour cela l'opérateur de résolution de portée, noté ::. Il suffit ainsi de faire précéder le nom de la fonction par ::, suivi du nom de la classe pour lever toute ambiguïté (deux classes peuvent avoir des fonctions membres différentes portant le même nom...). Le programme 3.1 montre ce que devient le programme 1.1 lorsque l'on remplace la structure Etudiant par la classe Etudiant. Ce programme permet aussi d illustrer un exemple de définitions de fonctions à l intérieur et à l extérieur de la classe. La fonction Affiche() est définie à l intérieur de la classe Etudiant, tandis que la déclaration de la fonction Saisie() est à l intérieur et sa définition est à l extérieur de la classe. #include <iostream> using namespace std ; class Etudiant { int Id; string Nom; public: void Saisie() ; ; void Affiche(){ cout << "identifiant ="<< Id << endl; cout << "Son nom : "<< Nom << endl; // déclaration des membres privés // Définition de la fonction membre à l extérieur de la classe void Etudiant::Saisie() { cout << "donnez un identifiant"<< endl; cin >> Id; cout << "donnez un nom"<< endl; cin >> Nom; // Définir une fonction membre dans la classe void main(){ Etudiant Etud1, Etud2; Etud1.Saisie(); Etud1.Affiche(); // 2 objets de la classe Etudiant Etud2.Saisie(); Etud2.Affiche(); Programme 3.1. Dans le programme 2.1, Etud1 et Etud2 sont déclarés comme objets de la classe Etudiant. C est pourquoi ils possèdent leurs propres données membres Id et Nom, et la capacité d appeler les deux fonctions membres de la classe : Saisie() et Affiche(). Il faut noter qu une fonction comme Saisie()est appelée en préfixant son nom du nom de son propriétaire : Etud1.Saisie(). Une fonction membre peut être définie dans la classe (Affiche( ) ou à l extérieur (Saisie() ). Dans la plupart des cas, il est préférable de définir ces fonctions hors de la déclaration de la classe à l aide de l opérateur de résolution de portée (Etudiant::Saisie()). Ceci permet

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy Claude Delannoy Programmer en langage C++ 8 e édition Avec une intro aux design patterns et une annexe sur la norme C++11 Groupe Eyrolles, 1993-2011. Groupe Eyrolles, 2014, pour la nouvelle présentation,

Plus en détail

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère L'héritage et le polymorphisme en Java Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère En java, toutes les classes sont dérivée de la

Plus en détail

Généralités sur le Langage Java et éléments syntaxiques.

Généralités sur le Langage Java et éléments syntaxiques. Généralités sur le Langage Java et éléments syntaxiques. Généralités sur le Langage Java et éléments syntaxiques....1 Introduction...1 Genéralité sur le langage Java....1 Syntaxe de base du Langage...

Plus en détail

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement des objets d'une classe Utilisation d'une classe Droit

Plus en détail

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface

Plus en détail

Chapitre 2. Classes et objets

Chapitre 2. Classes et objets Chapitre 2: Classes et Objets 1/10 Chapitre 2 Classes et objets Chapitre 2: Classes et Objets 2/10 Approche Orientée Objet Idée de base de A.O.O. repose sur l'observation de la façon dont nous procédons

Plus en détail

I. Introduction aux fonctions : les fonctions standards

I. Introduction aux fonctions : les fonctions standards Chapitre 3 : Les fonctions en C++ I. Introduction aux fonctions : les fonctions standards A. Notion de Fonction Imaginons que dans un programme, vous ayez besoin de calculer une racine carrée. Rappelons

Plus en détail

Premiers Pas en Programmation Objet : les Classes et les Objets

Premiers Pas en Programmation Objet : les Classes et les Objets Chapitre 2 Premiers Pas en Programmation Objet : les Classes et les Objets Dans la première partie de ce cours, nous avons appris à manipuler des objets de type simple : entiers, doubles, caractères, booléens.

Plus en détail

Cours d initiation à la programmation en C++ Johann Cuenin

Cours d initiation à la programmation en C++ Johann Cuenin Cours d initiation à la programmation en C++ Johann Cuenin 11 octobre 2014 2 Table des matières 1 Introduction 5 2 Bases de la programmation en C++ 7 3 Les types composés 9 3.1 Les tableaux.............................

Plus en détail

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java Langages objets Introduction M2 Pro CCI, Informatique Emmanuel Waller, LRI, Orsay présentation du module logistique 12 blocs de 4h + 1 bloc 2h = 50h 1h15 cours, 45mn exercices table, 2h TD machine page

Plus en détail

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation : Algorithmique et programmation : STRUCTURES DE DONNÉES A. Structure et enregistrement 1) Définition et rôle des structures de données en programmation 1.1) Définition : En informatique, une structure de

Plus en détail

Introduction à l héritage en C++

Introduction à l héritage en C++ Algorithmique/Langage 1ère année Introduction à l héritage en C++ Yacine BELLIK IUT d Orsay Yacine.Bellik@iut-orsay.fr 1 Bibliographie Ce cours est basé sur le livre suivant : Programmer en C++, 5ème édition

Plus en détail

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets. Encapsulation L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets. La visibilité dépend des membres : certains membres peuvent être visibles et d'autres

Plus en détail

Plan Pédagogique du cours

Plan Pédagogique du cours Plan Pédagogique du cours Module: Programmation Orientée Objet Section : informatique Niveau : 3 ème niveau (gestion, industriel, réseau) Volume Horaire : 22,5 heures Cours Intégrés + 45 Travaux Pratiques

Plus en détail

2 Grad Info Soir Langage C++ Juin 2007. Projet BANQUE

2 Grad Info Soir Langage C++ Juin 2007. Projet BANQUE 2 Grad Info Soir Langage C++ Juin 2007 Projet BANQUE 1. Explications L'examen comprend un projet à réaliser à domicile et à documenter : - structure des données, - objets utilisés, - relations de dépendance

Plus en détail

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004 Questionnaire d'examen final INF1101 Sigle du cours Nom : Signature : Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004 Professeur(s)

Plus en détail

Programmation C++ (débutant)/instructions for, while et do...while

Programmation C++ (débutant)/instructions for, while et do...while Programmation C++ (débutant)/instructions for, while et do...while 1 Programmation C++ (débutant)/instructions for, while et do...while Le cours du chapitre 4 : le for, while et do...while La notion de

Plus en détail

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance du C dans les laboratoires BELL par

Plus en détail

Java Licence Professionnelle CISII, 2009-2010. Cours 2 : Classes et Objets

Java Licence Professionnelle CISII, 2009-2010. Cours 2 : Classes et Objets Licence Professionnelle CISII, 2009-2010 Cours 2 : Classes et Objets 1 Classes et Objets Objectifs des LOO : - Manipuler des objets - Découper les programmes suivant les types des objets manipulés - Regrouper

Plus en détail

Claude Delannoy. 3 e édition C++

Claude Delannoy. 3 e édition C++ Claude Delannoy 3 e édition Exercices Exercices C++ en en langage langage delc++ titre 4/07/07 15:19 Page 2 Exercices en langage C++ AUX EDITIONS EYROLLES Du même auteur C. Delannoy. Apprendre le C++.

Plus en détail

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Polymorphisme, la classe Object, les package et la visibilité en Java... 1 Polymorphisme, la classe Object, les package et la visibilité en Java. Polymorphisme, la classe Object, les package et la visibilité en Java.... 1 Polymorphisme.... 1 Le DownCast... 4 La Classe Object....

Plus en détail

Java Licence Professionnelle 2009-2010. Cours 7 : Classes et méthodes abstraites

Java Licence Professionnelle 2009-2010. Cours 7 : Classes et méthodes abstraites Java Licence Professionnelle 2009-2010 Cours 7 : Classes et méthodes abstraites 1 Java Classes et méthodes abstraites - Le mécanisme des classes abstraites permet de définir des comportements (méthodes)

Plus en détail

Programmation Orientée Objet en C#

Programmation Orientée Objet en C# Programmation Orientée Objet en C# 1 Introduction 1.1 Présentation Tout bon développeur le sait, le code d'un programme doit être propre, commenté, facile à maintenir et à améliorer. Vous êtes adepte de

Plus en détail

Héritage presque multiple en Java (1/2)

Héritage presque multiple en Java (1/2) Héritage presque multiple en Java (1/2) Utiliser deux classes ou plus dans la définition d'une nouvelle classe peut se faire par composition. class Etudiant{ int numero; Diplome d; float passeexamen(examen

Plus en détail

Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation

Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation Université de Savoie Module ETRS711 Travaux pratiques Compression en codage de Huffman 1. Organisation du projet 1.1. Objectifs Le but de ce projet est d'écrire un programme permettant de compresser des

Plus en détail

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1 Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1 B. Baert & F. Ludewig Bruno.Baert@ulg.ac.be - F.Ludewig@ulg.ac.be Qu est-ce que la programmation? Programmer Ecrire un

Plus en détail

Licence ST Université Claude Bernard Lyon I LIF1 : Algorithmique et Programmation C Bases du langage C 1 Conclusion de la dernière fois Introduction de l algorithmique générale pour permettre de traiter

Plus en détail

Cours de C++ François Laroussinie. 2 novembre 2005. Dept. d Informatique, ENS de Cachan

Cours de C++ François Laroussinie. 2 novembre 2005. Dept. d Informatique, ENS de Cachan Cours de C++ François Laroussinie Dept. d Informatique, ENS de Cachan 2 novembre 2005 Première partie I Introduction Introduction Introduction Algorithme et programmation Algorithme: méthode pour résoudre

Plus en détail

Chap III : Les tableaux

Chap III : Les tableaux Chap III : Les tableaux Dans cette partie, on va étudier quelques structures de données de base tels que : Les tableaux (vecteur et matrice) Les chaînes de caractères LA STRUCTURE DE TABLEAU Introduction

Plus en détail

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40 Déroulement du cours Introduction Concepts Java Remarques Langage et Concepts de Programmation Orientée-Objet Gauthier Picard École Nationale Supérieure des Mines de Saint-Étienne gauthier.picard@emse.fr

Plus en détail

Algorithmique et Programmation, IMA

Algorithmique et Programmation, IMA Algorithmique et Programmation, IMA Cours 2 : C Premier Niveau / Algorithmique Université Lille 1 - Polytech Lille Notations, identificateurs Variables et Types de base Expressions Constantes Instructions

Plus en détail

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr Mars 2002 Pour Irène et Marie Legal Notice Copyright c 2002 Patrick Cégielski Université

Plus en détail

Les structures de données. Rajae El Ouazzani

Les structures de données. Rajae El Ouazzani Les structures de données Rajae El Ouazzani Les arbres 2 1- Définition de l arborescence Une arborescence est une collection de nœuds reliés entre eux par des arcs. La collection peut être vide, cad l

Plus en détail

Cours 1: Java et les objets

Cours 1: Java et les objets Ressources Les interface homme-machine et le langage Java DUT première année Henri Garreta, Faculté des Sciences (Luminy) Cyril Pain-Barre & Sébastien Nedjar, IUT d Aix-Marseille (Aix) Cours 1: infodoc.iut.univ-aix.fr/~ihm/

Plus en détail

Diagramme de classes

Diagramme de classes Diagramme de classes Un diagramme de classes décrit les classes et leurs relations (associations, généralisation/spécialisation, ). classe association méthodes attributs héritage Diagramme de classes :

Plus en détail

1.6- Génération de nombres aléatoires

1.6- Génération de nombres aléatoires 1.6- Génération de nombres aléatoires 1- Le générateur aléatoire disponible en C++ 2 Création d'un générateur aléatoire uniforme sur un intervalle 3- Génération de valeurs aléatoires selon une loi normale

Plus en détail

Bernard HAMM, Évelyne LAVOISIER

Bernard HAMM, Évelyne LAVOISIER 92 MAÎTRISE DE PROGICIELS DE GESTION DE BASES DE DONNÉES ET DE TRAITEMENT DE TEXTE Compte rendu d'un stage à l'usage des professeurs de sciences sociales. Ce stage a été programmé A la demande et avec

Plus en détail

LibreOffice Calc : introduction aux tableaux croisés dynamiques

LibreOffice Calc : introduction aux tableaux croisés dynamiques Fiche logiciel LibreOffice Calc 3.x Tableur Niveau LibreOffice Calc : introduction aux tableaux croisés dynamiques Un tableau croisé dynamique (appelé Pilote de données dans LibreOffice) est un tableau

Plus en détail

Génie Logiciel I. Cours VI - Typage statique / dynamique, fonctions virtuelles et classes abstraites, flots d entrées / sorties, et string

Génie Logiciel I. Cours VI - Typage statique / dynamique, fonctions virtuelles et classes abstraites, flots d entrées / sorties, et string Génie Logiciel I Cours VI - Typage statique / dynamique, fonctions virtuelles et classes abstraites, flots d entrées / sorties, et string Nicolas Kielbasiewicz C.D.C.S.P./I.S.T.I.L./I.C.J. Filière M.A.M.

Plus en détail

Initiation à JAVA et à la programmation objet. raphael.bolze@ens-lyon.fr

Initiation à JAVA et à la programmation objet. raphael.bolze@ens-lyon.fr Initiation à JAVA et à la programmation objet raphael.bolze@ens-lyon.fr O b j e c t i f s Découvrir un langage de programmation objet. Découvrir l'environnement java Découvrir les concepts de la programmation

Plus en détail

1. Qu'est-ce que SQL?... 2. 2. La maintenance des bases de données... 2. 3. Les manipulations des bases de données... 5

1. Qu'est-ce que SQL?... 2. 2. La maintenance des bases de données... 2. 3. Les manipulations des bases de données... 5 1. Qu'est-ce que SQL?... 2 2. La maintenance des bases de données... 2 2.1 La commande CREATE TABLE... 3 2.2 La commande ALTER TABLE... 4 2.3 La commande CREATE INDEX... 4 3. Les manipulations des bases

Plus en détail

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu. Seance 2: Complétion du code de jeu. (durée max: 2h) Mot clé const et pointeurs: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu. Implémentez jeu_recupere_piece

Plus en détail

COMPARAISONDESLANGAGESC, C++, JAVA ET

COMPARAISONDESLANGAGESC, C++, JAVA ET REPUBLIQUE DU BENIN *******@******* MINISTERE DE L ENSEIGNEMENT SUPERIEUR ET DE LA RECHERCHE SCIENTIFIQUE(MESRS) *******@******* UNIVERSITE D ABOMEY CALAVI(UAC) *******@******* ECOLE POLYTECHNIQUE D ABPOMEY

Plus en détail

Le langage C. Séance n 4

Le langage C. Séance n 4 Université Paris-Sud 11 Institut de Formation des Ingénieurs Remise à niveau INFORMATIQUE Année 2007-2008 Travaux pratiques d informatique Le langage C Séance n 4 But : Vous devez maîtriser à la fin de

Plus en détail

Automatisation d'une Facture 4. Liste Déroulante Remises Case à cocher Calculs

Automatisation d'une Facture 4. Liste Déroulante Remises Case à cocher Calculs Dans la série Les tutoriels libres présentés par le site FRAMASOFT Automatisation d'une Facture 4 Liste Déroulante Remises Case à cocher Calculs Logiciel: Version: Licence: Site: OpenOffice.org Calc :

Plus en détail

Cours Programmation Système

Cours Programmation Système Cours Programmation Système Filière SMI Semestre S6 El Mostafa DAOUDI Département de Mathématiques et d Informatique, Faculté des Sciences Université Mohammed Premier Oujda m.daoudi@fso.ump.ma Février

Plus en détail

Programmation Objet - Cours II

Programmation Objet - Cours II Programmation Objet - Cours II - Exercices - Page 1 Programmation Objet - Cours II Exercices Auteur : E.Thirion - Dernière mise à jour : 05/07/2015 Les exercices suivants sont en majorité des projets à

Plus en détail

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr)

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Programmer en JAVA par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Plan 1. Présentation de Java 2. Les bases du langage 3. Concepts avancés 4. Documentation 5. Index des mots-clés 6. Les erreurs fréquentes

Plus en détail

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie Chapitre I : Les bases du C++ Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie du logiciel, et ce depuis

Plus en détail

Programmation par les Objets en Java

Programmation par les Objets en Java Programmation par les Objets en Java Najib TOUNSI Les classes en Java (TD 3) I. Notion de classe I.1 Classe, champs, méthodes, instanciation, this, private vs. public. Créer une classe Point (coordonnée

Plus en détail

Une introduction à Java

Une introduction à Java Une introduction à Java IFT 287 (Semaine 1) UNIVERSITÉ DE SHERBROOKE 1 Java - Historique Développé par Sun Microsystems en 1994 Inventeur James Gosling (canadien!) Objectif langage sûr (fortement typé)

Plus en détail

Recherche dans un tableau

Recherche dans un tableau Chapitre 3 Recherche dans un tableau 3.1 Introduction 3.1.1 Tranche On appelle tranche de tableau, la donnée d'un tableau t et de deux indices a et b. On note cette tranche t.(a..b). Exemple 3.1 : 3 6

Plus en détail

Initiation à la programmation en Python

Initiation à la programmation en Python I-Conventions Initiation à la programmation en Python Nom : Prénom : Une commande Python sera écrite en caractère gras. Exemples : print 'Bonjour' max=input("nombre maximum autorisé :") Le résultat de

Plus en détail

Bases de programmation. Cours 5. Structurer les données

Bases de programmation. Cours 5. Structurer les données Bases de programmation. Cours 5. Structurer les données Pierre Boudes 1 er décembre 2014 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. Types char et

Plus en détail

1. Introduction...2. 2. Création d'une requête...2

1. Introduction...2. 2. Création d'une requête...2 1. Introduction...2 2. Création d'une requête...2 3. Définition des critères de sélection...5 3.1 Opérateurs...5 3.2 Les Fonctions...6 3.3 Plusieurs critères portant sur des champs différents...7 3.4 Requête

Plus en détail

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. Enrica.Duchi@liafa.jussieu.fr

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. Enrica.Duchi@liafa.jussieu.fr . Cours intensif Java 1er cours: de C à Java Septembre 2009 Enrica DUCHI LIAFA, Paris 7 Enrica.Duchi@liafa.jussieu.fr LANGAGES DE PROGRAMMATION Pour exécuter un algorithme sur un ordinateur il faut le

Plus en détail

Programmation en Java IUT GEII (MC-II1) 1

Programmation en Java IUT GEII (MC-II1) 1 Programmation en Java IUT GEII (MC-II1) 1 Christophe BLANC - Paul CHECCHIN IUT Montluçon Université Blaise Pascal Novembre 2009 Christophe BLANC - Paul CHECCHIN Programmation en Java IUT GEII (MC-II1)

Plus en détail

Java Licence Professionnelle CISII, 2009-10

Java Licence Professionnelle CISII, 2009-10 Java Licence Professionnelle CISII, 2009-10 Cours 4 : Programmation structurée (c) http://www.loria.fr/~tabbone/cours.html 1 Principe - Les méthodes sont structurées en blocs par les structures de la programmation

Plus en détail

TP1 : Initiation à Java et Eclipse

TP1 : Initiation à Java et Eclipse TP1 : Initiation à Java et Eclipse 1 TP1 : Initiation à Java et Eclipse Systèmes d Exploitation Avancés I. Objectifs du TP Ce TP est une introduction au langage Java. Il vous permettra de comprendre les

Plus en détail

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Cours de Programmation Impérative: Zones de mémoires et pointeurs Cours de Programmation Impérative: Zones de mémoires et pointeurs Julien David A101 - david@lipn.univ-paris13.fr Julien David (A101 - david@lipn.univ-paris13.fr) 1 / 1 Z`o n`e s `d`e m`é m`o i r`e Julien

Plus en détail

Java 7 Les fondamentaux du langage Java

Java 7 Les fondamentaux du langage Java 184 Java 7 Les fondamentaux du langage Java 1.1 Les bibliothèques graphiques Le langage Java propose deux bibliothèques dédiées à la conception d'interfaces graphiques. La bibliothèque AWT et la bibliothèque

Plus en détail

SHERLOCK 7. Version 1.2.0 du 01/09/09 JAVASCRIPT 1.5

SHERLOCK 7. Version 1.2.0 du 01/09/09 JAVASCRIPT 1.5 SHERLOCK 7 Version 1.2.0 du 01/09/09 JAVASCRIPT 1.5 Cette note montre comment intégrer un script Java dans une investigation Sherlock et les différents aspects de Java script. S T E M M E R I M A G I N

Plus en détail

Cours d Algorithmique et de Langage C 2005 - v 3.0

Cours d Algorithmique et de Langage C 2005 - v 3.0 Cours d Algorithmique et de Langage C 2005 - v 3.0 Bob CORDEAU cordeau@onera.fr Mesures Physiques IUT d Orsay 15 mai 2006 Avant-propos Avant-propos Ce cours en libre accès repose sur trois partis pris

Plus en détail

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE 2 ème partie : REQUÊTES Sommaire 1. Les REQUÊTES...2 1.1 Créer une requête simple...2 1.1.1 Requête de création de listage ouvrages...2 1.1.2 Procédure de

Plus en détail

Le modèle de données

Le modèle de données Le modèle de données Introduction : Une fois que l étude des besoins est complétée, deux points importants sont à retenir : Les données du système étudié Les traitements effectués par le système documentaire.

Plus en détail

Conventions d écriture et outils de mise au point

Conventions d écriture et outils de mise au point Logiciel de base Première année par alternance Responsable : Christophe Rippert Christophe.Rippert@Grenoble-INP.fr Introduction Conventions d écriture et outils de mise au point On va utiliser dans cette

Plus en détail

Travaux Dirigés n 1 : chaînes de caractères

Travaux Dirigés n 1 : chaînes de caractères UE LE315 Travaux Dirigés n 1 : chaînes de caractères Exercice 1 Ecrire une fonction int nombre_caract(char *chaîne) qui retourne la taille d une chaîne de caractères. Exercice 2 Ecrire la fonction void

Plus en détail

UML et les Bases de Données

UML et les Bases de Données CNAM UML et les Bases de Données UML et les Bases de Données. Diagramme de classes / diagramme d objets (UML)...2.. Premier niveau de modélisation des données d une application...2.2. Les éléments de modélisation...2.2..

Plus en détail

Les chaînes de caractères

Les chaînes de caractères Les chaînes de caractères Dans un programme informatique, les chaînes de caractères servent à stocker les informations non numériques comme par exemple une liste de nom de personne ou des adresses. Il

Plus en détail

les Formulaires / Sous-Formulaires Présentation...2 1. Créer un formulaire à partir d une table...3

les Formulaires / Sous-Formulaires Présentation...2 1. Créer un formulaire à partir d une table...3 Présentation...2 1. Créer un formulaire à partir d une table...3 2. Les contrôles :...10 2.1 Le contrôle "Intitulé"...11 2.2 Le contrôle "Zone de Texte"...12 2.3 Le contrôle «Groupe d options»...14 2.4

Plus en détail

as Architecture des Systèmes d Information

as Architecture des Systèmes d Information Plan Plan Programmation - Introduction - Nicolas Malandain March 14, 2005 Introduction à Java 1 Introduction Présentation Caractéristiques Le langage Java 2 Types et Variables Types simples Types complexes

Plus en détail

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 ) P r ob lé m a t iq u e d e la g é n é r icit é les versions de Java antérieures à 1.5 permettaient de créer des classes de structures contenant n'importe quels types d'objet : les collections (classes

Plus en détail

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java Info0101 Intro. à l'algorithmique et à la programmation Cours 3 Le langage Java Pierre Delisle, Cyril Rabat et Christophe Jaillet Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique

Plus en détail

"! "#$ $ $ ""! %#& """! '& ( ")! )*+

! #$ $ $ ! %#& ! '& ( )! )*+ ! "! "#$ $ $ ""! %#& """! '& ( ")! )*+ "! "#$ $ $ ""! %#& """! '& ( ")! )*+, ## $ *$-./ 0 - ## 1( $. - (/$ #,-".2 + -".234-5..'"6..6 $37 89-%:56.#&(#. +6$../.4. ;-37 /. .?.@A&.!)B

Plus en détail

UE C avancé cours 1: introduction et révisions

UE C avancé cours 1: introduction et révisions Introduction Types Structures de contrôle Exemple UE C avancé cours 1: introduction et révisions Jean-Lou Desbarbieux et Stéphane Doncieux UMPC 2004/2005 Introduction Types Structures de contrôle Exemple

Plus en détail

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml OCL Object Constraint Language Le langage de contraintes d'uml Plan 1. Introduction 2. Les principaux concepts d'ocl Object Constraint Language 1 Object Constraint Language 2 Exemple: une application bancaire

Plus en détail

EXCEL TUTORIEL 2012/2013

EXCEL TUTORIEL 2012/2013 EXCEL TUTORIEL 2012/2013 Excel est un tableur, c est-à-dire un logiciel de gestion de tableaux. Il permet de réaliser des calculs avec des valeurs numériques, mais aussi avec des dates et des textes. Ainsi

Plus en détail

GOL502 Industries de services

GOL502 Industries de services GOL502 Industries de services Conception d un service Partie IIb Version 2013 Introduction Conception d un service partie IIb Nous verrons dans ce chapitre Modélisation d un service; Langage de modélisation

Plus en détail

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai. Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai. 1 Introduction On considère une grille de 20 lignes 20 colonnes. Une case de la grille peut être vide, ou contenir une et une

Plus en détail

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ; CNAM NFP121 TP 10 19/11/2013 (Séance 5) Objectif Manipuler les exceptions ; 1 Entrées/sorties Exercice 1 : Lire un entier à partir du clavier Ajouter une méthode readint(string message) dans la classe

Plus en détail

Traduction des Langages : Le Compilateur Micro Java

Traduction des Langages : Le Compilateur Micro Java BARABZAN Jean-René OUAHAB Karim TUCITO David 2A IMA Traduction des Langages : Le Compilateur Micro Java µ Page 1 Introduction Le but de ce projet est d écrire en JAVA un compilateur Micro-Java générant

Plus en détail

modélisation solide et dessin technique

modélisation solide et dessin technique CHAPITRE 1 modélisation solide et dessin technique Les sciences graphiques regroupent un ensemble de techniques graphiques utilisées quotidiennement par les ingénieurs pour exprimer des idées, concevoir

Plus en détail

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3. 1. Structure d un programme C Un programme est un ensemble de fonctions. La fonction "main" constitue le point d entrée pour l exécution. Un exemple simple : #include int main() { printf ( this

Plus en détail

Publipostage avec Calc

Publipostage avec Calc Auto-formation sur OpenOffice.org 2.0 par Cyril Beaussier Version 1.0.2 - Avril 2006 Publipostage avec Calc Sommaire Introduction... 2 Présentation... 3 Notions... 4 Les données... 5 Lettre type... 7 Création

Plus en détail

Présentation du langage et premières fonctions

Présentation du langage et premières fonctions 1 Présentation de l interface logicielle Si les langages de haut niveau sont nombreux, nous allons travaillé cette année avec le langage Python, un langage de programmation très en vue sur internet en

Plus en détail

Introduction à MATLAB R

Introduction à MATLAB R Introduction à MATLAB R Romain Tavenard 10 septembre 2009 MATLAB R est un environnement de calcul numérique propriétaire orienté vers le calcul matriciel. Il se compose d un langage de programmation, d

Plus en détail

Les structures. Chapitre 3

Les structures. Chapitre 3 Chapitre 3 Les structures Nous continuons notre étude des structures de données qui sont prédéfinies dans la plupart des langages informatiques. La structure de tableau permet de regrouper un certain nombre

Plus en détail

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation impérative et structures de données simples Introduction au langage C Sandrine Blazy - 1ère année 24 octobre 2007 Cours d Algorithmique-Programmation

Plus en détail

INSERER DES OBJETS - LE RUBAN INSERTION... 3 TABLEAUX

INSERER DES OBJETS - LE RUBAN INSERTION... 3 TABLEAUX TABLE DES MATIERES Livret Utilisateur Excel 2007 Niveau 2 INSERER DES OBJETS - LE RUBAN INSERTION... 3 TABLEAUX... 4 Les tableaux croisés dynamiques... 4 Création d un tableau croisé... 5 Comparer des

Plus en détail

Création d objet imbriqué sous PowerShell.

Création d objet imbriqué sous PowerShell. Création d objet imbriqué sous PowerShell. Par Laurent Dardenne, le 13/01/2014. Niveau Ce tutoriel aborde la création d objet composé, c est-à-dire que certains de ses membres seront eux-mêmes des PSObjects.

Plus en détail

Exercices INF5171 : série #3 (Automne 2012)

Exercices INF5171 : série #3 (Automne 2012) Exercices INF5171 : série #3 (Automne 2012) 1. Un moniteur pour gérer des ressources Le moniteur MPD 1 présente une première version d'un moniteur, exprimé en pseudo-mpd, pour gérer des ressources le nombre

Plus en détail

INFO-F-105 Language de programmation I Séance VI

INFO-F-105 Language de programmation I Séance VI INFO-F-105 Language de programmation I Séance VI Jérôme Dossogne Année académique 2008 2009 Un grand merci à Yves Roggeman pour ses relectures et remarques des codes et commentaires qui ont contribuées

Plus en détail

Langage Java. Classe de première SI

Langage Java. Classe de première SI Langage Java Table des matières 1. Premiers pas...2 1.1. Introduction...2 1.2. Mon premier programme...2 1.3. Les commentaires...2 2. Les variables et les opérateurs...2 3. La classe Scanner...3 4. Les

Plus en détail

LE LANGAGE C++ ENAC 1997 A. DANCEL

LE LANGAGE C++ ENAC 1997 A. DANCEL LE LANGAGE C++ ENAC 1997 A. DANCEL 1 - GENERALITES "L'homme se découvre quand il se mesure avec l'objet." Antoine de Saint-Exupéry, Terre des hommes 1.1 INTRODUCTION Ce cours est conçu pour permettre aux

Plus en détail

UE Programmation Impérative Licence 2ème Année 2014 2015

UE Programmation Impérative Licence 2ème Année 2014 2015 UE Programmation Impérative Licence 2 ème Année 2014 2015 Informations pratiques Équipe Pédagogique Florence Cloppet Neilze Dorta Nicolas Loménie prenom.nom@mi.parisdescartes.fr 2 Programmation Impérative

Plus en détail

TD/TP PAC - Programmation n 3

TD/TP PAC - Programmation n 3 Université Paris Sud Licence d informatique/iup-miage2 Année 2004-2005 Auteur : Frédéric Vernier Semaine : 11-16 octobre 2004 Conditions : sur machine avec les outils standards java web: http://vernier.frederic.free.fr/indexpac.html

Plus en détail

Chapitre 10. Les interfaces Comparable et Comparator 1

Chapitre 10. Les interfaces Comparable et Comparator 1 Chapitre 10: Les interfaces Comparable et Comparator 1/5 Chapitre 10 Les interfaces Comparable et Comparator 1 1 Ce chapitre a été extrait du document "Objets, Algorithmes, Patterns" de [René Lalement],

Plus en détail

Chapitre 2 Le problème de l unicité des solutions

Chapitre 2 Le problème de l unicité des solutions Université Joseph Fourier UE MAT 127 Mathématiques année 2011-2012 Chapitre 2 Le problème de l unicité des solutions Ce que nous verrons dans ce chapitre : un exemple d équation différentielle y = f(y)

Plus en détail

Génie Logiciel avec Ada. 4 février 2013

Génie Logiciel avec Ada. 4 février 2013 Génie Logiciel 4 février 2013 Plan I. Généralités II. Structures linéaires III. Exceptions IV. Structures arborescentes V. Dictionnaires I. Principes II. Notions propres à la POO I. Principes Chapitre

Plus en détail

Université de Bangui. Modélisons en UML

Université de Bangui. Modélisons en UML Université de Bangui CRM Modélisons en UML Ce cours a été possible grâce à l initiative d Apollinaire MOLAYE qui m a contacté pour vous faire bénéficier de mes connaissances en nouvelles technologies et

Plus en détail