Fiche n 12 : classes et objets (initiation au C++)

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

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

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

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

Cours 1: Java et les objets

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

Langage Java. Classe de première SI

Chapitre 2. Classes et objets

Une introduction à Java

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

TP1 : Initiation à Java et Eclipse

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

Java Licence Professionnelle CISII,

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

Les structures. Chapitre 3

Traduction des Langages : Le Compilateur Micro Java

Premiers Pas en Programmation Objet : les Classes et les Objets

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

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

TD/TP PAC - Programmation n 3

Chapitre 10. Les interfaces Comparable et Comparator 1

Programmer en JAVA. par Tama

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Programmation par les Objets en Java

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

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

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

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

et Programmation Objet

Programmation avec des objets : Cours 7. Menu du jour

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

Création d objet imbriqué sous PowerShell.

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

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

Gestion distribuée (par sockets) de banque en Java

FORD C-MAX + FORD GRAND C-MAX CMAX_Main_Cover_2013_V3.indd /08/ :12

GOL502 Industries de services

TD/TP PAC - Programmation n 3

.NET - Classe de Log

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

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

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

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

Projet de programmation (IK3) : TP n 1 Correction

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

JAVA TD0. Prise en main du langage Environnement de base JAVA 1

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

Le langage C. Séance n 4

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

Programmation système I Les entrées/sorties

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

1 Définition d une classe en Java

Auto-évaluation Programmation en Java

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

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

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

Programmation stochastique

Apprendre Java en 154 minutes

I. Introduction aux fonctions : les fonctions standards

LE LANGAGE C++ ENAC 1997 A. DANCEL

Corrigés des premiers exercices sur les classes

Utilisation du BDE pour la maintenance des fichiers DBF de l'application TopoCad:

Programmation en Java IUT GEII (MC-II1) 1

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

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

as Architecture des Systèmes d Information

PROGRAMMATION PAR OBJETS

Compression de Données - Algorithme de Huffman Document de Conception

Présentation du langage et premières fonctions

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

Bases Java - Eclipse / Netbeans

RMI le langage Java XII-1 JMF

Diagramme de classes

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

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

ACTIVITÉ DE PROGRAMMATION

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

4. Groupement d objets

Rappels Entrées -Sorties

Application web de gestion de comptes en banques

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

2 Grad Info Soir Langage C++ Juin Projet BANQUE

TP 1. Prise en main du langage Python

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Paginer les données côté serveur, mettre en cache côté client

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Programmation Orientée Objet

Utilisation d objets : String et ArrayList

INITIATION AU LANGAGE JAVA

Plan Pédagogique du cours

Java DataBaseConnectivity

TP, première séquence d exercices.

Programmation MacOSX / ios

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

Cours A7 : Temps Réel

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

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

Transcription:

Fiche n 12 : classes et objets (initiation au C++) Nous entrons maintenant dans l'univers de la programmation objet et de C++. Une classe peut être vue comme une évolution d'une structure qui comporte non seulement des champs de données, appelés variables d'instance, mais aussi des constructeurs, des méthodes, et parfois un destructeur. Seuls quelques aspects du langage C++ seront abordés ici. class Date private: int jour; int mois; int annee; Date(int j, int m, int a); int compare(date d); void print(); ; Date::Date(int j, int m, int a) jour=j; mois=m; annee=a; Variables d'instances privées, accessibles seulement par les méthodes de la classe. Déclaration d'un constructeur. Déclaration de méthodes publiques, accessibles depuis toute l'application. Définition du constructeur de la classe Date. Il permettra de créer des objets de type Date, aussi appelés instances de la classe Date. Cet opérateur envoie une valeur vers un flux, ici le flux cout qui représente la sortie standard, par défaut l'écran. printf est également utilisable. void Date::print() cout << jour << "/" << mois << "/" << annee;; Définition de la méthode print permettant l'affichage d'une date. int main() Date aujourdhui(9,2,2012); Date* hier = new Date(8,2,2012); aujourdhui.print(); hier->print(); return 0; La variable aujourdhui contient un objet de type Date. La variable hier reçoit un pointeur sur un objet Date créé dans une zone mémoire appelée tas. Appel de la méthode print avec l'objet aujourdhui. Appel de la méthode print avec l'objet pointé par hier. Et la méthode Date::compare? Elle reçoit en paramètre la copie complète d'un objet d de type Date qui doit être comparé à la date courante. Si la date courante est située avant d, cette méthode doit retourner une valeur négative, si les deux dates sont identique, la valeur 0, sinon une valeur positive. int Date::compare(Date d) if(annee<d.annee) return -1; // a completer

Fiche n 13 : pointeurs, références, tableaux en C++ La méthode compare de la fiche précédente accepte en paramètre la copie complète d'un objet Date, ce qui n'est pas efficace en terme d'utilisation de la mémoire et de temps d'exécution. Le problème peut être résolu avec le passage par pointeur. int Date::compare(Date* d) if(annee < d->annee) return -1; // a completer return 0; Une autre solution consiste à utiliser le passage de paramètres par référence. Une référence est un alias qui permet l'accès au contenu d'une variable. Sa représentation en mémoire est aussi concise que celle d'un pointeur, mais il n'y a pas besoin d'utiliser l'opérateur de déréférencement * pour accéder au contenu de la variable concerné. int Date::compare(Date& d) if(annee<d.annee) return -1; // a completer La référence d permet l'accès en lecture et écriture à la variable passée en paramètre. return 0; La référence d s'utilise comme une variable qui contient l'objet référencé. Tableaux en C++ Attention : Pour que cette déclaration soit valide, il faut que la classe Date dispose d un constructeur par défaut. Les tableaux du langage C sont utilisables en C++. Il existe également un moyen de créer dynamiquement un tableau et de le détruire lorsqu on en a plus besoin, pour libérer la mémoire occupée. Date* t; Date::Date() jour=1; mois=1; annee=2000; t = new Date[10]; t[3].print(); delete[] t; t[3] est un objet de type Date. Destruction du tableau t L équivalence tableaux-pointeurs du langage C est aussi valable en C++. Tableaux multidimensionnels Les tableaux dynamiques à deux dimensions doivent être représentés sous la forme de tableaux de pointeurs sur des tableaux à une dimension. L approche est bien sûr généralisable au tableaux à plus de deux dimensions. Date** t2; t2 = new Date*[2]; t2[0] = new Date[3]; t2[1] = new Date[3]; t2[0][1].print(); Tableau de 2 cellules contenant des pointeurs sur Date. Tableau de 3 cellules contenant des objets de type Date.

Fiche n 14 : Héritage et composition Le principe de la programmation orientée objet est très simple : une application est décomposée en classes. Chaque classe permet de créer des objets. Chaque objet contient des données et dispose de méthodes, qui remplacent les fonctions du langage C. Il existe deux types de relations entre les classes : l héritage et la composition. L héritage traduit le verbe être. Par exemple une voiture est un véhicule, donc la classe Voiture hérite, ou dérive, de la classe Véhicule. Toute instance, ou objet de la classe Voiture sera aussi considéré comme une instance de Véhicule. La composition traduit le verbe avoir. Par exemple, une voiture a des roues, donc il y a un lien de composition entre la classe Voiture et la classe Roue. Toute instance de Voiture contiendra ou pointera ou fera référence à des instances de Roue. Exemple simplifié d application Nous allons utiliser la classe standard string qui permet de gérer des chaînes de caractères. Cette classe utilise une représentation différence de celle du langage C. Nous aurons besoin d unefonction i2s pour convertir un entier en chaîne de caractères. string i2s(int x) std::ostringstream flux; flux << x; Ce flux standard convertit des informations en string. On envoie l entier x dans le flux. return flux.str(); La méthode str de la classe ostringstream retourne la chaîne produite par le flux. Maintenant, ajoutons à la classe Date une méthode tostring qui retourne une chaîne représentant la valeur d un objet de type Date. string Date::toString() return i2s(jour)+"/"+i2s(mois)+"/"+i2s(annee); Dans ce contexte, l opérateur + réalise la concaténation de chaînes.

Fiche n 15 : Héritage et composition (suite) La classe Vehicule est définie de la manière suivante. class Vehicule protected: int poids; Date miseencirculation; Vehicule(int p, Date m); Ces deux variables d instance sont protected, ce qui signifie que seules les méthodes de la classe Vehicule et des classes dérivées peuvent y accéder. Ceci est la déclaration d un constructeur de la classe Vehicule. Il accepte deux paramètres : le poids et la date de mise en service. ; int getpoids(); Ceci est la déclaration d une méthode publique de la classe Vehicule. Elle permet d obtenir le poids d une instance de Vehicule. Vehicule::Vehicule(int p, Date m) poids=p; miseencirculation=m; int Vehicule::getPoids() return poids; Ceci est la définition d un constructeur de la classe Vehicule. Il initialise les variables d instances. Ceci est la définition de la méthode getpoids. La classe Voiture est définie de la manière suivante. class Voiture : Vehicule private: ; int nbpassagers; Roue tr[5]; Voiture(int p, Date m, int npass); string tostring(); Voiture::Voiture(int p, Date m, int npass) : Vehicule(p,m) nbpassagers=npass; Deux variables d instances pour représenter le nombre de places (un entier) et les 5 roues (un tableau d instances de Roue). Ceci suppose qu une classe Roue a été définie. Un constructeur et une méthode retournant une chaîne qui décrit la voiture. Ce constructeur appelle d abord celui de la classe Vehicule. string Voiture::toString() string s = "Voiture :\npoids : "+i2s(getpoids()); s += "\nmise en circulation : "+miseencirculation.tostring(); s += "\nnombre de places : "+i2s(nbpassagers); return s;

Fiche n 16 : Héritage et composition (suite) Le code d une méthode peut être défini directement dans la classe qui la contient. Cette syntaxe doit être réservée aux méthodes ayant un code très concis. Par exemple, la classe Roue peut être définie de la manière suivante. class Roue private: int usure; Constructeur par défaut (sans paramètre). Lors de la création d un tableau d instances de Roue (comme par exemple dans la classe Voiture), il est appelé pour initialiser chaque cellule. ; Roue() usure=0; void setusure(int km) usure=km; int getusure() return usure; Définitions complètes des deux «accesseurs» permettant de lire et de modifier la variable d instance privée qui représente l usure (en kms) d une roue. Voici un exemple de déclaration et d utilisation d une instance de la classe Voiture. void testvoiture() Voiture v(702,date(1,1,2012),5); cout << v.tostring(); Lors de la création de la variable v, le constructeur de la classe Voiture est appelé. Ce constructeur accepte en deuxième paramètre une instance de Date qui est ici fournie par un appel au constructeur de la classe Date. Dans cet autre exemple, l instance de voiture est créée dynamiquement à l aide de l opérateur new. void testvoiture() Voiture* v=new Voiture(702,Date(1,1,2012),5); cout << v->tostring();

Fiche de préparation n 4 Quels sont les liens d héritage et de composition entre les classes représentant une université, une personne, un étudiant, un enseignant et une UFR (ou faculté)? Réalisez l implantation complète d une classe PileInt qui représente une pile d entiers et qui permet de créer une pile dont la taille est passée en paramètre au constructeur, d empiler des entiers dans cette pile, de dépiler les valeurs empilées.