Преимущества и недостатки языка программирования С++ - Разработка видеолекций по программированию С++

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

С++ содержит средства для создания программ практически любого назначения, от низкоуровневых до сложных программных комплексов разного назначения.

Достоинства языка:

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

Часть недостатков С++ унаследовал от C, это:

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

У языка С++ имеются так же и собственные недостатки:

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

Для того чтобы выявить сильные и слабые стороны языка, необходимо так же сравнить его с другими популярными и известными языками программирования, как С, C#, Objective-C, Java, Python.

Для начала нужно провести сравнение С++ с языком-предком Си:

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

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

Основные различия в языках:

    - C++ - машинный код, а Java - это интерпретируемый код (необходим интерпретатор), вследствие чего у Java есть платформанезависимость в обмен на зависимость от интерпретатора JVM; - В Java отсутствуют файлы заголовков; - С++ типы не определены точно и зависят от компилятора, а в Java типы на всех платформах одинаковы; - Java - полностью объектно ориентированный язык; - в C++ программист полностью сам контролирует состояние программы, в Java этим занимается сборщик мусора и среда Runtime; - в С++ возможно все, чего пожелает программист: "перегрузка операторов, наследование, и так далее", в языке Java - только то, что разработчики языка посчитали логически безопасным; - С++ имеет множество различных библиотек, Java - стандартные библиотеки, которые распространяются с JVM.

С# (Си шарп), как и C++ является языком общего назначения, а так же кроссплатформенным языком. С# разработан компанией Microsoft как язык для разработки приложения для платформы Microsoft. NET Framework и во многом похож на Java. Он компилируется в байт-код, который выполняется на виртуальной машине, что отличает его от С++. Хотя С# и заимствует некоторые синтаксические элементы из С и С++, он не имеет технического родства с ними.

Отличия C# и C++:

    - в С#, в отличие от C++ (с расширением CLI) нет возможности смешивать неуправляемый код (native), с управляемым; - в С# существует возможность определять псевдонимы для классов. - в С++ псевдонимы могут ссылаться только на другие пространства имен, но не на классы; - отличия в определении типов; - отличия в выведении типов; - отличия в объявлении методов класса.

Следует так же упомянуть о таком объектно-ориентированном языке программирования, как Objective-C, используемые Apple и основанный на языке Си с парадигмами Smalltalk.

    - Objective C является message-oriented языком, в отличие от С++, который является function-oriented, это значит что в ObjC код не "вызывает метод объекта", а "отправляет сообщение" с именем и аргументами объекту; - в ObjC описания методов сильно отличаются от С++, и больше похожи на описание методов на языке Smalltalk; - ObjC не допускает множественного наследования; - в ObjC принято работать с указателями на объекты; - в ObjC отсутсвуют шаблоны, пространства имен, типы данные, присущие С++; - в ObjC отсутсвуют перегрузки функций по возвращаемому типу данных; - ObjC не позволяет создвавть объекты в стеке.

Но самое большое различие - в синтаксисах языка.

Python

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

Похожие статьи




Преимущества и недостатки языка программирования С++ - Разработка видеолекций по программированию С++

Предыдущая | Следующая