Introduction à la Programmation Orientée Objet et au C++ Concepts et exemples. Christophe Collard



Documents pareils
Tutoriel Infuse Learning. Créer des quizzes multimédias sur ordinateur ou tablette

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

Claude Delannoy. 3 e édition C++

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

À travers deux grandes premières mondiales

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

Programmer en JAVA. par Tama

Cours d Algorithmique et de Langage C v 3.0

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

as Architecture des Systèmes d Information


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

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

Une introduction à Java

Parallélisation et optimisation d un simulateur de morphogénèse d organes. Application aux éléments du rein

Algorithmique et Programmation, IMA

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

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

Rappels Entrées -Sorties

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

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

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

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énie Logiciel I. Cours VI - Typage statique / dynamique, fonctions virtuelles et classes abstraites, flots d entrées / sorties, et string

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

Cours 1: Java et les objets

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

Introduction à l héritage en C++

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

Informatique Générale

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

Programmation en Java IUT GEII (MC-II1) 1

Conventions d écriture et outils de mise au point

TP1 : Initiation à Java et Eclipse

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

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

TP 1. Prise en main du langage Python

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

Compression Compression par dictionnaires

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

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

Plan Pédagogique du cours

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

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

TP : Gestion d une image au format PGM

Introduction au langage C

«Participer, dans la région PACA, à la mise en œuvre d une politique d accueil et d insertion par l habitat et par l économique, des jeunes, des

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

Plan du cours Cours théoriques. 29 septembre 2014

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

INF 321 : mémento de la syntaxe de Java

Programmation stochastique

Le langage C. Séance n 4

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

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

Java Licence Professionnelle CISII,

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)

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

Chapitre 2. Classes et objets

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

et Programmation Objet

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

Notions fondamentales du langage C# Version 1.0

COMPARAISONDESLANGAGESC, C++, JAVA ET

Chapitre 3: TESTS DE SPECIFICATION

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

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

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

Recherche dans un tableau

Les chaînes de caractères

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

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

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

Présentation du langage et premières fonctions

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Traduction des Langages : Le Compilateur Micro Java

Chapitre VI- La validation de la composition.

Programmation en langage C

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

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

Initiation. àl algorithmique et à la programmation. en C

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

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

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

TP, première séquence d exercices.

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

Analyse de sécurité de logiciels système par typage statique

SUPPORT DE COURS. Langage C

Programmation par les Objets en Java

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données

Programmation Orientée Objet Java

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

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

PLANIFICATION ET BUDGÉTISATION

Chap III : Les tableaux

Premiers Pas en Programmation Objet : les Classes et les Objets

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Introduction à MATLAB R

Transcription:

Introduction à la Programmation Orientée Objet et au C++ Concepts et exemples

Plan Notions de programmation de base Classes et Objets Les fonctions amies La surdéfinition d op ateu s Les patrons de fonctions et de classes La te h i ue de l h itage Les espaces de nommage Application - Code de calcul Simula+ Discussion

Notions de Programmation de Base

1 octet = 8 bits 1 bit = 0 ou 1 1. Les variables système Type de donnée Signification Taille (en octets) Plage de valeurs acceptée char Caractère 1-128 à 127 unsigned char Caractère non signé 1 0 à 255 short int Entier court 2-32 768 à 32 767 unsigned short int Entier court non signé int Entier unsigned int Entier non signé 2 2 (sur processeur 16 bits) 4 (sur processeur 32 bits) 2 (sur processeur 16 bits) 4 (sur processeur 32 bits) 0 à 65 535-32 768 à 32 767-2 147 483 648 à 2 147 483 647 0 à 65 535 0 à 4 294 967 295 long int Entier long 4-2 147 483 648 à 2 147 483 647 unsigned long int Entier long non signé 4 0 à 4 294 967 295 float Flottant (réel) 4-3.4*10-38 à 3.4*1038 double Flottant double 8-1.7*10-308 à 1.7*10308 long double Flottant double long 10-3.4*10-4932 à 3.4*104932 Même taille que le type int, parfois 1 sur quelques compilateurs Prend deux valeurs : 'true' et 'false' mais une conversion implicite (valant 0 ou 1) est faite par le compilateur lorsque l'on affecte un entier (en réalité toute autre valeur que 0 est considérée comme égale à True). bool Booléen

2. Les boucles But : effectuer plusieurs fois le e type d op ratio s Ex: sommer les 10 premiers entiers Attention : en C++ il faut initialiser les variables, sinon une valeur aléatoire est attribuée for (int i=0; i<10; i++) type du compteur Incrémente le compteur de 1 initialisation du compteur reste dans la boucle tant que cette condition est vérifiée

3. Les fonctions But : accomplir une tâche int double float Fonction INPUTS Atte tio : u e fo tio OUTPUT e peut e o e u u seul t pe Fonction standard : float fctname (int, double) Fonction sans argument : float fctname () Fonction sans valeur de retour : void fctname (int, double) Remarque : une fonction bien programmée peut être lue sur 1 seul écran

Transmission de variable Il existe 3 façons de transmettre des variables à une fonction : - transmission par valeur n adresse a adresse valeur valeur les valeurs de n et p sont dupliquées on change les valeurs des copies - transmission par adresse n adresse a valeur les valeurs de n et p ne sont pas dupliquées on change les valeurs des originaux - transmission par référence la simplicité de la notation de la transmission par valeur le mécanisme de la transmission par adresse

4. Surdéfinition de fonctions une fonction avec un même nom possède plusieurs significations sosie numero 1 : a = 5 sosie numero 2 : a = 2.5 Que se passe t il si x est de type float, long dou le,? conversion du type par le compilateur

7. L allo atio d a i ue de oi e l op ateu NEW se t à alloue de la l op ateu DELETE se t à li oi e e de la oi e L op ateu NEW Exemple 1 Exemple 2 Pou alloue l e ts d u «type» donné : new type [n] new retourne un pointeur (type*) sur le 1er l p adresse adresse adresse adresse adresse valeur valeur valeur valeur valeur p[0] p[4] e t d u ta leau

L op ateu DELETE li e la o do oi e allou e pa l op ateu NEW e o e a gu e t l ad esse du poi teu fou ie pa e syntaxe pour les éléments de type C++ standard int* p; p = new int [5]; delete p; Atte tio le rôle de l op rateur delete est tr s i porta t. Si on détruit un pointeur sans libérer correctement la mémoire, celle-ci est plus accessible et ne peut être réallouée Stack overflow

Classes et Objets

Objectif Variables standart du C++ double a, b, s, p; a= 5; b = 7; s = a + b; p = a * b;

Objectif Variables standart du C++ double a, b, s, p; a= 5; b = 7; s = a + b; p = a * b; D fi i de ou eau t pes de a ia les : e teu s, at i e, te seu s, double p; vector u (4), v(4), w(4); u[1]=5; u[2]=3; u[3]=-1; u[4]=7; v[1]=0.4; v[2]=7; v[3]=-1.2; v[4]=0.75 w = u + v; p = u * v;

1. Classes et encapsulation des données Classe généralisation de la notion de type e te sio des t pes C++ sta da d à de ou eau t pes d fi is pas l utilisateu regroupe des données et des méthodes données membres fonctions membres On a séparé les données et fonctions membres en 2 catégories public private

Encapsulation p i ate : do es et thodes o a essi les à l e t ieu de la lasse seules les fonctions membres y ont accès p ote ted : do es et thodes o a essi les à l e t ieu de la lasse accès possible par les classes dérivées (cf plus tard) pu li : do es et thodes a essi les à l e t ieu de la lasse Remarques pour modifier des données privées il faut passer via des méthodes publiques En POO pure, les données sont encapsulées et leur accès ne peut se faire que par le biais de méthodes

Définition des fonctions membres (méthodes) initialise méthode de point x et y modifiables le symbole :: est un opérateur de résolution de portée l ide tifi ateu initialise est celui défini dans la classe point

Utilisation de la classe Remarques poi t est u ou eau t pe d fi i pa l utilisateu a et b sont des instances de la classe point a et b sont encore appelés des objets de type point si au u des ots p i ate ou pu li appa aît da s la lasse, tout est o sid o e ta t p i ate => ie est a essi le

2. Constructeur et destructeur atio d u ou el o jet allocation de mémoire Processus automatisé CONSTRUCTEUR initialisation de ses données Fonctions membres appelées automatiquement à ha ue atio / dest u tio d o jet dest u tio d u o jet libération de mémoire Processus automatisé DESTRUCTEUR

Résultat: affiche 10 valeurs aléatoires Exemple

3. E ploitatio d u e lasse Disso ie l i pl e tatio d u e lasse de so utilisatio Mettre dans un fichier séparé la classe et son implémentation C atio de i lioth ues ue l o eg oupe pa th es 4. Propriétés des fonctions membres Surdéfinition des fonctions membres La surdéfinition de fonctions «ordinaires» e C++ s appli ue au fonctions membre d u e lasse, o p is au constructeur Elle e peut s appli ue au dest u teu ui e eçoit au u a gu e t

Exemple

Les o jets t a s is e a gu e t d u e fo tio e e Exemple définir une méthode «coincide» dans la classe point pour comparer 2 objets de type point so appel s effe tue de la a i e sui a te a.coincide (b) ou par symétrie du problème b.coincide (a) - transmission par valeur - transmission par adresse - transmission par référence

Résultat a et b 0 (false) b et c 1 (true)

Les fonctions amies

POO pure Encapsulation des données données membres privées accessibles seulement par les méthodes publiques de la classe u e thode d u e aut e lasse doit passe ia les méthodes publiques de la classe pour accéder aux données privées problème dans certains cas Exemple On définit une classe vector et une classe matrix. Produit matrice- e teu essite l a s au do es p i es des 2 lasses

Il e iste plusieu s situatio s d a iti fo tio i d pe da te a ie d u e lasse fo tio e e d u e lasse et a ie d u e aut e lasse fonction amie de plusieurs classes toutes les fo tio s e e d u e lasse, a ies d u e aut e lasse Fo tio i d pe da te a ie d u e lasse Une fonction amie se déclare avec le mot clé friend Exemple

Résultat a et b coincident a et c ne coincident pas

La su d fi itio d op ateu s

On considère une classe vector 2D : class vector { int x,y; }; On définit 2 objets de type vector a et b b a Peut on écrire comme pour un type standard C++ la somme a + b?

Il faut surd fi ir l op rateur + pour la classe définir une fonction operator + au sein de la classe utiliser le mot clé operator sui i de l op ateu à su d fi i la fonction operator + peut être : soit une fonction membre de la classe soit une fonction indépendante amie de la classe soit une fonction indépendante de la classe Afi de p ot ge les do su d fi i l op ateu o es et d a l e le ode, o hoisit e g al de e fo tio i d pe da te a ie de la lasse.

Surdéfinition d op ateu a e u e fo tio a ie Résultat coordonnees (1,2) coordonnees (2,5) coordonnees (3,7) coordonnees (6,14)

Surdéfinition d op ateu a e u e fo tio e e Résultat identique

Remarques la fonction operator + est appelé de la manière suivante : fontion indépendante : a + b operator + (a,b) fontion membre : a + b a.operator + (b) la fonction membre operator + fait apparaître une dissymétrie et l o jet a e peut pas t e p ot g Opérateurs et transmission par référence Dans les deux exemples précédents, on utilise la transmission par valeur Pour des objets de grande taille, il vaut mieux utiliser la transmission par f e e. O peut alo s p ot ge les o jets t a s is a e o st point operator + (const point& a, const point&b) Le etou de l o jet poi t se fait obligatoirement par valeur

Surdéfinition de l op ateu [ ] exemple de la classe vector l op ateu [ ] pe et d a de au ième élément du vecteur En informatique on commence à compter à partir de 0 En mathématiques on commence à compter à partir de 1 C est l op ateu [ ] ui fe a la o e sio C++ i pose de d fi i l op ateu [ ] o e fonction membre int& operator [ ] (int); retour par référence o ligatoi e afi d utilise l op ateu pou affe te des valeurs

Les patrons de fonctions Les patrons de classes

La surdéfinition de fonctions permet de donner un nom unique à plusieurs fonctions réalisant un travail différent La notion de patron est plus puissante et plus restrictive Plus puissante o it u e seule fois la d fi itio d u e fo tio pou ue le o pilateu puisse l adapte auto ati ue e t à i po te uel t pe Plus restrictive toutes les fonctions ainsi fabriquées ont la même définition et le même algorithme But écrire une fonction qui soit valable quel que soit le type des arguments utilisés

Exemple int min (int a, int b) { return (a < b)? a : b; } double min (double a, double b) { return (a < b)? a : b; } float min (float a, float b) { return (a < b)? a : b; } long int min (long int a, long int b) { return (a < b)? a : b; } et On écrit la même fonction pour tous les types existant en C++ est lo g, t s lo g, t s t s lo g et en plus il faut le faire pour toutes les fonctions ça multiplie les lignes de code et rend le code illisible il faut compléter le code quand on définit ses propres classes

On résout ce problème en utilisant les patrons de fonctions cette méthode est très puissante Elle pe et de d fi i des thodes pou des t pes ui e iste t pas e o e fonction patron Résultat type min (n,p) = 4 min (x,y) = 2.5

Surdéfinition des patrons Remarque o peut t a s ett e des l grâce aux patrons e ts de les fo tio s su d fi ies doi e t a oi u d ite les a igüit s i po te uel t pe au fo tio s o e d a gu e ts diff e t afi

Les patrons de classes Mise en évidence du problème Comment stocker des points avec des coordonnées int, float, dou le,? Utiliser des patrons de classe

Les patrons de patrons Exemple d appli atio à la mécanique: Loi de comportement : Σ = C :: E

Les patrons de patrons Exemple d appli atio à la mécanique: Loi de comportement : Σ = C :: E Tenseurs d o d e 2 : Σ, E Tenseur d o d e 4 : C (tenseur d lasti it ) C isotrope => 2 constantes d lasti it (Lamé)

Les patrons de patrons Exemple d appli atio à la mécanique: Loi de comportement : Σ = C :: E Tenseurs d o d e 2 : Σ, E Tenseur d o d e 4 : C (tenseur d lasti it ) C isotrope => 2 constantes d lasti it (Lamé) E C INPUTS Loi de comportement Fonction Σ OUTPUT

Les patrons de patrons Exemple d appli atio à la mécanique: Loi de comportement : Σ = C :: E Tenseurs d o d e 2 : Σ, E Tenseur d o d e 4 : C (tenseur d lasti it ) C isotrope => 2 constantes d lasti it (Lamé) E C INPUTS Loi de comportement Fonction Σ OUTPUT C: utilisation d u pat o pou sto ke les constantes d lasti it

E C INPUTS Loi de comportement Fonction Σ OUTPUT C: utilisation d u pat o pou sto ke les constantes d lasti it C -> cubique (3 constantes élasticté) Tenseurs d o d e 2 : Σ, E Tenseur cubique : C (tenseur d lasti it ) Comment ne pas réécrire le code de la loi de comportement dans ce nouveau cas?

E C INPUTS Loi de comportement Fonction Σ OUTPUT C: utilisation d u pat o pou sto ke les constantes d lasti it C -> cubique (3 constantes élasticté) Tenseurs d o d e 2 : Σ, E Tenseur cubique : C (tenseur d lasti it ) Comment ne pas réécrire le code de la loi de comportement dans ce nouveau cas? utiliser un patron pour C C utilise déjà un patron pour stocker les constantes d lasti it => utilisation d u pat o de pat o

Avantage : La loi de comportement reste valable même pour des objets non encore définis Ex. On pourra définir plus tard un classe pour l lasti it orthotrope et utiliser la même loi de comportement sans changer le code gérant cette loi.

La te h i ue de l h itage

Le o ept de l h itage ou de lasses d i es o stitue l u des fondements de la POO Intérêt Classe dérivée : nouvelle classe classe de base définie à partir de la classe de base propriétés de la classe hérite des propriétés de la classe de base ajoute de nouvelles propriétés à la classe de base ne modifie pas la classe de base classe dérivée propriétés classe de base + nouvelles propriétés permet de développer de nouveaux outils en se basant sur les acquis de la classe de base

Remarque L h itage est pas li it à u seul i eau une classe dérivée peut devenir classe de base pour une autre classe plusieu s lasses peu e t t e d i es d u e e lasse

Mise e œu e de l h itage Classe de base

On ajoute une information à cette classe : la couleur du point Classe dérivée Programme principal

Utilisatio des dérivée e es d u e lasse de ase da s u e lasse Quand on appelle p.affiche() pour un objet de type pointcol, cette fonction est pas d fi ie da s la lasse e fa t poi t ol C est la fo tio affi he de la lasse pa e t poi t ui est appel e C est la fo tio affi he de la lasse pa e t poi t ui est appel e

Utilisation pa tie o u edu p o l e classe de base dérivée 1 dérivée 2 dérivée 3 dérivée 4 solution 1 solution 2 solution 3 solution 4 gain de temps en programmation pas de pénalité de temps pour les fonctions non utilisées dans la classe dérivée, car non i lues lo s de l ditio de lie pe te de te ps lo s d appel de fo tio s i i u es

Les espaces de nommage

Mot clé : namespace zones de déclaration permettant de délimiter la recherche des noms des identificateurs par le compilateur But regrouper les identificateurs logiquement pour éviter les conflits de nom e t e plusieu s pa ties d u e p ojet Remarque par défaut, C++ utilise un espace de nommage (namespace std) de portée globale dans lequel il doit y avoir aucun conflit de nom D fi itio d u espa e de o age

Exemple de projet

MOL++ MateriOL++ simula+ MPISOL++ PMOL++ materials MOL++ MateriOL++ MPISOL++ PMOL++ materials tests gui doc

définition de la classe vector

Méthodes de la classe vector

Utilisation de la classe vector

Documentation en ligne & héritage

Références P se tatio t l ha gea le à l ad esse : http://www.lpmm.univ-metz.fr/collard/doc/introduction a la POO.pdf Cours complet téléchargeable à l ad esse : http://www.lpmm.univ-metz.fr/collard/doc/programmation Orientee objet et C++.v1.pdf