Programmation orientée objet avec C++
|
|
- Georgette Normand
- il y a 8 ans
- Total affichages :
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) 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étailC++ 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étailPré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étailPour 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étailCOMPARAISONDESLANGAGESC, 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étailGé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étailCours 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étailCours 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étailTP : 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étailIntroduction à 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étailUne 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étailLe 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étailC++ 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étailProgrammation 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étailPremiers 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étailCours 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étailINFO-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étailGé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étailTP1 : 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étailIntroduction à 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étailLangage 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étailCours 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étailConventions 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étailLicence 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étailet 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étailTraduction 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étailClaude 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étail30.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étailProgrammation 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étailCours 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étailDé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étailI. 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étailClasses 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étailProgrammation 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étailINITIATION 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étailIntroduction à 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étailIntroduction à 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étailIntroduction à 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étail1. 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étailChapitre 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étailLes 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étailLicence 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étailas 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étailChapitre 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étailExceptions. 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étailCré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étailCours 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étailUtilisation 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étailInitiation à 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étailProgrammation 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étailRAPPELS 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étailProgrammation 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étailJava 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étailRecherche 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étailINTRODUCTION 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étailPolymorphisme, 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étailProgrammation 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étailC++ : 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 Pierre Boudes 28 septembre 2011 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike
Plus en détailBases 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étailLangage 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étailINITIATION 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étailStructure 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étailInfo0101 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étailObjets 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étailTP 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étailPlan 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étailTp 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étailJava 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étailLe 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étailLe 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étailLes 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étailJava 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étailHé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étailGé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étailAlgorithmique 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étail2. 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étailEncapsulation. 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étailClasse 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étailLMI 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étailQuelques é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étailCours 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étailCours 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étailCentre 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étailSuivant 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étailBrefs 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étailCours 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étail1.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étailProjet 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étailProgrammation 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étailTD3: 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étailEPREUVE 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étailIntroduction à 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étailIntroduction à 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étailProgramme 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étailGOL502 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étailBases 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étailAuto-é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étailChapitre 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étailCours 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