Programmation orientée objet avec C++

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

Download "Programmation orientée objet avec C++"

Transcription

1 Programmation orientée objet avec C++ ACOO Analyse, Conception et développement Orientés Objet de logiciels de commande Thèmes abordés Présentation du langage C++ Principales différences par rapport au C. Orientation objet Notion de classe et d objet Encapsulation, public, privé. Héritage, accès protégé. Polymorphisme. Eléments avancés Programmation générique. Traitement d erreurs par exception. Surcharge d opérateurs. Introduction à la programmation orientée objet avec C++ 1 1

2 Le langage C++ Introduction Historique Bjarne Stroustrup crée en 1979 «C With Classes» Renommé C++ en 1983 C++: incrémentation, le langage après C Normalisé par ISO Que définit C++? Un langage orienté objet basé sur le C. Syntaxe, instructions et code généré similaires. Quelques incompatibilités avec C. Support de l héritage, polymorphisme, généricité. Une bibliothèque standard Standard C++ library Introduction à la programmation orientée objet avec C++ 2 Le langage C++ Créer un programme C++ avec Visual Studio Donner l extension.cpp au fichier source! Introduction à la programmation orientée objet avec C++ 3 2

3 Le langage C++ Les entrées sorties standard du C++ #include <iostream> int main() double x, y; Bibliothèque d entrées sorties du C++ Flux de sortie Opérateur surchargé en C++. Ecriture vers un flux. std::cout << "X:"; std::cin >> x; std::cout << "Y:"; std::cin >> y; Flux d entrée. Opérateur surchargé en C++. Lecture depuis un flux. std::cout << "x * y = " << x * y << std::endl; return 0; Opérateur pouvant être chaîné Introduction à la programmation orientée objet avec C++ 4 Le langage C++ Les espaces de nom - utilisation Intérêt des espaces de nom Grands projets avec de nombreuses bibliothèques On pourrait avoir plusieurs bibliothèques contenant des fonctions différentes avec des noms identiques. Impossibilité de construire un tel programme en C. Espace de nom Préfixe tous les identificateurs de l espace avec un nom. Exemple dans l espace std : std::cout Simplification d écriture Il est possible d importer un espace de nom. Permet d utiliser les identificateurs de cet espace sans préfixe. Syntaxe using namespace std; Introduction à la programmation orientée objet avec C++ 5 3

4 Le langage C++ Les espaces de nom utilisation - exemple #include <iostream> #include <conio.h> // Importation de l'espace de nom : using namespace std; int main() double x, y; // Le préfixe n'est plus requis : cout << "X:"; cin >> x; cout << "Y:"; // Il est toujours possible d'utilier le préfixe : std::cin >> y; cout << "x * y = " << x * y << endl; // Les fonctions de la bibliothèque C sont toujours utilisables _getch(); return 0; Introduction à la programmation orientée objet avec C++ 6 Le langage C++ Les espaces de nom - définition Il est possible de définir un espace de nom. Les identificateurs de cet espace sont alors préfixés. Syntaxe namespace nom // Placer ici les déclarations faisant partie de // l'espace de nom Introduction à la programmation orientée objet avec C++ 7 4

5 Le langage C++ Les espaces de nom définition - exemple namespace heig_vd void afficher_adresse() cout << "HEIG-VD" << endl; cout << "Route de Cheseaux 1" << endl << "1401 Yverdon les bains" << endl; void afficher_coordonnees_completes() // Préfixe non requis, car dans le même espace de nom : afficher_adresse(); cout << "Tel : \n"; int main() heig_vd::afficher_coordonnees_completes(); return 0; Introduction à la programmation orientée objet avec C++ 8 Le langage C++ Les types supplémentaires du C++ - bool C++ introduit un type pour les conditions logiques Son utilisation est recommandée, mais pas obligatoire. bool valide; valide = true; valide = false; if (valide)... Introduction à la programmation orientée objet avec C++ 9 5

6 Le langage C++ Les types supplémentaires du C++ - string Chaînes de caractères Pas de type défini au niveau du langage C++ (idem C). Implémenté sous la forme d une classe dans la bibliothèque standard <string> A ne pas confondre avec string.h Manipulation beaucoup plus commode qu avec les tableaux de caractères. Exemple #include <iostream> #include <string> using namespace std; int main() string nom; cout << "Votre nom : "; // cin >> nom; : ne saisit que le 1er mot. Utiliser getline getline(cin, nom); cout << "Bonjour " << nom << endl; char c; cin >> c; Introduction à la programmation orientée objet avec C++ 10 Le langage C++ Les types supplémentaires du C++ - string quelques opérations #include <iostream> #include <string> using namespace std; int main() string chaine1, chaine2; chaine1 = "Le loup et l'agneau"; // longueur de la chaine: cout << chaine1.length() << endl; // le caractère en position 5: cout << chaine1.at(5) << endl; // sous-chaine de 4 caractères à partir de la position 3 chaine2 = chaine1.substr(3, 4); cout << chaine2 << endl; char c; cin >> c; Introduction à la programmation orientée objet avec C

7 Le langage C++ Contrôles à la compilation renforcés Le compilateur C++ est plus strict Le prototype d une fonction doit être défini avant son utilisation. Erreur systématique générée en cas contraire. Pas de supposition sur le type du résultat et des paramètres. Contrôle des types des paramètres lors d appels de fonctions. L exécution d une fonction doit toujours se terminer par un return. Introduction à la programmation orientée objet avec C++ 12 Le langage C++ Exemple - compilation en C d un programme incorrect Type du paramètre incorrect Fonction sans prototype Aucune erreur, juste quelques warnings La compilation a réussi! Introduction à la programmation orientée objet avec C

8 Le langage C++ Exemple - compilation en C++ d un programme incorrect Type du paramètre incorrect Fonction sans prototype En C++, erreurs de compilation générées. Introduction à la programmation orientée objet avec C++ 14 Le langage C++ Surcharge de fonctions Plusieurs fonctions de même nom peuvent être définies Elles doivent avoir une signature différente La signature est constituée de la liste des paramètres. Exemple int minimum(int a, int b) return a < b? a : b; int minimum(int a, int b, int c) return minimum(a, minimum(b, c)); Introduction à la programmation orientée objet avec C

9 Le langage C++ Encodage de la signature des fonctions A l issue de la compilation Le code objet contient plusieurs fonctions minimum. Comment le lieur peut il retrouver la bonne? Dans le code généré par le C++ Les noms de fonctions sont suffixés par un encodage de la signature. 2 fonctions de signature différente ont ainsi un nom différent. Introduction à la programmation orientée objet avec C++ 16 Le langage C++ Encodage de la signature des fonctions Fonction non trouvée : "int cdecl minimum(int,int)" (?minimum@@yahhh@z) Introduction à la programmation orientée objet avec C

10 Le langage C++ Mélanger des fichiers sources C et C++ Problème lors du mélange de fichiers C et C++ Lib.h #ifndef LIB_H_ int minimum(int a, int b); #endif Lib.c #include "lib.h" int minimum(int a, int b) return a < b? a : b; Main.cpp #include "lib.h" int main() int a; a = minimum(1, 2); return 0; Introduction à la programmation orientée objet avec C++ 18 Le langage C++ Mélanger des fichiers sources C et C++ Main.cpp #include "lib.h" int main() int a; a = minimum(1, 2); return 0; Lib.c #include "lib.h" int minimum(int a, int b) return a < b? a : b; Main.obj _main, utilise?minimum@@yahhh@z Lib.obj _minimum Liaison impossible Introduction à la programmation orientée objet avec C

11 Le langage C++ Mélanger des fichiers sources C et C++ Solution Il faut indiquer au compilateur C++ quelles fonctions utilisent les conventions de compilation du C plutôt que C++. Syntaxe extern "C" // déclarations à intepréter comme du C Exemple Main.cpp extern "C" #include "lib.h" int main() int a; a = minimum(1, 2); return 0; Introduction à la programmation orientée objet avec C++ 20 Le langage C++ Valeurs par défaut des paramètres de fonctions Valeurs par défaut des paramètres de fonction Ce sont des valeurs utilisées pour un paramètre s il n est pas donné au moment de l appel de la fonction. C++ permet de définir des valeurs par défaut Lorsqu un paramètre a une valeur par défaut, tous les paramètres qui suivent doivent également en avoir une. Si le paramètre est fourni au moment de l appel, c est la valeur fournie qui est utilisée. Sinon, c est la valeur par défaut. Une fonction avec des paramètres par défaut peut donc être appelée avec un nombre variable de paramètres. Introduction à la programmation orientée objet avec C

12 Le langage C++ Valeurs par défaut des paramètres de fonctions #include <iostream> using namespace std; void afficher_valeur(double valeur, const char * unite = "") cout << valeur << " " << unite << endl; int main() afficher_valeur(12.5, "m"); afficher_valeur(12.5); return 0; Introduction à la programmation orientée objet avec C++ 22 Le langage C++ Les types référence - Introduction Définition Un type référence est en fait un pointeur. Utilisable sans la syntaxe fastidieuse des pointeurs du C. Particularités Une variable de type référence DOIT être initialisée. L initialisation indique quelle variable est référencée. Il n est ensuite plus possible de modifier la référence. Syntaxe type & nom_reference = variable_referencee; Introduction à la programmation orientée objet avec C

13 Le langage C++ Les types référence - Introduction Exemple double x = 0.0, y = 1.0; // déclaration et initialisation de la référérence : double & rx = x; // affectation de la variable référencée rx = y; cout << "x :" << x << endl; Comportement A l initialisation, la référence reçoit l adresse d une variable. Lors de toutes les affectations ultérieures, c est la variable référencée qui est modifiée. La référence désigne donc toujours la même variable pendant toute sa durée de vie. Introduction à la programmation orientée objet avec C++ 24 Le langage C++ Passage de paramètres par référence Une référence est en fait un pointeur Permet donc de réaliser le passage de paramètre par adresse. Sans la syntaxe lourde des pointeurs. Avec les références, C++, offre une solution élégante pour le passage de paramètres par variable. Introduction à la programmation orientée objet avec C

14 Le langage C++ Passage de paramètres par référence void echanger(int & a, int & b) int temporaire; temporaire = a; a = b; b = temporaire; int main() int i, j; i = 1; j = 2; cout << "i: " << i << " ; j: " << j << endl; echanger(i, j); cout << "i: " << i << " ; j: " << j << endl; Introduction à la programmation orientée objet avec C++ 26 Le langage C++ Résultat de fonction de type référence Une fonction peut retourner une référence (donc une adresse) On peut affecter la variable référencée retournée. On peut ainsi placer un appel de fonction à gauche d une affectation! Exemple double tableau[100]; double & element(int i) return tableau[i]; int main() element(5) = 123; cout << element(5) << endl; cin >> element(10); cout << element(10) << endl; Introduction à la programmation orientée objet avec C

15 Le langage C++ Gestion de fichiers au format texte - écriture #include <fstream> using namespace std; int main() // déclaration d'un objet flux pour le fichier ofstream fichier; int i; // ouverture du fichier fichier.open("carres.txt"); // écriture dans le fichier fichier << "Les carres de 1 a 100" << endl; for (i = 1 ; i <= 100; i++) fichier << i << "^2 : " << i * i << endl; // fermeture du fichier fichier.close(); Introduction à la programmation orientée objet avec C++ 28 Le langage C++ Gestion de fichiers au format texte - écriture #include <fstream> using namespace std; int main() // déclaration d'un objet flux pour le fichier ofstream fichier; int i; // ouverture du fichier fichier.open("carres.txt"); // écriture dans le fichier fichier << "Les carres de 1 a 100" << endl; for (i = 1 ; i <= 100; i++) fichier << i << "^2 : " << i * i << endl; // fermeture du fichier fichier.close(); Introduction à la programmation orientée objet avec C

16 Le langage C++ Gestion de fichiers au format texte - lecture #include <iostream> #include <fstream> #include <string> using namespace std; int main() // déclaration d'un objet flux pour le fichier ifstream fichier; string ligne; int nombre_ligne = 0; // ouverture du fichier fichier.open("carres.txt"); while (!fichier.eof()) // lecture du fichier, vérification du succès if (getline(fichier, ligne)) nombre_ligne ++; // fermeture du fichier fichier.close(); cout << "Le fichier comporte " << nombre_ligne << " lignes." << endl; Introduction à la programmation orientée objet avec C++ 30 Le langage C++ Gestion de fichiers open Prototype Openmode void open(const char *_Filename, ios_base::openmode _Mode; app : append, va à la fin avant chaque ajout. ate : ouvre le fichier et va à la fin 1 fois. binary, : ouvre le fichier en mode binaire. in : ouvre en lecture out : ouvre en écriture trunc : écrase le fichier à l ouverture. Exemple fstream fichier; fichier.open ("test.bin", ios::out ios::app ios::binary); Introduction à la programmation orientée objet avec C

17 Le langage C++ La gestion des erreurs exceptionnelles int ListeDouble::Ajouter(double x) int indice; if (nombre_elements < CAPACITE) indice = nombre_elements; tableau[indice] = x; nombre_elements++; else indice = INDICE_INVALIDE; return indice; double FiltreMedian(double valeurs[], int nombre) int i; Filtre f; for (i = 0; i < nombre_valeurs; i++) if (!f.echantilloner(valeurs[i])) return AMPLITUDE_INVALIDE; return f.calculervaleurmediane(); int Filtre::Echantilloner(double amplitude) if (liste.ajouter(amplitude)!= INDICE_INVALIDE) return 1; else printf("erreur"); return 0; Le code produit pour gérer les erreurs exceptionnelles représente 50 % Beaucoup d effort pour propager l erreur «liste pleine» vers les fonctions de niveau supérieur. Introduction à la programmation orientée objet avec C++ 32 Le langage C++ Les exceptions Lors de la détections d une erreur On «lève» une exception. Une exception est un signal logiciel, accompagné d une donnée. La donnée peut être de n importe quel type Souvent un objet, de classe (ou sous classe) «exception». Le traitement en cours est interrompu. L exception se propage à travers les fonctions appelantes. Sans avoir aucun code à écrire pour cela. Jusqu à ce qu elle soit capturée. Au moment de la capture, la donnée associée est récupérable. Si elle n est pas traitée En général : terminaison de l application. Introduction à la programmation orientée objet avec C

18 Le langage C++ Les exceptions - Syntaxe Lever une exception throw exception("liste pleine"); throw 1.5; // pas très usuel Capturer une exception try // Placer ici le code pouvant générer une exception // que l'on veut capturer // blocs de capture : un a plusieurs selon les besoins catch (exception & e) cout << e.what() << endl; catch (...) //... signifie capturer tout cout << "Exception de type inattendu\n" << endl; throw; // redéclenchement de l'exception capturée Introduction à la programmation orientée objet avec C++ 34 Le langage C++ La gestion des erreurs avec les exceptions int ListeDouble::Ajouter(double x) int indice; if (nombre_elements < CAPACITE) indice = nombre_elements; tableau[indice] = x; nombre_elements++; else throw exception("liste pleine"); return indice; void Filtre::Echantilloner(double amplitude) liste.ajouter(amplitude); Plus aucun code à écrire pour la propagation des erreurs! double FiltreMedian(double valeurs[], int nombre) int i; Filtre f; Programmation beaucoup plus efficace. for (i = 0; i < nombre_valeurs; i++) f.echantilloner(valeurs[i]); return f.calculervaleurmediane(); Introduction à la programmation orientée objet avec C

19 Le langage C++ La gestion des erreurs avec les exceptions Traitement de l exception Se fait seulement au niveau où l on sait comment réagir. Exemple : dans main, afficher simplement un message d erreur. Exemple simple double acquisitions[100]; double valeur_filtree;... try valeur_filtree = filtre_median(acquisitions, 100); catch (exception & e) cout << "Erreur durant le filtrage : " << e.what() << endl; Introduction à la programmation orientée objet avec C++ 36 Le langage C++ La gestion des erreurs avec les exceptions Recommandation Utiliser la gestion par exception seulement pour les situations exceptionnelles. Préférer des tests avec if pour les situations probables. Introduction à la programmation orientée objet avec C

20 Le langage C++ Allocation dynamique de mémoire C++ offre un opérateur pour l allocation dynamique Opérateur new. Syntaxe et utilisation beaucoup plus clairs que les malloc du C. Syntaxe TYPE * variable; variable = new TYPE; Exemple allocation d une cellule pour une file chainée struct CELLULE_FILE_CHAINEE * cellule; cellule = new CELLULE_FILE_CHAINEE; cellule->element = 10.5; Introduction à la programmation orientée objet avec C++ 38 Le langage C++ Allocation dynamique de mémoire C++ offre également un opérateur pour la libération Opérateur delete. Syntaxe TYPE * variable; variable = new TYPE;... delete variable; Introduction à la programmation orientée objet avec C

21 Le langage C++ Allocation dynamique de mémoire les tableaux L opérateur new permet d allouer un tableau d éléments tableau = new type[taille]; Syntaxe de l opérateur delete pour les tableaux delete []tableau; Allocation dynamique du C++ Plus facile à utiliser. Plus lisible. A préférer pour tout développement en C++. A utiliser impérativement dès qu on alloue des objets. Introduction à la programmation orientée objet avec C++ 40 Le langage C++ Allocation dynamique de mémoire les tableaux - exemple int main() double * tableau; int i, taille; cout << "Taille:"; cin >> taille; // Allocation dynamique du tableau tableau = new double[taille]; for (i = 0; i < taille; i++) cout << "Element " << i + 1 << " : "; cin >> tableau[i]; // Libération du tableau delete []tableau; _getch(); return 0; Introduction à la programmation orientée objet avec C

22 Introduction à la programmation orientée objet avec C++ 42 Introduction : Rappel le TDA Nombre complexe en C typedef struct double reel, imaginaire; COMPLEXE; void complexe_initialiser(complexe* z); void complexe_ecrire_cartesien(complexe* z, double re, double im); void complexe_ecrire_polaire(complexe* z, double module, double argument); double complexe_lire_reelle(complexe z); double complexe_lire_imaginaire(complexe z); double complexe_lire_module(complexe z); double complexe_lire_argument(complexe z); COMPLEXE complexe_oppose(complexe z); COMPLEXE complexe_conjugue(complexe z); COMPLEXE complexe_somme(complexe z1, COMPLEXE z2); Introduction à la programmation orientée objet avec C

23 Les types de donnée abstraits Exemple d utilisation correcte #include "complexes.h" int main() COMPLEXE z1, z2, z3; complexe_initialiser(&z1); complexe_initialiser(&z2); complexe_ecrire_cartesien(&z1, 3, 0); complexe_ecrire_cartesien(&z2, 0, 2); z3 = complexe_somme(z2, z1); printf("z3 = %lf + i. %lf\n", complexe_lire_reelle(z3), complexe_lire_imaginaire(z3)); system("pause"); return 0; Introduction à la programmation orientée objet avec C++ 44 Les types de donnée abstraits Exemple d utilisation incorrecte #include "complexes.h" int main() COMPLEXE z1 = 3.0, 0.0, z2, z3; z2.reel = 0.0; z2.imaginaire = 2.0; z3 = complexe_somme(z2, z1); printf("z3 = %lf + i. %lf\n", complexe_lire_reelle(z3), complexe_lire_imaginaire(z3)); system("pause"); return 0; Attention. Mauvaise utilisation, car ne respecte pas l abstraction du type. Introduction à la programmation orientée objet avec C

24 Introduction : Rappel le TDA Nombre complexe en C - Analyse void complexe_initialiser(complexe* z); void complexe_ecrire_cartesien(complexe* z, double re, double im); void complexe_ecrire_polaire(complexe* z, double module, double argument); Syntaxe fastidieuse Noms de méthodes préfixés par «complexe» pour rappeler le TDA d appartenance Il faut toujours passer la structure en paramètre par adresse C++ : nouvelle syntaxe facilitant la programmation des TDA Des fonctions peuvent être déclarées dans un struct. On les appelle alors des «méthodes». Ces méthodes ont accès directement aux variables de la struct. Introduction à la programmation orientée objet avec C++ 46 Les méthodes : des fonctions associées à la structure - déclaration struct Complexe double reelle, imaginaire; ; void DefinirCartesien(double re, double im); void DefinirPolaire(double module, double argument); double LireReelle(); double LireImaginaire(); double LireModule(); double LireArgument(); Complexe Oppose(); Complexe Conjugue(); Introduction à la programmation orientée objet avec C

25 Les méthodes : des fonctions associées à la structure - implémentation void Complexe::DefinirCartesien(double re, double im) reelle = re; imaginaire = im; double Complexe::LireReelle() return reelle; double Complexe::LireModule() return sqrt(reelle * reelle + imaginaire * imaginaire); Complexe Complexe::Conjugue() Complexe resultat; resultat.definircartesien(reelle, -imaginaire); return resultat; Dans l implémentation, les méthodes sont préfixées par le nom du type. Tous les champs de la structure sont accessibles directement depuis les méthodes. Introduction à la programmation orientée objet avec C++ 48 Les méthodes : des fonctions associées à la structure - utilisation #include <iostream> #include "complexe.h" using namespace std; int main() Complexe z1, z2; z1.definircartesien(1.5, 2.0); z2 = z1.conjugue(); Syntaxe allégée. Le mot struct n a pas besoin d être répété. On utilise le point pour accéder aux méthodes (comme pour les champs) cout << "z1 : " << z1.lirereelle() << " + i. " << z1.lireimaginaire() << endl; cout << "z2 : " << z2.lirereelle() << " + i. " << z2.lireimaginaire() << endl; Introduction à la programmation orientée objet avec C

26 Les méthodes : accès aux membres comparaison C / C++ En langage C void complexe_definir_cartesien(complexe* z, double re, double im) z->reel = re; z->imaginaire = im; L adresse de la structure est évidemment requise pour accéder aux champs. En langage C++ void Complexe::DefinirCartesien(double re, double im) reelle = re; imaginaire = im; L adresse de la structure n est pas passée, et pourtant ça fonctionne!? Introduction à la programmation orientée objet avec C++ 50 Les méthodes : accès aux membres Le pointeur «this» En C++, les méthodes reçoivent un paramètre invisible. Il s appelle «this». C est un pointeur sur la structure sur laquelle la méthode est appelée. Code écrit : void Complexe::DefinirCartesien(double re, double im) reelle = re; imaginaire = im; De façon interne et silencieuse, le code vraiment compilé est : void Complexe::DefinirCartesien (Complexe * this, double re, double im) this->reelle = re; this->imaginaire = im; Introduction à la programmation orientée objet avec C

27 Gérer la visibilité : public et private Rappel TDA TDA : Type de Données Abstrait. On ne devrait jamais accéder directement aux champs de la structure. Mais rien ne nous empêche de le faire! Mauvais exemple d utilisation du TDA: int main() Complexe z1, z2; z1.reelle = 1.5; z1.imaginaire = 2.0; z2 = z1.conjugue();.... Accès direct aux champs. Rompt l abstraction. Introduction à la programmation orientée objet avec C++ 52 Gérer la visibilité : public et private C++ apporte des améliorations pour les TDA Possibilité d interdire l accès aux membres par les utilisateurs d un type. Syntaxe : modificateurs public et private Exemple : struct Complexe private: double reelle, imaginaire; L accès direct à ces champs hors des méthodes du type Complexe sera interdit par le compilateur. public: void DefinirCartesien(double re, double im); void DefinirPolaire(double module, double argument); ; double LireReelle(); double LireImaginaire();... Le type complexe peut seulement être utilisé avec les méthodes publiques prévues. Garantit le respect de l abstraction Introduction à la programmation orientée objet avec C

28 Notion de classe La programmation orientée objet Elle est basée sur la notion de classe. (explicitée plus loin) Comment déclarer une classe en C++? Il suffit d utiliser le mot class à la place du mot struct. class Complexe private: double reelle, imaginaire; public: void DefinirCartesien(double re, double im); void DefinirPolaire(double module, double argument); ; double LireReelle(); double LireImaginaire();.... Introduction à la programmation orientée objet avec C++ 54 Différence entre class et struct Points communs class et struct permettent tous deux de déclarer des classes. Le code généré est 100 % identique. Différences Avec la déclaration struct Par défaut, tous les membres sont publics. Avec la déclaration class Par défaut, tous les membres sont privés. Lequel préférer? En programmation orientée objet, on utilise habituellement class. Par défaut, tout ce qui n est pas explicitement rendu public par le programmeur est ainsi privé. Introduction à la programmation orientée objet avec C

29 Notion d objet Définition Un objet est une instance d une classe. C est-à-dire une variable de ce type. Exemples Complexe z1, z2; Complexe * z3; z3 = new Complexe; z1 et z2 sont des objets. z3 est un pointeur sur un objet (son adresse). Introduction à la programmation orientée objet avec C++ 56 C++ et compilation séparée Le fichier.h Contient habituellement les déclarations de classes, méthodes, Le fichier.cpp Contient l implémentation des méthodes. Introduction à la programmation orientée objet avec C

30 Surcharge des opérateurs Surcharge des opérateurs Permet de donner un sens nouveau aux opérateurs. Seulement pour les types définis par le programmeur. Exemple : surcharge de << pour le type «Complexe» Opérateur déclaré EN DEHORS de la classe. ostream & operator<<(ostream & stream, const Complexe & z) stream << z.lirereelle(); if (z.lireimaginaire() < 0.0) stream << " - " << - z.lireimaginaire() << ". i"; else if (z.lireimaginaire() > 0.0) stream << " + " << z.lireimaginaire() << ". i"; return stream; Introduction à la programmation orientée objet avec C++ 58 Méthodes const Problème «z» est un paramètre const. A-t-on le droit d appeler une méthode sur un const? Et si la méthode modifiait la constante? Compilateur: refus des appels de méthodes normales sur des objets const Solution : déclarer les méthodes const class Complexe.... double LireReelle() const; double LireImaginaire() const; double LireModule() const; double LireArgument() const;.... ; Introduction à la programmation orientée objet avec C

31 Surcharge des opérateurs - utilisation #include <iostream> #include "complexe.h" using namespace std; int main() Complexe z1, z2; z1.definircartesien(1.5, 2.0); z2 = z1.conjugue(); cout << "z1 : "; cout << z1 << endl; cout << "z2 : "; cout << z2 << endl; Utilisation du nouvel opérateur << char c; cin >> c; Introduction à la programmation orientée objet avec C++ 60 Surcharge des opérateurs l addition de complexes Déclaration d un opérateur dans la classe class Complexe public:.... Complexe operator+(const Complexe & operande);.... ; Implémentation Complexe Complexe::operator+(const Complexe & operande) Complexe resultat; resultat.reelle = reelle + operande.reelle; resultat.imaginaire = imaginaire + operande.imaginaire; return resultat; Introduction à la programmation orientée objet avec C

32 Surcharge des opérateurs l addition de complexes - utilisation #include <iostream> #include "complexe.h" using namespace std; int main() Complexe z1, z2; z1.definircartesien(1.5, 2.0); z2.definircartesien(3.0, 4.0); cout << "z1 : "; cout << z1 << endl; cout << "z2 : "; cout << z2 << endl; cout << "z1 + z2 : " << z1 + z2 << endl; Style de programmation naturel grâce aux opérateurs définis. Introduction à la programmation orientée objet avec C++ 62 Usages pour les noms des accesseurs Usage général Le code source est écrit en langue anglaise Méthodes d accès en lecture On utilise le terme «get» : obtenir double GetReal() const(); double GetImaginary() const; Méthodes d accès en écriture On utilise le terme «set» : définir void SetReal(double value); Terminologie On parle de «getter» et de «setter» Introduction à la programmation orientée objet avec C

33 Initialisation et finalisation d un TDA Principes d utilisation des TDA Initialisation : préparer les variables internes avant l utilisation. Utilisation normale. Finalisation : libérer les ressources allouées Exemple : libérer la mémoire allouée dynamiquement avec malloc. En C: initialisation et finalisation à appeler explicitement. Apport du C++ Notion de constructeur Méthode d initialisation d un objet. Appelée automatiquement à la création de l objet. Notion de destructeur Méthode de finalisation d un objet. Appelée automatiquement à la destruction de l objet. Introduction à la programmation orientée objet avec C++ 64 Constructeur - Introduction Exemple objet non initialisé int main() Complexe z1; cout << "z1 : "; cout << z1 << endl; // non initialisé! Introduction à la programmation orientée objet avec C

34 Constructeur déclaration et définition Déclaration class Complexe private: double reelle, imaginaire; public: Complexe();... ; Définition Complexe::Complexe() reelle = 0.0; imaginaire = 0.0; Méthode déclarée: - Avec le nom de la classe. - Sans aucun type de résultat. Introduction à la programmation orientée objet avec C++ 66 Constructeur Exemple objet initialisé automatiquement int main() Complexe z1; // Initialisé par le constructeur! cout << "z1 : "; cout << z1 << endl; Introduction à la programmation orientée objet avec C

35 Constructeur paramétré Déclaration class Complexe public: Complexe(); Complexe(double re, double im);... ; Définition Complexe::Complexe(double re, double im) DefinirCartesien(re, im); Introduction à la programmation orientée objet avec C++ 68 Constructeur Exemple objet initialisé avec des paramètres int main() Complexe z1(1.0, 2.5); cout << "z1 : "; cout << z1 << endl; Introduction à la programmation orientée objet avec C

36 Objets membres et constructeur On construit une classe «SimulationImpedance» En utilisant un objet «Complexe» pour l impédance class SimulationImpedance private: Complexe impedance; double frequence; public: void DefinirFrequence(double f); void DefinirImpedance(const Complexe & z); ; Introduction à la programmation orientée objet avec C++ 70 Objets membres et constructeur Utilisation int main() SimulationImpedance s1, s2; Que se passe-t-il à la construction de s1, s2? Construction des objets interne. Appel automatique du constructeur de «Complexe». Introduction à la programmation orientée objet avec C

37 Une liste tableau simple en C++ Exemple : liste de double #define CAPACITE 100 class ListeDouble private: double * tableau; int nombre_elements; public: ListeDouble(); ~ListeDouble(); ListeDouble(const ListeDouble & liste); ListeDouble & operator=(const ListeDouble & valeur); int Ajouter(double x); int LireNombreElement() const; double LireElement(int indice) const; double operator[](int indice) const; ; Introduction à la programmation orientée objet avec C++ 72 Une liste tableau simple en C++ Constructeur par défaut ListeDouble::ListeDouble() nombre_elements = 0; tableau = new double[capacite]; Libération de la mémoire La mémoire allouée dynamiquement doit être libérée. Solution en C++ : le destructeur Méthode appelée automatiquement lorsque l objet disparait. Introduction à la programmation orientée objet avec C

38 Destructeur Déclaration class ListeDouble public: ListeDouble(); ~ListeDouble();... ; Définition ListeDouble::~ListeDouble() delete []tableau; Destructeur: - Nom de la classe, précédé de ~ - Sans aucun type de résultat. Introduction à la programmation orientée objet avec C++ 74 Constructeur et destructeur illustration int main() ListeDouble liste1; // construction de liste1 ListeDouble liste2; // construction de liste2 // liste1 et liste2 sont utilisables liste1.ajouter(2); liste1.ajouter(7); liste1.ajouter(4); liste2 = liste1; // A la sortie du bloc ou de la fonction // destruction automatique de liste2 // destruction automatique de liste1 Introduction à la programmation orientée objet avec C

39 Une liste tableau simple en C++ Utilisation int main() ListeDouble liste1, liste2; liste1.ajouter(3.0); liste2 = liste1; Constat Objets très facile à utiliser. Construits et détruits automatiquement. Problème // Que fait cette instruction? liste2 = liste1; Exception à la fin du programme! Introduction à la programmation orientée objet avec C++ 76 Méthodes par défaut En C++, toute classe a au minimum 1 Constructeur par défaut. 1 Constructeur copie. Appelé lors de l initialisation d un objet. Copie chaque champ. 1 Opérateur d affectation. Appelé lors de l affectation d un objet. Copie chaque champ. Par défaut, ces méthodes sont générées automatiquement. Introduction à la programmation orientée objet avec C

40 Une liste tableau simple en C++ - initialisation incorrecte de l objet Avant liste2 = liste1; liste2 tableau nombre_elements liste1 tableau nombre_elements Introduction à la programmation orientée objet avec C++ 78 Une liste tableau simple en C++ - initialisation incorrecte de l objet Après liste2 = liste1; liste2 tableau nombre_elements liste1 tableau nombre_elements Introduction à la programmation orientée objet avec C

41 Une liste tableau simple en C++ - initialisation incorrecte de l objet Conséquences Une modification ultérieure de liste1 modifie aussi liste2! Lors de la destruction La destruction de liste2 libère le bloc de mémoire de liste1. Lors de la destruction de liste1, ce bloc est libéré une deuxième fois. D où une erreur fatale. Comportement souhaitable Lors de l affectation ou de l initialisation de liste2, il faudrait Copier le contenu de liste1 dans le tableau de liste2. Copier le nombre d éléments. Ce comportement peut être programmé : Initialisation : surcharge du constructeur copie. Affectation : surcharge de l opérateur «=» Introduction à la programmation orientée objet avec C++ 80 Une liste tableau simple en C++ - affectation correcte de l objet Déclaration class ListeDouble public: ListeDouble & operator=(const ListeDouble & valeur);.... ; Définition ListeDouble & ListeDouble::operator=(const ListeDouble & liste) int i; // Copie des éléments du tableau for (i = 0; i < liste.nombre_elements; i++) tableau[i] = liste[i]; // Copie du nombre d éléments nombre_elements = liste.nombre_elements; // l affectation renvoie la valeur de gauche // Requis pour permettre le chaînage des affectations. return *this; Introduction à la programmation orientée objet avec C

42 Une liste tableau simple en C++ - initialisation correcte de l objet Déclaration class ListeDouble public: ListeDouble(); ~ListeDouble(); ListeDouble(const ListeDouble & liste);.... ; Définition ListeDouble::ListeDouble(const ListeDouble & liste) int i; // Constructeur : création du tableau nécessaire tableau = new double[capacite]; // Copie des éléments utilisés for (i = 0; i < liste.nombre_elements; i++) tableau[i] = liste[i]; // Copie du nombre d éléments nombre_elements = liste.nombre_elements; Introduction à la programmation orientée objet avec C++ 82 Introduction à la programmation orientée objet avec C

43 Héritage - Introduction Développement d un logiciel de simulation électrique Composants pris en compte sous forme de classes séparées : Resistance Inductance Condensateur Observation Nombreux points communs - resistance: double - nom: string Resistance + CalculerImpedance(double) : Complexe + DefinirNom(string) : void + LireNom() : string + AfficherCaracteristiques() : void - inductance: double - nom: string Inductance + CalculerImpedance(double) : Complexe + DefinirNom(string) : void + LireNom() : string + AfficherCaracteristiques() : void - capacite: double - nom: string Condensateur + CalculerImpedance(double) : Complexe + DefinirNom(string) : void + LireNom() : string + AfficherCaracteristiques() : void Introduction à la programmation orientée objet avec C++ 84 Héritage - Introduction Possibilité orientée objet du C++ Créer une classe de base contenant les éléments communs Créer chaque classe particulière en «héritant» des caractéristiques communes de la classe de base Intérêt Eviter les répétitions de code. Approche hiérarchique des problèmes. Introduction à la programmation orientée objet avec C

44 Héritage - Introduction Nouvelle répartition pas de répétition de code Introduction à la programmation orientée objet avec C++ 86 Héritage Réalisation en C++ class ComposantPassif private: string nom; public: void DefinirNom(const string & valeur); string LireNom() const; void AfficherCaracteristiques() const; ; class Condensateur: public ComposantPassif private: double capacite; public: Complexe CalculerImpedance(double frequence) const; void DefinirCapacite(double valeur); double LireCapacite() const; ; Condensateur hérite de ComposantPassif : -Il reçoit tous les attributs et méthodes de cette classe. - L héritage étant public, tous les éléments publics hérités de ComposantPassif seront publics sur la classe Condensateur. Introduction à la programmation orientée objet avec C

45 Héritage Réalisation en C++ // Classe composant passif void ComposantPassif::DefinirNom(const string & valeur) nom = valeur; string ComposantPassif::LireNom() const return nom; void ComposantPassif::AfficherCaracteristiques() const cout << "Nom : " << nom << endl; Introduction à la programmation orientée objet avec C++ 88 Héritage Réalisation en C++ // Classe Condensateur Complexe Condensateur::CalculerImpedance(double frequence) const Complexe resultat; resultat.definircartesien(0, / (capacite * 2 * M_PI * frequence)); return resultat; void Condensateur::DefinirCapacite(double valeur) capacite = valeur; double Condensateur::LireCapacite() const return capacite; Introduction à la programmation orientée objet avec C

46 Héritage Réalisation en C++ int main() ComposantPassif compo1; Condensateur c1; compo1.definirnom("composant 1"); c1.definirnom("condensateur 1"); c1.definircapacite(4.7e-6); // 4.7 µf compo1.affichercaracteristiques(); cout << endl; c1.affichercaracteristiques(); cout << endl; pause(); Méthodes définies seulement dans ComposantPassif. Disponibles dans Condensateur par héritage public. Introduction à la programmation orientée objet avec C++ 90 Héritage Réalisation en C++ Résultat : Observation Condensateur a bien hérité des attributs et méthodes de ComposantPassif Résultat incomplet : Pour un condensateur, il faudrait aussi afficher la capacité. Solution : redéfinir la méthode «AfficherCaracteristiques». Introduction à la programmation orientée objet avec C

47 Héritage Redéfinir une méthode pour enrichir le comportement Déclaration class Condensateur: public ComposantPassif public:... void AfficherCaracteristiques() const; ; Redéclaration de la méthode AfficherCaracteristiques. Appel de la méthode de la classe parent. Définition void Condensateur::AfficherCaracteristiques() const ComposantPassif::AfficherCaracteristiques(); cout << "Capacite : " << capacite * 1.0e6 << " uf" << endl; Résultat Introduction à la programmation orientée objet avec C++ 92 Héritage Représentation en mémoire ComposantPassif string nom Condensateur string nom double capacite Organisation en mémoire identique Conséquences affectations possibles compo1 = c1; // Ok, définit entièrement compo1 c1 = compo1; // Interdit, ne définit pas complètement c1 Introduction à la programmation orientée objet avec C

48 Les méthodes virtuelles et le polymorphisme - Introduction On souhaite écrire une fonction Calculant et affichant les valeurs d impédances à toutes les décades (1, 10, 100, 1000, Hz ) Utilisable avec tous types d impédances Résistances, Condensateurs, Inductances, autres Prototype pour une résistance void AfficherValeursImpedance(const Resistance & composant); Prototype pour un condensateur void AfficherValeursImpedance(const Condensateur & composant); Prototype pour une inductance void AfficherValeursImpedance(const Inductance & composant); Introduction à la programmation orientée objet avec C++ 94 Les méthodes virtuelles et le polymorphisme - Introduction Implémentation : 3 fois le même code! void AfficherImpedance(const Resistance & composant) double frequence = 1.0; Complexe impedance; void AfficherImpedance(const Condensateur & composant) composant.affichercaracteristiques(); while (frequence <= 1.0e6) double frequence = 1.0; Complexe impedance; impedance = composant.calculerimpedance(frequence); void AfficherImpedance(const Inductance & composant) composant.affichercaracteristiques(); cout << frequence << " Hz : " << impedance << endl; while (frequence <= 1.0e6) frequence = frequence * 10; double frequence = 1.0; Complexe impedance; impedance = composant.calculerimpedance(frequence); composant.affichercaracteristiques(); cout << frequence << " Hz : " << impedance << endl; while (frequence <= 1.0e6) frequence = frequence * 10; impedance = composant.calculerimpedance(frequence); cout << frequence << " Hz : " << impedance << endl; frequence = frequence * 10; Introduction à la programmation orientée objet avec C

49 Les méthodes virtuelles et le polymorphisme - Introduction int main() Condensateur c1; Inductance l1; Resistance r1; r1.definirnom("resistance 1"); r1.definirresistance(1000); c1.definirnom("condensateur 1"); c1.definircapacite(4.7e-6); // 4.7 µf l1.definirnom("inductance 1"); l1.definirinductance(25e-3); // 25 mh AfficherImpedance(r1); AfficherImpedance(c1); AfficherImpedance(l1); pause(); Introduction à la programmation orientée objet avec C++ 96 Les méthodes virtuelles et le polymorphisme Solution pour éviter de répéter 3 fois le code? Utiliser le type de base ComposantPassif comme paramètre. Résistance, Condensateur et Inductance héritent de ComposantPassif. - nom: string ComposantPassif + DefinirNom(string) : void + LireNom() : string + AfficherCaracteristiques() : void Induc tance - inductance : double + CalculerImpedance(double) : Complexe Problème void AfficherImpedance(const ComposantPassif & composant) double frequence = 1.0; Complexe impedance; composant.affichercaracteristiques(); while (frequence <= 1.0e6) impedance = composant.calculerimpedance(frequence); cout << frequence << " Hz : " << impedance << endl; frequence = frequence * 10; «CalculerImpedance» n est pas déclarée sur ComposantPassif! Donc, compilation impossible. Introduction à la programmation orientée objet avec C

50 Les méthodes virtuelles et le polymorphisme Déclarer CalculerImpedance pour la classe parent class ComposantPassif public:.... Complexe CalculerImpedance(double frequence) const; ; Complexe ComposantPassif::CalculerImpedance(double frequence) const Complexe resultat; resultat.definircartesien(0.0, 0.0); return resultat; On choisit de retourner 0, car on ne sait pas comment calculer dans la classe ComposantPassif. Introduction à la programmation orientée objet avec C++ 98 Les méthodes virtuelles et le polymorphisme Test void AfficherImpedance(const ComposantPassif & composant) double frequence = 1.0; Complexe impedance; composant.affichercaracteristiques(); while (frequence <= 1.0e6) int main() impedance = composant.calculerimpedance(frequence); Condensateur c1; Inductance cout l1; << frequence << " Hz : " << impedance << endl; Resistance frequence r1; = frequence * 10; r1.definirnom("resistance 1"); r1.definirresistance(1000); c1.definirnom("condensateur 1"); c1.definircapacite(4.7e-6); // 4.7 µf l1.definirnom("inductance 1"); l1.definirinductance(25e-3); // 25 mh AfficherImpedance(r1); AfficherImpedance(c1); AfficherImpedance(l1); pause(); Introduction à la programmation orientée objet avec C

51 Les méthodes virtuelles et le polymorphisme Observations Fonctionnement non satisfaisant AfficherCaracteristiques C est la méthode de base de ComposantPassif qui est appelée. Elle n affiche que le nom du composant, pas ses valeurs. CalculerImpedance C est la méthode de base de ComposantPassif qui est appelée. Elle retourne toujours 0. Comportement souhaitable En fonction de la classe du composant passé en paramètre. Appeler la fonction AfficherCaracteristiques de cette classe. Appeler la fonction CalculerImpedance de cette classe. Introduction à la programmation orientée objet avec C Les méthodes virtuelles et le polymorphisme Appel d une méthode normale La méthode appelée est celle associée au type de la déclaration Cette méthode est choisie au moment de la compilation. Appel d une méthode virtuelle La méthode appelée est celle associée au type effectif de l objet passé en paramètre. Cette méthode est choisie au moment de l exécution. Syntaxe Pour qu une méthode soit virtuelle, il suffit de faire précéder sa déclaration par le mot réservé «virtual». En C++, cette déclaration est requise seulement à la première apparition de la méthode (dans la classe de base). Introduction à la programmation orientée objet avec C

52 Les méthodes virtuelles et le polymorphisme Modification minime de l exemple précédent class ComposantPassif private: string nom; public: void DefinirNom(const string & valeur); string LireNom() const; virtual void AfficherCaracteristiques() const; virtual Complexe CalculerImpedance(double frequence) const; ; Exécution conforme aux attentes Introduction à la programmation orientée objet avec C Les méthodes virtuelles et le polymorphisme Avec la déclaration virtual La fonction CalculerImpedance appelée est celle correspondant au type effectif de l objet. Idem pour AfficherCaracteristiques. void AfficherImpedance(const ComposantPassif & composant) double frequence = 1.0; Complexe impedance; composant.affichercaracteristiques(); while (frequence <= 1.0e6) impedance = composant.calculerimpedance(frequence); cout << frequence << " Hz : " << impedance << endl; frequence = frequence * 10; Introduction à la programmation orientée objet avec C

53 Les méthodes virtuelles et le polymorphisme void AfficherImpedance(const ComposantPassif & composant) double frequence = 1.0; Complexe impedance; composant.affichercaracteristiques(); while (frequence <= 1.0e6) impedance = composant.calculerimpedance(frequence); cout << frequence << " Hz : " << impedance << endl; frequence = frequence * 10; La méthode effectivement appelée derrière cet appel dépend du type effectif de l objet. La fonction AfficherImpedance s adapte au type des objets manipulés. Cette fonction peut être utilisée avec différents types, elle est dite polymorphe. Le mécanisme utilisé s appelle polymorphisme. Introduction à la programmation orientée objet avec C Les méthodes virtuelles et le polymorphisme - Fonctionnement Une classe avec des méthodes virtuelles Comporte automatiquement une VMT : Virtual Method Table C est un tableau contenant l adresse de ses différentes méthodes virtuelles Un objet d une classe avec méthodes virtuelles Comporte automatiquement un pointeur sur la VMT de sa classe (_vfptr, _vptr, _vmt) class A public: long _l; void Test() ; class B public: long _l; virtual void Test() ; int main() cout << "A:" << sizeof(a) << endl; cout << "B:" << sizeof(b) << endl; Introduction à la programmation orientée objet avec C

54 Les méthodes virtuelles et le polymorphisme - Fonctionnement ComposantPassif VMTComposantPassif* vmt; VMTComposant Resistance VMTComposantPassif* vmt; Inductance VMTComposantPassif* vmt; VMTInductance VMTResistance Introduction à la programmation orientée objet avec C Les méthodes virtuelles et le polymorphisme - Fonctionnement Appel d une méthode virtuelle On accède à la VMT de la classe grâce au champs caché _vmt. On trouve l adresse de la méthode dans la VMT par position Chaque méthode correspond à une position fixe Ex : VMT[0] : AfficherCaracteristiques On appelle la méthode se trouvant à cette adresse Coût Performances : 1 indirection, donc peu d impact Mémoire : Tables VMT répétées pour chaque classe. Code plus volumineux Problématique dans des environnements extrêmement contraints. Introduction à la programmation orientée objet avec C

55 Les méthodes virtuelles et le polymorphisme - Fonctionnement Observation avec le debugger visual studio. Inductance l1, l2; Condensateur c1, c2; Resistance r1, r2; Introduction à la programmation orientée objet avec C Les méthodes virtuelles et le polymorphisme Classe ComposantPassif La déclaration de la méthode CalculerImpedance est requise pour permettre son appel sur les objets de ce type. Son implémentation retournant toujours 0 est inutile. Le seul intérêt est de déclarer l «interface» commune de la classe Composant Passif et de ses sous-classes. Méthode virtuelle pure (abstraite) Il est possible de déclarer la méthode sans l implémenter. Elle est alors dite virtuelle pure ou abstraite. Il faut terminer la déclaration par «=0». Exemple virtual Complexe CalculerImpedance(double frequence) const =0; Introduction à la programmation orientée objet avec C

56 Polymorphisme avec des paramètres par adresse ou par référence Passage par adresse ou par référence void AfficherImpedance(const ComposantPassif & composant); La fonction reçoit l adresse du paramètre effectif. Permet d aller consulter sa classe et d appeler la bonne méthode virtuelle. Passage par valeur void AfficherImpedance(const ComposantPassif composant); La fonction reçoit une copie du paramètre effectif. La copie est toujours de type ComposantPassif, pas du type effectif. Seules les méthodes de ComposantPassif seront appelées. Le mécanisme des méthodes virtuelles ne fonctionne pas! Introduction à la programmation orientée objet avec C Une 3 ème classe de visibilité Rappel public Méthodes et attributs utilisables depuis l extérieur de la classe. private Méthodes et attributs utilisables depuis l intérieur de la classe. Classe de visibilité supplémentaire protected : méthode et attributs utilisables Depuis l intérieur de la classe. Depuis l intérieur des sous classes. Introduction à la programmation orientée objet avec C

57 Polymorphisme avec des listes d objet Possibilité de construire des listes d objets polymorphes Liste contenant des pointeurs sur des objets de différents types. Exemple : liste de pointeurs sur ComposantPassif Liste de ComposantPassif * Resistance Condensateur Condensateur Resistance Resistance Inductance Condensateur Inductance Condensateur Introduction à la programmation orientée objet avec C Signification conceptuelle de l héritage Quand est-il juste d utiliser un héritage? Si on peut dire de la sous-classe «EST UN» par rapport à son parent - nom: string ComposantPassif + DefinirNom(string) : void + LireNom() : string + AfficherCaracteristiques() : void Resis tance - resistance : double + CalculerImpedance(double) : Complexe Induc tance - inductance : double + CalculerImpedance(double) : Complexe - capacite: double Condensateur + CalculerImpedance(double) : Complexe Introduction à la programmation orientée objet avec C

58 Principes de conception logicielle orientée objet Que signifie classe? Classe = ensemble d objets. Terme issu du domaine de la «Classification». Sous-classe = sous-ensemble. Composant passif ComposantPassif - nom: string + DefinirNom(string) : void + LireNom() : string + AfficherCaracteristiques() : void Résistance Inductance Resis tance - resistance : double Induc tance - inductance : double - capacite: double Condensateur Condensateur + CalculerImpedance(double) : Complexe + CalculerImpedance(double) : Complexe + CalculerImpedance(double) : Complexe Introduction à la programmation orientée objet avec C Principes de conception logicielle orientée objet - UML Conception orientée objet : EtreV iv ant Découpage d un problème complexe en familles d objets. Notion d objet : identité, état, comportement. Notion assez intuitive. Caractéristique des logiciels conçus selon une approche Orientée Objet Végé tal Mamifères Vertébrés Animal Inv ertébré Résistent assez bien aux changements de spécifications. Aisément extensibles. Meilleure pérennité. Humain Introduction à la programmation orientée objet avec C

59 Le langage C++ Concepts avancés la généricité - introduction Exemple des classes de gestion de liste ListeDouble, ListeInt, ListeChar, ListComposantPassif, Le code est strictement identique. Seul le type des éléments change. Comment éviter de répéter le code pour chaque type? C++ supporte la généricité Possibilité d écrire des classes et fonctions. Dont l implémentation est paramétrée par le type. Exemple List<double> List<int> Introduction à la programmation orientée objet avec C Le langage C++ Concepts avancés la généricité déclaration d une classe générique template <class ElementType, int Size> class List public: List(); ElementType & operator[](int index); int GetSize() const return Size; int GetCount() const; int Add(const ElementType & value); void Clear(); void RemoveAt(int index); void Insert(int index, const ElementType & value); private: ElementType _elements[size]; int _count; ; Particularité La définition des méthodes doit aussi être visible lors de l utilisation de la classe générique En général, placé aussi dans le.h Introduction à la programmation orientée objet avec C

60 Le langage C++ Concepts avancés la généricité implémentation template <class ElementType, int Size> void List<ElementType, Size>::RemoveAt(int index) if (index >= 0 && index < _count) for (int i = index + 1 ; i < _count; i++) _elements[i - 1] = _elements[i]; _count = count - 1; else throw Exception("Invalid index"); Remarques Une classe générique est appelée «template» ou «patron». C est un moule paramétré permettant de générer des classes. La généricité peut aussi s appliquer aux fonctions. Introduction à la programmation orientée objet avec C Le langage C++ Concepts avancés la généricité utilisation List<double, 100> liste1; List<int, 100> liste2; liste1.add(2.3); liste2.add(10); Introduction à la programmation orientée objet avec C

61 Le langage C++ Concepts avancés la stl Le C++ est livré avec une bibliothèque de templates Stl : Standard Template Library. Avantages Comporte de nombreux conteneurs et algorithmes. Inconvénients Utilisation peu intuitive au début. Pas facile à étendre. Utilise l allocation dynamique de mémoire. Difficilement utilisable dans les environnements temps réel. Introduction à la programmation orientée objet avec C Le langage C++ Concepts avancés la stl - exemple #include <iostream> #include <vector> using namespace std; int main() vector<double> v; v.push_back(1.1); v.push_back(2.2); v.push_back(3.3); cout << "Taille: " << v.size() << endl; cout << "Element[1]:" << v[1] << endl; cout << "Boucle sur les elements:" << endl; int i; for(i=0; i < v.size(); i++) cout << v[i] << endl; cout << endl << "Iterateur:" << endl; vector<double>::const_iterator it; for(it = v.begin() ; it!= v.end() ; it++) cout << *it << endl; Introduction à la programmation orientée objet avec C

62 Le langage C++ Concepts avancés la stl aperçu du contenu Introduction à la programmation orientée objet avec C Le langage C++ Bibliothèque standard Bibliothèque standard du C++ : assez fournie. Chaînes de caractères. Entrées sorties, fichiers. Conteneurs génériques : Standard Template Library (STL) Vecteurs, listes, files, piles, Largement documentée Introduction à la programmation orientée objet avec C

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

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

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

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

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

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

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

TP : Gestion d une image au format PGM

TP : Gestion d une image au format PGM TP : Gestion d une image au format PGM Objectif : L objectif du sujet est de créer une classe de manipulation d images au format PGM (Portable GreyMap), et de programmer des opérations relativement simples

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

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

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

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

Programmation en C/C++

Programmation en C/C++ INSA de Lyon Département Génie Electrique Module IF1,IF3,IF4 Programmation en C/C++ Thomas Grenier Nicolas Ducros Tanneguy Redarce Lyon, le 3 mars 2015 2 / 63 Table des matières 1 Développement en C++

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

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

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

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

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf Introduction à Java Matthieu Herrb CNRS-LAAS http://homepages.laas.fr/matthieu/cours/java/java.pdf Mars 2014 Plan 1 Concepts 2 Éléments du langage 3 Classes et objets 4 Packages 2/28 Histoire et motivations

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

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

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

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

et Programmation Objet

et Programmation Objet FACULTE POLYTECHNIQUE DE MONS Service d Informatique et Programmation Objet Mohammed Benjelloun 2 ème Bachelier Année académique 2008-2009 Table des matières Avant-propos--------------------------------------------------------------------------

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

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

30.avr.10 Présentation miniprojet. 9.mars.10 Cours 3 4.mai.10 Cours C++ 1. 16.mars.10 Cours 4 11.mai.10 Cours C++ 2

30.avr.10 Présentation miniprojet. 9.mars.10 Cours 3 4.mai.10 Cours C++ 1. 16.mars.10 Cours 4 11.mai.10 Cours C++ 2 2ème partie de cours: 23.fév.10 Cours 1 20.avr.10 TEST 24.fév.10 TP1 21.avr.10 miniprojet 26.fév.10 TP réserve 23.avr.10 miniprojet 2.mars.10 Cours 2 27.avr.10 Présentation miniprojet 3.mars.10 TP2 28.avr.10

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

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

Département Automatisation et Informatisation Année 2005-2006. Programmation en C++ Institut des Sciences et Techniques de l Ingénieur d Angers

Département Automatisation et Informatisation Année 2005-2006. Programmation en C++ Institut des Sciences et Techniques de l Ingénieur d Angers Département Automatisation et Informatisation Année 2005-2006 Programmation en C++ Institut des Sciences et Techniques de l Ingénieur d Angers 1 Bertrand Cottenceau 1. Introduction du cours de C++...3

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

Classes et Objets en Ocaml.

Classes et Objets en Ocaml. Classes et Objets en Ocaml. Didier Rémy 2001-2002 http://cristal.inria.fr/ remy/mot/2/ http://www.enseignement.polytechnique.fr/profs/informatique/didier.remy/mot/2/ Cours Exercices Slide 1 1. Objets 2.

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

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

Introduction à C++ et à wxwidgets

Introduction à C++ et à wxwidgets Introduction à C++ et à wxwidgets Master IGC 1ère année Année universitaire 2011/2012 Christophe Renaud Version 1.5 19/09/2011 Introduction Objectifs du cours Introduction au langage objet C++ Introduction

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

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

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

Chapitre VI- La validation de la composition.

Chapitre VI- La validation de la composition. Chapitre VI- La validation de la composition. Objectifs du chapitre : Expliquer les conséquences de l utilisation de règles de typage souples dans SEP. Présenter le mécanisme de validation des connexions

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

Licence Bio Informatique Année 2004-2005. Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Licence Bio Informatique Année 2004-2005. Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose... Université Paris 7 Programmation Objet Licence Bio Informatique Année 2004-2005 TD n 1 - Correction Premiers pas Exercice 1 Hello World parce qu il faut bien commencer par quelque chose... 1. Enregistrez

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

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

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

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

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

Utilisation d objets : String et ArrayList

Utilisation d objets : String et ArrayList Chapitre 6 Utilisation d objets : String et ArrayList Dans ce chapitre, nous allons aborder l utilisation d objets de deux classes prédéfinies de Java d usage très courant. La première, nous l utilisons

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

Programmation avec des objets : Cours 7. Menu du jour

Programmation avec des objets : Cours 7. Menu du jour 1 Programmation avec des objets : Cours 7 Menu du jour 1. Retour sur la classe Liste 2. Précisions sur l interface 3. Difficultés dans le cas d erreurs 4. Soulever des exceptions 5. Utilisation des Listes

Plus en détail

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION) CLASSE RACINE Object ancêtre de toutes les classes RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION) définit donc des méthodes héritées par toutes

Plus en détail

Programmation Objet Java Correction

Programmation Objet Java Correction INSA - 4 AE 2007 2008 Durée : 1H00 Contrôle Programmation Objet Java Correction Consignes Tous les documents sont autorisés, mais ils seront peu utiles. Indiquez vos nom et prénom sur chaque feuille. Le

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

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

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INTRODUCTION A JAVA. Fichier en langage machine Exécutable INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du

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

Programmation MacOSX / ios

Programmation MacOSX / ios Programmation MacOSX / ios Master Ingénierie Informatique 2011-2012 Jean-Baptiste.Yunès@liafa.jussieu.fr deux extensions objets de C : C++ (Stroustrup) Objective-C (Cox & Love) ajout de constructions à

Plus en détail

C++ : PROGRAMMATION-OBJET

C++ : PROGRAMMATION-OBJET Cours d informatique 2003/2004 C++ : PROGRAMMATION-OBJET SOMMAIRE : Chapitre 1 : Le concept d objet........ 1 1.1 Objet usuel.............. 1 1.2 Objet informatique Classe........ 2 1.3 Encapsulation.............

Plus en détail

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if Pierre Boudes 28 septembre 2011 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike

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

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2 Langage et Concepts de Programmation Objet Travaux Dirigés no2 Pôle Informatique École Nationale Supérieure des Mines de St-Etienne Vous trouverez plus de détails sur les concepts abordés lors de ce TD

Plus en détail

INITIATION AU LANGAGE JAVA

INITIATION AU LANGAGE JAVA INITIATION AU LANGAGE JAVA I. Présentation 1.1 Historique : Au début des années 90, Sun travaillait sur un projet visant à concevoir des logiciels simples et performants exécutés dans des PDA (Personnal

Plus en détail

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Structure d un programme et Compilation Notions de classe et d objet Syntaxe Cours1 Structure d un programme et Compilation Notions de classe et d objet Syntaxe POO 1 Programmation Orientée Objet Un ensemble d objet qui communiquent Pourquoi POO Conception abstraction sur les types

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

Objets et Programmation. origine des langages orientés-objet

Objets et Programmation. origine des langages orientés-objet Objets et Programmation origine des langages orientés-objet modularité, encapsulation objets, classes, messages exemples en Java héritage, liaison dynamique G. Falquet, Th. Estier CUI Université de Genève

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

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

Tp 1 correction. Structures de données (IF2)

Tp 1 correction. Structures de données (IF2) Tp 1 correction Structures de données (IF2) Remarque générale : compilez et exécutez le code au-fur-et-à mesure de son écriture. Il est plus facile de corriger une petite portion de code délimitée que

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

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

Le langage C++ (partie I)

Le langage C++ (partie I) Master Informatique des Organisations 1 ère et 2 ème années Spécialité ID/MIAGE-IF/MIAGE-SITN Le langage C++ (partie I) Maude Manouvrier Qu est ce que le C++? Rappels sur la gestion de la mémoire Premiers

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

Java c est quoi? Java pourquoi?

Java c est quoi? Java pourquoi? Grandes lignes du cours Cours JAVA : Le bases du langage Java. Version 3.02 Julien Sopena 1 1 julien.sopena@lip6.fr Équipe REGAL - INRIA Rocquencourt LIP6 - Université Pierre et Marie Curie Licence professionnelle

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

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

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

2. Comprendre les définitions de classes

2. Comprendre les définitions de classes Conception objet en Java avec BlueJ une approche interactive 2. Comprendre les définitions de classes Analyser le contenu des classes David J. Barnes, Michael Kölling version française: Patrice Moreaux

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

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs Utilisation des classes de PourCGI par Michel Michaud, version 2002-11-23 Les fichiers PourCGI.h et PourCGI.cpp rendent disponibles deux classes et une fonction libre qui permettent de faire facilement

Plus en détail

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr www.cril.univ-artois.fr/~jabbour

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr www.cril.univ-artois.fr/~jabbour LMI 2 Programmation Orientée Objet POO - Cours 9 Said Jabbour jabbour@cril.univ-artois.fr www.cril.univ-artois.fr/~jabbour CRIL UMR CNRS 8188 Faculté des Sciences - Univ. Artois Février 2011 Les collections

Plus en détail

Quelques éléments de compilation en C et makefiles

Quelques éléments de compilation en C et makefiles Quelques éléments de compilation en C et makefiles Guillaume Feuillade 1 Compiler un programme C Le principe de la compilation consiste à passer d un ensemble de fichiers de code à un programme exécutable

Plus en détail

Cours 14 Les fichiers

Cours 14 Les fichiers Cours 14 Les fichiers F. Gayral 1 Fichier : définition /media/travaux/documents/fgenseignement/java1/courstpsfgfc/14-fichiers/voirtypefichiers Fichier = ensemble d informations codées et stockées sur une

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

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs) Modularité Extensions Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs) généricité modules de première classe : peuvent être

Plus en détail

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs Brefs rappels sur la pile et le tas (Stack / Heap) et les pointeurs (exemples en C) v1.11 - Olivier Carles 1 Pile et Tas Mémoire allouée de manière statique Mémoire Allouée Dynamiquement variables locales

Plus en détail

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application Université de Provence Licence Math-Info Première Année V. Phan Luong Algorithmique et Programmation en Python Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application 1 Ordinateur Un

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

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

Programmation système en C/C++

Programmation système en C/C++ Programmation système en C/C++ Jean-Baptiste Vioix (jb.vioix@free.fr) LE2I - ENESAD http://jb.vioix.free.fr 1-41 Programmation en C/C++ sous Unix Il existe des très nombreux outils de développement sous

Plus en détail

TD3: tableaux avancées, première classe et chaînes

TD3: tableaux avancées, première classe et chaînes TD3: tableaux avancées, première classe et chaînes de caractères 1 Lestableaux 1.1 Élémentsthéoriques Déclaration des tableaux Pour la déclaration des tableaux, deux notations sont possibles. La première

Plus en détail

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE QCM Remarque : - A une question correspond au moins 1 réponse juste - Cocher la ou les bonnes réponses Barème : - Une bonne réponse = +1 - Pas de réponse = 0

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

Introduction à l algorithmique et à la programmation M1102 CM n 3

Introduction à l algorithmique et à la programmation M1102 CM n 3 Introduction à l algorithmique et à la programmation M1102 CM n 3 DUT Informatique 1 re année Eric REMY eric.remy@univ-amu.fr IUT d Aix-Marseille, site d Arles Version du 2 octobre 2013 E. Remy (IUT d

Plus en détail

Programme Compte bancaire (code)

Programme Compte bancaire (code) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; Programme Compte bancaire (code) namespace compte_bancaire /// Classe Program public

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

Bases Java - Eclipse / Netbeans

Bases Java - Eclipse / Netbeans Institut Galilée PDJ Année 2014-2015 Master 1 Environnements Java T.P. 1 Bases Java - Eclipse / Netbeans Il existe plusieurs environnements Java. Il est ESSENTIEL d utiliser la bonne version, et un environnement

Plus en détail

Auto-évaluation Programmation en Java

Auto-évaluation Programmation en Java Auto-évaluation Programmation en Java Document: f0883test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INTRODUCTION AUTO-ÉVALUATION PROGRAMMATION EN

Plus en détail

Chapitre 1 : La gestion dynamique de la mémoire

Chapitre 1 : La gestion dynamique de la mémoire Chapitre 1 : La gestion dynamique de la mémoire En langage C un programme comporte trois types de données : Statiques; Automatiques ; Dynamiques. Les données statiques occupent un emplacement parfaitement

Plus en détail

Cours 1 : La compilation

Cours 1 : La compilation /38 Interprétation des programmes Cours 1 : La compilation Yann Régis-Gianas yrg@pps.univ-paris-diderot.fr PPS - Université Denis Diderot Paris 7 2/38 Qu est-ce que la compilation? Vous avez tous déjà

Plus en détail