Cours-Gratuit
  • Accueil
  • Blog
  • Cours informatique
home icon Cours gratuits » Cours informatique » Cours programmation » Cours C++

Programmation orientée objet Langage C++

Programmation orientée objet Langage C++
Participez au vote ☆☆☆☆☆★★★★★

Programmation orientée objet

2e année

Sabeur ELKOSANTINI

Bibliographie

) Livres

?   Michel Divay , « Java et la programmation orientée objet », Dunod eds, 2006.

?   Renaud Pawlak , Jean-Philippe Retaillé , Lionel Seinturier, « Programmation orientée aspect pour Java / J2EE », Eyrolles eds, 2004.

?   Bruce Eckel, « Thinking in Java », 2nd revision, 2000 (Disponible sur internet).

) Autres supports de cours

?   Cours de Jean-Michel DOUDOUX :

?   Cours de Mickaël BARON :

Plan

? Chapitre 1 : Introduction

? Chapitre 2 : Le concept d’objets

? Chapitre 3 : POO avec C++

? Chapitre 4 : … et avec Java Plan

? Chapitre 1 : Introduction

? Chapitre 2 : Le concept d’objets

? Chapitre 3 : POO avec C++

? Chapitre 4 : … et avec Java


) Historique de la POO

?   Les années  60 : le langage Simula-67, langage de simulation informatique

9  Les premiers pas de la programmation orientée objet

?   Les années  70 : SmallTalk , apparition des concepts de base :

9  objet, encapsulation, polymorphisme, héritage , etc.

?   Les années  80 : La Montée en puissance de l’orienté objet

9  Apparition de nouveaux langages : Objective C ,C++, Eiffel, Common Lisp Object System

) Historique de la POO

?   Les années  90 : l’âge d'or de l'extension de la POO :

9  Standardisation de C++

9  Apparition du langage de programmation Java

?   Depuis, évolution de l’orientée objet:

9  Analyse par objet (AOO).

9  La conception orientée objet COO

9  Les bases de données orientées objets (SGBDOO)

) Programmation procédurale Vs Programmation OO

?   Programmation procédurale (C, Cobol, Fortran, Pascal, etc.) :

9   Programmes structurés en procédures et fonctions,

9   Des problèmes en cas de modification de la structures des données,

9   Chaque fonction ou procédure résout  une partie du problème,

?   Programmation OO (Java, C++, C#, Delphi, etc.):

9   Unité logique : objet,

9   Programmation par « composants »,

9   Facilité de l’évolution du code,

9   Améliorer la conception et la maintenance des grands systèmes,

) Programmation par Objets ?

?   Unité logique : l’objet

?   Objet est défini par :

?   Une identité : permet de distinguer un objet d’un autre objet.

?   Un état : représenté par des attributs (variables) qui stockent des valeurs.

?   Un comportement : défini par des méthodes (procédures) qui modifient des états. 

) Le langage de programmation C++

?   Développé dans les laboratoires d’AT&T Bell au début des années 1980 par Bjarne Stroustrup.

?   C++ est un langage (hybride) : à typage fort, compilé et orienté objet

C++ = C + typage fort + objets

Un langage hybride ?!U n langage compilé ?!

Un langage à typageObjets ??

fort ?!

Quelles différences avec C ??


Plan

? Chapitre 1 : Introduction

? Chapitre 2 : Le concept d’objets

? Chapitre 3 : POO avec C++

? Chapitre 4 : … et avec Java

) Notion d’objet

? Un objet est défini à la fois par des informations : données ou attributs ou variables d’instances ; et des comportements : traitements ou méthodes ou opérations.

) Notion de classe

?   Lorsque des objets ont les mêmes attributs et comportements : ils sont regroupés dans une famille appelée : Classe

?   Les objets appartenant à celle-ci sont les instances de cette classe.

Æ L’instanciation est la création d’un objet d’une classe.

Moto

Couleur : noir

Vitesse_limite : 200

Accélérer Freiner

Deux instances d’une même classe peuvent avoir des attributs avec des

valeurs différentes et mais partagent les mêmes méthodes.

) Classe, objet et instanciation

Comment les objets communiquent-

ils ?

Fenêtre_principale                       Fenêtre_secondaire

Æ Par …..

Un ……… équivaut à un appel d’une méthode.

) L’encapsulation et la visibilité des attributs

?   De point de vue utilisation, un objet est une boite noire qui offre un certain nombre de méthodes permettant d’interagir avec lui.

?   Peu importe comment il est construit en interne, la seule chose nécessaire pour pouvoir utiliser un objet est de savoir ce qu’il peut faire et surtout comment lui demander :

? Exemple :un poste de TV est une « boite noire » ayant pour interface : un écran, des HP et une télécommande. Pour changer de chaine, il suffit de ………… ………………… .Peu importe ce qui se passe réellement en interne.

) L’encapsulation et la visibilité des attributs

?   L’ensemble des méthodes proposées par un objet est appelé l’interface de cet objet.

?   On dit qu’un objet est encapsulé par son interface : la seule manière d’interagir avec cet objet est d’invoquer une méthodes de son interface. Peu importe de quoi cet objet est réellement constitué, ce qui est important c’est les services (les méthodes) qu’il peut fournir.

) L’encapsulation et la visibilité des attributs

? L’encapsulation est un mécanisme consistant à rassembler les données et les méthodes au sein d'une structure en cachant l'implémentation de l'objet :

9  Empêcher  l'accès aux données par un autre moyen que les services proposés.

9  Garantir l'intégrité des données contenues dans l'objet .

Attributs privés

Méthodes publiques

) L’encapsulation et la visibilité des attributs

? Il existe trois niveaux de visibilité :

9  Publique : veut dire que les attributs ou les méthodes sont disponibles pour tout le monde

9  Privé : veut dire qu’aucune autre classe ne peut accéder au contenu de l’attribut et l’implémentation de la méthode concerné,

9  Protégé : l'accès aux données est réservé aux fonctions des classes héritières, c'est-àdire par les fonctions membres de la classe ainsi que des classes dérivées.

) Les méthodes d’une classes

? On distingue trois types de méthodes dans une classe:

9 Les constructeurs qui permettent d’initialiser les champs d’un objet

Un constructeur est une méthode particulière, sans valeur de retour, portant le même nom que la classe

Déclaration :     Moto :: Moto (string nouvelle_couleur){

Couleur= nouvelle_couleur;

}

) Les méthodes d’une classes

? Une classe peut avoir plusieurs constructeurs ou aucun :

9  Dans ce dernier cas, C++ fournit un constructeur par défaut: c’est-à-dire un constructeur sans arguments et initialise chaque champs par la valeur par défaut nulle

Déclaration :          Moto :: Moto (){

// constructeur crée par défaut

}

9  Dès qu’une classe possède au moins un constructeur, le constructeur par défaut ne sera pas disponible sauf si la classe possède un constructeur sans arguments

) Les méthodes d’une classes

? Les méthodes get… et set … utilisés en cas de protection des attributs:

9  Les méthodes d’accès qui permettent de renvoyer les informations relatives à un objet

Déclaration : int  Moto :: get_vitesse(){ return vitesse;

}

9  Les méthodes d’altération qui modifient l’état d’un objet (les valeurs de certains champs), donc elles comportent certains contrôlent pour valider les nouvelles valeurs.

Déclaration :                           int Moto :: set_vitesse (int nouvelle_vitesse){ vitesse = nouvelle_vitesse;

}

) Les méthodes d’une classes

?   Le constructeur : c'est une méthode qui est appelée automatiquement à chaque fois que l'on crée un objet basé sur cette classe.

?   Le destructeur : c'est une méthode qui est automatiquement appelée lorsqu'un objet est détruit, par exemple à la fin de la fonction dans laquelle il a été déclaré ou lors d'un delete si l'objet a été alloué dynamiquement avec new.

?   Le destructeur libère la zone mémoire allouée par le constructeur. Il s’exécute à la fin du programme ou d'un bloc où des objets locaux ont définis.

) Les méthodes et les classes amies

?   Une méthode est amie d'une classe si elle peut accéder directement à toutes les données privées de cette classe.

?   Une classe est amie d'une autre classe si toutes ses fonctions lui sont amies.

?   La déclaration d'amitié doit se faire dans la classe qui autorise les accès à ses données  privées.

) Les méthodes et les classes amies

Déclaration :    class A

{    friend void Methode1 (); friend class C;

...

}

?   La méthode Methode1 peut accéder aux données privées de A.

?   Toutes les méthodes de la classe C peuvent accéder aux données privés de la classe A.

) La surcharge des méthodes

?   Redéfinir une méthode déjà existante dans la classe.

?   La modification de la méthode  porte sur :

9  Le type de retour de la méthode

9  Le nombre de paramètres de la méthode et leur type.

?   Quand une méthode surchargée est invoquée le compilateur sélectionne automatiquement la méthode dont le nombre est le type des arguments correspondent au nombre et au type des paramètres passés dans l’appel de la méthode

) La surcharge des méthodes

? Exemple de surcharge : la surcharge de constructeurs

Déclaration :    Moto :: Moto (int v){

vitesse = v;

}

Moto ::         Moto (int v; string c){ vitesse = v;

Couleur= c;

}

Moto :: Moto (string c){

Couleur= c;

}

) L’héritage

?   L'héritage est un mécanisme qui facilite la réutilisation du code et la gestion de son évolution. Elle définit une relation entre deux classes :

9  Une classe mère ou super classe

9  Une classe fille ou sous classe qui hérite de sa classe mère

?   les objets d'une classe fille ont accès aux données et aux méthodes de la classe parent et peuvent les étendre.

?   Les sous classes peuvent redéfinir les variables et les méthodes héritées.

?   Les méthodes des clases filles sont redéfinies avec le même nom, les mêmes types et le même nombre d'arguments

) L’héritage

la classe  Etudiant :

la classe Etudiant-Elu :

nom

nom

capital UV

capital UV

diplôme

diplômeMandat

Syndicat

VérifierNom

VérifierNom

MajUV

MajUV

ChangerDiplôme

ChangerDiplôme

DémissionnerMandat

ChangerSyndicat

) L’héritage

?   L’objet Etudiant-Elu a les propriétés (attributs et méthodes) de l’objet Etudiant mais en plus possède d’autres propriétés.

?   La classe Etudiant-Elu est une spécialisation de la classe Etudiant. C’est une sous classe de la classe Etudiant.

?   Les objets de la sous classe Etudiant-Elu héritent des attributs et des méthodes de la classe Etudiant.  La sous classe Etudiant-Elu pourra, si cela est nécessaire pour ses besoins, redéfinir une méthode héritée.

) L’héritage

?   Chaque sous classe peut avoir une ou plusieurs sous classes formant ainsi une hiérarchie d’objet. On parle de classe ancêtre (ou mère) et de classes descendant  (ou fille).

?   L’héritage est un mécanisme qui permet d’assurer une grande variabilité dans la réutilisation des objets. Il existe deux techniques liées à l’héritage : les classes abstraites et l’héritage multiple.

) L’héritage

? Autre exemple : les formes géométrique (utiliser dans les systèmes d’aide à la conception des jeux vidéo)

) L’héritage

? Pour différentier une  classe dérivée d’une classe parent :

                           •   ajouter d’autres méthodes dans les classes dérivées: la classe de base n'était pas

) L’héritage

? Pour différentier une  classe dérivée d’une classe parent :

                           • Redéfinir autrement le comportement des classes dérivées. C’est-à-dire …..

) L’héritage multiple

?   Certains langages orientés objet, tels que le C++, permettent de faire de l'héritage multiple.

?   Faire hériter une classe de deux superclasses.

?   Regrouper au sein d'une seule et même classe les attributs et méthodes de plusieurs classes.


Plan

? Chapitre 1 : Introduction

? Chapitre 2 : Le concept d’objets

? Chapitre 3 : POO avec C++

? Chapitre 4 : … et avec Java

) Spécificités de C++

?  Fonction sans argument :

•    En C++ : float sansarg();

•    En C : float sansarg(void);

?  Une fonction qui ne retourne rien en C++ :

•    void sansretour(int x);

) Spécificités de C++

?  Expression constante (expression dont la valeur peut être calculée à la compilation) : • En C++, le compilateur sait évaluer :

const int MAX = 100;

double tab1[2*MAX+1], tab2[2*MAX+1][MAX];

?  En C, en général. On doit utiliser #define :

#define MAX 100 double tab1[2*MAX+1], tab2[2*MAX+1][MAX];

) Spécificités de C++

?  En C, les commentaires sont entre /* et */ ;

?  En C++, on ajoute à celle-ci les commentaires de fin de ligne qui démarrent par // et vont jusqu'a la n de ligne.

) Spécificités de C++

?  En C,  obligation de regrouper toutes les déclarations au début du programme.

?  En C++, ce n'est plus obligatoire. Elles peuvent apparaître n'importe où, avant d’être utilisée.

void main()

{ int i; i=3;

...

int q=3*i;

... for (int j=0; j<q; j++) ...

}

) Spécificités de C++

? Gestion simpliée des fonctions d'entrées/sortie grâce à 2 nouvelles fonctions : cin et cout

•    En saisie, cin       Exemple : cin >> x;

•    En affichage, cout

Exemple :

cout << "coucou";

cout << "voici le nombre : " << x << endl;

)  Remarques :

?   Les anciennes fonctions sont toujours utilisables;

?   L’opérateur de référence & n’est pas nécessaire pour la saisie;

?   Un processus de vérification automatique de type permet de s’affranchir des multiples formats de type très utilisés en C.

)  Du nouveaux ?

?   Nouvelle forme de commentaire

?   Liberté dans l'emplacement des déclarations ;

?   Surcharge de fonction ;

?   Allocation dynamique par les opérateurs new et delete ;

?   Notions OO;

L’implémentation de cette classe en C++ (avec les headers)

L’implémentation de cette classe en C++ (sans les headers)

) … et le constructeur en C++

?   Chaque appel à un constructeur crée un nouvel objet (instance) qui obéit au patron défini par la classe :

•    l’instance créée aura les attributs et le comportement définis dans la classe.

•    réservation d’un espace mémoire pour la mémorisation de l’état.

?   Le constructeur est généralement l’occasion d’initialiser les attributs (« personnaliser » l’état de l’instance).

?   Il peut y avoir plusieurs constructeurs pour une même classe.

?   Plusieurs initialisations possibles.

Produit  p1 (« Portable », 1) ;

Produit  p2 () ;

Comment programmerla classe Produit ??

Produit  * p1 = new Produit (« Portable », 1) ;

Produit  p2 = new Produit () ;

Comment programmerla classe Produit ??

) Le cycle de vie d’un objet

? La création d’un objet ou, autrement dit, …..

NULL

                                                   Objet obj ;                                                                obj

Cette opération déclare uniquement le nom et le type de l’objet. Les attributs et les méthodes ne sont pas encore créer.

) Le cycle de vie d’un objet

? La création d’un objet ou, autrement dit, …..

NULL

                                                   Objet obj ;                                                                obj

Attribut 1

Attribut 2

…

Méthode 1

…

Objet obj () ;

obj

C’est à ce moment que l’allocation mémoire est réalisée

) Les objets, les classes et l’instanciation en C++

?   Accès aux attributs et méthodes d’un objet à partir d’un autre objet .

Nomobjet.Nommethode() ; Nomobjet.NomAttribut;

?   L’envoi de messages entre objets :

…….

Il ne faut pas oublié les paramètres dans les messages

?   Les cascades sont possibles :

) Les objets, les classes et l’instanciation en C++

?   Dans le traitement de l’une de ses méthodes, un objet peut avoir à s’envoyer un message (pour accéder à un de ses attributs ou invoquer une des ses méthodes).

?   Utilisation de l’auto-référence, en C++: this.

Exemple : on se place dans une méthode de la classe Moto :

•    Lors du traitement, l’objet appelant la méthode est une instance de la classe Moto.

this->Freiner()           signifie            « envoyer à this (= moi-même) le message    Freiner() »

) Les objets, les classes et l’instanciation en C++

? L’appel à l’objet courant : utilisation du mot clé this

this->methode() ; this->attribut;

) Les objets, les classes et l’instanciation en C++

? Si pas d’ambiguïté, le mot clé this peut être oublié : 

this->Freiner () ;       Î Freiner(); this->Prix;                 Î Prix; 

Exercice 5 :

Ecrire une classe Livre, caractérisée par les attributs titre, auteur et année et par les méthodes suivantes :

-   Une méthode affichant les caractéristiques d’un livre

-   Une méthode qui prend en paramètre un livre et qui permet d’afficher les deux livres et de le comparer le nom du livre passé en paramètre.

) Les objets, les classes et l’instanciation en C++ ? Exercice 6 :

Créer une classe Segment qui est définie par ses extrémités (des points) et par sa couleur. Avec cette classe, on peut calculer la longueur d’un segment, le déplacer et changer sa couleur.

) Les méthodes et classes amies

friends type_de_retour nom_methode(parametres);

La méthode est amie à la classe concernée

friends class A;

La classe A est amie à la classe concernée

Exemple :

) La surcharge

? La surcharge de méthodes : un mécanisme donnant la possibilité d'appeler plusieurs méthodes avec le même nom.

Des méthodes surchargées peuvent avoir des types de retour différents à condition qu’elles aient des arguments différents.

int Calcul::somme( int p1, int p2){

Exemple : la surcharge de                      return (p1 + p2); }

la méthode somme                        float Calcul:: somme( float p1, float p2){ return (p1 + p2); }

float Calcul:: somme( float p1, float p2, float p3){ return (p1 + p2 + p3); }

int Calcul:: somme( float p1, int p2){

return (int(p1) + p2); }

) La surcharge

? Exercice 7:

1.   Créez une classe avec un constructeur qui imprime un message.

2.   Ajoutez à cette classe un constructeur surchargé qui prend un string en argument et qui l'imprime avec votre message.

3.   Créez, dans le programme principale, deux instances de cette objet pour tester les deux constructeurs.

) La surcharge d’opérateurs

?   En C++, il y a la possibilité de redéfinir le comportement de certains opérateurs mathématique ou logique:  == , +=, +, - , &, etc.

?   Il suffit d’ajouter une méthode  spécifique :

class Moto

{ void main()

…

{

bool operator+ (const Moto& m) ;

….

};

Moto m, m1, m2;

bool Moto::operator+ (const Moto& m) m=m1+m2;

{

….

}

couleur += m.couleur;

vitesse += m.vitesse

}

) La surcharge d’opérateurs

? Ou ,autrement, en utilisant une méthode amie à deux paramètres :


class Moto

{

…

friend bool operator + (const Moto& m1, const Moto& m1 ) ;

};

bool Moto::operator + (const Moto& m1, const Moto& m1)

{

m1.couleur += m2.couleur;

m1.vitesse +=m2.vitesse

}

void main()

{

….

Moto m, m1, m2; m=m1+m2; ….

}

) La surcharge d’opérateurs

? Ou ,autrement, à l’extérieur de la classe :

class Moto

{

…

};

bool Moto::operator + (const Moto& m1, const Moto& m1)

{

m1.couleur += m2.couleur;

m1.vitesse +=m2.vitesse

}

void main()

{

….

Moto m, m1, m2; m=m1+m2; ….

}


) La manipulation des objets

? L’affectation et la comparaison :

Objet a ();

Quel est la différence entre les deux

Objet b (); instances a et b ? a = b ;    

) La manipulation des objets

? L’affectation et la comparaison :

Objet a  ();

Que signifie cette comparaison ?

Objet  (); boolean rep = (a == b) ;

Î Vérifier si les deux objets ont la même référence.

) La manipulation des objets

Quel est le résultat de l’instruction

         ? L’affectation et la comparaison :           BMW==Mercedes ?

Voiture : BMW

Voiture : Mercedes

Puissance : 9 Couleur: noir

Puissance: 9 Couleur : noir

Accélérer Freiner

Accélérer Freiner

Î Les deux objets ont les mêmes valeurs d’attributs mais la référence est différente.

) La destruction des objets

?   Le destructeur de classe consiste en une méthode qui sera appelée lors de toute destruction d'un objet.

?   Peut-on surcharger un destructeur ?    non.

?   Est-ce qu’un destructeur peut prendre des paramètres ?  non

?   Doit-on appeler un destructeur ? non

?   Et si l’objet est crée dynamiquement avec new ?

) Encapsulation en C++

         ? Il existe trois niveaux de visibilité :          Compte_Bancaire

- Num_RIB

9  Privé :  en C++, private        - Nom

- Montant

9  publique:  en C++, public

9  protégé:  en C++, protected + Créditer()

+ Débiter()

public :

string var1; int methode1(); private : int var3; protected :

void methode3(); char var2; void methode2();

) Encapsulation en C++

? L’idée de restreindre la visibilité  des méthodes et des attributs :

Des getters et des setters

Attribut Montant :     Î getMontant ()   : le getter setMontant (…)  : le setter

) Encapsulation en C++

? Exemple : Application pour la gestion des comptes en banques.

•    La classe Banque ayant comme attribut solde.

•    Dans un premier temps, l’attribut est déclaré comme publique.

Quel est l’inconvénient d’un telprogramme ?

Quelle amélioration proposez-vous ?


) Le mot clé static

?   Aucune méthodes ni attributs n’est accessible avant l’instanciation de la classe en utilisant le mot clé … .

9 La zone mémoire n’est pas encore allouée.

Les méthodes et les attributs sont alors associés à l’objet et non à la classe.

?   … et si on veut que la donnée ou la méthode n'est pas spécifiquement rattachée à un objet instance d’une classe ?

Utilisation du mot clé static

) Le mot clé static

class StaticTest { static int i = 47;

}

? Et dans une autre classe:

StaticTest st1 = new StaticTest();

StaticTest st2 = new StaticTest();

Comment incrémenter l’attribut i ?            

) L’héritage                                                           

En C++, en utilisant les deux points « : »

classForme

{

// ….

};                                                                       Et le mot clé protected ?

classRectangle:Forme

{

// ….

};

classTriangle:Forme

{

// ….

};

Forme

dessiner () effacer()

deplacer()

getcouleur() setcouleur()

) L’héritage

L’implémentation en C++de la classe Triangle


friend class Base;

public:

A() {  cout << "Constructeur de A.";  } ~A() { cout << "Destructeur de A";  } private : int nb;

};

class Base {

public:

Base() {  cout << "Constructeur de Base ."; cout << .";  }

~ Base () { cout << "Destructeur de Base ";  } private :

A att;

};

class Derive : Base{

public:

Derive() {  cout << "Constructeur de Derive.";  cout << }

~ Derive () { cout << "Destructeur de Derive ";  } private : A att1;

};

Quel est le résultat de ce programme ??


Forme

dessiner () effacer()

deplacer()

getcouleur() setcouleur()

) L’héritage : le polymorphisme

L’implémentation en C++ de la classe Triangle

) L’héritage : le polymorphisme indésirable

Forme  * f = new Triangle () ;

L’instance f

Classe Forme                        Classe Triangle

Interface

Implémentation

Interface

Interface

Implémentation

Implémentation

Selon le diagramme suivant, quel est le

f->dessiner() ;        résultat de l’instruction f.dessiner() ?

? Un pointeur vers une classe de base ne permet d’accéder qu’aux membres hérités et son usage ne saurait donc respecter la règle d’accès par défaut aux membres propres.

Forme

dessiner () effacer()

deplacer()

getcouleur() setcouleur()

) L’héritage à plusieurs niveaux

L’implémentation en C++ de la classe Triangle rectangle

) L’héritage : Ordre d'appel des constructeurs et des destructeurs

?   L’instanciation d’une classe dérivée implique nécessairement l’exécution d’un constructeur de la classe de base puis celle d’un constructeur de la classe dérivée.

?   Lors de la destruction d’un objet avec delete, l’exécution d’un destructeur de la classe dérivée pis celle d’un constructeur de la classe de base.

) L’héritage multiple

L’implémentation en C++ de la classe Triangle rectangle

) L’héritage multiple : Ordre d'appel des constructeurs

? Les constructeurs sont appelés dans l'ordre de déclaration de l'héritage.


POO avec Java

) Les méthodes virtuelles

?   Lorsqu’une méthode est déclarée comme virtuelle dans la classe de base, sa redéfinition ne donne pas naissance au phénomène de « polymorphisme indésirable ».

?   Si une méthode virtuelle est invoquée par l’intermédiaire d’un pointeur sur la classe de base, c’est le type de l’objet dont l’adresse se trouve dans le pointeur au moment de l’appel qui détermine quelle fonction est exécutée

Forme

dessiner () effacer()

deplacer()

getcouleur() setcouleur()

) Les méthodes virtuelles

L’implémentation en C++ de la classe Triangle

) Les méthodes virtuelles

Lorsqu’une méthode est redéfinie dans une classe dérivée, elle doit être virtuelle

class A

{

public:

A() { std::cout << "Constructeur de A.\n"; }

~A() { std::cout << "Destructeur de A.\n"; }

Virtual void PrintName() { std::cout << "Classe A.\n"; int j=0 ; }

};

void main()

{

A * p= new B();

p->PrintName();

}

class B : public A

{

public:

B() { std::cout << "Constructeur de B.\n"; }

~B() { std::cout << "Destructeur de B.\n"; } void PrintName() { std::cout << "Classe B.\n"; }

};

Quel est le résultat ??


) Les méthodes virtuelles  : Ordre d'appel des constructeur et des destructeurs

class A

{

public:

A() { std::cout << "Constructeur de A.\n"; }

~A() { std::cout << "Destructeur de A.\n"; }

};

void main()

{

A * p= new B(); delete p;

}

class B : public A

{

public:

B() { std::cout << "Constructeur de B.\n"; }

~B() { std::cout << "Destructeur de B.\n"; }

};

Quel est le résultat ??

Et si on ajoute le mot virtual auxdestructeur de la classe A ??

) Les méthodes virtuelles

? Récapitulation : Dans quel cas les méthodes virtuelles et le polymorphisme


sont utilisés ?

9 ………………….

class Emloye { public : string nom;

int id, salaire;

Emloye(String n) : nom(n){} virtual void affiche (){ cout<<"Je suis un employer";} class magasinier : Employe { public magasinier(String n) : Employer(n), salaire(250){

} void affiche ()

{

cout<<"Je suis un magasinier";

}


) L’héritage

? Exercice 8:  Créer une hiérarchie d'héritage de Rongeur: Souris, Gerbille, et Hamster. Dans la classe de base, fournir des méthodes qui sont communes à tous les Rongeurs, et les redéfinir dans les classes dérivées pour exécuter des comportements différents dépendant du type spécifique du Rongeur. Créer un tableau de Rongeur, le remplir avec différent types spécifiques de Rongeurs, et appeler vos méthodes de la classe de base pour voir ce qui arrive.

) L’héritage ? Exercice 9:

Ecrivez les classes nécessaires au fonctionnement du programme suivant. Donnez uniquement le nom des classes et les méthodes (sans détailler le contenu).

void main()

Batiments *B[3] ;

B [0] = new Appartement(‘’Atef’’) ;

B [1] = new Villa(‘’Walid’’) ;

B [2] = new Studio(‘’Anis’’) ;

For (int i = 0; i<3 ; i++)

B [i]->affiche() ; }

}

Le résultat de ce programme est :

L’appartement appartient à Atef La villa appartient à Walid

Le studio appartient à Anis

) Les classes abstraites : les méthodes virtuelles pures

? La présence d’une méthode virtuelle pure dans une classe a 2 conséquences:

9  La classe ne peut plus être instanciée,

9  Toute classe fille de cette classe doit redéfinir la méthode en question.

                                    Syntaxe :        virtual void affiche() = 0;

Lorsqu’une classe contient une méthode virtuelle pure, elle est qualifiée d’abstraite.

) Les classes abstraites

?   Une classe abstraite n'existe que pour être héritée.

?   Une classe est dite abstraite si elle contient au moins une fonction virtuelle pure.

class X {

// Affiche est une fonction virtuelle pure car = 0. virtual void affiche() = 0;

};

Il est impossible de créer (instancier) un objet à partir d'une classe abstraite.

X a();        // Erreur

) Les classes abstraites

? Les classes qui héritent d'une classe abstraite doivent obligatoirement définir la ou les fonctions virtuelles pures.

class Y:public X { void affiche() {

cout << "Y:f« <<endl;

}

};

Même si le mot-clé virtual ne précède pas le nom de la fonction affiche, elle reste quand même virtuelle car dans la classe de base,

elle est déclarée ainsi.  Donc, pas besoin de le préciser encore une fois.


Plan

? Chapitre 1 : Introduction

? Chapitre 2 : Le concept d’objets

? Chapitre 3 : POO avec C++

? Chapitre 4 : … et avec Java

) Le langage Java : historique

?   1990 - Sté Sun Microsystems (James Gosling, Naughton, Sheridan) : projet de langage petits systèmes

?   1991 : Introduction du langage « Oak »

?   1993 : Essor d’Internet : adapter Java au Web

?   1993 à 1995 : adaptation d’Oak pour le Web (Exécution d’applets)

?   1995 : présentation de Java TM par Sun et mise à disposition gratuite du JDK sur le net

) Qualités majeures de Java

?  Simple (comparé à C++)

9  Gère les débordements mémoire.

9  Gère lui-même la désallocation mémoire (ramasse-miettes).

9  Pas de manipulation explicite de pointeurs.

9  Pas de surcharge d’opérateurs.

?  Fondamentalement Orienté-Objet : pas de fonctions/procédures : que des méthodes !

?  Portable : principe de machine virtuelle

) Un programme Java, pour voir …

Édition du programme source :

// Exemple de programme minimal : import .*;      //….

publicclass Salut { public static void main (String args[]) {

.println("Salut tout le monde");

}

}

Compilation :

C:\Temp\> javac     Æ génération du fichier …..

Exécution:

D:\Temp\> java Salut

) Java Vs C++ ? En C++:

// Exemple de programme minimal :

#include <stdio.h>                      //……

void main () {

printf("Salut tout le monde");

}

? En Java:

// Exemple de programme minimal : import .*;   //………….

publicclass Salut { public static void main (String args[]) {

.println("Salut tout le monde");

}

}


) Plan

?   Les opérateurs mathématiques , logiques et de conversion

?   Les boucles et les structures de contrôles

?   Les tableaux

?   Les commentaires

) La structure d’un programme Java

public void afficher (int val ) {

….println(‘’ le nombre à afficher est  ‘’ +val);

}

}

) Les types primitifs

? Ne pas confondre les types primitifs et les objets ? Les types primitifs :        

9  Entiers : byte (1 octet) - short (2 octets) - int (4 octets) - long (8 octets)    Quelle est ladifférence ??

9  Flottants : float (4 octets) - double (8 octets)

9  Booléens : boolean (true ou false)

9  Caractères : char

Déclaration en java :

Int a, b, c ;

float x;Des erreurs ??!! char ch Booléens u, b;

) Les constantes

? Le mot clé final permet de déclarer une constante: la valeur ne doit pas être modifiée pendant l’exécution du programme.

Déclaration en java :

final int n=10, m ; n=n+1;

Le résultat de l’instruction est…….

) Les opérateurs et l’affectation

? Les opérateurs mathématiques

Opérateur

Exemple

Equivalent à

+=

Note+ = 2

Note = Note + 2

Note = Note - 2

*=

Note* = 1.5

Note = Note * 1.5

Note = Note / 2

%=

Note% = 2

Note = Note % 2

Note = Note ^ 2

double nb1; float nb2; nb1/nb2 =  …..

Quel est le type du résultat de l’opération ?

float nb1; int nb2; nb1 + nb2 = …….

) Les opérateurs et l’affectation

?   Priorité

()           ++ , --          * , / , %          + , -         < , >     ==,!=          &&, ||                                 =, += , -=

Plus fort                                                                                   Plus faible

?   Les instructions

Quel est le résultat de chaque

final int N=50;        instruction ?? short p=10; char c=2*N+3;  // la variable c contient …. byte b= 10*N;  // le résultat est ….

) Les opérateurs et l’affectation

? l’incrémentation et la décrémentation automatique

Incrémentation : Nb++ ou ++Nb

Quelle est la différence ??

Décrémentation : Nb-- ou --Nb 

i=2;

j=i++;Quelles sont les valeurs de i et j

dans les deux cas  ?

i=2; j=++i;

) Les opérateurs et l’affectation

?   Autres opérateurs

Opérateur

L’opérateur ET logique

||

L’opérateur OU logique

Opérateur d’égalité

!=

Opérateur de différence

L’opérateur négation

double nb1; double nb2; boolean res1, res2;

res1 = ( nb1==nb2)res2= ( nb1==nb2) && (nb1>10)

?   Les opérateurs de conversion (cast)

int i = 200;

long l = (long)i;     … long l2 = (long)200;     …

) Les opérateurs et l’affectation

? Les opérateurs bits à bits

Opérateur

|

L’opérateur OU

Opérateur OU exclusif

~

L’opérateur négation

Nb1

Nb2

00000101 00000011

Nb1 & Nb2

……….

Nb1 | Nb2

……….

Nb1 ^ Nb2

……….

~Nb1

……….

Exemple :

) Les opérateurs et l’affectation

? Les opérateurs de décalage :

9  Manipules des bits,

9  Utilisables uniquement avec des types primitifs entiers, 9 Les opérateurs sont :

o Nb << n : décalage vers la gauche du nombre Nb de n bits o Nb >> n : décalage vers la droite du nombre Nb de n bits

Exemple :

                    N=10000101                          N<< 2    donne ........

int N = 6;                                N>>1     donne .......

) Les boucles et les structures de contrôles

? if… else…

9  Syntaxe:

if (condition logique)

Instructions exécutées si la condition logique est vraie else

Instructions exécutées si la condition logique est fausse

9  Exemple 1:

If (moyenne >= 10)

.println(‘’ l’étudiant a réussi’’); else

.println(‘’ l’étudiant doit repasser ses examens’’);

) Les boucles et les structures de contrôles

? if… else…

9 Exercice 1:

Ecrire la partie du programme Java qui vérifie si un entier n est paire ou impaire et affiche le résultat.

) Les boucles et les structures de contrôles

? switch… case…default

9 Syntaxe:

switch(expression)

{case constante_1: suite d’instructions; break;

...

case constante_n: suite d’instructions; break; default :suite d’instruction;}

) Les boucles et les structures de contrôles

? switch… case…default

9 Exercice 2:

Ecrire la partie du programme Java qui affiche:

o « Très bien » si la note est ‘A’, o  « Bien » si la note est ‘B’,

) Les boucles et les structures de contrôles

? Les boucles itératives

9  while … :

while ( condition logique) {

... // code a exécuter dans la boucle

}

9  do … while :

do {

Bloc d’instructions ;

}

while ( condition logique)

) Les boucles et les structures de contrôles

? Les boucles itératives

9  for… :

for (initialisation du compteur ; condition ; modification) {

... // code a exécuter dans la boucle

}

9  Exemple 2:

for (i = 0 ; i > 10; i++ )

Quel est le résultat de la boucle ?

{

.println (i);

}

) Les boucles et les structures de contrôles ) Exercice :

On dénomme nombre de Armstrong un entier naturel qui est égal à la somme des cubes des chiffres qui le composent. Ecrire un programme Java qui affiche de tels

) Les boucles et les structures de contrôles ? break et continue

9  break : permet de sortir d’une boucle sans exécuter la suite des instructions

9  continue : arrête l'exécution de l'itération courante, et l'exécution reprend en début de boucle avec l'itération suivante

) Les tableaux 

? Tableau unidimensionnels

NULL

Déclaration :      int [] tab;                                                     tab

ou       int tab[];

Dimensionnement: int [] tab = new int [3] 

3

2

1

Initialisation: tab [0]=3; tab [1]=2; tab [2]=1       tab ou autrement , int [] tab={3,2,1};

) Les tableaux 

? Tableau multidimensionnels

NULL

Déclaration :      type [][] tab;                                               tab

Dimensionnement: tab = new type [2][3]; 

tab

ou aussi

tab = new type [2];

tab [0] = new type[2];    tab tab [1] = new type[3]   

) Les tableaux 

? Exercice 3:

Soit T une matrice carrée de 3 lignes et 3 colonnes. Ecrire un algorithme qui affiche un message informant si la matrice est symétrique ou pas.

) Les tableaux 

? Exercice 4:

Ecrire un algorithme qui tri un tableau en utilisant la méthode de tri par insertion.

) Les vecteurs

?   La classe vecteur permet de gérer des listes contenant plusieurs types

?   La taille du vecteur est dynamique, contrairement à celle d’un tableau.

Déclaration :      Vector v = new Vector()

Quel est la différence ? Vector v = new Vector(5)

Ajout d’élément dans le vecteur :

v.addElement(new Integer(1)); // Ajouter un premier élément

v.addElement(new Float(1.9999)); // Ajouter un autre élément for (int i=2; i<10; i++) {

int lastInt = ((Number) v.lastElement()).intValue();

v.addElement(new Integer(i + lastInt)); } // Ajouter d’autres éléments

) Les commentaires

?    Importance des commentaire

9   Clareté du code

9   Réutilisation facile du code

9   Génération automatique du  javadoc ou le Help du programme développé

?    Deux types de commentaire

9   Commentaire classique /* …*/ ou // …

9   Génération d’un fichier (HTML) de documentation /** …*/

/**

*   Ceci est un commentaire pour Javadoc

?      * @author Sabeur

*   @version 2.0

*/


Fin du cours

Decouvrir ces documents

  • Initiation à la programmation orientée objet avec le langage Python

    Initiation à la programmation orientée objet avec le langage Python

  • Python et la Programmation Orientée Objet

    Python et la Programmation Orientée Objet

  • Apprendre les bases de la programmation avec le langage Java

    Apprendre les bases de la programmation avec le langage Java

  • Initiation à a programmation orienté objet avec le langage C++

    Initiation à a programmation orienté objet avec le langage C++

  • Mini projet de programmation en langage C

    Mini projet de programmation en langage C

  • Cours programmation objet et JAVA avec exemples

    Cours programmation objet et JAVA avec exemples

  • Cours sur le langage de programmation VB

    Cours sur le langage de programmation VB

  • Débuter la programmation avec le langage Ada

    Débuter la programmation avec le langage Ada

Articles connexes

  • Tutoriel Python : Notions de base
  • Python : comment programmer les classes
  • Tutoriel Python : créer un quiz/questionnaire
  • Tutoriel Python : notion d’héritage
  • Série d'exercices Java sur la programmation orienté objet POO
  • Exercice java algorithme programme jeu de puissance 4
  • Exercices sur la programmation web avec le langage PHP
  • Comment coder pour les débutants
  • Contactez-nous
  • A propos de nous
  • On recrute
  • Rechercher dans le site
  • Politique de confidentialité
  • Droit d'auteur/Copyright
  • Conditions générales d'utilisation
  • Plan du site
  • Accueil
  • Blog
  • Finance et compta.
  • Formations Pro.
  • Logiciels & Apps
  • Organisation
  • Cours informatique
  • Aide à la rédaction
  • Etudes et Metiers
  • Science et Tech
  • Titans de la Tech
id 11354 02