ТОP лучших программ

О языке программирования C ++

Категория: Статьи / Интересное

О языке программирования C ++

История и история C ++

C ++ - это язык программирования, разработанный в AT & T Bell Laboratories по Bjarne Stroustrup в начале 1980-х годов. Язык был разработан с целью слияния эффективности и краткости C с объектно-ориентированными функциями программирования SIMULA-67. С момента своего создания язык быстро эволюционировал, и с момента его выпуска в 1985 году было добавлено несколько новых функций. Язык также обещает обеспечить поддержку нескольких других полезных механизмов, таких как параметризованные типы и обработка исключений в ближайшем будущем. С тех пор был создан официальный комитет ANSI-C ++ (X3J16), который поможет разработать точный и надежный стандарт для языка, который должен устранить большинство, если не все, двусмысленностей в компиляторах и переводчиках на C ++ сегодня. Ожидается, что этот комитет примет большинство правил, содержащихся в базовом документе ANSI. Справочное руководство Annotated C ++как написано Эллисом и Страуструпом.

С несколькими скромными исключениями C ++ можно считать надмножеством языка программирования C. В то время как C ++ похож на C в синтаксисе и структуре, важно понимать, что два языка радикально отличаются друг от друга. Сравнение C с C ++ похоже на сравнение шашек с шахматами. Хотя обе игры играют на одной доске, нужно понимать, что игру в шахматы нельзя играть по той же стратегии, что и в игре с шашками. C ++ и его поддержка объектно-ориентированного программирования обеспечивают новую методологию проектирования, внедрения и упрощения поддержки программных проектов, которые C, язык структурированного программирования, не может поддерживать.

Для языка программирования C доступны обширные библиотеки; следовательно, намеренные усилия были сделаны от имени разработчиков C ++ для обеспечения обратной совместимости с C. Любое серьезное отклонение от языка программирования C означало бы, что все библиотеки, доступные для C, должны были бы утомительно перезаписываться для C ++. Это серьезно ограничило бы полезность C ++ в среде, где библиотеки C были широко использованы.

Особенности, заимствованные из других языков

C ++ в значительной степени объединяет несколько других языков программирования. Очевидно, что C ++ наследует большинство своих характеристик, таких как его синтаксис, механизмы циклирования и т. П. Из C. Помимо C, C ++ наиболее сильно зависит от вышеупомянутого языка программирования SIMULA-67. На этом языке почти вся поддержка, предоставляемая C ++ для объектно-ориентированного программирования. Концепция класса и так называемый механизм виртуальных функций - это некоторые из функций, присутствующих в SIMULA-67, которые были интегрированы в C ++.

В ограниченной степени C ++ также заимствует некоторые механизмы программирования от Algol-68. К ним относятся поддержка перегрузки операторов и объявление переменных почти в любом месте кода. Как уже упоминалось, новые компиляторы C ++ предоставят поддержку параметризованных типов и обработки исключений, концепции, заимствованные из Ada и Clu.

C ++ против C

Чтобы продемонстрировать различия между C и C ++, ниже приведены многочисленные функции, поддерживаемые C ++, которые не имеют эквивалента в C. Некоторые из этих функций будут рассмотрены более подробно в разделе об объектно-ориентированном программировании.

Когда пользователь определяет тип на C ++, поддержка предоставляется на языке, чтобы этот тип мог вести себя так же, как типы, уже встроенные в язык. Пользователь может определить, как стандартные операторы действуют на эти пользовательские типы (перегрузка операторов) и как эти типы могут быть преобразованы в другой тип (определенные пользователем преобразования). Пользователь может также указать, как память распределяется или освобождается, когда экземпляр этого типа создается или уничтожается. Это делается с помощью конструкторов и деструкторов, которые неявно называются компилятором, когда экземпляр этого типа вводится и выводится из области видимости соответственно.

C ++ обеспечивает поддержку прототипов функций, следовательно, позволяет проводить сильную проверку параметров функции во время компиляции. Кроме того, C ++ обеспечивает поддержку механизма передачи по ссылке , а также поддерживает аргументы по умолчанию для функций. Это означает, что если функция требует аргумента, который часто имеет одно и то же значение, пользователь может по умолчанию аргументировать это значение и не передавать этот параметр при вызове функции. В тех немногих случаях, когда функция должна вызываться с другим значением для аргумента по умолчанию, пользователь просто передает этот аргумент в функцию, а новое значение переопределяет значение по умолчанию.

Наиболее важными функциями, поддерживаемыми C ++, являются инкапсуляция данных, наследование и привязка времени выполнения, которые составляют основу поддержки языка для объектно-ориентированного программирования. Эти особенности подробно обсуждаются в следующем разделе.

Объектно-ориентированное программирование

Объектно-ориентированная парадигма была впервые задумана в 1960-х годах и реализована на таких языках, как SIMULA-67. Одной из первых проблем с ранними объектно-ориентированными языками была их эффективность. Программы, написанные с использованием структурированных языков, таких как Pascal и C, выполняются быстрее, чем программы, написанные с использованием ранних объектно-ориентированных языков. Хотя программы, которые использовали объектно-ориентированную парадигму, были более расширяемыми и более удобными для обслуживания с точки зрения программиста, в ходе выполнения программы во время выполнения программы приходилось платить недопустимую цену. Однако в последнее время выполнение объектно-ориентированных программ во время выполнения значительно улучшилось. Частично это объясняется как развитием более быстрого аппаратного обеспечения, так и созданием эффективных языков и компиляторов, которые поддерживают объектно-ориентированное программирование, такое как C ++.

До сих пор нет универсально согласованного определения того, что представляет собой объектно-ориентированное программирование. Буч предлагает:

«Объектно-ориентированное программирование - это метод реализации, в котором программы организованы как совместные коллекции объектов, каждый из которых представляет собой экземпляр некоторого класса и чьи классы являются членами иерархии классов, объединенных через отношения наследования».

Из этого определения можно сделать вывод о том, что объектно-ориентированное программирование состоит в создании экземпляра нескольких объектов, которые обмениваются данными друг с другом, чтобы добиться желаемого поведения. Эта парадигма естественна в том, как люди видят мир; как ряд причинно-следственных связей, когда действие, выполняемое на одном объекте, оказывает влияние на объекты, с которыми он связывается.

Проблема сложности

Объектно-ориентированное программирование особенно полезно для решения проблем сложности, связанных с написанием пакетов крупномасштабного программного обеспечения. Полезно подумать о типичной сложной системе, состоящей из двух ортогональных плоскостей иерархии

Первая плоскость состоит из набора классов , каждый из которых выступает в качестве «плана» для создания объектов . Эта плоскость содержит иерархию, известную как отношение «является своего рода». Любой класс, D , в плоскости , которая указывает на другой класс, B , называется своего рода класса B. Все свойства класса B (обычно называемые базовым классом ) передаются классу D (называемому производным классом). Как видно из диаграммы, производный класс может использоваться как базовый класс другого; и класс может быть определен как «один» из двух или более классов. Эта иерархия "своего рода" поддерживается в объектно-ориентированных языках через механизм наследования, который будет подробно рассмотрен позже.

Вторая плоскость состоит из серии объектов, которые, как упоминалось выше, создаются из классов первой плоскости. Эта иерархия называется "является частью" отношения и достигается посредством инкапсуляции или агрегации классов. Иерархия предполагает, что один объект может состоять из нескольких объектов; каждый из которых может состоять из еще большего количества объектов.

Проблема классификации

Одной из основных проблем, с которыми сталкиваются разработчики объектно-ориентированного программного обеспечения, является классификация; то есть найти классы, которые должны быть сгруппированы вместе в общем базовом классе. При попытке выполнить классификацию проблемного пространства необходимо решить несколько вопросов. Например, разработчик должен решить, какие свойства следует использовать для определения общности. Классификация также должна быть достаточно гибкой, чтобы позволить вводить новые объекты в систему, которые, как представляется, не принадлежат ни к одному классу, ни, как представляется, обладают свойствами нескольких классов.

Это проблема, с которой сталкиваются и другие члены научного сообщества. Например, биологи традиционно делят живых существ на два класса: растения и животные; каждое живое существо должно принадлежать одному и только одному из этих классов. Однако, когда была обнаружена евглена , одноклеточное существо с хлоропластами, казалось вполне законным разместить его в обоих классах; следовательно, он отказался от классификации. Кроме того, вирусы не могут быть точно изображены как растение или животное; поэтому они тоже бросают вызов классификации по таксономии растений / животных.

Особенности объектно-ориентированных языков программирования

Формального определения объектно-ориентированного программирования нет. Следовательно, существует некоторая путаница в отношении того, какие функции должен поддерживать язык программирования, чтобы утверждать, что он объектно-ориентирован. Однако, несмотря на это, большинство согласны с тем, что для того, чтобы язык утверждал, что он объектно-ориентирован, он должен обеспечить поддержку трех основных концепций, как это было сделано из определения Буча.

Инкапсуляция данных или абстракция данных
Наследование или деривация
Динамическое связывание или время выполнения

Комментарии (0):