« Programmation C-C++/C++ : La couche objet » : différence entre les versions

Contenu supprimé Contenu ajouté
Tavernier (discussion | contributions)
import
 
Tavernier (discussion | contributions)
import
Ligne 1 :
| colspan="2" | [[{{Programmation C-C++/C++ : La couche objet|C++ : La couche objet]]}}
{| style="float:right;border:thin black solid;width:250px;"
 
| colspan="2" style="text-align:center;font-weight:bold;" | Cours de C/C++
Théoriquement, il y a une nette distinction entre les données et les opérations qui leur sont appliquées. En tout cas, les données et le code ne se mélangent pas dans la mémoire de l'ordinateur, sauf cas très particuliers (autoprogrammation, alias pour le chargement des programmes ou des overlays, débogueurs, virus).
|-
 
| colspan="2" style="text-align:center;"| [[Programmation C C plus plus Le langage|^]]
Cependant, l'analyse des problèmes à traiter se présente d'une manière plus naturelle si l'on considère les données avec leurs propriétés. Les données constituent les variables, et les propriétés les opérations qu'on peut leur appliquer. De ce point de vue, les données et le code sont logiquement inséparables, même s'ils sont placés en différents endroits de la mémoire de l'ordinateur.
|-
 
| colspan="2" | [[Programmation C-C++/C++ : La couche objet|C++ : La couche objet]]
Ces considérations conduisent à la notion d'objet. Un objet est un ensemble de données sur lesquelles des procédures peuvent être appliquées. Ces procédures ou fonctions applicables aux données sont appelées méthodes. La programmation d'un objet se fait donc en indiquant les données de l'objet et en définissant les procédures qui peuvent lui être appliquées.
|-
 
| style="width:20px;" | || [[Programmation C-C++/C++ : La couche objet/Généralités|Généralités]]
Il se peut qu'il y ait plusieurs objets identiques, dont les données ont bien entendu des valeurs différentes, mais qui utilisent le même jeu de méthodes. On dit que ces différents objets appartiennent à la même classe d'objets. Une classe constitue donc une sorte de type, et les objets de cette classe en sont des instances. La classe définit donc la structure des données, alors appelées champs ou variables d'instances, que les objets correspondants auront, ainsi que les méthodes de l'objet. À chaque instanciation, une allocation de mémoire est faite pour les données du nouvel objet créé. L'initialisation de l'objet nouvellement créé est faite par une méthode spéciale, le constructeur. Lorsque l'objet est détruit, une autre méthode est appelée : le destructeur. L'utilisateur peut définir ses propres constructeurs et destructeurs d'objets si nécessaire.
|-
 
| style="width:20px;" | || [[Programmation C-C++/C++ : La couche objet/Extension de la notion de type du C|Extension de la notion de type du C]]
Comme seules les valeurs des données des différents objets d'une classe diffèrent, les méthodes sont mises en commun pour tous les objets d'une même classe (c'est-à-dire que les méthodes ne sont pas recopiées). Pour que les méthodes appelées pour un objet sachent sur quelles données elles doivent travailler, un pointeur sur l'objet contenant ces données leur est passé en paramètre. Ce mécanisme est complètement transparent pour le programmeur en C++.
|-
 
| style="width:20px;" | || [[Programmation C-C++/C++ : La couche objet/Déclaration de classes en C++|Déclaration de classes en C++]]
Nous voyons donc que non seulement la programmation orientée objet est plus logique, mais elle est également plus efficace (les méthodes sont mises en commun, les données sont séparées).
|-
 
| style="width:20px;" | || [[Programmation C-C++/C++ : La couche objet/Encapsulation des données|Encapsulation des données]]
Enfin, les données des objets peuvent être protégées : c'est-à-dire que seules les méthodes de l'objet peuvent y accéder. Ce n'est pas une obligation, mais cela accroît la fiabilité des programmes. Si une erreur se produit, seules les méthodes de l'objet doivent être vérifiées. De plus, les méthodes constituent ainsi une interface entre les données de l'objet et l'utilisateur de l'objet (un autre programmeur). Cet utilisateur n'a donc pas à savoir comment les données sont gérées dans l'objet, il ne doit utiliser que les méthodes. Les avantages sont immédiats : il ne risque pas de faire des erreurs de programmation en modifiant les données lui-même, l'objet est réutilisable dans un autre programme parce qu'il a une interface standardisée, et on peut modifier l'implémentation interne de l'objet sans avoir à refaire tout le programme, pourvu que les méthodes gardent le même nom, les mêmes paramètres et la même sémantique. Cette notion de protection des données et de masquage de l'implémentation interne aux utilisateurs de l'objet constitue ce que l'on appelle l'encapsulation. Les avantages de l'encapsulation seront souvent mis en valeur dans la suite au travers d'exemples.
|-
 
| style="width:20px;" | || [[Programmation C-C++/C++ : La couche objet/Héritage|Héritage]]
Nous allons entrer maintenant dans le vif du sujet. Cela permettra de comprendre ces généralités.
|-
| style="width:20px;" | || [[Programmation C-C++/C++ : La couche objet/Classes virtuelles|Classes virtuelles]]
|-
| style="width:20px;" | || [[Programmation C-C++/C++ : La couche objet/Fonctions et classes amies|Fonctions et classes amies]]
|-
| style="width:20px;" | || [[Programmation C-C++/C++ : La couche objet/Constructeurs et destructeurs|Constructeurs et destructeurs]]
|-
| style="width:20px;" | || [[Programmation C-C++/C++ : La couche objet/Pointeur this|Pointeur this]]
|-
| style="width:20px;" | || [[Programmation C-C++/C++ : La couche objet/Données et fonctions membres statiques|Données et fonctions membres statiques]]
|-
| style="width:20px;" | || [[Programmation C-C++/C++ : La couche objet/Surcharge des opérateurs|Surcharge des opérateurs]]
|-
| style="width:20px;" | || [[Programmation C-C++/C++ : La couche objet/Des entrées - sorties simplifiées|Des entrées - sorties simplifiées]]
|-
| style="width:20px;" | || [[Programmation C-C++/C++ : La couche objet/Méthodes virtuelles|Méthodes virtuelles]]
|-
| style="width:20px;" | || [[Programmation C-C++/C++ : La couche objet/Dérivation|Dérivation]]
|-
| style="width:20px;" | || [[Programmation C-C++/C++ : La couche objet/Méthodes virtuelles pures - Classes abstraites|Méthodes virtuelles pures - Classes abstraites]]
|-
| style="width:20px;" | || [[Programmation C-C++/C++ : La couche objet/Pointeurs sur les membres d'une classe|Pointeurs sur les membres d'une classe]]
|-
| colspan="2" style="text-align:right;" |
[http://casteyde.christian.free.fr/online/cours_cpp/book1.html Livre original de C. Casteyde]
|}