Maintenance coûteuse → besoin de qualité, modularité et réutilisation
★ À maîtriser
📌 La programmation procédurale découpe un programme en fonctions qui réalisent des traitements particuliers, tandis que la programmation orientée objet le considère comme un ensemble d’objets collaborant par messages.
📌 Dans l’approche procédurale, les fonctions peuvent agir sur les mêmes données, ce qui crée un risque de partage de données et d’écritures simultanées dans un même fichier.
Compléments
Procédural : données séparées des fonctions ; objet : données et méthodes réunies
EACI : Encapsulation, Abstraction, Classification, Identité
★ À maîtriser
📌 En C++, une classe se déclare avec le mot-clé class, ses membres entre accolades et un point-virgule final.
📌 L’opérateur de résolution de portée :: permet de définir à l’extérieur de la classe une méthode appartenant à cette classe.
Compléments
📌 Le passage d’un objet par référence évite la duplication de l’objet lors de son utilisation comme paramètre d’une méthode.
Une classe sert de moule pour fabriquer des objets partageant attributs et méthodes
📌 En C++, public rend les membres accessibles dans toute l’application, protected les rend accessibles à la classe et à ses classes dérivées, et private les réserve aux fonctions membres de la classe.
Public est accessible partout, protected aux classes liées, private à la classe
★ À maîtriser
📌 Un constructeur sans paramètre ou dont tous les paramètres ont des valeurs par défaut est un constructeur par défaut.
Compléments
Construire → utiliser → détruire
📐 Formule — La syntaxe d’un patron de fonction générique est suivie d’une fonction utilisant le type T.
Un patron template agit comme un moule adaptable à plusieurs types
★ À maîtriser
Compléments
Un patron de classe peut comporter plusieurs paramètres de type, par exemple template<class A, class B, class C> class MaClasse.
Dans la classe Etudiant<T,T1,T2>, T représente le nom et le prénom, T1 l’identifiant et T2 l’âge.
★ À maîtriser
📌 Les déclarations d’amitié ne s’héritent pas : si f est amie de A et que B dérive de A, f n’est pas automatiquement amie de B.
Compléments
Amitié = accès privé accordé sans devenir fonction membre
★ À maîtriser
📌 Un opérateur ne peut être surchargé que dans un contexte où il possède au moins un argument de type classe.
📌 Pour deux objets point a et b, une surcharge membre s’écrit point operator+(point) et s’utilise comme a.operator+(b), tandis qu’une surcharge amie s’écrit point operator+(point, point).
Compléments
Fonction membre : a.operator+(b) ; fonction amie : operator+(a,b)
★ À maîtriser
📌 En C++, si aucun mode n’est indiqué dans la déclaration de l’héritage, l’héritage est privé.
📌 En dérivation publique, les membres publics de la classe de base restent publics, les membres protégés deviennent protégés et les membres privés restent inaccessibles dans la classe dérivée.
Compléments
📌 Lorsqu’un constructeur de la classe mère doit être appelé, le constructeur de la classe dérivée le spécifie dans sa liste d’initialisation, par exemple Pointcolor(int a,int b,int c):Point(a,b).
Base → dérivée → héritage multiple → constructeurs
Une fonction virtuelle déclarée dans la classe générale permet de sélectionner, à l’exécution, la version correspondant au type exact de l’objet pointé.
Un destructeur virtuel garantit que, lorsqu’un pointeur de base référence un objet dérivé, le destructeur de la classe dérivée est appelé avant celui de la classe de base.
Une classe comportant au moins une fonction virtuelle pure est abstraite et il est impossible d’instancier directement un objet de cette classe.
virtual → choix à l’exécution → comportement polymorphe
★ À maîtriser
📌 Le type du paramètre transmis à throw détermine le type de l’exception levée et le gestionnaire catch correspondant.
Compléments
📌 Le gestionnaire catch(...) est un gestionnaire universel qui peut intercepter les exceptions non traitées par les autres blocs catch et se place normalement à la fin.
try → throw → catch
★ À maîtriser
Le mot-clé throw lance une exception en transmettant un paramètre e, dont le type détermine le type de l’exception levée.
Un gestionnaire catch placé après un bloc try intercepte une exception lorsque le type de son argument correspond au type de l’exception levée.
Lorsque plusieurs gestionnaires suivent un bloc try, le premier gestionnaire dont le type d’argument correspond à l’exception levée est exécuté.
Compléments
📌 Le gestionnaire catch(...) est un gestionnaire universel qui peut intercepter toute exception et qui est normalement placé en dernier.
throw → try → catch
★ À maîtriser
📌 Le traitement d’une exception peut être placé dans main ou dans une fonction intermédiaire comme input_et_divise, tandis que la fonction qui détecte l’erreur conserve le même throw.
Compléments
Dans la première version, l’opérateur /= lance la chaîne "division par zéro" sous la forme d’un const char* et la fonction main l’intercepte puis l’affiche.
Une boucle do while permet de redemander un diviseur jusqu’à ce que celui-ci soit différent de zéro, en quittant la boucle avec break après une division réussie.
Division par zéro → exception → correction ou arrêt
★ À maîtriser
📌 Les exceptions runtime_error signalent des erreurs difficiles à éviter à l’exécution, tandis que les exceptions logic_error signalent des erreurs de logique interne qui devraient être évitables.
📌 Pour traiter une exception standard tout en conservant son type réel et la bonne version de what(), il est recommandé de la capturer par const exception&.
Compléments
La hiérarchie comprend notamment: bad_alloc : problème d’allocation mémoire, ios_base::failure : problème d’entrées-sorties, range_error : valeur retournée incorrecte lors d’un calcul interne, overflow_error : nombre trop grand lors d’un calcul, underflow_error : nombre trop proche de zéro lors d’un calcul
La hiérarchie logic_error comprend:
📌 Une exception personnalisée doit de préférence dériver de la classe exception afin de permettre un traitement hiérarchisé par des gestionnaires spécialisés ou génériques.
domain_error pour une erreur ciblée, exception pour un traitement général
| Niveau | Accès | Rôle |
|---|---|---|
| public | Toute l’application | Interface accessible |
| protected | Classe et classes dérivées | Accès partagé par héritage |
| private | Fonctions membres de la classe | Détails internes protégés |
| Mode | Membres publics hérités | Membres protégés hérités | Membres privés de la base |
|---|---|---|---|
| public | public | protected | inaccessibles |
| protected | protected | protected | inaccessibles |
| private | private | private | inaccessibles |
Teste tes connaissances sur Programmation orientée objet en C++ avec 11 questions à choix multiples et corrections détaillées.
1. Quelle caractéristique décrit la validité d’un logiciel ?
2. Quelle organisation logicielle correspond à la modularité ?
Mémorisez les concepts clés de Programmation orientée objet en C++ avec 11 flashcards interactives.
Quel pourcentage du coût total d'un logiciel représente la maintenance ?
La maintenance représente environ 70 % du coût total.
Qu'est-ce que la validité d'un logiciel ?
C'est le fait qu'un logiciel effectue exactement les tâches pour lesquelles il a été conçu.
Quelle différence principale entre programmation procédurale et orientée objet ?
La procédurale découpe en fonctions, la POO en objets collaborant par messages.
Importe ton cours et l'IA génère fiches, QCM et flashcards en 30 secondes.
Générateur de fiches