Последний уровень раздела предыдущего изложения   Текущий уровень изложения предыдущего раздела   Текущий уровень изложения следующего раздела   Первый уровень изложения следующего раздела   Уровень:


C++ lecture1

Основы объектно-ориентированной разработки на С++

Цели использования компьютеров при решении оптических задач:

  1. Моделирование с целью предсказания реальных физических процессов и явлений. Экономия средств на сложных лабораторных экспериментах. Стремление сэкономить на создании, покупке, настройке дорогостоящего оптического оборудования. Изготовление десятков пробных прототипов приборов и систем. Не для быстрого и точного выполнения трудоемких вычислений (скорость вычислений на компьютере намного меньше чем скорость "оптических" явлений)
  2. Сведение к минимуму объема детерминированных действий инженера. Освобождение времени для принятия творческих решений. Компьютерное проектирование о.с. (анализ аберраций, качества изображения, допуски, оптимизация).
  3. Компьютерная обработка изображений, результатов измерений. Возможность быстрой визуализации и анализа больших объемов информации (совсем необязательно наблюдать свет, во многих случаях достаточно "наблюдать" числа, таблицы, графики).

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

Основной инструмент

Язык программирования служит двум целям:

  1. предоставить программисту инструмент для описания подлежащих выполнению действий
  2. предоставить набор концепций, правил, которыми оперируют программисты обдумывая, что можно сделать

первая цель требует от языка быть наиболее близким к машинному коду
вторая цель требует от языка быть наиболее близким к решаемой задаче, ключевые слова - термины предметной области.

Связь между языком программирования и решаемой задачи очень тесная.

Интересная аналогия с естественными языками:

Мы думаем только то, что можно воплотить в слове!

Мы решаем задачи на компьютере только в тех терминах и с использованием тех конструкций, которые есть в языке.

Почему С++? Потому что это один из немногих языков достигших второй цели (решение задачи в ее же терминах)

С++ используется сотнями тысяч программистов, во всех прикладных областях. Язык поддерживается десятками независимых реализаций и сотнями библиотек. Огромное количество учебников, руководств, журналов, конференций.

Так же как и любой естественный язык, язык программирования имеет свой

алфавит (символы, которые можно использовать в программах)
лексику (ключевые слова, идентификаторы, операторы)
синтаксис (выражения, конструкции)
пунктуацию ( ; , . : ( ) { } и т.п.)
семантику (что все это значит и что это должно обозначать для компьютера)

Алфавит

Алфавит С++ включает:

  1. Прописные и строчные буквы: a...z и A...Z в строковых и символьных константах а...я и А...Я
  2. Цифры: 0...9
  3. Специальные символы для разных целей (операторы, пунктуация и др.)

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

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

Лексемы

  1. Ключевые слова (key words)
  2. идентификаторы (identifiers)
  3. литералы (literals) или константы (constans)
  4. операторы (operators)
  5. знаки пунктуации (punctuators)

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

с++; // однострочный комментарий до конца строки.

Ключевые слова - четко определенные зарезервированные слова, имеющие конкретное значение

Группы ключевых слов (раздаточные материалы):

  1. для объявления типов
  2. ключевые слова для создания языковых конструкций
  3. остальные слова: для создания гетерогенных типов данных, для реализации принципов ООП и др.

Ключевые слова всегда прописными буквами!

Если if - это ключевое слово для создания условной конструкции, то IF - может быть чем угодно в зависимости от того в каком контексте эта лексема появилась в тексте программы.

Идентификаторы - это последовательность латинских букв, цифр и символов подчеркивания (_), обозначающая имя переменной. Прописные и строчные символы различаются и переменная x не то же, что X.

Идентификаторы могут быть произвольной длины, но лучше покороче и со смыслом

          i переменная цикла
          count           buff_size (из 2 слов) имя с символом _
          g374           _foo           if идентификатором, т.к. это ключевое слово
          374q с цифры

Литералы (константы) - постоянные значения

          5           05           0х5           5.0           5.f           '5'

Операторы (раздаточные материалы) - используются для составления арифметических и логических выражений. Они имеют строгий приоритет и порядок выполнения. Один и то же символ может трактоваться по-разному (-).

Пунктуация - ; , () {} постоянно будем сталкиваться. Правила их расстановки достаточно простые.

Алгоритм + структура данных = программа

Основные типы данных

Раздаточные материалы

Назначая тип данных для переменной, вы тем самым определяете две важные вещи:

  1. объем памяти, отводимый для ее хранения
  2. диапазон значений, который эта переменная может принимать

Поэтому к назначению типов переменных нужно подойти очень ответственно:

  1. чтобы программа во время выполнения не требовала большого объема памяти;
  2. чтобы значения, которые могут возникать при решении задачи не превышали диапазон.

Особо:

          bool
          wchar_t
          void

Модификаторы:

signed unsigned
const volative
(неизменяема) (неизменяема внутри программы)

Оператор sizeof позволяет определить размер памяти в байтах, необходимый для хранения переменной данного типа.

          i=sizeof(int);

Преобразование типов

float f=0.5f;
int i=(int)f;
int i=int(f);
2 вида:
расширение (понижение типа)
понижение типа

Переменные

          int i;           i=1;           int j=1;           int i,j;

Преобразование типов

Арифметические выражения Логические выражения
i + +;
+ + i;
- - i;
i - -;
+ i;
- i;
j = i%2;
i = (i<0)*(0):(i - -)
(i<0 && i>5)


i* = 5;
i% = 2;
 

группировка осуществляется с использованием круглых скобок.

Приоритеты операторов.

Основные языковые конструкции

  1. инструкция - записывается на одной строке и заканчивается;
  2. группа операторов - заключается в фигурные скобки
              {
              ...
              }
  3. Условные конструкции
  4. Циклические конструкции и операторы перехода
  5. Селективные конструкции

Программа на С++ - это набор объявлений и функций, составленный для решения задачи.

Минимальной программой на С++ является следующая:

          void main()
          {

          }

Она определяет функцию с именем main и ничего не делает.

Каждая программа на С++ должна содержать функцию main(), с которой и начинается выполнение программы.

Один из основных механизмов, который делает программу полезной является ввод/вывод. Все языки программирования имеют такой механизм.

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

Вообще многие механизмы, которые делают язык С++ таким мощным реализованы в библиотеках. (стандартные, специализированные, персональные).

Для использования библиотеки как минимум нужно включить ее описание в текст программы.

подключение
библиотек
#include < iostream > (< iostream.h >, "iostream")
using namespace std;
функция main void main()
{
cout<<"Data types"<<endl;
cout<<"int"<<sizeof(int)<<endl;
...
}
компиляция => сборка => проект

Условные конструкции
Селективные конструкции
Циклические конструкции
с предусловием
с постусловием
Пошаговый цикл