C++, devinez si je peux apprendre

Manuel : "Programmation orientée objet et C++" (troisième édition) Rédacteur en chef : Zhu Lihua, Yu Qiong, Guo Jian People's Posts and Telecommunications Publishing House
Livre électronique en ligne gratuit

Objectifs d'apprentissage :
●Comprendre les méthodes de programmation orientée objet
●Comprendre les principaux concepts : classe, objet, encapsulation, héritage, polymorphisme
●Comprendre les fonctionnalités du langage C++
●Familier avec l'environnement de développement intégré VS2010

1. La connexion entre C et C++

Le langage C ne prend en charge que la conception orientée processus ;

Le langage C++ est un sur-ensemble du langage C. Il est compatible, amélioré et étendu au langage C. Il prend en charge à la fois la programmation orientée processus et la programmation orientée objet , mais cette dernière est sa principale caractéristique et application.
Il est discuté plus en détail en 4.3

En ce qui concerne l'apprentissage du langage C, on peut le voir dans ma chronique CSDN Freshman C langage en difficulté route

2. Vue d'ensemble de l'orienté objet et de l'orienté processus

Avant l'apparition de la méthode de programmation orientée objet , dans le processus de développement de logiciels, les gens utilisaient largement la méthode de programmation orientée processus .

La programmation orientée processus présente les caractéristiques d'une structure claire et d'une forte modularisation. Cependant, la méthode de programmation orientée processus prend la fonction comme noyau et sépare les données de l'opération sur les données.Une fois que les exigences de la fonction changent, il peut être nécessaire de redéfinir la structure des données, et donc de réécrire beaucoup de code. Parce qu'une fois que la structure de données change, toutes les opérations qui s'y rapportent doivent être modifiées, et les codes de fonction qui implémentent ces opérations changeront également en conséquence. Parfois, même si les fonctions sont similaires, le code doit être réécrit et ne peut pas être réutilisé car il est utilisé sur une structure de données différente. Par conséquent, la programmation orientée processus présente les inconvénients d'une mauvaise réutilisabilité et maintenabilité du code, et n'est pas adaptée au développement et à la maintenance de programmes à grande échelle.

Le paradigme de programmation orienté processus est « programme = algorithme + structure de données ». La séparation des données et de l'exploitation des données rend difficile la maintenance des logiciels (y compris les tests, le débogage et la mise à niveau des logiciels). Avec la prospérité de l'industrie du logiciel, la méthode de programmation orientée objet émerge au fur et à mesure que le temps l'exige, et elle résout bien les problèmes ci-dessus.

2.1 Orienté processus

  1. Le cœur du design thinking : la décomposition fonctionnelle . Généralement effectué à l'aide d'une approche de raffinement descendante, étape par étape (programmation structurée)
  2. L'unité de base d'un programme : la fonction
  3. Données et relations opérationnelles : cette approche est basée sur la fonctionnalité et sépare les données des opérations sur les données
  4. Avantages : structure claire, forte modularité
  5. Inconvénients : Mauvaise réutilisabilité du code , peu propice à la maintenance et à l'expansion du code .
    Une fois que les exigences fonctionnelles changent, même si les fonctions sont similaires, la structure de données peut devoir être redéfinie, et toutes les opérations et codes de fonction associés qui implémentent ces opérations doivent être modifiés.
  6. Applicable : conception de petits programmes et d'algorithmes .

2.2 Orienté objet

La programmation orientée objet (POO) est l'une des méthodes de programmation courantes à l'heure actuelle.
Un objet traditionnel est une instance d'une classe, qui encapsule des données et des opérations sur les données (également appelées méthodes), et envoie un message (Message) à l'objet, puis l'objet démarre les opérations associées (méthodes) pour exécuter diverses fonctions. Afin d'améliorer la réutilisabilité, la flexibilité et l'évolutivité du logiciel, il est largement utilisé dans la conception de projets à grande échelle.

  1. Le cœur de l'idée de conception : prendre les données comme centre, unifier les données et le fonctionnement des données dans leur ensemble.
  2. Relation entre les données et les opérations : unifiez les données et les opérations sur les données dans leur ensemble.
  3. L'unité de base du programme : l'objet (Object)
  4. Avantages : Cette méthode possède l'encapsulation, l'héritage et le polymorphisme, ce qui fournit une garantie technique solide pour améliorer la réutilisation, l'évolutivité et la maintenabilité du code.
  5. Applicable : conception de grands projets
  6. En fait, une classe est un type Différent des types de données de base en langage C, ce type a non seulement des membres de données, mais inclut également des fonctions membres pour opérer sur les membres de données. Ainsi, seules les variables (objets) occupent de l'espace mémoire, les classes non

Par exemple, si vous définissez une classe Person pour représenter des êtres humains,
vous devez décrire les caractéristiques de cette classe pour exprimer la différence entre cette classe Person et les autres classes. Essayons d'abord de trouver des caractéristiques communes aux humains : nom, sexe, âge, anniversaire, profession, loisirs, etc.
Vous constaterez que tout le monde autour de vous a ces attributs. Ensuite, nous pouvons décrire ces attributs avec les variables correspondantes : nom, sexe, âge, anniversaire, spécialité, passe-temps, etc.
En programmation orientée objet, un attribut est la donnée à exprimer, qui est appelée une donnée membre (Data Member) dans une classe , et représente les caractéristiques statiques partagées par ce type d'objet .
Quelles opérations les humains ont-ils sur ces données ? Par exemple, Wang Xiaoming a un an de plus et son âge doit être révisé. En vieillissant, ses passe-temps changent, il acquiert de nouvelles compétences, utilise son expertise pour trouver un emploi qui lui plaît, etc. En conséquence, il existe des fonctions telles que modify_Age(), modify_Hobby(), study(), job_Hunting() et ainsi de suite pour réaliser ces opérations. Ces opérations sur les données sont appelées fonctions membres (Member Function), qui représentent les caractéristiques dynamiques partagées par ce type d'objets .

3. Programmation orientée objet

Les caractéristiques les plus importantes de la programmation orientée objet sont l'encapsulation , l'héritage et le polymorphisme . Les concepts les plus importants sont les classes et les objets . La programmation orientée objet s'articule autour de la définition et de l'utilisation des classes .

3.1 Classes et objets

Toutes les données membres et les fonctions membres d' une classe forment un tout encapsulé. La relation entre les classes et les objets
① Du point de vue de l'utilisation : une classe est une abstraction d'un groupe d'objets avec les mêmes attributs et opérations . L'objet fournit un résumé unifié description ; l'objet est un individu concret de la classe, également appelé instance de la classe .
Par exemple, étudiant est une classe, et jinhao et niemanyu sont deux objets de classe étudiant.

② Une classe est essentiellement un type , qui est différent d'un type général : une classe comprend des données membres et des fonctions membres. L'objet appartient en fait à une variable
de type classe , qui est différente des variables générales : l'objet est identifié par la valeur d'un ensemble d'attributs spécifiques (c'est-à-dire des données membres) et peut exécuter le comportement défini par la classe. (C'est-à-dire, les fonctions membres) Les membres de données sont des éléments de données qui décrivent les caractéristiques statiques d'un objet, et les fonctions membres sont des opérations qui décrivent les caractéristiques dynamiques d'un objet. ③ Un objet est un ensemble de données et d'opérations

④ En d'autres termes, un objet est un ensemble d'attributs et de comportements

Pour résumer, l'objet doit appartenir à une certaine classe, et doit avoir un nom d'objet qui le distingue des autres objets du même type .
Il peut avoir sa propre valeur d'attribut , c'est-à-dire que le membre de données de chaque objet a une valeur spécifique pour identifier la caractéristique statique de l'objet. Il peut y avoir un groupe d' opérations
spécifiées par la classe , et chaque opération détermine un comportement dynamique de l'objet. Ce comportement est implémenté sous la forme de " nom de l'objet. nom de la fonction membre (liste de paramètres réels) ", et le comportement d'opérations similaires objets est cohérent.

3.3 Encapsulation

L'encapsulation est omniprésente dans la vie. Par exemple, pour les smartphones que nous utilisons tous les jours, en tant qu'utilisateurs, nous n'avons pas besoin de connaître la structure interne du téléphone mobile et les fonctions des puces sur la carte principale. Divers besoins des utilisateurs ; l'appareil photo capture diverses images ; le chargement l'interface complète l'entrée d'alimentation ; le commutateur de réglage règle le volume approprié ; le microphone entre les informations vocales, etc. Ces interfaces sont le support d'interaction entre les objets du téléphone mobile et les utilisateurs. Il suffit aux utilisateurs de connaître les fonctions de ces interfaces et de savoir les utiliser. Comme pour les composants du téléphone mobile, l'opération de l'utilisateur entraînera des changements d'état. des composants internes.Ces composants sont Des détails tels que la façon de participer au travail sont cachés à l'utilisateur, et le boîtier du téléphone les encapsule à l'intérieur. Un tel emballage peut garantir que les smartphones sont faciles à utiliser, que les composants sont protégés et que certaines technologies de fabrication de base peuvent être gardées secrètes.

L'encapsulation concerne principalement les objets . Un objet est un ensemble de données et d'opérations, mais il n'est pas entièrement enfermé. Les membres de l'objet sont conçus avec des restrictions sur les attributs d'accès : privé (attribut privé), protégé (attribut protégé), public ( propriété publique). Les membres privés ou protégés de l'objet sont encapsulés et les informations masquées, tandis que les membres d'attribut publics de l'objet sont présentés comme des interfaces externes, mais les détails d'implémentation spécifiques (c'est-à-dire le code d'implémentation des fonctions membres) sont masqués de l'extérieur. .

L'encapsulation permet à la programmation orientée objet d'avoir une sécurité et une fiabilité que la programmation orientée processus ne peut égaler.

3.4 Héritage

L'héritage est une mesure importante pour améliorer la réutilisabilité du code dans la programmation orientée objet.

L'héritage permet aux données membres et aux fonctions membres d' une classe (appelée base ou superclasse ) d'être réutilisées par une autre classe (appelée dérivée ou sous-classe ).

Dans la classe dérivée , il vous suffit d'ajouter des membres de données et des fonctions membres qui ne sont pas dans la classe de base, ou de modifier certains membres de la classe de base, afin d'éviter la duplication des codes publics et de réduire la redondance du code et des données.

3.5 Polymorphisme

Le polymorphisme est une caractéristique importante de la programmation orientée objet, ce qui signifie qu'un comportement correspond à de nombreuses méthodes d'implémentation différentes. C'est-à-dire que lorsque la même commande est émise, différentes réponses seront apportées en raison des différents sujets recevant la commande.

Il existe deux types de polymorphisme : le polymorphisme statique (également appelé polymorphisme à la compilation) et le polymorphisme dynamique (également appelé polymorphisme à l'exécution). Le polymorphisme statique est obtenu par surcharge de fonctions et surcharge d'opérateurs, tandis que le polymorphisme dynamique nécessite un héritage, des fonctions virtuelles et des pointeurs ou des références aux classes de base.

Par conséquent, l'importance du polymorphisme est d'utiliser la même interface pour implémenter différentes opérations, de sorte qu'il est très pratique d'utiliser des classes directement pour le développement de programmes.

4. Présentation du langage C++

4.1 Contexte

Le développement du langage C++ a commencé en 1980. Bjarne Stroustrup des Bell Labs a amélioré et développé le langage C, ajoutant la prise en charge de la programmation orientée objet. Le résultat initial s'appelait "C avec classes". Il a été officiellement nommé C++ en 1983. Après trois révisions, le brouillon de la norme ANSI C++ a été formulé en 1994. Après une amélioration continue, il est devenu le langage C++ actuel, et est toujours évoluant. Le langage C++ est un langage hybride qui prend en charge à la fois la programmation orientée processus et la programmation orientée objet, et est l'un des langages de programmation de haut niveau les plus largement utilisés.

4.2 C++ prend en charge la programmation orientée objet

Le langage C++ prend en charge la programmation orientée objet, qui se manifeste dans les trois aspects suivants.

1. Prise en charge de l'encapsulation

Le langage C++ permet l'utilisation de classes et d'objets. Une classe est un outil qui prend en charge l'encapsulation, et un objet est une entité encapsulée et une implémentation concrète de l'encapsulation.

2. Soutenir l'héritage

Le langage C++ prend en charge à la fois l'héritage unique et l'héritage multiple.

3. Soutenir le polymorphisme

Le langage C++ prend en charge à la fois le polymorphisme statique et le polymorphisme dynamique, principalement dans les deux aspects suivants : le polymorphisme statique réalisé par liaison statique et le polymorphisme dynamique réalisé par liaison dynamique.

4.3 Relation entre le langage C++ et le langage C

Le langage C++ est développé à partir du langage C, est compatible avec le langage C et a amélioré et élargi le langage C. La relation entre eux peut être résumée par l'héritage et l'amélioration.

4.3.1. Le langage C++ hérite du langage C

Le langage C est un sous-ensemble du langage C++. La plupart du lexique et de la grammaire du langage C peuvent être directement utilisés dans le langage C++,
par exemple :

(1) Les types, opérateurs et expressions en langage C peuvent être utilisés en langage C++ ;

(2) Les instructions en langage C sont également des instructions en langage C++ ; les définitions de fonctions et les appels en langage C sont également légaux en langage C++ ;

(3) La commande de prétraitement du langage C peut également être utilisée en langage C++ ;

(4) Les types construits en langage C, tels que les tableaux, les structures et les types d'union peuvent également être utilisés en langage C++, mais le langage C++ offre une utilisation plus concise et flexible ;

(5) Les pointeurs du langage C sont utilisés de la même manière que le langage C++, mais le langage C++ introduit un moyen plus pratique dans la gestion de l'espace mémoire dynamique et réduit considérablement l'utilisation de pointeurs non sécurisés en ajoutant des "références" ;

(6) Les règles concernant la portée et la classe de stockage en langage C sont également applicables en langage C++.

4.3.2 Le langage C++ améliore le langage C

Bien que le langage C++ conserve le style et les caractéristiques du langage C, il améliore également certaines des lacunes du langage C. Voici une brève liste de quelques améliorations apportées par le langage C++ au langage C.

(1) Le langage C++ fournit une bibliothèque de classes de flux d'E/S différente du langage C, ce qui facilite les opérations d'entrée/sortie.

(2) Le langage C++ introduit un espace de noms pour éviter le problème du même nom.

(3) Le langage C++ a nouvellement ajouté le type bool dédié au traitement des valeurs logiques, et a ajouté le type string pour faciliter le traitement des chaînes. Permet de définir des unions sans nom, des types d'énumération sans nom et a de nouvelles utilisations. Le type de structure a été étendu et la structure peut avoir des fonctions membres.

(4) Le langage C++ permet aux paramètres formels des fonctions d'avoir des valeurs par défaut, ce qui facilite les appels de fonctions.

(5) Le langage C++ introduit des mécanismes de surcharge de fonctions et de surcharge d'opérateurs, ce qui facilite la programmation.

(6) Le langage C++ introduit le concept de "référence". La variable elle-même peut être directement manipulée via l'alias de la variable au lieu d'être indirectement via le pointeur vers la variable. Cela réduit considérablement l'utilisation de pointeurs et améliore la sécurité de la programme.

(7) Le langage C++ fournit un mécanisme de vérification et de gestion des exceptions, ce qui améliore la robustesse du programme.

(8) Le langage C++ utilise des pointeurs pour utiliser les opérateurs new et delete au lieu de fonctions pour allouer et libérer de l'espace mémoire dynamique plus facilement.

4.3 Autres langages de programmation orientés objet (comprendre)

En tant que sorte de langage de haut niveau, le langage de programmation orienté objet a été développé dans les années 1960, et des langages de programmation orientés objet tels que Simula, Smalltalk, Object-C, Eiffel, Ada, C++, Java et Python sont apparus successivement. .

Le langage Simula 67 développé dans les années 1960 est connu comme étant à l'origine du langage de programmation orienté objet, car il proposait les concepts d'objets, de classes, d'héritage et de termes orientés objet. langue.

Le langage Smalltalk a été développé dans les années 1970. Il incarne pleinement les concepts orientés objet de Simula et d'autres langages prototypes. Il est passé par plusieurs versions de Smalltalk-72, Smalltalk-76 et Smalltalk-80. Aujourd'hui, Smalltalk est généralement utilisé. -80.

Le langage Object-C a été développé vers 1983. Il a été développé sur la base du langage C, et la définition de la classe et la transmission des messages sont complétées par les constructions et les opérateurs nouvellement introduits.Sa syntaxe ressemble plus au langage Smalltalk.

Le langage Eiffel est théoriquement un meilleur langage de programmation orienté objet. En plus de l'encapsulation et de l'héritage, il intègre également plusieurs fonctionnalités orientées objet puissantes, telles que le polymorphisme paramétrique et les préconditions pour les méthodes et la post-assertion etc.

Le développement du langage Ada a commencé en 1975, et il a été conçu à l'origine pour construire des systèmes logiciels hautement fiables à long terme. Ada a une syntaxe rigoureuse, une belle écriture et une forte lisibilité. Il fournit une série de fonctions pour définir les types de données (types), les objets (objects) et les packages d'opérations (packages) associés. Ada a deux versions principales, Ada 83 et Ada 95. Ada a déjà été mandaté par le département américain de la Défense comme le seul langage de développement pour les systèmes d'armes militaires.

Le langage Java est un langage de programmation orienté objet développé par SUN au début des années 1990. Ses avantages sont simples, orientés objet, indépendants de la structure matérielle, une forte portabilité, une haute sécurité et une utilisation maximale du réseau et sont donc largement utilisés en réseau. la programmation.

Python a été conçu à l'origine pour l'écriture de scripts d'automatisation (Shell).Avec la mise à jour continue de la version et l'ajout de nouvelles fonctionnalités du langage, il est de plus en plus utilisé pour le développement de projets indépendants et à grande échelle.

4.4 Environnement de développement de programme C++

Pour développer un programme en langage C++, certaines étapes et méthodes doivent être suivies. Avec le support d'un IDE puissant, le développement de programmes C++ deviendra plus facile.

L'environnement intégré fournit des composants de base tels que l'éditeur, le compilateur, l'éditeur de liens, la bibliothèque, etc., afin que le programme source puisse être complété de l'édition à l'exécution finale dans l'environnement intégré. Actuellement, les environnements intégrés C++ couramment utilisés incluent Microsoft Visual Studio, C++ Builder, GCC, Visual Studio Code, etc.
Le téléchargement de Microsoft Visual Studio 2010 et quelques opérations simples sont détaillées dans le cours de première année du langage C en difficulté route 1 (vue d'ensemble de l'ordinateur et Visual Studio)

1. Éditeur

L'éditeur fournit aux utilisateurs un environnement interactif pour créer et éditer le code source C++. En plus des fonctions d'édition couramment utilisées, il peut également utiliser différentes couleurs pour refléter différents éléments du langage C++, reconnaître automatiquement les mots de base du langage C++ et attribuer des couleurs en fonction de leurs catégories. Ce processus de séparation des couleurs améliore la lisibilité du code et peut fournir des instructions claires lorsque ces mots sont saisis de manière incorrecte. Il n'est donc pas recommandé d'écrire le code source dans l'éditeur de texte de bureau habituel.

2. Compilateur

Les compilateurs convertissent le code source en code objet et détectent et signalent les erreurs lors de la compilation. Les compilateurs peuvent détecter toutes sortes d'erreurs de syntaxe causées par un code de programme invalide ou non reconnu, ainsi que des erreurs structurelles, telles que des parties de code qui ne seront jamais exécutées. Le code objet produit par le compilateur est stocké dans un fichier appelé fichier objet, qui porte l'extension .obj.

3. Lien

L'éditeur de liens combine les différents modules générés par le compilateur sur la base des fichiers de code source, puis ajoute le code requis à partir de la bibliothèque faisant partie de C++ et intègre ces codes dans un programme exécutable.Détecter et signaler les bogues. Par exemple, un composant manque dans le programme ou une bibliothèque référencée n'existe pas. Le code généré par le lien réussi est un fichier exécutable et l'extension du fichier est .exe.

4. Bibliothèques

Une bibliothèque est une collection de routines pré-écrites en C++, telles que le calcul de racines carrées et le calcul de fonctions numériques telles que les fonctions trigonométriques, le traitement de chaînes, etc. Prise en charge et extension du langage C++ en fournissant des unités de code standard. L'opération la plus courante consiste à fusionner ces codes dans le propre programme de l'utilisateur, ce qui permet à l'utilisateur de gagner du temps pour écrire et tester ces codes et d'améliorer l'efficacité.

Je suppose que tu aimes

Origine blog.csdn.net/yanqiu12138/article/details/129030146
conseillé
Classement