01-programmationorienteeobjet

Upload: mekdis

Post on 03-Jun-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/12/2019 01-ProgrammationOrienteeObjet

    1/56

    Licence Sciences, Technologies, Sant Universit de Perpignan Via DomitiaSemestre 5 (L3) - Mention Mathmatiques, Informatique Anne universitaire 2011/2012

    Programmation Oriente Objet

    Introduction la Programmation Oriente Objet... et son application au C++

    Guillaume [email protected]

    Universit de PerpignanVia Domitia

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 1/36

    http://localhost/var/www/apps/conversion/tmp/scratch_8/[email protected]://localhost/var/www/apps/conversion/tmp/scratch_8/[email protected]
  • 8/12/2019 01-ProgrammationOrienteeObjet

    2/56

    Prrequis et organisation du cours

    Prrequis: bonne connaissance enprogrammation Cet enalgorithmique

    Organisation:

    9h de cours

    6 sances de 1.5h 21h de TD 14 sances de 1.5h

    valuation:

    20%

    projet de programmation (seul ou en binme, vers octobre/novembre) 80% examen final (quelque part en dcembre/janvier)

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 2/36

  • 8/12/2019 01-ProgrammationOrienteeObjet

    3/56

    Rappels lmentaires de langage C la fonction principalemain

    / / h el lo . c

    / / I nc l us i on d es f ic h ie rs d e nt et es#include / / g e s t i on d es e n tr e es / s o r t ie s#include / / u t i l is a t io n d e s f o n c ti o ns m a t he m a ti q u es

    / / D e fi n it io n d e l a f on c ti on p r in c ip a lein tmain ( void ){

    printf (" H el lo w or ld ! \ n"); / / A f f ic h ag e d e " H e ll o w or ld ! "return 0; / / p ar c on ve nt io n , " r e tu rn 0 " i n di qu e q u au cu ne

    / / e rr eu r n es t s u rv en ue}

    $ > g cc - Wa ll - o h el lo h el lo . c

    $ > . / he ll o

    H el lo w or ld !

    Remarques:

    la fonctionmainest le point dentre du programme elle estindispensable

    les instructions sont excutes dans lordre dapparition dans le programme

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 3/36

  • 8/12/2019 01-ProgrammationOrienteeObjet

    4/56

    Rappels lmentaires de langage C dclaration dune variable

    / / r ap pe l - v a ri a b le . c

    #include

    in tmain ( void ){

    in t x1 ; / / D e cl a ra ti o n d e l e nt ie r x 1in t x2 = 18; / / D e cl a ra ti o n e t i n it i al i sa t io n de l e nt ie r x 2x1 = 17; / / A ff ec ta ti on de 17 a l en ti er x

    printf (" Ma v al eu r e nt ie re x 1 v au t : % d .\ n ",x1 );printf (" Ma v al eu r e nt ie re x 2 v au t : % d .\ n ",x2 );

    return 0;}

    $ > g cc - W al l - o v a ri ab l es v a ri ab l es . c

    $ > . / r ap pe l - v a ri a b leM a v al eu r e nt ie re x 1 v au t : 1 7.M a v al eu r e nt ie re x 2 v au t : 1 8.

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 4/36

  • 8/12/2019 01-ProgrammationOrienteeObjet

    5/56

    Rappels lmentaires de langage C fonction et passage de paramtres

    / / f o n ct i o ns . c

    #include

    in taddition_v1 ( in t a , in t b) // c = a + b{ in t c; c = a + b; return c; }

    voidaddition_v2 ( in t a , in t b , in t c) // c = a + b

    { c = a + b; }

    voidaddition_v3 ( in t a , in t b , in t *c) // c = a + b{ *c = a + b; }

    in tmain ( void ){

    in t x1 = 17 , x2 = 18;in t c_v1 = addition_v1 (x1 , x2 ); // x1 et x2 s on t p as se s p ar v al eu rsin t c_v2 = 0; addition_v2 (x1 ,x2 , c_v2 ); // c _v 2 es t pa ss e pa r va le urin t c_v3 ; addition_v3 (x1 ,x2 ,& c_v3 ); // c _v 3 e st p as se p ar a dr es se

    printf (" Fi na le me nt c _v 1 = % d, c_v 2 = % d et c_ v3 = % d.\ n" ,c_v1 , c_v2 , c_v3 );

    return 0;}

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 5/36

  • 8/12/2019 01-ProgrammationOrienteeObjet

    6/56

    Rappels lmentaires de langage C fonction et passage de paramtres

    / / f o n ct i o ns . c

    / / . ..in tmain ( void ){

    in t x1 = 17 , x2 = 18;in t c_v1 = addition_v1 (x1 , x2 ); // x1 et x2 s on t p as se s p ar v al eu rsin t c_v2 = 0; addition_v2 (x1 ,x2 , c_v2 ); // c _v 2 es t pa ss e pa r va le urin t c_v3 ; addition_v3 (x1 ,x2 ,& c_v3 ); // c _v 3 e st p as se p ar a dr es se

    printf (" Fi na le me nt c _v 1 = % d, c_v 2 = % d et c_ v3 = % d.\ n" ,c_v1 , c_v2 , c_v3 );

    return 0;}

    $ > g cc - W al l - o f o nc ti o ns f o nc ti o ns . c

    $ > . / f o n ct i o nsF in al em en t c _v 1 = 35 , c _v 2 = 0 et c_ v3 = 35.

    Remarque:

    une variable passe par valeur, nest pas modifie lextrieure de la fonction utilisation du passage par adresse (&c_v3)

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 5/36

  • 8/12/2019 01-ProgrammationOrienteeObjet

    7/56

    Et maintenant la Programmation Oriente Objet et le C++

    Pour apprendre le langage C++, le point essentiel consiste se concentrer sur les

    concepts et viter de se perdre dans les dtails techniques.B. Stroustrup,Le langage C++ - Edition spciale- 1.1.2 (2000)

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 6/36

  • 8/12/2019 01-ProgrammationOrienteeObjet

    8/56

    Plan du cours

    1.Pourquoi la programmation oriente objet ?

    2.Principes fondamentaux de la programmation oriente objet

    3.lments de modlisation dun programme orient objet

    4.Quelques lments importants du C++

    5.Premiers exemples de programmes C++

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 7/36

    Pourquoi la programmation oriente objet ?

  • 8/12/2019 01-ProgrammationOrienteeObjet

    9/56

    Pourquoi la programmation oriente objet ?

    Plan du cours

    1.Pourquoi la programmation oriente objet ?

    2.Principes fondamentaux de la programmation oriente objet

    3.lments de modlisation dun programme orient objet

    4.Quelques lments importants du C++

    5.Premiers exemples de programmes C++

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 8/36

    Pourquoi la programmation oriente objet ?

  • 8/12/2019 01-ProgrammationOrienteeObjet

    10/56

    Pourquoi la programmation oriente objet ?

    Quest ce que la programmation oriente objet ?

    Programmation Oriente Objet(POO) : paradigme de programmationinformatique

    labor par Alan Kay, dans les annes 70

    dfinition et interactions de briques logicielles objets

    Un objet = un concept, une ide ou une entit du monde physique

    par exemple: une voiture, un tudiant, ...

    possde une structure interne et un comportement

    Quelques langages objets: C++, Java, Ada, PHP, Python, ...

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 9/36

    Pourquoi la programmation oriente objet ?

  • 8/12/2019 01-ProgrammationOrienteeObjet

    11/56

    q p g j

    Pourquoi la programmation oriente objet ?

    Depuis plusieurs annes :

    le matriel de moins en moins cher, et de plus en plus puissant

    le dveloppement dapplications de plus en plus performantes et complexes

    Lecot des dpenses informatiques principalementcot des logiciels

    program

    matio

    nproced

    urale

    co

    utde

    lapplication

    taille de lapplication

    cot du logiciel de plus en plus lev

    en programmation procdurale : cot du logiciel croit demanire exponentielle avec la complexit de lapplication

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 10/36

    Pourquoi la programmation oriente objet ?

  • 8/12/2019 01-ProgrammationOrienteeObjet

    12/56

    Pourquoi la programmation oriente objet ?

    Depuis plusieurs annes :

    le matriel de moins en moins cher, et de plus en plus puissant

    le dveloppement dapplications de plus en plus performantes et complexes

    Lecot des dpenses informatiques principalementcot des logiciels

    program

    matio

    nproced

    urale

    coutde

    lapplication

    taille de lapplication

    cot du logiciel de plus en plus lev

    en programmation procdurale : cot du logiciel croit demanire exponentielle avec la complexit de lapplication

    Objectifs de la programmation oriente objet:

    diminuer le cot du logiciel

    augmenter sa dure de vie, sa rutilisabilit et sa facilit de maintenance

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 10/36

    Pourquoi la programmation oriente objet ?

  • 8/12/2019 01-ProgrammationOrienteeObjet

    13/56

    Pourquoi la programmation oriente objet ?

    Programmation oriente objet : modlisation directe dobjets du monde rels

    de trs nombreux reprsentants dun tout petit nombre de concepts diffrents

    exploiter cette redondance petites entits informatiques

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 11/36

    Pourquoi la programmation oriente objet ?

  • 8/12/2019 01-ProgrammationOrienteeObjet

    14/56

    Pourquoi la programmation oriente objet ?

    Programmation oriente objet : modlisation directe dobjets du monde rels

    de trs nombreux reprsentants dun tout petit nombre de concepts diffrents

    exploiter cette redondance petites entits informatiques

    Rduction de limpact dune modification/extension dune partie dun programme

    confinement dans de petites units qui ont peu de contact avec lextrieure =objets

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 11/36

    Pourquoi la programmation oriente objet ?

  • 8/12/2019 01-ProgrammationOrienteeObjet

    15/56

    Pourquoi la programmation oriente objet ?

    Finalement, un programme objet = production dun ensemble dobjets sparation de linterface et de limplantation de ce que fait lobjet

    accs un objet (et ces donnes) se fait uniquement via linterface de haut (fournitaux clients, par exemple)

    progra

    mmati

    onori

    enteeobjet

    coutdel

    application

    taille de lapplication

    Inversion de la courbe dvolution du cot du logiciel

    le dveloppement dune petite application gros effort par contre, son extension effort faible

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 12/36

    Principes fondamentaux de la programmation oriente objet

  • 8/12/2019 01-ProgrammationOrienteeObjet

    16/56

    Plan du cours

    1.Pourquoi la programmation oriente objet ?

    2.Principes fondamentaux de la programmation oriente objet

    3.lments de modlisation dun programme orient objet

    4.Quelques lments importants du C++

    5.Premiers exemples de programmes C++

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 13/36

    Principes fondamentaux de la programmation oriente objet

  • 8/12/2019 01-ProgrammationOrienteeObjet

    17/56

    La notion dobjet

    Un objet = un concept, une ide ou une entit du monde physique voiture, personne, tudiant, animal, fentre graphique, forme gomtrique, ...

    Dans un programme, un objet sapparente une variable

    Un objet est caractris par trois notions

    lesattributs: donnes de lobjet / variable quil contient et reprsentant son tat

    lesmthodes(fonctions membres) : caractrise son comportement, lensemble desactions que lobjet peut ralsier, accs/modification des donnes

    uneidentit, qui permet de le distinguer de manire unique des autres objets,indpendamment de son tat

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 14/36

    Principes fondamentaux de la programmation oriente objet

  • 8/12/2019 01-ProgrammationOrienteeObjet

    18/56

    La notion de classe

    Une classe = lastructure dun objet elle dfinit son type

    dclaration de lensemble des entits qui composeront un objet

    Un objet est donc issu dune classe on dit quun objet est une instance (ou une occurrence) dune classe

    on parle dinstanciationde classe

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 15/36

    Principes fondamentaux de la programmation oriente objet

  • 8/12/2019 01-ProgrammationOrienteeObjet

    19/56

    La notion de classe

    Une classe = lastructure dun objet elle dfinit son type

    dclaration de lensemble des entits qui composeront un objet

    Un objet est donc issu dune classe on dit quun objet est une instance (ou une occurrence) dune classe

    on parle dinstanciationde classe

    Une classe est compose de deux parties :

    les attributs (donnes membres)

    les mthodes (fonctions membres)

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 15/36

    Principes fondamentaux de la programmation oriente objet

  • 8/12/2019 01-ProgrammationOrienteeObjet

    20/56

    Exemple de classe et dobjet

    Dfinition dune classePersonne

    (on verra plus tard le formalisme utilis ici)

    dfinition dun typePersonne

    regroupe les proprits communues aux

    personnes : caractristiques (attributs) etcomportement (mthodes)

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 16/36

    Principes fondamentaux de la programmation oriente objet

  • 8/12/2019 01-ProgrammationOrienteeObjet

    21/56

    Exemple de classe et dobjet

    Dfinition dune classePersonne

    (on verra plus tard le formalisme utilis ici)

    dfinition dun typePersonne

    regroupe les proprits communues aux

    personnes : caractristiques (attributs) etcomportement (mthodes)

    Instanciation dun objet de typePersonne

    affectation dune valeur chaque attribut possibilit dagir, via les mthodes

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 16/36

    Principes fondamentaux de la programmation oriente objet

  • 8/12/2019 01-ProgrammationOrienteeObjet

    22/56

    Les trois grands principes de la POO

    Encapsulation rassembler les donnes et mthodes au sein dune structure

    en cachant limplantation de lobjet ( lutilisateur, au moins) protection de laccs aux donnes mcanisme daccs / modification

    augmentation la scurit dune application

    facilit de maintenance de lapplication

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 17/36

    Principes fondamentaux de la programmation oriente objet

  • 8/12/2019 01-ProgrammationOrienteeObjet

    23/56

    Les trois grands principes de la POO

    Encapsulation rassembler les donnes et mthodes au sein dune structure

    en cachant limplantation de lobjet ( lutilisateur, au moins) protection de laccs aux donnes mcanisme daccs / modification

    augmentation la scurit dune application

    facilit de maintenance de lapplication

    Hritage permettre la cration dune classe partir dune classe existante la classedrive(fille) contientsous certaines conditionsles attributs et les

    mthodes de la classemre(super-classe)

    permet ainsi la rutilisation de code

    plusieurs types dhritage : public, protg, ou priv

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 17/36

    Principes fondamentaux de la programmation oriente objet

  • 8/12/2019 01-ProgrammationOrienteeObjet

    24/56

    Les trois grands principes de la POO

    Encapsulation rassembler les donnes et mthodes au sein dune structure

    en cachant limplantation de lobjet ( lutilisateur, au moins) protection de laccs aux donnes mcanisme daccs / modification

    augmentation la scurit dune application

    facilit de maintenance de lapplication

    Hritage permettre la cration dune classe partir dune classe existante la classedrive(fille) contientsous certaines conditionsles attributs et les

    mthodes de la classemre(super-classe)

    permet ainsi la rutilisation de code

    plusieurs types dhritage : public, protg, ou priv

    Polymorphisme permettre de redfinir dans une classe drive les mthodesdont elle hrite de sa classe mre

    une mme mthode possde alors plusieurs formes

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 17/36

    lments de modlisation dun programme orient objet

  • 8/12/2019 01-ProgrammationOrienteeObjet

    25/56

    Plan du cours

    1.Pourquoi la programmation oriente objet ?

    2.Principes fondamentaux de la programmation oriente objet

    3.lments de modlisation dun programme orient objet

    4.Quelques lments importants du C++

    5.Premiers exemples de programmes C++

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 18/36

    lments de modlisation dun programme orient objet

  • 8/12/2019 01-ProgrammationOrienteeObjet

    26/56

    UML - Unified Modeling Language

    UML = langage de modlisation graphique base de pictogrammes

    annes 90 : fusion des langages de modlisation objet : Booch, OMT, OOSE

    apparition dans le cadre de la conception oriente objet

    ensemble de diagrammes (de classes, dobjets, ...), permettant de modliser les

    aspects statiques et dynamiques dune application 1997 : normalisation par lOMG (Object Management Group) 05/2010 : UML 2.3

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 19/36

    lments de modlisation dun programme orient objet

  • 8/12/2019 01-ProgrammationOrienteeObjet

    27/56

    UML - Unified Modeling Language

    UML = langage de modlisation graphique base de pictogrammes

    annes 90 : fusion des langages de modlisation objet : Booch, OMT, OOSE

    apparition dans le cadre de la conception oriente objet

    ensemble de diagrammes (de classes, dobjets, ...), permettant de modliser les

    aspects statiques et dynamiques dune application 1997 : normalisation par lOMG (Object Management Group) 05/2010 : UML 2.3

    Dans le cadre de ce cours : utilisation principalement desdiagrammes de classes

    reprsenter les classes dun systme et les interactions entre elles

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 19/36

    lments de modlisation dun programme orient objet

  • 8/12/2019 01-ProgrammationOrienteeObjet

    28/56

    Reprsentation dune classe

    Reprenons la classePersonneprcdente

    encapsulation dfinition des mthodes accessibles lextrieure de la classe= mthodespubliques

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 20/36

    lments de modlisation dun programme orient objet

  • 8/12/2019 01-ProgrammationOrienteeObjet

    29/56

    Reprsentation dune classe

    Reprenons la classePersonneprcdente

    encapsulation dfinition des mthodes accessibles lextrieure de la classe= mthodespubliques

    Visibilit des attributs / mthodes

    privs

    # protgs

    + publics

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 20/36

    lments de modlisation dun programme orient objet

  • 8/12/2019 01-ProgrammationOrienteeObjet

    30/56

    Relation dhritage

    Intrt de lhritage :

    transfertdes proprits dune classe mre vers lesclasses filles

    gnralisation: factorisation de classes en regroupantdes proprits communes

    spcialisation: ajout dattributs et mthodes

    Hritage public en C++ le plus utilis

    + accessibles par tous

    accessibles de la classe elle-mme uniquement

    # accessibles de la classe elle-mme et des classesdrives

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 21/36

    lments de modlisation dun programme orient objet

    R l i d i i d i i d i

  • 8/12/2019 01-ProgrammationOrienteeObjet

    31/56

    Relation dassociation, de composition et dagrgation

    Association exprime une liaison smantique bidirectionnelle entre deux classes

    Les cardinalits expriment le nombre dinstances associes un livre appartient une et une seul personne

    une personne possde aucun livre ou plusieurs

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 22/36

    lments de modlisation dun programme orient objet

    R l ti d i ti d iti t d ti

  • 8/12/2019 01-ProgrammationOrienteeObjet

    32/56

    Relation dassociation, de composition et dagrgation

    Agrgation/Composition: relation entre classes, indiquant que les instances dune

    classe sont les composants dune autre

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 22/36

    lments de modlisation dun programme orient objet

    R l ti d i ti d iti t d ti

  • 8/12/2019 01-ProgrammationOrienteeObjet

    33/56

    Relation dassociation, de composition et dagrgation

    Agrgation/Composition: relation entre classes, indiquant que les instances dune

    classe sont les composants dune autre

    Agrgation exprime une relation decomposition faible

    les objets agrgs ont une dure de vieindpendantede celle de lagrgat

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 22/36

    lments de modlisation dun programme orient objet

    R l ti d i ti d iti t d ti

  • 8/12/2019 01-ProgrammationOrienteeObjet

    34/56

    Relation dassociation, de composition et dagrgation

    Agrgation/Composition: relation entre classes, indiquant que les instances dune

    classe sont les composants dune autre

    Agrgation exprime une relation decomposition faible

    les objets agrgs ont une dure de vieindpendantede celle de lagrgat

    Composition exprime une relation decomposition forte

    les objets agrgs ont une dure de viedpendantede celle de lagrgat

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 22/36

    Quelques lments importants du C++

    Plan du cours

  • 8/12/2019 01-ProgrammationOrienteeObjet

    35/56

    Plan du cours

    1.Pourquoi la programmation oriente objet ?

    2.Principes fondamentaux de la programmation oriente objet

    3.lments de modlisation dun programme orient objet

    4.Quelques lments importants du C++

    5.Premiers exemples de programmes C++

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 23/36

    Quelques lments importants du C++

    Petite histoire du C++

  • 8/12/2019 01-ProgrammationOrienteeObjet

    36/56

    Petite histoire du C++

    Annes 80 : mise au point du langage C++ parBjarne Stroustrup(Bell labs)

    Extension du langage C, mis au point par Ritchie et Kernighan (annes 70)

    ajout de lapproche oriente objet C++ C with classes(C avec des classes)

    1998 : normalisation par lISO (International Organization for Standardization)

    dernire normalisation : 2003

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 24/36

    Quelques lments importants du C++

    Fonctionnalits introduites par C++

  • 8/12/2019 01-ProgrammationOrienteeObjet

    37/56

    Fonctionnalits introduites par C++

    Les oprateursnewet deletepour la gestion dallocation mmoire

    Les types de donnes bool(boolen), etstring(chane de caractres)

    Le mot cl constpour dfinir des constantes

    Lesrfrences

    Les paramtres par dfaut dans les fonctions

    Les classes, ainsi que tout ce qui y est li (hritage, fonctions membres, ...)

    Les rfrentiels lexicaux (espace de noms) et loprateur de rsolution ::

    La surcharge des oprateurs

    Les patrons (outemplates)

    La gestion dexceptions

    ...

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 25/36

    Quelques lments importants du C++

    Dfinition dentits constantes avec le mot cl const

  • 8/12/2019 01-ProgrammationOrienteeObjet

    38/56

    Dfinition d entits constantes avec le mot cl const

    En C++, le mot cl constpermet lutilisateur de dfinir des entits constantes(fonctions/variables)

    leur valeur ne pourra pas tre modifie directement

    elles doivent treinitialises la dclaration

    exemple: la plupart des paramtres de fonctions sont lus, mais pas modifis

    c o ns t i nt model = 90; / / m od el e st u ne c on st an te = 90

    c o ns t i nt v [ ] = { 1 ,2 , 3 ,4 }; / / v [i ] e st u ne c on st an te

    c o ns t i nt x; / / E RR EU R : x d oi t e tr e i ni t ia l is e

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 26/36

  • 8/12/2019 01-ProgrammationOrienteeObjet

    39/56

    Quelques lments importants du C++

    Les pointeurs et les constantes

  • 8/12/2019 01-ProgrammationOrienteeObjet

    40/56

    Les pointeurs et les constantes

    Le mot clconstpeut tre utilis pour :

    dclarer un pointeur sur un objet constant (int const * xouconst int * x)

    dclarer un pointeur constant sur un objet (int * const x)

    Exemple 1: pointeur vers une valeur constante

    c o ns t c h ar * ms g = " e x em pl e d e m es sa ge c o ns ta nt " ;

    * ms g = E ; // E RR EU R : m o di f ic a ti o n i nt er di te , c ar l a v al eu r p o in te e n e// peut etre modifiee

    ms g = "modiciation"; / / O K : m od if ic at io n de l ob je t p oi nt e , et n on de// sa valeur

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 27/36

    Quelques lments importants du C++

    Les pointeurs et les constantes

  • 8/12/2019 01-ProgrammationOrienteeObjet

    41/56

    Les pointeurs et les constantes

    Le mot clconstpeut tre utilis pour :

    dclarer un pointeur sur un objet constant (int const * xouconst int * x)

    dclarer un pointeur constant sur un objet (int * const x)

    Exemple 2: pointeur constant vers un objet non constant

    char * const ms g = " e xe m pl e d e p o i nt e ur c o n st a nt " ;

    ms g = "Test"; / / E RR EU R : m od i fi ca t io n i nt er di t , c ar l o bj et s ur l eq ue l// le pointeur pointe ne peut pas etre modifie

    * ms g = E ; / / O K : l e c o nt en u de l ob je t p eu t e t re m od if ie

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 27/36

    Quelques lments importants du C++

    Les pointeurs et les constantes

  • 8/12/2019 01-ProgrammationOrienteeObjet

    42/56

    Les pointeurs et les constantes

    Le mot clconstpeut tre utilis pour :

    dclarer un pointeur sur un objet constant (int const * xouconst int * x)

    dclarer un pointeur constant sur un objet (int * const x)

    Remarque 1: Ladresse dune variable peut tre attribue un pointeur de

    constante. Par contre, ladresse dune constante ne peut pas tre attribue unpointeur sur lequel aucune restriction ne sapplique (cette opration autoriserait lechangement de la valeur de lobjet).

    in t x = 1;c o ns t i nt y = 2;

    c o ns t i nt * pt 1 = &x; // OKc o ns t i nt * pt 2 = &y; // OK

    in t * pt 3 = &y; / / ER RE UR : on p ou rr ai t si no n mo di fi er y (* p t3 = 17 )

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 27/36

    Quelques lments importants du C++

    Les pointeurs et les constantes

  • 8/12/2019 01-ProgrammationOrienteeObjet

    43/56

    Les pointeurs et les constantes

    Le mot clconstpeut tre utilis pour :

    dclarer un pointeur sur un objet constant (int const * xouconst int * x)

    dclarer un pointeur constant sur un objet (int * const x)

    Remarque 2: Un pointeur dfini comme pointeur sur une variableconstne peut

    pas tre utilis pour modifier une variable, mme si ceux-ci peuvent pointer surdes variables non-const.

    in t x = 17;c o ns t i nt * pt x = &x;

    * pt x = 18; / / E RR EU R : on ne p eu t m od if ie r l ob je t p oi nt e p ar ptx ,

    // bien que x soit modifiable

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 27/36

    Quelques lments importants du C++

    Les rfrences en C++

  • 8/12/2019 01-ProgrammationOrienteeObjet

    44/56

    Les rfrences en C++

    En C++, unerfrncepermet de dfinir unaliassur une variable, fournit uneautre nom pour une variable :X&signifierfrence X.

    Une rfrence sutilise comme une variable. Pour garantir sa validit, elle doit treinitialise.

    in t x = 17;in t & ref1 = x; / / OK : re f1 et x fo nt ma in te na nt r ef er en ce au me me in t

    in t & ref2 ; / / E RR EU R : r ef 2 d oi t e tr e i ni t ia l is e

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 28/36

    Quelques lments importants du C++

    Les rfrences en C++

  • 8/12/2019 01-ProgrammationOrienteeObjet

    45/56

    En C++, unerfrncepermet de dfinir unaliassur une variable, fournit uneautre nom pour une variable :X&signifierfrence X.

    Une rfrence sutilise comme une variable. Pour garantir sa validit, elle doit treinitialise.

    in t x = 17;in t & ref1 = x; / / OK : re f1 et x fo nt ma in te na nt r ef er en ce au me me in t

    in t & ref2 ; / / E RR EU R : r ef 2 d oi t e tr e i ni t ia l is e

    Les rfrences sont principalement utilises pour la spcification des argumentset des valeurs renvoyes pour les fonctions

    in t fo o ( in t & x){ x = x + 1; }

    in tmain ( void ){

    in t x = 16;fo o (x); // a la sortie de foo : x = 17

    }

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 28/36

    Quelques lments importants du C++

    Les rfrences et les constantes

  • 8/12/2019 01-ProgrammationOrienteeObjet

    46/56

    Une rfrence non-constante de typeT&doit tre initialise avec un objetnon-constant de typeT(une variable, par exemple).

    c o ns t i nt x = 17;in t y = 2 01 1;

    in t & ref1 = x; / / E RR EU R : x n es t p as u ne va ri ab le non - c o ns ta nt ein t & ref2 = 17; / / E RR EU R : 17 n es t p as un ob je t non - c o ns ta nt

    in t & ref3 = y; / / OK : y e st un e v ar ia bl e non - c o ns ta nt e de ty pe in t

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 29/36

    Quelques lments importants du C++

    Les rfrences et les constantes

  • 8/12/2019 01-ProgrammationOrienteeObjet

    47/56

    Une rfrence non-constante de typeT&doit tre initialise avec un objetnon-constant de typeT(une variable, par exemple).

    c o ns t i nt x = 17;in t y = 2 01 1;

    in t & ref1 = x; / / E RR EU R : x n es t p as u ne va ri ab le non - c o ns ta nt ein t & ref2 = 17; / / E RR EU R : 17 n es t p as un ob je t non - c o ns ta nt

    in t & ref3 = y; / / OK : y e st un e v ar ia bl e non - c o ns ta nt e de ty pe in t

    Une rfrence constante (ouconst-rfrence) de typeconst T&peut treinitialise avec un objet non-constant de type Tou constant de typeconst T.

    c o ns t i nt x = 17;

    in t y = 2 01 1;

    c o ns t i nt & ref1 = x; / / O K : x e st p as u ne v ar ia bl e c on st an te ( c on st i nt )c o ns t i nt & ref2 = 17; // OK : 17 est pas un o bj et c on st an t

    c o ns t i nt & ref3 = y; / / O K : y e st u ne v ar ia bl e n on - c o ns ta nt e de t yp e i n t

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 29/36

    Premiers exemples de programmes C++

    Plan du cours

  • 8/12/2019 01-ProgrammationOrienteeObjet

    48/56

    1.Pourquoi la programmation oriente objet ?

    2.Principes fondamentaux de la programmation oriente objet

    3.lments de modlisation dun programme orient objet

    4.Quelques lments importants du C++

    5.Premiers exemples de programmes C++

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 30/36

    Premiers exemples de programmes C++

    Modlisation dun point du plan 2D

  • 8/12/2019 01-ProgrammationOrienteeObjet

    49/56

    On souhaite modliser unpointdu plan 2D un point est caractris par ses coordonnes (x,y) dans le plan

    et il peut tre affich (au moins ses coordonnes, dans un premier temps) ettranslat.

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 31/36

    Premiers exemples de programmes C++

    Modlisation dun point du plan 2D

  • 8/12/2019 01-ProgrammationOrienteeObjet

    50/56

    On souhaite modliser unpointdu plan 2D un point est caractris par ses coordonnes (x,y) dans le plan

    et il peut tre affich (au moins ses coordonnes, dans un premier temps) ettranslat.

    On doit pouvoir galement : linitialiser,

    et accder / modifier ses coordonnes.

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 31/36

    Premiers exemples de programmes C++

    Modlisation dun point du plan 2D

  • 8/12/2019 01-ProgrammationOrienteeObjet

    51/56

    On souhaite modliser unpointdu plan 2D un point est caractris par ses coordonnes (x,y) dans le plan

    et il peut tre affich (au moins ses coordonnes, dans un premier temps) ettranslat.

    On doit pouvoir galement : linitialiser,

    et accder / modifier ses coordonnes.

    Remarque

    attributs = privs

    mthodes = publiques

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 31/36

    Premiers exemples de programmes C++

    Dclaration de la classe Point2D

  • 8/12/2019 01-ProgrammationOrienteeObjet

    52/56

    / / P o in t 2 D . h pp

    #ifndef __POINT2D_HPP__

    #define __POINT2D_HPP__

    class Point2D{

    private :

    float x , y;

    public :

    void init2d ( float , float );void translate2d ( float , float );

    void print ( void );

    float getX ( void );float getY ( void );

    void setX ( float );void setY ( float );

    }; // < -- -- A NE PAS O UB LI ER !!

    #endif // __POINT2D_HPP__

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 32/36

    Premiers exemples de programmes C++

    Dfinition de la classe Point2D

  • 8/12/2019 01-ProgrammationOrienteeObjet

    53/56

    / / P o in t 2D . c p p

    #include / / i os t re am - > g es ti on d es e nt re es - s o rt ie s#include "Point2D.hpp"

    void Point2D :: init2d ( float _x , float _y ){x = _x ;y = _y ;

    }

    void Point2D :: translate2d ( float _x , float _y ){x += _x ;y += _y ;

    }

    void Point2D :: print ( void ){st d :: cout

  • 8/12/2019 01-ProgrammationOrienteeObjet

    54/56

    Dclaration de deux points

    un pointstatique (2.5,1.5)

    un pointdynamique (17.3,15.1)

    / / c 1 - e x pl 1 . c pp

    #include #include "Point2D.hpp"

    in tmain ( void ){

    P o in t 2D a; Point2D * b = n ew P o in t 2D () ; // a ll o ca t io n d yn a mi qu e d e b

    a. init2d (2.5,1.5); b -> init2d (17.3,15.1);st d :: cout translate2d (1,1);st d :: cout

  • 8/12/2019 01-ProgrammationOrienteeObjet

    55/56

    Utilisation du compilateur GNU C++ (g++ 4.5) compilation spare

    idalement (notamment dans vos TP/projet), utilisation dun makefile

    $ > g + + - c P oi nt 2D . c pp$ > g + + - c c1 - e x pl 1 . cp p$ > g + + - o c1 - e x pl 1 c1 - e x pl 1 . o P oi nt 2D . o

    $ > . / c1 - e x p l 1Avant translate(1,1)- - > P o in t 2D ( 2 .5 , 1 . 5 )- - > P o in t 2D ( 1 7. 3 , 1 5 .1 )Apres translate(1,1)

    - - > P o in t 2D ( 3 .5 , 2 . 5 )- - > P o in t 2D ( 1 8. 3 , 1 6 .1 )

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 35/36

  • 8/12/2019 01-ProgrammationOrienteeObjet

    56/56

    Questions ?

    Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 36/36