Contacts

§1 Informations générales sur la langue. Étapes de la conception du programme. Modèles de cycle de vie des applications. Histoire du langage C Quand le langage a-t-il été créé avec

Langage de programmation C++

Dernière mise à jour : 28.08.2017

Le langage de programmation C ++ est un langage de programmation compilé généraliste de haut niveau, typé statiquement, qui convient à la création d'une grande variété d'applications. Aujourd'hui, le C++ est l'un des langages les plus populaires et les plus répandus.

Il a ses racines dans le langage C, qui a été développé en 1969-1973 aux Bell Labs par le programmeur Dennis Ritchie. Au début des années 1980, le programmeur danois Bjarne Stroustrup, qui travaillait aux Bell Labs à l'époque, a développé C++ comme une extension du langage C. En fait, au début, C++ complétait simplement le langage C avec des capacités de programmation orientées objet. Et donc Stroustrup lui-même l'a d'abord appelé "C avec des classes".

Par la suite, la nouvelle langue a commencé à gagner en popularité. De nouvelles fonctionnalités y ont été ajoutées, ce qui en fait non seulement un ajout au C, mais un tout nouveau langage de programmation. En conséquence, "C avec classes" a été renommé C ++. Et à partir de là, les deux langues ont commencé à se développer indépendamment l'une de l'autre.

C ++ est un langage puissant, héritant des riches capacités de mémoire du C. Par conséquent, le C++ trouve souvent son application dans la programmation système, en particulier lors de la création de systèmes d'exploitation, de pilotes, d'utilitaires divers, d'antivirus, etc. Soit dit en passant, Windows est principalement écrit en C++. Mais l'utilisation de ce langage ne se limite pas seulement à la programmation système. C ++ peut être utilisé dans des programmes de tout niveau où la vitesse et les performances sont importantes. Il est souvent utilisé pour créer des applications graphiques, divers programmes d'application. Il est aussi particulièrement souvent utilisé pour créer des jeux avec une visualisation riche et riche. De plus, récemment, la direction mobile a pris de l'ampleur, où C ++ a également trouvé son application. Et même dans le développement Web, il est également possible d'utiliser C ++ pour créer des applications Web ou une sorte de services d'assistance qui servent des applications Web. En général, C++ est un langage largement utilisé dans lequel vous pouvez créer presque n'importe quel type de programme.

C ++ est un langage compilé, ce qui signifie que le compilateur traduit le code source C ++ en un fichier exécutable qui contient un ensemble d'instructions machine. Mais différentes plates-formes ont leurs propres caractéristiques, de sorte que les programmes compilés ne peuvent pas être simplement transférés d'une plate-forme à une autre et y être exécutés. Cependant, au niveau du code source, les programmes C++ sont pour la plupart portables, à moins que certaines fonctions spécifiques au système d'exploitation actuel ne soient utilisées. Et la présence de compilateurs, de bibliothèques et d'outils de développement pour presque toutes les plates-formes courantes vous permet de compiler le même code source C ++ dans des applications pour ces plates-formes.

Contrairement au C, le langage C++ vous permet d'écrire des applications dans un style orienté objet, représentant un programme comme une collection de classes et d'objets en interaction. Cela facilite la création de grandes applications.

Les principales étapes de développement

En 1979-80, Bjarne Stroustrup a développé une extension du langage C - "C with classes". En 1983, le langage a été renommé C++.

En 1985, la première version commerciale du langage C++ est sortie, ainsi que la première édition du livre "The C++ Programming Language", qui fournissait la première description de ce langage en l'absence de norme officielle.

En 1989, une nouvelle version du langage C ++ 2.0 a été publiée, qui comprenait un certain nombre de nouvelles fonctionnalités. Après cela, la langue s'est développée relativement lentement jusqu'en 2011. Mais en même temps, en 1998, la première tentative de standardisation du langage est faite par l'ISO (International Organization for Standartization). La première norme s'appelait ISO/IEC 14882 : 1998, ou C++ 98 en abrégé. Plus tard, en 2003, une nouvelle version de la norme C ++ 03 a été publiée.

En 2011, la nouvelle norme C++ 11 a été publiée, qui contenait de nombreux ajouts et a enrichi le langage C++ d'un grand nombre de nouvelles fonctionnalités. Après cela, en 2014, un petit ajout à la norme a été publié, également connu sous le nom de C ++ 14. Et une autre version clé de la langue est prévue pour 2017.

Compilateurs et environnements de développement

Pour développer des programmes C ++, vous avez besoin d'un compilateur - il traduit le code source C ++ en un fichier exécutable, que vous pouvez ensuite exécuter. Mais pour le moment, il existe de nombreux compilateurs différents. Ils peuvent différer sous divers aspects, notamment dans la mise en œuvre des normes. Une liste de base des compilateurs pour C++ peut être trouvée sur Wikipedia. Il est recommandé pour le développement de choisir les compilateurs qui développent et implémentent toutes les dernières normes. Ainsi, tout au long de ce tutoriel, le compilateur gratuit g++ développé par le projet GNU sera principalement utilisé.

Vous pouvez également utiliser des IDE tels que Visual Studio, Netbeans, Eclipse, Qt, etc. pour créer des programmes.

C et UNIX

Langage de programmation AVEC(lire "C") a été créé au début des années 70 lorsque Ken Thompson et Dennis Ritchie de Bell Labs développaient le système d'exploitation UNDC. Ils ont d'abord créé la partie compilateur AVEC, puis l'a utilisé pour compiler le reste du compilateur AVEC et finalement appliqué le compilateur résultant pour compiler UNIX. Le système d'exploitation UNIX a été distribué à l'origine en code source sur AVEC entre les universités et les laboratoires, et le destinataire pourrait compiler le code source dans la langue AVEC en code machine avec un compilateur approprié AVEC.

La distribution du code source a rendu le système d'exploitation UNIX unique ; le programmeur peut changer le système d'exploitation et le code source peut être porté d'une plate-forme matérielle à une autre. Aujourd'hui, la norme POSIX définit un ensemble standard d'appels système UNIX disponibles dans AVECà implémenter sur les versions UNIX compatibles POSIX. C était le troisième langage développé par Thomson et Ritchie lors de la création d'UNIX ; les deux premiers étaient, bien sûr, UNE et V.

C langage d'assemblage mobile

Par rapport à la langue antérieure - BCPL, langue AVEC a été amélioré en ajoutant des types de données de longueurs spécifiques. Par exemple, le type de données int peut être utilisé pour créer une variable avec un nombre spécifique de bits (généralement 16), tandis que le type de données long peut être utilisé pour créer une variable entière avec un grand nombre de bits (généralement 32). Contrairement à d'autres langages de haut niveau, AVEC pourrait travailler avec des adresses mémoire directement en utilisant des pointeurs et des références. Dans la mesure où AVEC a conservé la possibilité d'accéder directement au matériel, il est souvent appelé langage de niveau intermédiaire ou est appelé en plaisantant "langage d'assemblage mobile".

С - langage de programmation structuré

En ce qui concerne la grammaire et la syntaxe, alors AVEC est un langage de programmation structuré. Alors que de nombreux programmeurs modernes pensent en termes de classes et d'objets, les programmeurs en AVEC penser en termes de procédures et de fonctions. V AVEC vous pouvez définir vos propres types de données abstraits à l'aide du mot-clé struct. De même, vous pouvez décrire vos propres types d'entiers (énumérations) et donner d'autres noms aux types de données existants à l'aide du mot-clé typedef. Dans ce sens AVEC est un langage structuré avec les graines de la programmation orientée objet.

Standardisation du langage C

Utilisation répandue de la langue C sur différents types d'ordinateurs (parfois appelés plates-formes matérielles) a malheureusement conduit à de nombreuses variantes du langage. Ils étaient similaires, mais incompatibles les uns avec les autres. C'était un problème majeur pour les développeurs de logiciels qui devaient écrire des programmes compatibles pouvant s'exécuter sur plusieurs plates-formes. Il est devenu clair qu'une version standard était nécessaire C... En 1983. ANSI (American National Standards Committee) a formé un comité technique X3J11 pour créer une norme linguistique C(pour « fournir une définition du langage sans ambiguïté et indépendante de la machine »). En 1989, la norme a été approuvée. L'ANSI s'est associée à l'ISO (Organisation internationale de normalisation) pour normaliser C internationalement; une norme commune a été publiée en 1990 et nommée ANSI/ISO 9899 : 1990. Cette norme est encore en cours d'amélioration et est prise en charge par la majorité des sociétés de développement de compilateurs.

La naissance du C++

Björn Stroustrup a libéré le potentiel orienté objet AVEC en transférant les capacités des classes Simulateur 67 v AVEC... Initialement, le nouveau langage portait le nom de "C avec classes" et ce n'est qu'alors qu'il a commencé à s'appeler C++... Langue C++ Il est devenu populaire lorsqu'il a été développé dans les Bell Labs, et plus tard, il a été transféré à d'autres industries et sociétés. Aujourd'hui, c'est l'un des langages de programmation les plus populaires (et respectés) au monde. C++ hérite à la fois des bons et des mauvais côtés AVEC.

Les révélations de Bjorn Stroustrup

Bjorn Stroustrup : « J'ai imaginé C++, a écrit sa définition d'origine et a fait la première implémentation. J'ai choisi et formulé des critères de conception C++, a développé ses principales caractéristiques et a été responsable du sort des propositions d'extension du langage au sein du comité de normalisation C++", - écrit l'auteur du langage de programmation le plus populaire. -" Langage C++ doit beaucoup à la langue C, et la langue C reste un sous-ensemble langage C++(mais C++ corrige plusieurs failles majeures dans le système de type C). J'ai aussi économisé des fonds C suffisamment bas pour gérer les tâches système les plus critiques. Langue C doit beaucoup à son prédécesseur, BCPL; au fait, le style de commentaire // a été pris en compte C++ de BCPL. La langue a été une autre grande source d'inspiration. Simula67... Le concept de classes (avec classes dérivées et fonctions virtuelles) lui a été emprunté. Le moyen de surcharger les opérateurs et la possibilité de placer des annonces partout où une instruction peut être écrite rappelle Algol68. "

Pourquoi C++

Nom C++ inventé par Rick Massitti. Le nom indique la nature évolutive de la transition vers elle de C... "++" est une opération d'incrémentation dans C... Nom un peu plus court C + est une erreur de syntaxe ; de plus, il a déjà été utilisé comme nom d'une langue complètement différente. Les connaisseurs de sémantique C Trouve ça C++ pire que ++ C... Noms le langage ne l'a pas compris, car il s'agit d'une extension de C et il n'essaie pas de résoudre les problèmes en supprimant diverses fonctionnalités.

Pourquoi C ++ était nécessaire

Initialement Langage de programmation C++ a été conçu pour que l'auteur et ses amis n'aient pas à programmer en assembleur, en C ou dans d'autres langages modernes de haut niveau. Son objectif principal était de rendre l'écriture de bons programmes plus facile et plus agréable pour le programmeur individuel. Plan de développement C++ n'a jamais été sur papier ; la conception, la documentation et la mise en œuvre ont été déplacées en même temps. Bien entendu, l'interface externe C++ a été écrit en C++... Le projet C++ et le comité de développement C++ n'ont jamais existé. Alors C++ a évolué et continue d'évoluer dans tous les sens pour faire face aux complexités rencontrées par les utilisateurs, ainsi qu'au cours des discussions entre l'auteur et ses amis et collègues.

C++ orienté objet réel

V langage C++ les principes de la programmation orientée objet sont pleinement pris en charge, y compris les trois piliers sur lesquels elle repose : l'encapsulation, l'héritage et le polymorphisme. Encapsulation dans C++ pris en charge par la création de types de données non standard (personnalisés) appelés classes. Langue C++ prend en charge l'héritage. Cela signifie que vous pouvez déclarer un nouveau type de données (classe), qui est une extension de celui existant.

Bien que Langage de programmation C++ appelé à juste titre une continuation AVEC et tout programme exploitable dans la langue AVEC sera pris en charge par le compilateur C++, en allant de AVECÀ C++ un bond très important a été fait. Langue C++ profité de son affinité avec la langue AVEC au fil des ans, car de nombreux programmeurs ont découvert que pour profiter pleinement des avantages langage C++, ils doivent abandonner certaines de leurs connaissances antérieures et en acquérir de nouvelles, à savoir : apprendre une nouvelle façon de conceptualiser et de résoudre des problèmes de programmation. Avant de commencer à maîtriser C++, Stroustrup et la plupart des autres programmeurs utilisant C++ envisager l'apprentissage des langues AVEC optionnel.

Langage de programmation C++ actuellement considéré comme le langage dominant utilisé pour développer des produits commerciaux, 90 % des jeux sont écrits en C++ en utilisant DirectX.

Littérature

Sources:

  • H.M.Deitel, P.J.Deitel "Comment programmer en C++"
  • Bjarne Stroustrup "Le langage de programmation C ++. 3e édition."
  • Simon Robinson, Ollie Cornes, Jay Glynn et autres "C # pour les professionnels"
  • Jess Liberty "Apprenez C++ par vous-même en 21 jours"
  • Stanislav Gornakov "Cours de programmation DirectX, C++"

C ++ (lit C-plus-plus) est un langage de programmation généraliste compilé et typé statiquement dans lequel vous pouvez créer des programmes de toute complexité.
Depuis plus de 20 ans, ce langage fait partie des trois langages de programmation les plus populaires et les plus demandés. (Vous pouvez le vérifier en visitant le site Web de TIOBE).
Le langage est né au début des années 1980, lorsque Björn Stroustrup, employé de Bell Labs, a proposé un certain nombre d'améliorations au langage C pour répondre à ses propres besoins.

Bjarne Stroustrup - le créateur du langage C++

Stroustrup a décidé de compléter le langage C avec les capacités du langage Simula. C, en tant que langage de base du système UNIX sur lequel les ordinateurs Bell fonctionnaient, est rapide, riche en fonctionnalités et portable. Stroustrup y a ajouté la possibilité de travailler avec des classes et des objets. En conséquence, des problèmes pratiques de modélisation se sont avérés disponibles pour être résolus à la fois en termes de temps de développement (grâce à l'utilisation de classes de type Simula) et en termes de temps de calcul (grâce à la vitesse de C).
Voici comment le développeur du langage lui-même en parle :



En 1998, le premier standard de langage, connu sous le nom de C++ 98, a été publié par un comité de normalisation. C++ continue d'évoluer pour répondre aux exigences modernes. L'un des groupes qui développent le langage C ++ et envoient des suggestions pour l'améliorer au comité de normalisation C ++ est Renforcer, qui s'occupe, entre autres, d'améliorer les capacités du langage en lui ajoutant des fonctionnalités de métaprogrammation. La dernière norme a été publiée en 2017 et s'appelle C++ 17... La prochaine norme ne se fera pas attendre et apparaîtra comme prévu en 2020.
Personne ne possède les droits sur le langage C++, il est gratuit. En mars 2016, un groupe de travail WG21 C++ a été créé en Russie. Le groupe a été organisé pour recueillir des propositions pour la norme C++, les envoyer au comité et les défendre lors des assemblées générales de l'Organisation internationale de normalisation.
C ++ est un langage multi-paradigmes (du mot paradigme - le style d'écriture de programmes informatiques), qui comprend un large éventail de styles et de technologies de programmation différents. Il est souvent qualifié de langage orienté objet, mais à proprement parler, ce n'est pas le cas. Au cours du travail, le développeur acquiert une liberté absolue dans le choix des outils afin que le problème résolu à l'aide de telle ou telle approche soit résolu le plus efficacement possible. En d'autres termes, C++ n'oblige pas le programmeur à s'en tenir à un seul style de développement de programme (par exemple, orienté objet).
C ++ possède une riche bibliothèque standard qui inclut des conteneurs et des algorithmes communs, des E/S, des expressions régulières, une prise en charge du multithreading, etc. C++ a influencé de nombreux langages de programmation, notamment : Java, C#, D. Puisque C++ appartient à la famille des langages basés sur la syntaxe du langage C, vous pouvez facilement maîtriser d'autres langages de programmation de cette famille : JavaScript, PHP, Perl, Objective-C et bien d'autres. ... d'autres, y compris la langue mère elle-même - C. ()
Au cours de son existence, le langage C++ a enraciné des mythes stables qui sont facilement réfutés (voir ici : Partie 1 et Partie 2)

Histoire de la langue et publication des normes

1983

Le créateur de la langue - Bjorn Stroustrup, employé de Bell Labs, a présenté une première version de C ++ (« C avec classes »)

1985

Première version commerciale du C++, le langage prend son nom moderne

1986

Première édition de The C++ Programming Language, un livre sur C++ écrit par Björn Stroustrup

1998

Ratification de la norme internationale pour le langage C++ : ISO/IEC 14882 : 1998 "Standard for the C++ Programming Language"

2003
2005

Publication du rapport technique 1 de la bibliothèque (TR1). Bien qu'il ne fasse pas officiellement partie de la norme, le rapport décrit les extensions de la bibliothèque standard qui devraient être incluses dans la prochaine version du langage C ++.

2011

La sortie d'une nouvelle norme - C++ 11 ou ISO/IEC 14882 : 2011 ; la nouvelle norme comprenait des ajouts au noyau du langage et une extension de la bibliothèque standard, y compris la plupart des TR1

2014

La sortie de la norme C++ 14 ("International Standard ISO/IEC 14882 : 2014 (E) Programming Language C++" ); C ++ 14 peut être considéré comme une petite extension sur C ++ 11, contenant principalement des corrections de bogues et des améliorations mineures

2017

Nouvelle norme publiée - C ++ 1z (C ++ 17). Cette norme a introduit de nombreux changements et ajouts. Par exemple, le STD comprend des bibliothèques de la norme C11, un système de fichiers basé sur boost :: filesystem, la plupart de la bibliothèque expérimentale TS I.

2020

C ++ 20 est le nom non officiel de la norme ISO / IEC pour le langage de programmation C ++, qui est attendu après C ++ 17. Ébauche de la norme N4800.

Philosophie C++

Dans The Design and Evolution of C++ (2007), Björne Stroustrup décrit les principes qu'il a suivis dans la conception de C++ (en abrégé) :

  • Obtenez un langage générique avec des types de données statiques, l'efficacité et la portabilité du langage C.
  • Prend en charge de nombreux styles de programmation directement et de manière complète.
  • Donnez au programmeur la liberté de choisir, même si cela lui donne la possibilité de choisir le mauvais.
  • Maintenir la compatibilité avec C autant que possible, rendant ainsi possible une transition facile de la programmation C.
  • Evitez la confusion entre C et C++ : toute construction autorisée dans les deux langages doit avoir la même signification dans chacun d'eux et conduire au même comportement du programme.
  • Évitez les fonctionnalités dépendantes de la plate-forme ou non génériques.
  • Ne payez pas pour ce qui n'est pas utilisé — aucun outil linguistique ne doit dégrader les performances des programmes qui ne l'utilisent pas.
  • Ne nécessite pas un environnement de programmation trop compliqué.

C et C++

La syntaxe du C++ est héritée du langage C. Bien que, formellement, l'un des principes du C++ reste la préservation de la compatibilité avec le langage C, en fait, les groupes de normalisation de ces langages ne le font pas. interagissent, et les changements qu'ils apportent non seulement ne sont pas corrélés, mais se contredisent souvent fondamentalement idéologiquement. Par exemple, les éléments que les nouvelles normes C ajoutent au noyau sont des éléments de la bibliothèque standard du standard C ++ et sont totalement absents du noyau, par exemple, des tableaux dynamiques, des tableaux à limites fixes, des installations de traitement parallèles. Il serait très avantageux de combiner le développement des deux langues, a déclaré Stroustrup, mais il est peu probable que ce soit politiquement faisable. Ainsi, la compatibilité pratique entre C et C++ sera progressivement perdue.
Dans cet exemple, selon le compilateur utilisé, il affichera soit « C ++ » ou « C » :

Programme 9.1

#inclure int main () (printf ("% s \ n", (sizeof ("a") == sizeof (char))? "C ++": "C"); return 0;)

Cela est dû au fait que les constantes de caractères en C sont de type int, et en C++ elles sont de type char, mais les tailles de ces types sont différentes.

Modèles de cycle de vie des applications

Cycle de la vie le logiciel est une période de temps qui commence à partir du moment où une décision est prise quant à la nécessité de créer un produit logiciel et se termine au moment de son retrait complet. Ce cycle est le processus de construction et de développement de logiciels (logiciels). Il existe plusieurs modèles de cycle de vie.
Modèle en cascade cycle de vie (eng. chute d'eau modèle) a été proposé en 1970 par Winston Royce. Il prévoit l'exécution séquentielle de toutes les étapes du projet dans un ordre strictement fixe. Le passage à l'étape suivante signifie l'achèvement complet des travaux de l'étape précédente. Les exigences, déterminées au stade de la formation des exigences, sont strictement documentées sous forme de spécifications techniques et sont fixées pour toute la période de développement du projet. Chaque étape se termine par la publication d'un ensemble complet de documentation suffisant pour que le développement soit poursuivi par une autre équipe de développement.
Étapes du projet selon le modèle de la cascade :

  1. Formation des exigences ;
  2. Conception;
  3. Mise en œuvre;
  4. Essai;
  5. Mise en œuvre;
  6. Opération et maintenance.

Dans un modèle en cascade, le passage d'une phase du projet à une autre suppose l'entière justesse du résultat de la phase précédente. Dans les grands projets, cela est presque impossible à réaliser. Par conséquent, ce modèle ne convient que pour développer un petit projet. (W. Royce lui-même n'a pas adhéré à ce modèle et a utilisé un modèle itératif).
Modèle itératif
Une alternative au modèle en cascade est le modèle de développement itératif et incrémental (IID) obtenu de T. Gilb dans les années 70. le nom du modèle évolutif. Le modèle IID suppose de diviser le cycle de vie du projet en une série d'itérations, dont chacune ressemble à un « mini-projet », y compris tous les processus de développement appliqués à la création de plus petites fonctionnalités, par rapport au projet dans son ensemble. Le but de chaque itération est d'obtenir une version fonctionnelle du système logiciel qui inclut les fonctionnalités définies par le contenu intégré de toutes les itérations précédentes et actuelles. Le résultat de l'itération finale contient toutes les fonctionnalités requises du produit. Ainsi, à la fin de chaque itération, le produit reçoit un incrément - un incrément - de ses capacités, qui, par conséquent, se développent de manière évolutive.


Différentes versions de l'approche itérative sont mises en œuvre dans la plupart des méthodologies de développement modernes :

Processus de développement - Rational Unified Process (RUP)

Processus unifié rationnel (RUP)(Lean Unified Process) est une méthodologie de développement logiciel prise en charge par Rational Software (IBM). La méthodologie fournit des recommandations pour toutes les étapes de développement : de la modélisation commerciale aux tests et à la mise en service du programme fini. Le langage de modélisation unifié (UML) est utilisé comme langage de modélisation.
Le cycle de vie complet du développement du produit se compose de quatre phases, chacune comprenant une ou plusieurs itérations.

  • Étape initiale (création)
  • Déterminer la portée du projet et la quantité de ressources nécessaires. Les exigences de base, les limitations et les fonctionnalités clés du produit sont identifiées. Les risques sont évalués. Plan d'action. A l'issue de la phase initiale, l'atteinte du Lifecycle Objective Milestone est évaluée, ce qui suppose un accord entre les parties prenantes sur la poursuite du projet.

  • Élaboration
  • Documentation des exigences. Conception, implémentation et test d'une architecture exécutable. Clarification des conditions et des coûts. Réduire les risques majeurs. La réussite de la phase de développement signifie atteindre le jalon de l'architecture du cycle de vie.

  • Construction
  • Dans la phase "Build", la plupart des fonctionnalités du produit sont implémentées : la conception de l'application est terminée, le code source est écrit. La phase de construction se termine par la première version externe du système et un jalon de capacité opérationnelle initiale.

  • Transition
  • Dans la phase "Implémentation", la version finale du produit est créée et transférée du développeur au client. Cela comprend un programme de test bêta, la formation des utilisateurs et la détermination de la qualité du produit. Si la qualité ne répond pas aux attentes des utilisateurs ou aux critères fixés dans la phase de démarrage, la phase de mise en œuvre est répétée à nouveau. Atteindre tous les objectifs signifie atteindre le jalon de lancement du produit et terminer le cycle de développement complet.



"Informatique. Ingénierie système et logiciel. Processus du cycle de vie du logiciel ». Cette norme a été adoptée par l'Agence fédérale de réglementation technique et de métrologie de la Fédération de Russie et est similaire à la norme internationale ISO / IEC 12207: 2008. Cette norme établit un cadre général pour les processus du cycle de vie des logiciels qui peuvent être guidés dans l'industrie du logiciel. La norme ne propose pas de modèle de cycle de vie spécifique. Ses dispositions sont communes à tous les modèles de cycle de vie, méthodes et technologies de création de logiciels. Il décrit la structure des processus du cycle de vie sans spécifier comment mettre en œuvre ou exécuter les activités et les tâches incluses dans ces processus.

Présentation de la leçon
Sujets des messages
  • Fondation du logiciel libre (FSF)
  • Licences de logiciels libres
  • Logiciel gratuit et open source
  • Histoire du développement des langages de programmation
  • L'histoire du C.C et du C++
  • Récit
  • C++ critique
  • Histoire d'UNIX
  • Modèle de cycle de vie du logiciel en spirale
  • UML (langage de modélisation unifié anglais)
  • Cadre de solutions Microsoft
  • IDE pour la programmation C/C++ sous Windows
  • Compilateurs C/C++
  • Création d'une application console sous Windows
Des questions
  1. Pourquoi le modèle de développement logiciel en cascade n'est-il pas appliqué aux grands projets ?
  2. Quelle est la différence entre les modèles de développement en cascade et itératifs ?
  3. Répertorier les étapes de développement logiciel dans la méthodologie Rational Unified Process (RUP)

C ++ est un langage de programmation généraliste compilé qui combine les propriétés des langages de programmation de haut niveau et de bas niveau. Par rapport à son prédécesseur, le langage de programmation C, la plus grande attention est accordée à la prise en charge de la programmation orientée objet et générique. Le nom langage de programmation C++ vient du langage de programmation C, dans lequel l'opérateur unaire ++ désigne l'incrément d'une variable.

Le langage de programmation C++ est largement utilisé pour le développement de logiciels. À savoir, la création d'une variété de programmes d'application, le développement de systèmes d'exploitation, de pilotes de périphériques, ainsi que de jeux vidéo et bien plus encore. Il a été créé au début des années 1980 par Björn Stroustrup. Il a proposé un certain nombre d'améliorations au langage de programmation C pour son propre usage. celles. il n'était pas prévu à l'origine de créer le langage de programmation C++.

Il prend en charge des paradigmes de programmation tels que la programmation procédurale, la programmation orientée objet, la programmation générique, fournit la modularité, la compilation séparée, la gestion des exceptions, l'abstraction de données, la déclaration de types (classes) d'objets, les fonctions virtuelles.

Le nom de langage résultant provient de l'opérateur d'incrémentation de suffixe unaire C ++ (augmentant la valeur d'une variable d'une unité). Le nom C+ n'a pas été utilisé car il s'agit d'une erreur de syntaxe en C et, en plus, le nom a été repris par un autre langage. Le langage n'a pas non plus été nommé D car "c'est une extension de C et ne tente pas de résoudre les problèmes en supprimant des éléments C".

Avantages de la langue :

1. Évolutivité. Dans le langage C ++, les programmes sont développés pour une grande variété de plates-formes et de systèmes.

2. Capacité à travailler à bas niveau avec mémoire, adresses, ports.

3. La possibilité de créer des algorithmes généralisés pour différents types de données, leur spécialisation et des calculs de compilation à l'aide de modèles.

4. Multiplateforme. Les compilateurs sont disponibles pour un grand nombre de plates-formes, dans le langage C ++, ils développent des programmes pour une grande variété de plates-formes et de systèmes.

5. Efficacité. Le langage est conçu pour donner au programmeur un contrôle maximal sur tous les aspects de la structure et de l'ordre d'exécution du programme.

Inconvénients de la langue :

1. La présence de nombreuses fonctionnalités qui violent les principes de sécurité de type conduit au fait qu'une erreur subtile peut facilement se glisser dans les programmes C ++.

2. Mauvaise prise en charge de la modularité. La connexion d'une interface de module externe via l'insertion par préprocesseur d'un fichier d'en-tête (#include) ralentit sérieusement la compilation lors de la connexion d'un grand nombre de modules.

3. Le langage C++ est difficile à apprendre et à compiler.

4. Certaines conversions de type ne sont pas intuitives. En particulier, les opérations sur les nombres non signés et signés produisent des résultats non signés.

5. Certains considèrent que l'absence d'un système de récupération de place intégré est un inconvénient du C++. D'un autre côté, C++ dispose de suffisamment d'outils pour quasiment éliminer l'utilisation de pointeurs dangereux ; il n'y a pas de problèmes fondamentaux dans la mise en œuvre et l'utilisation du ramasse-miettes (au niveau des bibliothèques, pas du langage). L'absence de récupération de place intégrée permet à l'utilisateur de choisir sa propre stratégie de gestion des ressources.

Quelle est la raison de ce statut du langage C ? Historiquement, ce langage est indissociable du système d'exploitation Unix, qui connaît aujourd'hui sa renaissance. Les années 60 ont été l'ère de la formation des systèmes d'exploitation et des langages de programmation de haut niveau. Au cours de cette période, les systèmes d'exploitation et les compilateurs ont été développés indépendamment pour chaque type d'ordinateur, et souvent même leurs propres langages de programmation (rappelez-vous, par exemple, PL / I). Dans le même temps, la communauté des problèmes qui en découlent est déjà devenue apparente. Une tentative de créer un système d'exploitation mobile universel était la réponse à la réalisation de cette communauté, et cela nécessitait un langage de programmation tout aussi universel et mobile. C est devenu un tel langage et Unix est devenu le premier système d'exploitation à être presque entièrement écrit dans un langage de haut niveau.

La relation étroite avec Unix a donné au C un terrain d'essai qu'aucun autre langage n'avait à l'époque. La programmation de systèmes était considérée comme la plus difficile de l'industrie à l'époque. Pour la plupart, ils étaient tellement dépendants de la machine que beaucoup ne pensaient pas du tout à leur solution différemment de l'assembleur. Les langages de haut niveau étaient destinés à la programmation d'applications et n'implémentaient que de manière très limitée les fonctions nécessaires au fonctionnement du système, et souvent uniquement pour un certain type de machine.

Le langage C a été créé dès le début pour qu'il soit possible d'y écrire des tâches système. Les créateurs de C n'ont pas développé un modèle abstrait de l'exécuteur de langage, mais y ont simplement mis en œuvre les capacités les plus nécessaires dans la pratique de la programmation système. Ce sont d'abord les moyens de travail direct avec la mémoire, les structures de contrôle structurelles et l'organisation modulaire du programme. Et en fait, rien d'autre n'était inclus dans la langue. Tout le reste a été relégué à la bibliothèque d'exécution. Par conséquent, les malfaiteurs se réfèrent parfois au langage C comme un assembleur structuré. Mais peu importe ce qu'ils discutaient, l'approche s'est avérée très fructueuse. Grâce à lui, un nouveau niveau a été atteint en termes de rapport entre simplicité et capacités linguistiques.

Il y a, cependant, un autre facteur qui a déterminé le succès de la langue. Les créateurs y ont très habilement divisé les propriétés dépendantes et indépendantes de la machine. Grâce à cela, la plupart des programmes peuvent être écrits de manière universelle - leurs performances ne dépendent pas de l'architecture du processeur et de la mémoire. Peu des mêmes parties du code dépendantes du matériel peuvent être localisées dans des modules séparés. Et en utilisant le préprocesseur, vous pouvez créer des modules qui, lorsqu'ils sont compilés sur différentes plates-formes, généreront le code dépendant de la machine correspondant.

La syntaxe du langage C a suscité de nombreuses controverses. Les techniques d'abréviation utilisées peuvent rendre le programme complètement illisible s'il est utilisé de manière excessive. Mais, comme l'a dit Dijkstra, - les moyens ne sont pas à blâmer pour le fait qu'ils sont utilisés de manière illettrée. En fait, les abréviations syntaxiques proposées en C correspondent aux situations stéréotypées les plus courantes en pratique. Si les abréviations sont considérées comme des idiomes pour une représentation expressive et compacte de telles situations, alors leurs avantages deviennent inconditionnels et évidents.

Ainsi, C est devenu un langage de programmation système universel. Mais il n'est pas resté dans ce cadre. À la fin des années 80, le langage C, ayant poussé Fortran en tant que leader, a gagné en popularité parmi les programmeurs du monde entier et a commencé à être utilisé dans une grande variété de tâches appliquées. La diffusion d'Unix (et donc de C) dans le milieu universitaire, où une nouvelle génération de programmeurs a été formée, a joué ici un rôle important.

Comme tous les langages, C a été progressivement amélioré, mais la plupart des améliorations n'étaient pas de nature radicale. Le plus important d'entre eux, peut-être, devrait être considéré comme l'introduction d'une spécification stricte des types de fonctions, ce qui a considérablement augmenté la fiabilité de l'interaction intermodule dans C. Toutes ces améliorations ont été inscrites dans la norme ANSI en 1989, qui toujours définit le langage C.

Mais si tout est si clair, alors pourquoi toutes les autres langues sont-elles encore utilisées, ce qui soutient leur existence ? Le talon d'Achille du langage C était qu'il s'est avéré trop bas pour les tâches qui ont été mises à l'ordre du jour des années 90. De plus, ce problème a deux aspects. D'une part, des outils de trop bas niveau ont été intégrés au langage - tout d'abord, il fonctionne avec l'arithmétique de la mémoire et des adresses. Ce n'est pas pour rien que le changement de profondeur de bits des processeurs est très pénible pour de nombreux programmes C. D'un autre côté, C manque d'installations de haut niveau - types de données et objets abstraits, polymorphisme, gestion des exceptions. En conséquence, dans les programmes C, la technique de mise en œuvre de la tâche domine souvent sur son côté contenu.

Les premières tentatives pour corriger ces lacunes ont commencé au début des années 1980. Même alors, Bjarne Stroustrup chez AT&T Bell Labs a commencé à développer une extension du langage C sous le nom de code. Le style du développement était tout à fait cohérent avec l'esprit dans lequel le langage C lui-même a été créé - certaines possibilités y ont été introduites afin de faciliter le travail de personnes et de groupes spécifiques. Le premier traducteur commercial d'un nouveau langage appelé C++ est apparu en 1983. C'était un préprocesseur qui traduisait le programme en code C. Cependant, la naissance réelle du langage peut être considérée comme la sortie du livre de Stroustrup en 1985. C'est à partir de ce moment que le C++ a commencé à gagner en popularité dans le monde entier.

La principale innovation en C++ est le mécanisme de classe, qui permet de définir et d'utiliser de nouveaux types de données. Le programmeur décrit la représentation interne d'un objet de classe et un ensemble de méthodes-fonctions pour accéder à cette représentation. L'un des objectifs chéris de la création du C++ était le désir d'augmenter le pourcentage de réutilisation du code déjà écrit. Le concept de classes a suggéré un mécanisme d'héritage pour cela. L'héritage vous permet de créer de nouvelles classes (dérivées) avec une représentation étendue et des méthodes modifiées sans affecter le code compilé des classes d'origine (de base). Dans le même temps, l'héritage fournit l'un des mécanismes de mise en œuvre du polymorphisme - le concept de base de la programmation orientée objet, selon lequel le même code peut être utilisé pour effectuer le même type de traitement de différents types de données. En fait, le polymorphisme est également l'une des méthodes permettant d'assurer la réutilisation du code.

L'introduction des classes n'épuise pas toutes les innovations du langage C++. Il implémente un mécanisme de gestion des exceptions structuré à part entière, dont l'absence en C rendait très difficile l'écriture de programmes fiables, le mécanisme de modèle est un mécanisme sophistiqué de génération de macros profondément ancré dans le langage, ouvrant une autre voie vers la réutilisation du code beaucoup plus.

Ainsi, la ligne générale de développement du langage visait à étendre ses capacités en introduisant de nouvelles constructions de haut niveau tout en maintenant autant que possible une compatibilité totale avec les opérations ANSI C., de sorte que le programmeur cesse de travailler directement avec la mémoire et le système. entités dépendantes. Cependant, le langage ne contient pas de mécanismes obligeant le développeur à structurer correctement le programme, et les auteurs n'ont émis aucune recommandation systématique sur l'utilisation de ses constructions plutôt sophistiquées. Ils ne se sont pas occupés de la création en temps voulu d'une bibliothèque de classes standard qui implémente les structures de données les plus courantes.

Tout cela a conduit au fait que de nombreux développeurs ont été contraints d'explorer eux-mêmes les labyrinthes de la sémantique du langage et de rechercher de manière indépendante des idiomes fonctionnant avec succès. Ainsi, par exemple, lors de la première étape du développement du langage, de nombreux créateurs de bibliothèques de classes ont cherché à construire une hiérarchie de classes unique avec une classe de base commune Object. Cette idée a été empruntée à Smalltalk - l'un des langages orientés objet les plus célèbres. Cependant, cela s'est avéré complètement non viable en C ++ - les hiérarchies de bibliothèques de classes soigneusement pensées étaient inflexibles et le travail des classes n'était pas évident. Pour que les bibliothèques de classes soient utilisables, elles devaient être livrées dans les sources.

L'apparition des classes modèles a complètement réfuté cette direction de développement. Ils ont commencé à utiliser l'héritage uniquement dans les cas où il était nécessaire de générer une version spécialisée d'une classe existante. Les bibliothèques ont commencé à être composées de classes séparées et de petites hiérarchies indépendantes. Cependant, en cours de route, la réutilisation du code a commencé à décliner, car C ++ ne peut pas utiliser de manière polymorphe des classes de hiérarchies indépendantes. L'utilisation généralisée des modèles conduit à une augmentation inacceptable de la quantité de code compilé - n'oublions pas que les modèles sont implémentés à l'aide de méthodes de génération de macros.

L'un des plus graves inconvénients du C++, hérité de la syntaxe C, est que le compilateur a accès à une description de la structure interne de toutes les classes utilisées. En conséquence, un changement dans la structure interne de la représentation d'une classe de bibliothèque conduit à la nécessité de recompiler tous les programmes où cette bibliothèque est utilisée. Cela limite fortement les développeurs de bibliothèques en termes de modernisation, car lors de la sortie d'une nouvelle version, ils doivent maintenir une compatibilité binaire avec la précédente. C'est ce problème qui fait croire à de nombreux experts que le C++ n'est pas adapté à l'exécution de projets de grande et très grande taille.

Et pourtant, malgré les lacunes répertoriées et même l'indisponibilité du langage standard (c'est après plus de quinze ans d'utilisation !), le C++ reste l'un des langages de programmation les plus populaires. Sa force réside tout d'abord dans une compatibilité quasi totale avec le langage C. Grâce à cela, les programmeurs C++ ont accès à tous les développements réalisés en C. En même temps, C++, même sans l'utilisation de classes , introduit dans C un certain nombre de fonctionnalités et de commodités supplémentaires si importantes que beaucoup l'utilisent simplement comme un C amélioré. ...

En ce qui concerne le modèle objet C++, tant que votre programme n'est pas très volumineux (des centaines de milliers de lignes), vous pouvez l'utiliser. La tendance récente vers les composants logiciels ne fait que renforcer la position du C++. Lors du développement de composants individuels, les inconvénients de C ++ n'apparaissent pas encore et la liaison des composants dans un système de travail ne s'effectue plus au niveau du langage, mais au niveau du système d'exploitation.

À la lumière de tout ce qui a été dit, les perspectives du C++ ne semblent pas sombres. Même si le monopole sur le marché des langages de programmation ne brille pas pour lui. Peut-être pouvons-nous seulement dire avec certitude que cette langue ne survivra pas à une autre modernisation-extension. Pas étonnant, quand Java est apparu, qu'une si grande attention y ait été portée. Le langage, dont la syntaxe est proche du C++, ce qui signifie qu'il semble familier à de nombreux programmeurs, s'est débarrassé des défauts les plus flagrants du C++, hérité des années 70. Cependant, Java ne semble pas être à la hauteur du rôle que certains lui ont confié.

Le rôle particulier des langages C / C ++ dans la programmation moderne rend presque inutile la fourniture d'adresses spécifiques sur Internet où vous pouvez trouver des documents à leur sujet. Il y a tout simplement trop d'endroits comme celui-ci. Cependant, si vous souhaitez en savoir plus sur l'évolution du C++, commencez par un petit article. http://citforum.syzran.ru/programming/prg96/76.shtml.

Alexandre Sergueïev, [email protégé]
Article du magazine BYTE / Russie, mars 2000

Afin de démontrer clairement l'utilisation des langages décrits dans la pratique, nous avons choisi un problème dans lequel il était nécessaire d'entrer une série d'entiers à partir d'une entrée standard ou d'un fichier, puis de ne sortir que des impairs, et inversement. ordre. C'est l'une des tâches les plus simples, qui nécessite essentiellement de travailler avec des tableaux, des boucles, des branchements et des E/S pour la résoudre, et vous permet également de démontrer les appels de sous-programmes. De plus, il est visible et facilement perçu.

Annonce 1.C

1 #inclure / * Connecter les fonctions d'entrée-sortie * / 2 3 void main (void) 4 (5 int ; / * Tableau de 10 entiers, compter à partir de 0 * / 6 int N ; 7 pour (N = 0 ; N<10; ++N) /* Вводим не более 10 чисел */ 8 if (EOF == scanf ("%d, M+N)) 9 break; /* Если конец файла, прерываем цикл */ 10 11 for (-N; N>= 0 ; --N) / * Parcourir le tableau à l'envers * / 12 if (M [N]% 2) / * ordre et imprimer les impairs * / 13 printf ("% d \ n", M [N]); 14 )

  • Ligne 3. En C/C++, l'exécution du programme commence toujours par la fonction principale.
  • Lignes 7 et 11. Dans l'en-tête de boucle, le paramètre initial, la condition de continuation et la règle de recalcul du paramètre de boucle sont spécifiés par des points-virgules. Opérations ++ et -/- - la plus célèbre des abréviations du langage C, signifiant l'incrémentation et la décrémentation d'une variable, c'est-à-dire l'augmentation et la diminution de sa valeur de un.
  • Ligne 8. Une fonction scanf entre, selon le format spécifié par le premier paramètre, les valeurs des variables dont les adresses sont spécifiées par les paramètres restants. Ici, l'adresse où la valeur est saisie est calculée en utilisant l'arithmétique d'adresse, à l'adresse de l'emplacement du tableau M compensé par Néléments. Le même effet peut être obtenu en écrivant & M [N].
  • Ligne 12. Opération % calcule le reste de la division. État de l'opérateur si est considéré comme rempli si la valeur numérique de l'expression est différente de zéro.
  • Ligne 13. Une fonction imprimer- l'impression par format fonctionne de la même manière scanf, mais au lieu d'adresses, il est passé les valeurs à afficher.
1 #inclure 2 3 modèle class Array 4 (5 public: Array (T Size = 1): M (new T), N (Size), n (0) () 6 Array (void) (delete M;) 7 T Count (void) const ( return n;) 8 T opérateur (int i) const (return M [i];) 9 void Add (T Data); 10 private: 11 T * M; // Adresse de la mémoire allouée 12 int N, n; // N - attribué ; n - utilisé 13 ); 14 15 modèle tableau vide :: Ajouter (T Data) 16 (if (N-n) // Si tous les 17 alloués (int * P = nouveau T ; // l'espace est utilisé, allouer plus de 18 pour (int i = 0; i UNE; // Tableau d'entiers de taille variable 28 while (1) // Boucle sans fin 29 (int N; 30 cin >> N; // cin - flux d'entrée standard 31 if (cin.eof ()) break; // Quitte le boucle à la fin du fichier 32 A.Add (N); // Ajoute le nombre entré au tableau 33) 34 for (int N = A.Count () - 1; N> = 0; --N) // Boucle le tableau 35 si ( A [N]% 2) 36 cout<, et libère de la mémoire
  • Lignes 3-13. La classe modèle est déclarée Déployer avec paramètre T... C'est un tableau d'objets de taille variable comme T... Bien sûr, dans notre tâche, il n'est pas nécessaire d'utiliser une classe de modèle. Cependant, nous voulions montrer comment une structure de données polymorphe est créée en C++ qui peut fonctionner avec n'importe quel type d'élément.
  • Ligne 5. Constructeur de classe. Il initialise la représentation de l'objet. Par exemple, dans le domaine M l'adresse du bloc mémoire commandé par l'opération est saisie nouveau T.
  • Ligne 8. Un exemple de surcharge d'une opération. Une fonction opérateur sera appelé lorsque des crochets apparaissent à droite de l'objet de classe Déployer.
  • Ligne 9. Cette fonction est la principale dans l'implémentation. Il ajoute des éléments au tableau, l'étendant au besoin. Comme il est plus complexe que les autres, sa définition est tirée de la description de la classe. Les fonctions décrites dans le corps de la classe sont implémentées en C++ non pas par appel, mais par substitution en ligne. Cela accélère le programme, bien qu'il augmente sa taille.
  • Lignes 15-24. Définition de la fonction Arrau :: Ajouter (T)(au fait, c'est son nom complet).
  • Ligne 27. On crée un objet de type Déployer... Templet Aggau paramétré par type entier.


Vous avez aimé l'article ? Partagez-le