§1 Общие сведения о языке. Модели жизненного цикла приложений

Общие сведения о языке С++

C++ — это компилируемый язык со статической типизацией на котором можно создавать программы любого уровня сложности. C++ спроектирован и динамично развивается как язык, поддерживающий различные методы и технологии программирования, но реализующий их на платформе, обеспечивающей высокую техническую эффективность. В настоящее время C++ является одним из самых популярных языков программирования. С++ использовался в следующих проектах: MS Windows, SQL Server, DirectX, Edge и Office, KDE, Qt, MySQL, Opera, Adobe Photoshop, Facebook, Google Chrome, Blender, Inkscape, LibreOffice, Firefox, VLC, 7-ZIP, Stellarium и очень многих других (с большой долей вероятности, во всех крупных и значимых проектах).
C++ продолжает развиваться, чтобы отвечать современным требованиям. Одна из групп, разрабатывающих язык C++ и направляющих комитету по стандартизации C++ предложения по его улучшению — это Boost, которая занимается, в том числе, совершенствованием возможностей языка путём добавления в него особенностей метапрограммирования.
Никто не обладает правами на язык C++, он является свободным.

История языка и выхода стандартов

  • 1983
  • создатель языка – Бьёрн Страуструп, сотрудник Bell Labs, представил раннюю версию языка C++ (“Си с классами”)

  • 1985
  • первый коммерческий выпуск C++, язык приобретает современное название

  • 1986
  • выпуск первого издания The C++ Programming Language — книги, посвящённой C++, которую написал Бьёрн Страуструп

  • 1998
  • ратифицирован международный стандарт языка C++: ISO/IEC 14882:1998 «Standard for the C++ Programming Language»

  • 2003
  • опубликован стандарт языка ISO/IEC 14882:2003, где были исправлены выявленные ошибки и недочёты предыдущей версии стандарта

  • 2005
  • выпущен отчёт Library Technical Report 1 (TR1). Не являясь официально частью стандарта, отчёт описывал расширения стандартной библиотеки, которые должны быть включены в следующую версию языка C++

  • 2011
  • выход нового стандарта – C++11 или ISO/IEC 14882:2011; новый стандарт включил дополнения в ядре языка и расширение стандартной библиотеки, в том числе большую часть TR1

  • 2014
  • выход стандарта C++14 («International Standard ISO/IEC 14882:2014(E) Programming Language C++»); C++14 можно рассматривать как небольшое расширение над C++11, содержащее в основном исправления ошибок и небольшие улучшения

  • 2017
  • предположительное время появления нового стандарта, работа над которым сейчас активно ведется. Имя нового стандарта – C++1z. Стали известны основные нововведения в будущем стандарте, но этот список, вероятно, будет многократно увеличен ко времени выхода.

Bjarne Stroustrup - создатель языка C++

Bjarne Stroustrup – создатель языка C++

Философия С++

В книге «Дизайн и эволюция C++» (2007) Бьёрн Страуструп описывает принципы, которых он придерживался при проектировании C++ (приводятся в сокращении):

  • Получить универсальный язык со статическими типами данных, эффективностью и переносимостью языка C.
  • Непосредственно и всесторонне поддерживать множество стилей программирования.
  • Дать программисту свободу выбора, даже если это даст ему возможность выбирать неправильно.
  • Максимально сохранить совместимость с C, тем самым делая возможным лёгкий переход от программирования на C.
  • Избежать разночтений между C и C++: любая конструкция, допустимая в обоих языках, должна в каждом из них обозначать одно и то же и приводить к одному и тому же поведению программы.
  • Избегать особенностей, которые зависят от платформы или не являются универсальными.
  • «Не платить за то, что не используется» — никакое языковое средство не должно приводить к снижению производительности программ, не использующих его.
  • Не требовать слишком усложнённой среды программирования.

C и C++

Хотя, формально, одним из принципов C++ остаётся сохранение совместимости с языком C, фактически группы по стандартизации этих языков не взаимодействуют, а вносимые ими изменения не только не коррелируют, но и нередко принципиально противоречат друг другу идеологически. Так, элементы, которые новые стандарты C добавляют в ядро, в стандарте C++ являются элементами стандартной библиотеки и в ядре вообще отсутствуют, например, динамические массивы, массивы с фиксированными границами, средства параллельной обработки. Как считает Страуструп, объединение разработки этих двух языков принесло бы большую пользу, но оно вряд ли возможно по политическим соображениям. Так что практическая совместимость между C и C++ постепенно будет утрачиваться.
В данном примере, в зависимости от используемого компилятора, будет выведено либо “C++”, либо “C”:

#include <stdio.h>

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

Связано это с тем, что символьные константы в C имеют тип int, а в C++ — тип char, но размеры этих типов различаются.

Стандартная библиотека (STD)

В языке программирования C++ термин Стандартная Библиотека означает коллекцию классов и функций, написанных на базовом языке. Стандартная библиотека С++ включает в себя часть стандартной библиотеки C. Стандарт C++ содержит нормативную ссылку на стандарт C90 и не определяет самостоятельно те функции стандартной библиотеки, которые заимствуются из стандартной библиотеки C. Стандарт C++11 значительно расширил эту часть STD, добавив некоторые функции, которые вошли в стандарт C99.
Доступ к возможностям стандартной библиотеки C++ обеспечивается с помощью включения в программу (посредством директивы #include) соответствующих стандартных заголовочных файлов. Всего в стандарте C++11 определено 79 таких файлов.
Средства стандартной библиотеки объявляются как входящие в пространство имён std.
Контейнеры, строки, алгоритмы, итераторы и основные утилиты, за исключением заимствований из библиотеки C, собирательно называются STL (Standard Template Library — стандартная шаблонная библиотека). STL до включения в стандарт C++ была сторонней разработкой, в начале — фирмы HP, а затем SGI. Стандарт языка не называет её STL, так как эта библиотека стала неотъемлемой частью языка (и, следовательно, стандартной библиотеки), однако многие люди до сих пор используют это название, чтобы отличать её от остальной части STD. В названии отражено то, что для реализации средств общего вида (контейнеров, строк, алгоритмов) использованы механизмы обобщённого программирования (шаблоны C++ — template).

Независимые библиотеки для C++

  • Boost — собрание библиотек классов, использующих функциональность языка C++ и предоставляющих удобный, кроссплатформенный, высокоуровневый интерфейс для лаконичного кодирования различных повседневных подзадач программирования (работа с данными, алгоритмами, файлами, потоками и т.п.). Свободно распространяются по лицензии Boost Software License вместе с исходным кодом. Сайт
  • GMP или GNU Multi-Precision Library — библиотека, написанная на языке Си, предназначенная для вычислений с плавающей запятой, целыми и рациональными числами с произвольной точностью. Библиотека широко используется в криптографических целях и для компьютерных вычислений. Данная библиотека необходима для сборки GCC. Сайт
  • Qt – кроссплатформенный фреймворк, содержащий элементы пользовательского интерфейса (виджеты), шаблоны контейнеров, средства работы с мультимедиа. В отличие от других библиотек, Qt использует Meta Object Compiler (MOC) — предварительной системы обработки исходного кода (Qt — это библиотека не для чистого C++, а для его особого наречия, с которого и «переводит» MOC для последующей компиляции любым стандартным C++ компилятором). Сайт
  • wxWidgets — это кроссплатформенная библиотека инструментов с открытым исходным кодом для разработки кроссплатформенных (на уровне исходного кода) приложений. Основным применением wxWidgets является построение графического интерфейса пользователя (GUI), однако библиотека включает большое количество других функций и используется для создания весьма разнообразного ПО. Сайт

GNU Compiler Collection

GNU Compiler Collection (GCC) — набор компиляторов для различных языков программирования, разработанный в рамках проекта GNU. GCC является свободным программным обеспечением, распространяется фондом свободного программного обеспечения (FSF) на условиях GNU GPL. Он используется как стандартный компилятор для свободных UNIX-подобных операционных систем.
Изначально названный GNU C Compiler поддерживал только язык Си. Позднее GCC был расширен для компиляции исходных кодов на таких языках программирования, как C++, Objective-C, Java, Фортран и Ada.
В дистрибутивах Linux компилятор GCC доступен в репозиториях пакетов. Сборку GCC для Windows можно получить на сайте MinGW. Подробнее об установке MinGW в Windows (с IDE Eclipse) можно прочитать в методичке. Кроме того, можно установить версию IDE Code::Blocks, которая поставляется вместе с MinGW или тулкит Qt, также поставляющийся с этим компилятором.

Модели жизненного цикла приложения

Жизненный цикл программного обеспечения — это период времени, который начинается с момента принятия решения о необходимости создания программного продукта и заканчивается в момент его полного изъятия из эксплуатации. Этот цикл — процесс построения и развития программного обеспечения (ПО). Существует несколько моделей жизненного цикла.
Каскадная модель жизненного цикла (англ. waterfall model) была предложена в 1970 г. Уинстоном Ройсом. Она предусматривает последовательное выполнение всех этапов проекта в строго фиксированном порядке. Переход на следующий этап означает полное завершение работ на предыдущем этапе. Требования, определенные на стадии формирования требований, строго документируются в виде технического задания и фиксируются на все время разработки проекта. Каждая стадия завершается выпуском полного комплекта документации, достаточной для того, чтобы разработка могла быть продолжена другой командой разработчиков.
Этапы проекта в соответствии с каскадной моделью:

  1. Формирование требований;
  2. Проектирование;
  3. Реализация;
  4. Тестирование;
  5. Внедрение;
  6. Эксплуатация и сопровождение.

В каскадной модели переход от одной фазы проекта к другой предполагает полную корректность результата предыдущей фазы. В больших проектах этого добиться практически невозможно. Поэтому такая модель пригодна только для разработки небольшого проекта. (Сам У. Ройс не придерживался данной модели и использовал модель итерационную).
Итерационная модель
Альтернативой каскадной модели является модель итеративной и инкрементальной разработки (англ. iterative and incremental development, IID), получившей от Т. Гилба в 70-е гг. название эволюционной модели. Модель IID предполагает разбиение жизненного цикла проекта на последовательность итераций, каждая из которых напоминает «мини-проект», включая все процессы разработки в применении к созданию меньших фрагментов функциональности, по сравнению с проектом в целом. Цель каждой итерации — получение работающей версии программной системы, включающей функциональность, определённую интегрированным содержанием всех предыдущих и текущей итерации. Результат финальной итерации содержит всю требуемую функциональность продукта. Таким образом, с завершением каждой итерации продукт получает приращение — инкремент — к его возможностям, которые, следовательно, развиваются эволюционно.
7
Стандартизация жизненного цикла приложения
Государственный стандарт подробно описывает жизненный цикл приложения в ГОСТ Р ИСО/МЭК 12207-2010 «Информационная технология. Системная и программная инженерия. Процессы жизненного цикла программных средств». Этот стандарт принят Федеральным агентством по техническому регулированию и метрологии РФ и аналогичен международному стандарту ISO/IEC 12207:2008. Данный стандарт, устанавливает общую структуру процессов жизненного цикла программных средств, на которую можно ориентироваться в программной индустрии. Стандарт не предлагает конкретную модель жизненного цикла. Его положения являются общими для любых моделей жизненного цикла, методов и технологий создания ПО. Он описывает структуру процессов жизненного цикла, не конкретизируя, как реализовать или выполнить действия и задачи, включенные в эти процессы.

Процесс разработки – Rational Unified Process (RUP)

Различные варианты итерационного подхода реализованы в большинстве современных методологий разработки:

Rational Unified Process (RUP) (рациональный унифицированный процесс) — методология разработки программного обеспечения, которая поддерживается компанией Rational Software (IBM). В методологии даются рекомендации по всем этапам разработки: от моделирования бизнеса до тестирования и сдачи в эксплуатацию готовой программы. В качестве языка моделирования используется язык Unified Modelling Language (UML).
Полный жизненный цикл разработки продукта состоит из четырех фаз, каждая из которых включает в себя одну или несколько итераций.

  • Начальная стадия (Inception)
  • Определение масштабов проекта и объема необходимых ресурсов. Определяются основные требования, ограничения и ключевая функциональность продукта. Оцениваются риски. Планирование действий. При завершении начальной фазы оценивается достижение этапа жизненного цикла цели (англ. Lifecycle Objective Milestone), которое предполагает соглашение заинтересованных сторон о продолжении проекта.

  • Уточнение (Elaboration)
  • Документирование требований. Проектирование, реализация и тестирование исполняемой архитектуры. Уточнение сроков и стоимости. Снижение основных рисков. Успешное выполнение фазы разработки означает достижение этапа жизненного цикла архитектуры (англ. Lifecycle Architecture Milestone).

  • Построение (Construction)
  • В фазе «Построение» происходит реализация большей части функциональности продукта: дизайн приложения завершен, исходный код написан. Фаза Построение завершается первым внешним релизом системы и вехой начальной функциональной готовности (Initial Operational Capability).

  • Внедрение (Transition)
  • В фазе «Внедрение» создается финальная версия продукта и передается от разработчика к заказчику. Это включает в себя программу бета-тестирования, обучение пользователей, а также определение качества продукта. В случае, если качество не соответствует ожиданиям пользователей или критериям, установленным в фазе Начало, фаза Внедрение повторяется снова. Выполнение всех целей означает достижение вехи готового продукта (Product Release) и завершение полного цикла разработки.

RUP_process

Разговор с Бьерном Страуструпом


Онлайн-конференция разработчиков, использующих Embarcadero C++Builder. Беседу с Бьерном Страуструпом, легендарным создателем языка C++, провёл Дейвид Интерсимоне, вице-президент Embarcadero по связям с разработчиками. (Дублированный перевод).

Презентация к уроку

lesson-1(cpp)
ODP
PDF

Темы сообщений
  • Фонд свободного программного обеспечения (FSF)
  • Свободные лицензии ПО
  • FreeSoftware и Open Source
  • История развития языков программирования
  • История возникновения языка C. C и C++
  • История Linux
  • Критика C++
  • История UNIX
  • Спиральная модель жизненного цикла ПО
  • UML (англ. Unified Modeling Language — унифицированный язык моделирования)
  • Microsoft Solutions Framework
  • IDE для программирования на C/C++ в Windows
  • Компиляторы С/C++
  • Создание консольного приложения в Windows
Вопросы
  1. Почему каскадная модель разработки ПО не применяется в больших проектах?
  2. В чем заключается различие между каскадной и итерационной моделями разработки?
  3. Перечислите стадии разработки ПО в методологии Rational Unified Process (RUP)
Литература
  1. Возвращение к C++ (современный C++)
  2. https://ru.wikipedia.org/wiki/GNU_Compiler_Collection
  3. C++ для начинающих
  4. Bjarne Stroustrup’s homepage
  5. C++. Бархатный путь
  6. https://ru.wikipedia.org/wiki/Стандартная_библиотека_языка_C++
  7. Жизненный цикл ПО (вики)
  8. https://ru.wikipedia.org/wiki/Geany
  9. https://ru.wikipedia.org/wiki/Code::Blocks
  10. IDE Eclipse (вики)
  11. ГОСТ Р ИСО/МЭК 12207-2010. Информационная технология. Системная и программная инженерия. Процессы жизненного цикла программных средств
  12. Системная инженерия для «чайников»
  13. OpenUP – это просто
  14. Разработка программного обеспечения (вики)
  15. Стадии разработки программного обеспечения (вики)
  16. Каскадная модель (вики)
  17. Итеративная разработка


Print Friendly, PDF & Email

Comments are closed.