Содержание

Для начинающих

Для начала, наверное, надо понять - что же такое и зачем нужен язык программирования? Не вдаваясь в тонкости аппаратных архитектур современных компьютеров (или вычислительных комплексов) можно сказать одно - сами по себе они работать не могут. Любой процессор предназначен для выполнения последовательности инструкций. Если инструкций нет, процессор не работает. Любой язык программирования (от самых примитивных до самых сложных) - это способ формирования такого набора инструкций для процессора.

Разновидностей языков программирования - великое множество. И классифицировать их можно по-разному. Для понимания дальнейшего материала можно остановиться на следующей классификации. Все языки программирования можно условной разделить на низкоуровневые (ассемблеры) и высокоуровневые (ЯВУ). Инструкции низкоуровневых языков программирования чаще всего «один-в-один» соответствуют командам процессора (либо иной среды исполнения), на который они рассчитаны. Высокоуровневые языки такого однозначного соответствия не предполагают, и (как следует из их названия) предлагают программисту набор инструкций, не привязанный к тому или иному процессору или среде исполнения. Поскольку такие языки обычно более абстрактны, программы на них писать проще (значительно проще), чем на низкоуровневых языках, так как, грубо говоря, для описания одних и тех же (либо похожих) конструкций приходится применять значительно меньше усилий. В любом случае, изначальный набор инструкций на том или ином языке обычно оформляется в виде так называемого «исходного текста». Чаще всего это текстовый файл, в котором эти инструкции записаны. Но (вообще говоря) это может быть и графическая диаграмма, или что-то еще.

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

Также ЯВУ можно разделить на императивные и декларативные. В императивных языках каждая инструкция (или группа инструкций) - это четкое указание интерпретатору или компилятору, что и как нужно сделать. В этом случае можно утверждать, что один и тот же набор инструкций на ЯВУ будет преобразован в один и тот же набор процессорных команд. В декларативных языках программист (с помощью исходного текста) описывает желаемый результат. А компилятор или интерпретатор в зависимости от тех или иных факторов преобразуют его в тот или иной набор процессорных команд. И, вообще говоря, такое преобразование не всегда (и не обязано быть всегда) однозначно. Иными словами, императивные языки формулируют программу в терминах «сделай это, потом это, и наконец вот то». Декларативные - «хочу, чтобы ты сделал так, так и, по возможности, вот так. Выполняй».

В рамках предложенной классификации язык С++ следует отнести к императивным компилируемым языкам высокого уровня. Т. е. программы на языке С++ требуют предварительной компиляции, в достаточной степени абстракты и формулируются в императивном стиле. По этому для разработки программ на языке С++ требуется как минимум компилятор с этого языка под ту операционную систему, под которую ведется разработка. Все примеры программ, представленные в этом учебники, могут быть откомпилированы с помощью кроссплатформенного компилятора GCC версии 3.4 или выше, либо с помощью компилятора Microsoft Visual C++ 2008 (он идет в поставке Visual Studio 2008 Express Edition). Оба компилятора бесплатны.

Некоторые подробности

Строго говоря, в настоящее время говорить только о процессорах (как единственной среде исполнения программ) нельзя. Помимо аппаратных архитектур, на которых инструкции исполняются непосредственно, могут существовать чисто программные среды исполнения (виртуальные машины) со своими собственным наборами инструкций, для которых также существуют (или могут существовать) низкоуровневые языки программирования. Исполняемые программы для таких программных сред нередко называют «байткодом». Наиболее известные виртуальные среды исполнения - это java-машина и виртуальная среда исполнения в .Net Framework. Очевидно, что и в том, и в другом случае в конечном итоге программа исполняется аппаратным процессором, но исполняемый код программы все же формулируется в инструкциях виртуальной машины, а уже сама машина берет на себя функцию по переводу набора этих инструкций в инструкции процессора, на котором фактически запущена программа.

Читаем дальше

  1. Выбор среды и компилятора (здесь пишем о том, что лучше всего выбрать для собственных разработок)
  2. Первая программа (тут, думаю, понятно - hello world)
  3. Основной инструментарий программиста (достаточно большой раздел, описывающий основные синтаксические конструкции языка, контролирующие поток исполнения)
    1. Переменные и типы (тут имеются в виду фундаментальные типы и строки)
    2. Ветвления (if/else/switch)
    3. Массивы (Описываются сопособы описания статических и динамических массивов)
    4. Циклы (Базовые - for/while/do)
    5. Функции (тут понятно)
    6. Итераторы и итерационные алгоритмы (которые for_each/copy/transform и прочие)
  4. Классы и объекты (тут пока раскрывать не возьмусь)
    1. Идеология (зачем нужны классы+ базовые возможности: методы, поля, конструкторы, деструкторы,операторы)
    2. Наследование (Наследование, Виртуальные функции, Интерфейсы)
    3. Шаблоны (Все о них)
    4. Исключения (сам механизм, чем лучше кодов, поддержка STL)
  5. Стили программирования и красота кода (тут некоторое лирическое отступление для описания, как лучше оформлять код, что такое плохой/хороший/читабельный/нечитабельный код и т. п.)