Введение в разработку программного обеспечения

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

Алгоритм разработки ПО включает в себя шесть шагов:

  • Определение проблемы.
  • Разработка решения.
  • Написание программы с опорой на разработанное решение.
  • Компиляция программы.
  • Связывание (линкинг) объектных файлов.
  • Тестирование и отладка программы.

Определение проблемы

В первую очередь необходимо чётко представлять, какие функции должна выполнять разрабатываемая программа. Например:

  • вычислять среднее арифметическое вводимых пользователем чисел;
  • проводить анализ стоимости акций на бирже, а также предсказывать ценовые скачки вверх или вниз;
  • содержать 2D лабиринт, по которому пользователь сможет перемещаться.

Формулировка идеи программы не всегда удаётся легко. Бывает, что над ней приходится здорово поломать голову, однако без идеи нельзя сделать следующий шаг.

Введение в разработку программного обеспечения
Введение в разработку программного обеспечения

Разработка решения

Здесь речь идёт о поиске способа, позволяющего реализовать идею программы. Таковых может быть несколько, причём основная их масса, как правило, неудачна. Между тем специалист, разрабатывающий ПО, обязан отличать хорошие решения от плохих ещё до того, как приступит непосредственно к программированию. Ведь если этой стадией пренебречь и сразу сесть за работу, нет гарантии, что полученный продукт будет работать достаточно эффективно.

Хорошим решением для программиста является решение:

  • простое;
  • хорошо задокументированное (комментарии и инструкции должны прилагаться);
  • основанное на модульном принципе, то есть позволяющее впоследствии изменить или ещё раз использовать любую часть программы, не касаясь других частей кода;
  • надёжное – ошибки и экстренные ситуации должны быть соответствующим образом обработаны.

Обычно первые мысли начинающего программиста о том, ЧТО он хочет сделать, а сделать он хочет обычно многое. Отвечая для себя на вопрос «КАК?», он ищет решения, позволяющие скорей добиться желаемого. Как результат – появляется программа, в которую впоследствии будет сложно внести изменения (и, соответственно, модифицировать её), либо огромное количество багов, с которым вынужден разбираться программист.

Между тем согласно статистике 20% времени программиста обычно занимает непосредственно создание программы. Остальные 80% он занимается её отладкой (правит ошибки) или поддержкой (добавляет функциональные возможности) кода. Поэтому предпочтительней отвести больше времени на разработку оптимального решения перед тем, как написать код, чем 80% времени искать и править ошибки.

Написание программы с опорой на разработанное решение

Чтобы написать программу, программист должен:

  • владеть языком программирования (языки будут изучаться на дальнейших уроках);
  • уметь пользоваться редактором кода.

Редактор кода (или же редактор, предназначенный именно для программирования) – незаменимая для программиста вещь. Он обладает рядом особенностей, существенно облегчающих работу:

Нумерация строк. Благодаря ей максимально упрощается процесс отладки программы после получения сообщения об ошибках от компилятора. Примерно таких: «информация об ошибке, № строки, где та произошла». К примеру, «ошибка предопределения переменной x, строка 90». Отыскать нужную 90-ю строку, не имея перед глазами нумерации строк, проблематично.

Подсветка синтаксиса. Благодаря ей можно изменить цвет различных частей программы кода. В итоге становится легче воспринимать как целую программу, так и конкретные её компоненты.

Специальный шрифт. При использовании стандартных шрифтов велик риск перепутать определённые символы. Например, букву О и цифру 0, букву l (строчную L), букву I (заглавную I) и цифру 1. В результате один символ будет стоять вместо другого. Специальный шрифт убережёт программиста от подобных ошибок.

Поэтому хотя теоретически для написания программы можно воспользоваться каким угодно редактором, в том числе Блокнотом в Windows либо текстовым редактором Vi в Unix, предпочтительней использовать именно редактор кода. Если последний на компьютере пока не установлен, не стоит беспокоиться: установка его будет рассмотрена на следующем уроке.

Программы на C++ именуются name.cpp: name здесь – наименование программы, а .cpp — расширение, сообщающее компилятору, а также разработчику, что это исходный файл кода, содержащий инструкции на C++. Ряд специалистов пользуется расширением .cc, однако мы настаиваем на использовании .cpp.

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

Компиляция программы

Компиляция осуществляется при помощи компилятора. Работа последнего включает в себя две стадии:

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

Далее происходит конвертация каждого исходного файла с кодом в объектный файл (именуемый также объектным модулем) на машинном языке. Такие файлы обычно обозначаются как name.o либо name.obj, где name аналогично наименованию исходного файла .cpp. Если программа включает в себя три файла .cpp, то компилируются три объектных файла (.o) соответственно.

Стоит сказать несколько слов и о встроенном компиляторе C++, установленном на ОС Linux и macOS. Носит данный компилятор наименование g++. Чтобы он произвёл компиляцию, прописывают:

g++ -c file1.cpp file2.cpp file3.cpp

В итоге генерируются file1.o, file2.o, file3.o. Значение -c здесь – «только скомпилировать», то есть речь идёт о создании .o (объектных) файлов.

Системы Linux, Windows и иные ОС также могут быть оснащены другими компиляторами.

Связывание объектных файлов

Все объектные файлы, полученные в ходе генерации посредством компилятора, связываются в единую исполняемую программу (исполняемую – потому что далее программа запускается, то есть исполняется). Данное связывание иначе именуется линкингом, а осуществляет его специальная программа – линкер (также именуемая компоновщиком).

Линкер способен подключить к себе не только объектные файлы, но и файлы из стандартной библиотеки C++, а также любой используемой программистом библиотеки (например, он может воспользоваться библиотеками звука и графики).

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

После завершения программой-линкером связывания всех объектных файлов (если не обнаружатся ошибки) происходит генерация исполняемого файла. Если для иллюстрации рассматривать пример с созданными для Linux и macOS объектными файлами (.o), для линкинга можно вновь использовать g++:

g++ -o prog file1.o file2.o file3.o

G++ получает команду -o о том, что из файлов file1.o, file2.o, file3.o нужно получить исполняемый файл prog.

Также возможно объединение компиляции и линкинга в один шаг:

>g++ -o prog file1.cpp file2.cpp file3.cpp

Итогом будет получение исполняемого файла с именем prog.

Тестирование и отладка программы

Когда исполняемый файл готов, его запускают и смотрят, всё ли работает, как надо. При обнаружении недочётов возникает необходимость в отладке.

Процесс её будет рассмотрен более подробно в дальнейших уроках.

Для выполнения шагов с третьего по шестой программист нуждается в специальном ПО. Здесь лучше всего воспользоваться пакетом IDE («Integrated Development Environment»), объединяющим все необходимые программисту программы. Установив на свой компьютер IDE, он получает:

  • редактор кода;
  • компилятор;
  • линкер;
  • встроенный отладчик программы.

А также комплексную помощь, дополнение кода, а иногда – систему контроля версий.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *