Projet de modélisation en C++ Séance 6 - Restructuration

Documents pareils
GOL502 Industries de services

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

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

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

as Architecture des Systèmes d Information

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

TP1 : Initiation à Java et Eclipse

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

et Programmation Objet

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

Chapitre 2. Classes et objets

Traduction des Langages : Le Compilateur Micro Java

Programmer en JAVA. par Tama

Langage Java. Classe de première SI

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

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

Diagramme de classes

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Algorithmique et Programmation, IMA

Premiers Pas en Programmation Objet : les Classes et les Objets

Introduction à l héritage en C++

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

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

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

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

Une introduction à Java

Cours 1: Java et les objets

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

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

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Classes et Objets en Ocaml.

INITIATION AU LANGAGE JAVA

Java Licence Professionnelle CISII,

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

RMI le langage Java XII-1 JMF

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

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

Programmation par les Objets en Java

Programmation Objet Java Correction

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

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

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

Composants génériques de calcul scientifique


DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Bases Java - Eclipse / Netbeans

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

Programmation en Java IUT GEII (MC-II1) 1

LE LANGAGE C++ ENAC 1997 A. DANCEL

COMPARAISONDESLANGAGESC, C++, JAVA ET

Conventions d écriture et outils de mise au point

Programmation Orientée Objet application au langage Java Version Novembre 2007

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

Plan Pédagogique du cours

Machines virtuelles fonctionnelles (suite) Compilation ML Java

I. Introduction aux fonctions : les fonctions standards

Chapitre 10. Les interfaces Comparable et Comparator 1

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

Java Licence Professionnelle CISII,

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

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

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Chapitre VI- La validation de la composition.

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

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object

Les chaînes de caractères

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

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

Présentation du langage et premières fonctions

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

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

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

Introduction à C++ et à wxwidgets

Programmation stochastique

Cours d Algorithmique et de Langage C v 3.0

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

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

Support de cours et TD Programmation Orientée Objet

TD/TP PAC - Programmation n 3

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

Claude Delannoy. 3 e édition C++

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

Enregistreur sans papier avec écran TFT et carte Compact Flash. B Description des interfaces 07.07/

C++ : PROGRAMMATION-OBJET

Introduction au langage C

Chap III : Les tableaux

Programmation en C/C++

Programmation. fonctionnelle, impérative, logique et orientée objet

GOL-502 Industrie de services. Travaux Pratique / Devoir #7

Initiation à JAVA et à la programmation objet.

TD/TP PAC - Programmation n 3

Introduction à LDAP et à Active Directory Étude de cas... 37

Installation d un serveur HTTP (Hypertext Transfer Protocol) sous Débian 6

Cours 1 : La compilation

Ingénierie Dirigée par les Modèles. Editeurs de modèles. (Eclipse Modeling Tools) Jean-Philippe Babau

Transcription:

Projet de modélisation en C++ Séance 6 - Restructuration

1. Héritage 2. Généricité 3. Doxygen Notions abordées

Héritage Différence avec Java : héritage multiple possible Une classe C peut dériver de A et de B Les constructeurs de la/des classe(s) mère(s) ne sont pas hérités Les appeler explicitement pour construire les attributs hérités Appel aux destructeurs dans l'ordre inverse : Destructeur(s) de la/des classe(s) mère(s) après celui de la classe fille

Redéfinition de méthode La méthode d'une classe dérivée masque la méthode de la classe mère class Mere { public: void f() { } class Fille: public Mere { Utilisation : public: void f() { } void main() { Fille Fi; () Fille::f Fi.f(); // appel à () Mere::f Fi.Mere::f() // appel à

: Liaison statique Sélection d'un membre (attribut ou méthode) : déterminé statiquement à la compilation en fonction du type du pointeur ou de la référence Exemple : class Mere { public: int f() { } class Fille : public Mere { public: int f() { } void main() { Fille Fi; Mere *ptr = &Fi; int i = ptr->f() ; // Mere::f() (liaison ( statique

: Liaison dynamique Pour que la fonction appelée soit en rapport avec le type de l'objet pointé au moment de l'appel Mot-clé virtual Exemple : class Mere { public: virtual int f() { } class Fille : public Mere { public: int f() { } void main() { Fille Fi; Mere *ptr = &Fi; int i = ptr->f() ; // Fille::f() (liaison ( dynamique

Fonctions virtuelles pures Définition d'une fonction sans donner son implantation (laissée ( dérivées aux classes class Mere { public: virtual int f() = 0; class Fille : public Mere { public: int f() { } Une classe ayant une méthode virtuelle pure (classe abstraite) ne peut pas être instanciée ~ interface Java Pointeur vers classe abstraite : OK

Héritage multiple Une classe peut dériver de plusieurs classes mères, avec des accès différents aux attributs et méthodes de celles-ci Syntaxe : class A { class B { class C: public A, private B {

Héritage multiple?? main() { C x; x.c = x.d= x.b = 0; // OK x.a=0; //ERREUR : ambiguïté x.d::a = x.b::a = 0; // OK } ;

Héritage virtuel

Héritage virtuel class A { protected: int a; public: A() {cout <<"A1\n"; a=5; } A(int x) {cout<<"a2\n"; a=x;} void m1() {cout <<"m1a "<<a<<endl;} class D: public virtual A { protected: int d; public : D() : A(6){cout<<"D\n"; d=20; } void m4() {cout<<"m4d "<<a<<endl;} class B: public virtual A { protected: int b; public: B() : A(7) { cout<< "B\n"; b=30; } void m3() {cout<<"m3b "<<a<<endl;} class C: public virtual A, public B, public D { protected: int c; public: C() : A(8),B(),D() { cout<<"c\n"; c=40; } void m2() {cout <<"m2c "<<a<<endl;} main() { C xx; xx.m1();xx.m2(); xx.m3();xx.m4(); } ;

Gestion des ambiguïtés Utiliser :: Exemple : class Mere1 { public: int f() { } class Mere2 { public: int f() { } class Fille: public Mere1, Mere2 { void main () { Fille Fi; int i1 = Fi.f(); // Illégal car ambigu int i2 = Fi.Mere1::f(); // OK

Généricité Canevas décrivant une famille de composants : famille de fonctions famille de types famille de membres Les types peuvent devenir des paramètres Mot-clé template

Modèle de fonction : exemple template<int N> void f() { float tab[n]; // N ne sera fixé qu'à la compilation for (int i=0; i< N; i++) cin >> tab[i]; } L'instanciation void (*pf)()=f<100>; conduit le compilateur à générer le code : void f() { float tab[100]; for (int i=0; i< 100; i++) cin >> tab[i]; } L'instanciation f<100>() génère le même code et appelle la fonction

Modèle de classe : exemple 1 template <class A, class B> class paire { public: A a; B b; paire (A aa, B bb) : a(aa), b(bb) {} bool operator==(paire p) { return a==p.a && b==p.b; } void main() { paire<int, char> p1(1,'a') ;

Modèle de classe : exemple 2 template <typename T, int taille_max = 200> class pile { private: T* la_pile; public: typedef T value_type; pile() { la_pile = new T[taille_max]; } ~pile() { delete [] la_pile; } void main() { typedef pile< char, 26 > Alphabet; Alphabet p; // Pile de 26 caractères

Typename Indique que le mot suivant doit être considéré comme un type : template <typename T> Equivalent de class dans un template Egalement utile lorsque le type n'est pas instancié : template <class T> class pile { typedef typename T::value_type T_values; // T pas instancié => indique que T::value_type // est bien un type

Spécification de modèle On peut donner une implantation particulière pour un type particulier : template <class T> T min(t a, T b){ } return (a<b)? a : b; => spécialisation pour le type char* : template<> char* min<char*> (char *a, char *b) { } return strcmp(a,b)<0? a : b ;

Doxygen Similaire à Javadoc : production automatique de documentation à partir du code source Corollaire : celui-ci doit être bien commenté Les commentaires pris en compte sont ceux entre /** et */, ou ( possibles entre /*! et */ (d'autres styles Aussi pour C, Java, C#, Python, Formats de sortie : HTML, PDF, RTF, LaTeX, Génère automatiquement des diagrammes de classes

Doxygen : utilisation doxygen -g pour créer le fichier de configuration Doxyfile Editer et modifier ce fichier doxygen Doxyfile pour générer la doc doxygen -help pour plus de détails doxywizard pour le mode graphique (pas installé sur ( ensibm

Doxygen : exemple