ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ...
TRANSCRIPT
![Page 1: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/1.jpg)
ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯПышкин Евгений Валерьевич
к.т.н., доцент
![Page 2: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/2.jpg)
Основы теории и технологии программирования
Программирование на языках C и C++, семестр 1 Основание программирования
Структурное проектирование и процедурная парадигма
Типы данных и алгоритмы
Языки C и C++
Функционально-иерархическая декомпозиция и модульная организация
Введение в объектно-ориентированное программирование
![Page 3: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/3.jpg)
Основы теории и технологии программирования
Программирование на языках C и C++, семестр 2 Основные концепции и механизмы объектно-
ориентированного программирования средствами языка C++
Управление сложными типами
Обобщенное программирование
Стандартная библиотека C++
Разработка приложений с графическим интерфейсом пользователя на основе библиотеки Qt
![Page 4: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/4.jpg)
Основы теории и технологии программирования
Технология программирования, 3-й семестр
Язык программирования Java: идеология и основные средства
Развитие объектно-ориентированных методов в языке Java
Разработка приложений с графическим интерфейсом пользователя на Java на основе библиотеки Swing
![Page 5: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/5.jpg)
Основы теории и технологии программирования
Java-технологии, 4-й семестр
Разработка приложений для платформы Android (планируется)
![Page 6: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/6.jpg)
Основы теории и технологии программирования
Объектно-ориентированный анализ и проектирование (5-й семестр) Введение в инженерию программного
обеспечения
Объектно-ориентированное моделирование и проектирование средствами UML
Паттерны проектирования
Управление качеством программного обеспечения
Основы коллективной работы и управления проектами
![Page 7: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/7.jpg)
Литература и ресурсы
Страницы курсов на сайте кафедры КСПТhttp://kspt.icc.spbstu.ru/courses/pages/Курс «Программирование на языках C и C++ Дополнительные ресурсы Примеры программ Материалы лекций Задания для практических занятий
Страница преподавателяhttp://kspt.icc.spbstu.ru/info/staff/pyshkin/
Интранет-портал ИКНТhttp://intranet.ftk.spbstu.ru
![Page 8: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/8.jpg)
Организация курса
Программирование на языке высокого уровня
![Page 9: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/9.jpg)
Организация курса«Программирование на языках C и С++»
1-й семестр Лекции 3 час/нед. Самостоятельная подготовка с использованием
предоставляемых преподавателем материалов
Обсуждение
Контрольные тесты
Практикум (лаб. + к.р. с зачетом)
Самостоятельная работа
Экзамен по курсу По результатам успешной работы в семестре
Выполнение задания на компьютере
![Page 10: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/10.jpg)
Организация курса«Программирование на языках C и С++»
2-й семестр Лекции 2 час/нед. Самостоятельная подготовка с использованием
предоставляемых преподавателем материалов
Обсуждение
Контрольные тесты
Практикум (лаб. + к.р. с зачетом)
Самостоятельная работа
Экзамен по курсу По результатам успешной работы в семестре
Выполнение задания на компьютере
![Page 11: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/11.jpg)
Основание программирования
Программирование на языках C и C++
![Page 12: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/12.jpg)
Необходимые предпосылки
Кодирование и содержание
Системы счисления
Понятие сложности кода
Цифровые вычислительные машины
Двоичный код
Операции над двоичными данными
![Page 13: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/13.jpg)
Понятие информации
Сведения о тех или иных явлениях природы, событиях в общественной жизни и процессах в технических устройствах
Сообщение – информация, воплощенная и зафиксированная в некоторой материальной форме
Символ – минимальный элемент сообщения Цифровые вычислительные машины
Алфавит – множество допустимых символов
![Page 14: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/14.jpg)
Кодирование и декодирование
Кодирование
Декодирование
Информация1
Алфавит
Правила
кодирования
Код
Правила
декодирования
Информация2
Смысл одинаков?
![Page 15: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/15.jpg)
Представление данных
Данные – информация, с которой имеют дело вычислительные машины
Системы счисления – различные формы представления числовых данных
Непозиционные и позиционные системы счисления
![Page 16: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/16.jpg)
Непозиционные системы счисления
Рекламные
агенты
Почтальоны
Воришки
Гости
![Page 17: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/17.jpg)
Позиционные системы счисления
Понятие цифры
Вес цифры зависит от ее положения в записи
Основание системы счисления – число цифр, используемых для записи чисел
q = 10 Десятичная система счисления
![Page 18: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/18.jpg)
Позиционные системы счисления
304 = 100*3 + 10*0 + 1*4
1
0
0
0
1
1
2
2
1
1 ...n
i
i
i
n
n
q aqaqaqaqaqA
01221 ... aaaaaA nnq
![Page 19: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/19.jpg)
Перевод из одной системы счисления в другую
Из двоичной в десятичную
Из троичной в десятичную
10
0123
2 13120212121101
10
01234
3 208130323132321201
![Page 20: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/20.jpg)
Перевод из одной системы счисления в другую
Общий случай для целых чисел
01
1
2
2
2
2
1
1 ... aaqaqaqaq n
n
n
n
q
12
1
2
3
1
2 ... aaqaqaq n
n
n
n
0: aremainder
![Page 21: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/21.jpg)
Перевод из одной системы счисления в другую
Пример: 1310 → ?2
62
13
32
6
остаток 1
12
3
остаток 0
остаток 1
02
1 остаток 1
1 1 0 1
![Page 22: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/22.jpg)
Перевод из одной системы счисления в другую
Общий случай с учетом дробной части
В дробной части для выделения отдельных цифр надо умножать на основание
1
1
1
0
0
1
1
1
1 ......n
mi
i
i
m
m
n
n
q aqaqaqaqaqaqA
mnnq aaaaaaaaA ....... 2101221
![Page 23: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/23.jpg)
Перевод из одной системы счисления в другую
Пример с дробной частью: 13.437510 → ?2
1 1 0 1 0 1 1 1
875.024375.0
75.012875.0
5.01275.0
125.0
2-1 2-2 2-3 2-420212223
![Page 24: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/24.jpg)
Шестнадцатеричная система счисления
1 шестнадцатеричный разряд представляется ровно четырьмя двоичными разрядами
Двоичный код Десятичный код Шестнадцатеричная цифра
0000 0 0
0001 1 1
0010 2 2
0011 3 3
0100 4 4
0101 5 5
0110 6 6
0111 7 7
1000 8 8
1001 9 9
1010 10 A
1011 11 B
1100 12 C
1101 13 D
1110 14 E
1111 15 F
1101.0111
D.7
10 1101.0111 101
2D.7A
0010 1101.0111 1010
![Page 25: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/25.jpg)
Понятие сложности кода
q
q
qA
Aq
Ak
Akq
L
LL
q
A
A
r
q
222
2
2 log2loglog2
log
log2
log
2
Сложность кода – минимальное число двоичных знаков, содержащих всю информацию о задаваемом объекте, достаточную для декодирования (Колмогоров)
kqLdigit kqnLA AkqL qAqlog
![Page 26: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/26.jpg)
Биты, байты, слова, слова, слова…
Строгое понятие байта несколько сложнее картинки…
1
10110000
1011000000000000
bit
byte
word
2 сигнала
256 комбинаций
65536
комбинаций
2 байта
![Page 27: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/27.jpg)
Сложение двоичных чисел
бит первого слагаемого
бит второго слагаемого
бит суммы бит переноса
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1
![Page 28: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/28.jpg)
Сложение двоичных чисел
бит переноса на входе
бит первого
слагаемого
бит второго слагаемого
бит суммы бит переноса на
выходе
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1
![Page 29: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/29.jpg)
Сложение двоичных чисел
123
67+
1 1 1 1 0 1 1
1 0 0 0 0 1 1+
1 0 1 1 1 1 1 0
11
190
1
![Page 30: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/30.jpg)
Вычитание целых чисел
123
67
_
.
56
.ba
10001000 ba
10001999 ba
10001)999( ba
![Page 31: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/31.jpg)
Вычитание в десятичном коде
99967
_
932123932
+
1055 1055
1+
1056 1056
1000
56
_
10001)999( ba
![Page 32: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/32.jpg)
Вычитание двоичных чисел
1 1 1 1 1 1 1
1 0 0 0 0 1 1
0 1 1 1 1 0 0
_ 127
67
_
60
инверсия!
![Page 33: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/33.jpg)
Вычитание двоичных чисел
0 1 1 1 1 0 0
1 1 1 1 0 1 1+
0 1 1 0 1 1 11
123
60+
183
![Page 34: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/34.jpg)
Вычитание двоичных чисел
0 1 1 0 1 1 11
1+
0 1 1 1 0 0 01
1
183
184
+
![Page 35: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/35.jpg)
Вычитание двоичных чисел
0 1 1 1 0 0 01 0
0 0 0 0 0 0 01 0
_
0 1 1 1 0 0 00 0
128
184
56
_
![Page 36: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/36.jpg)
Отрицательные числа
00000000
10000000
01000000
11111110
…
положительные числа
0
1
2
127
11111111
01111111
-1
-2
00000001
…
-128
отрицательные числа
![Page 37: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/37.jpg)
Отрицательные числа
1 1 1 1 1 1 1
1 1 1 1 0 1 1
0 0 0 0 1 0 0
_
0 0 0 0 1 0 0
0 0 0 0 0 0 1
+
0 0 0 0 1 0 11
123
1
0
1
1
0
123_
![Page 38: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/38.jpg)
Вычитание в комплементарном коде
1 0 0 0 0 1 1
0 0 0 0 1 0 1
1 0 0 1 0 0 0
67
123
_
56
0
1+
1_
Особая роль операции сложения
![Page 39: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/39.jpg)
Операции в двоичном коде
Разрядность кода
Переполнение (overflow)
00000000 00000000
16-разрядный код
11111110 11111111
00000000 10000000+
00000001 00000000
11111111 11111111
00000001 00000000
11111110 11111111
+
![Page 40: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/40.jpg)
Резюме: рассмотренные темы
Кодирование информации для компактного хранения и упрощения обработки Как код связан с содержанием
Причины использования двоичного кода в ЭВМ Понятие сложности кода
Комплементарный (дополнительный) кодОсобая роль операции сложения
Биты, байты и слова Разрядность
Операции в двоичном коде Что такое переполнение
![Page 41: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/41.jpg)
Языки программирования
Основные элементы языка
Синтаксис и семантика
Синтаксические диаграммы
Синтаксически-ориентированная трансляция
Виды трансляторов
История выбора языка для изучения в рамках курса теории и технологии программирования
![Page 42: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/42.jpg)
TIOBE* Community Index: September 2015
* The Importance Of Being Earnest (O.Wilde)
![Page 43: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/43.jpg)
TIOBE Index: Trends
![Page 44: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/44.jpg)
Языки программирования С и С++
Создание C (лаборатория Bell Labs, 1973 год)
Неформальная спецификация C (книга Кернигана и Ритчи, K&R, 1978 год)
Создание C++ Б. Страуструпом (1986 год – выпуск 1-го издания книги)
Формальная спецификация C (ANSI C или C89, 1989 год)
Международный стандарт ISO для языка C++ (1998 год)
Расширение языка C (стандарт C99, 1999 год)
Второй стандарт ISO для языка C++ (2003 год)
Стандарт 2011 года (C++11)
![Page 45: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/45.jpg)
Платформы разработки
Microsoft Visual Studio версии 2003, 2005, 2008, 2010 , 2012, 2013, 2015 годов
поддержка не только C/C++, но и других языков программирования (C#, Visual Basic, J# и другие)
MSDN
C++ Builder последняя версия датируется 2006 годом
существует аналог для языка Pascal (Delphi)
библиотека графических компонентов VCL
Netbeans, Eclipse и др.
![Page 46: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/46.jpg)
Алфавит языка
Литеры – символы, используемые для записи программ
Лексемы конструируются из литер в соответствии с правилами языка
идентификаторы
служебные слова (в C и C++ зарезервированы)
литералы
знаки операций
разделители
![Page 47: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/47.jpg)
Синтаксис и семантика
Трансляция программы – перевод программы с языка программирования на «язык» вычислительной системы
Правила составления инструкций языка строго регламентированы: синтаксис
Смысл программы в результате трансляции не должен измениться
![Page 48: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/48.jpg)
Синтаксис и семантика
Программа на языке
программирования
Компилятор
Программа на машинном
языке (объектный код)
Должны иметь один и
тот же смысл
Правила
синтаксиса
Компилятор использует
Программист должен
руководствоваться
![Page 49: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/49.jpg)
Синтаксис и семантика
Семантика в естественных языках
Он встретил ее на лугу с цветами…(*)
(*) Пример проф. Лекарева М.Ф.
![Page 50: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/50.jpg)
Синтаксис и семантика
В формальных языках синтаксические конструкции имеют один строго определенный смысл
Синтаксически ориентированная трансляция
Компилятор
Объектный код:
семантика, вычисленная
транслятором
Позволяет проверить
синтаксические ошибки
при записи текста
Правила
синтаксиса
Семантика,
подразумеваемая
программистом
Текст, выражающий
семантику
Семантика требует
внимания
ПРОГРАММИСТА
![Page 51: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/51.jpg)
Трансляция кода
Интерпретация
Инструкция исходного текста преобразуется в машинный код и сразу выполняется
Компиляция
Транслируется отдельный модуль кода в целом
JIT-компиляция
Код, который должен выполниться (например, отдельный метод), компилируется один раз при первом обращении
Неиспользуемый код не компилируется
![Page 52: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/52.jpg)
Трансляция кода
Трансляция в исполняемый (native) код
Наиболее эффективна
Трудно осуществлять верификацию кода во время выполнения
Пример: компилятор языка C
Трансляция в промежуточный код
Потери эффективности компенсируются возможностями контроля процесса трансляции из промежуточного кода в исполняемый и исполнения кода
Пример: байт-код и виртуальная машина Java
![Page 53: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/53.jpg)
Синтаксические диаграммы
Начало диаграммы
Конец диаграммы
Нотационная константа
Соединители
Нотационная переменная
десятичная-цифра ::=
0
1 2 3 4 5 6 7 98
идентификатор ::=
латинская-
буква
_
латинская-
буква
десятичная-
цифра
_
![Page 54: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/54.jpg)
Идентификаторы
идентификатор ::=
латинская-
буква
_
латинская-
буква
десятичная-
цифра
_
<идентификатор> ::= { <латинская-буква> | ‘_’ }
[ <латинская-буква> | <десятичная-цифра> | ‘_’]…
![Page 55: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/55.jpg)
Длина идентификаторов
Стандарт ANSI C (C89): 6 (для имен с внешним связыванием), 31 (для локальных имен)
Стандарт С99: соответственно 31 (глобальные)и 63 (остальные)
Microsoft C: 247
Microsoft Visual C++ .NET: 2048
…
Разумная: 9 – 16 символов
![Page 56: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/56.jpg)
Виды идентификаторов
Служебные слова С
Служебные слова C99
auto else
char for
default return
...
_Bool restrict
_Complex inline
_Imaginary const
...
![Page 57: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/57.jpg)
Виды идентификаторов
Служебные слова С++
Поддерживает ANSI C
Специфичные для C++
new delete
bool virtual
class public
inline protected
template private
namespace using
throw catch
...
![Page 58: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/58.jpg)
Виды идентификаторов
Пользовательские имена
Идентификаторы, зарезервированные для нужд системы
Предопределенные идентификаторы (в C99): __func__
static const char __func__[] = "function-name"
![Page 59: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/59.jpg)
Запись программ
Форматирование текста
Определенное правилами языка
Пользовательское форматирование
хотя полезность форматирования «настолько очевидна,
что не оспаривается никем [...],
конкретные правила форматирования были и
остаются предметом дискуссии» (М.Ф.Лекарев)
![Page 60: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/60.jpg)
Форматирование текста программы
Вертикальное форматирование
Горизонтальное форматирование
табуляции
пробелы
Пустые строчки
Одна строка текста – одна инструкция
Форматирование текста как средство визуализации программирования
![Page 61: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/61.jpg)
Комментарии
Заголовочные Блочные
Сопровождающие Констатирующие
/* это - комментарий ANSI C */
/* комментарий Си может
располагаться
на нескольких строчках и заканчивается в любом месте строки */
// Это – однострочный комментарий, продолжающийся до конца строки
// Такой комментарий допускается в C99 и C++
/* При наличии однострочных комментариев возможно
// вот такое вложение комментария.
Это иногда удобно при отладке */
![Page 62: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/62.jpg)
Комментарии
Комментарии, генерируемые системами проектирования
// DO NOT EDIT THIS TEXT!
// IT IS MACHINE GENERATED!
// TO DO
// Add component initialization code here
![Page 63: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/63.jpg)
Комментарии
Документирующие комментарии
// Пример использования документирующих комментариев в языке C#
/// <summary>
/// Plain triangle construction and processing class
/// </summary>
/// <remarks>
/// <see cref="Point">Point</see>
/// </remarks>
public class Triangle {
//...
///
/// Triangle construction by using three points
/// <param name = "p1">First point reference</param>
/// <param name = "p2">Second point reference</param>
/// <param name = "p3">Third point reference</param>
/// <returns>Returns true, if successful
/// Otherwise returns false
/// </returns>
public boolean ConstructTriangle( Point p1,
Point p2,
Point p3 ) {
// ...
}
}
![Page 64: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/64.jpg)
Комментарии
Документирующие комментарии
C# + embedded XML
Doc Parser
Файлы с исходным
текстом
Описание правил
(XML-Schema)
XML-документация
Документация в
форме связанных
HTML-страниц
Web Report
Generator
Эту роль часто
выполняет
компилятор
![Page 65: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/65.jpg)
Резюме
В формальных языках семантика строго привязана к синтаксису
Синтаксис требует соблюдения правил
Семантика требует внимания программиста
Синтаксические диаграммы – наиболее наглядный инструмент определения синтаксиса
Идентификатор – один из основных элементов программы
Правильная форма программы – не менее важный аспект, чем ее содержание
![Page 66: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/66.jpg)
Некоторые важные принципы изучения программирования
Программы пишутся для людей, а не для машин
Не усложняйте простое, не упрощайте сложное, НО:
Учиться легче на простых примерах
Не жертвуйте общими принципами в простых проектах: простота может оказаться обманчивой!
![Page 67: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/67.jpg)
Некоторые важные принципы изучения программирования
Две основные фазы программирования Понять, что требуется
Выразить в терминах имеющихся средств проектирования
Но: Программирование – только часть процесса разработки программного обеспечения
![Page 68: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/68.jpg)
Процесс разработки программного обеспечения
Анализ задачи и предметной области (Subject Domain Analysis)Формальная основа
Существующие подходы и решения
Понимание того, что хочется сделать
Управление требованиями (RequirementsEngineering) Выявление и формулирование требований
Функциональные и нефункциональные требования
Составление технической спецификации
![Page 69: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/69.jpg)
Процесс разработки программного обеспечения
Проектирование (Design) Выбор модели проектирования
Определение структуры системы, построение моделей
Разработка системы типов и алгоритмов
Реализация (Implementation)Другие термины: программирование,
кодирование
Испытания, тестирование, отладка, сопровождение, другие активности…
![Page 70: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/70.jpg)
Некоторые важные принципы изучения программирования
Программы постоянно изменяются => ожидайте изменений
Работающая программа – главный критерий прогресса, НО:
Учитесь систематическому подходу к проектированию
Она действительно работает, или это только кажется?
![Page 71: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/71.jpg)
Преподавание программирования –свои трудности
Teaching Programming: What We Miss in Academia,Or What Would Mr. Platt Say?
Проблемы, стоящие перед преподавателем Познакомить с концепциями
Научить языку программирования
Придумать оригинальные задачи
Учесть изменения в стандартах и развитие средств разработки
Научить «переводить» задачи
– Mikä on
ensimmäinen
kieli, joka
kehittäjän tulee
osata?
– Suomi.
– What language
has the
developer to
know first of
all?
– English.
開発者はまずはじめに何語を知るのか
日本語
![Page 72: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/72.jpg)
Языки программирования
Язык программирования как формально-логическая модель
ЭВМ
Модель ЭВМ
(виртуальная ЭВМ)
Проблемная
область
Модель
проблемной
области
Решение задачи
Переход к модели,
отражающей наиболее
существенные возможности
ЭВМ на более высоком
уровне абстракции
Решение
модели
задачи
Представление проблемной
области с использованием
абстракций языка
Императивные языкиОбъектно-
ориентированные языки
Императивные языки
суть абстракции
вычислительных машин
Объектно-ориентированный
анализ способствует решению
задачи в терминах, присущих
проблемной области
![Page 73: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/73.jpg)
Языки структурно-императивного программирования
Последовательное изменение состояния вычислителя пошаговым образом
Структурное программирование
Процедурное и модульное программирование
Fortran, Pascal, C, PL/1, …
Язык как модель вычислительной машины
Основная задача программиста: перейти от модели предметной области к терминам, присущим модели вычислительной машины
![Page 74: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/74.jpg)
Другие абстрактные модели
Объектно-ориентированное программирование Ориентация на построение моделей данных
Java, Eiffel, C++, Object Pascal
Функциональное программирование «Все задачи могут быть решены в форме обработки списков»
LISP
Логическое программирование «Все задачи могут быть решены посредством исчисления
предикатов»
Prolog
Автоматное программирование Задачи логического управления, реактивные системы
SWITCH-технология
![Page 75: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/75.jpg)
Резюме
Развитие абстрактных моделей не обязательно связано с переходом на более высокие уровни абстракции при описании вычислительной машины
Каждая модель программирования имеет свою концептуальную базу
Важно изучать не только конкретные языки программирования, а концепции проектирования, выражаемые этими языками
«Отличные программы пишут отличные проектировщики» (Ф. Брукс)
![Page 76: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/76.jpg)
«Алгоритмы + структуры данных = программы» (Н. Вирт)
Описания программных объектов
Определение действий над программными объектами
Понятие об определении и объявлении
![Page 77: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/77.jpg)
Описание переменной
10000000a 00000000 00000000 00000011
4 байта
Дополнительный
код
int
Стандартный целый тип в
32-разрядной архитектуре
int a;
![Page 78: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/78.jpg)
Задачи, решаемые описанием переменной
Определить необходимое количество памяти для хранения этих данных
Определить способ представления значения в памяти компьютера (код и правило декодирования цепочки битов, хранящихся в этой памяти)
Задать символическое имя, соответствующее адресу в памяти. Таким образом, имя переменной выступает в роли символического адреса
![Page 79: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/79.jpg)
Определение действий над программными объектами
Операции (operators) и выражения (expressions)
Классификация операций
Приоритет и группирование
Операции применительно к типам обрабатываемых данных
Присваивание (assignment)
Инструкции языка (statements)
![Page 80: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/80.jpg)
Выражения
Выражение – предложение языка, составленное из операндов, соединяемых знаками операций
int a, b;
printf( "%d", a+b ); // Выражение a+b не имеет
// побочных эффектов
a = a + b; // Один побочный эффект
a = ++b; // Два побочных эффекта
Инструкции программы
![Page 81: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/81.jpg)
Присваивание (C/C++)
Присваивание – операция с побочным эффектом. Результатом операции является присваиваемое значение
int a = 10; // Переменная a инициализирована значением 10
int b = 25; // Переменная b инициализирована значением 25
// NB! Инициализация НЕ является присваиванием
// Здесь: a=10,
// b=25
b = a; // Присваивание
// Здесь: a=10,
// b=10
![Page 82: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/82.jpg)
Присваивание
00000000a 00000000 00000000 00001010До присваивания
00000000b 00000000 00000000 00011001
00000000a 00000000 00000000 00001010
00000000b 00000000 00000000 00001010
копирование
После
присваивания
b = a;
![Page 83: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/83.jpg)
Присваивание (C/C++)
Значение операции присваивания не обязательно совпадает со значением переменной, расположенной справа от операции присваивания, после вычисления выражения
int a = 10;
int b = 25;
b = a; // Значение операции присваивания (10)
// совпадает со значением переменной a (10)
b = a++; // Значение операции присваивания (10)
// НЕ совпадает со значением переменной a (11)
![Page 84: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/84.jpg)
Классификация операций C/C++
По числу операндов
Одноместные (унарные)
Двуместные (бинарные)
Трехместная (тернарная)
count++ !found
a+b rdy && go size=limit
x>y ? max=x : max=y
![Page 85: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/85.jpg)
Классификация операций C/C++
По категории операндов
Ссылочные
Арифметические
Логические (булевские)
Операции отношения
array[ ix ] student.name
a+b a-b -c --a
rdy && go finish || error !eof
a<b a==b a!=b
![Page 86: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/86.jpg)
Классификация операций C/C++
По действию над двоичным представлением
Операции, действующие над значением в целом
Операции, действующие над отдельными битами
rdy && go a+b
synterm & mask a|b
![Page 87: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/87.jpg)
Классификация операций C/C++
По наличию побочных эффектов
Операции, имеющие побочные эффекты
Операции, не имеющие побочных эффектов
a=b count++ remain--
a+b a << 2 a && b !found
![Page 88: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/88.jpg)
Приоритет операций в выражениях
Определяет порядок выполнения операций
Ссылочные – наивысший приоритет
Одноместные
Двуместные мультипликативные
Двуместные аддитивные
Операции отношений
Логические операции
Присваивание – самый низкий приоритет
d = --a + b*c;
a<b && a<c
![Page 89: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/89.jpg)
Группирование операций (ассоциативность)
Правоассоциативные – вычисляются справа налево
Левоассоциативные – вычисляются слева направо
nextValue = *++next;
a = b = c;
result = a + b + c – d;
![Page 90: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/90.jpg)
Синтаксическое дерево выражения
Структура выражения -
синтаксическое дерево
ЧТЕНИЕ b
* 25
+ a
ЗАПИСЬ a
a=a + b * 25
=
+
*
Порядок выполнения операций
машинного кода
![Page 91: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/91.jpg)
Изменение приоритета
ЧТЕНИЕ a
+ b
* 25
ЗАПИСЬ a
a=a + b * 25
=
+
*
)(
a = (a + b) * 25;
![Page 92: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/92.jpg)
Высокоуровневые инструкции языка
Обеспечивают выполнение наиболее распространенных последовательностей операций
Определяют порядок действий, выполняемых в ходе работы программы
Упрощают запись программ
Простейшая инструкция – выражение (expression statement)
![Page 93: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/93.jpg)
Понятие об определении и объявлении
Описаниепеременной
Определение
Объявление
![Page 94: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/94.jpg)
Понятие об определении и объявлении
Определение (definition) всегда связано с выделением памяти. Наличие в тексте определения объекта означает, что для данного объекта при загрузке программы будет выделена память, для обращения к которой в программе используется имя определяемого объекта (например, имя переменной)
Объявление (declaration) служит для того, чтобы иметь возможность в некотором программном модуле или в пределах отдельного функционального блока иметь возможность корректно использовать объект, определенный где-то в другом месте программы
![Page 95: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/95.jpg)
Понятие об определении и объявлении
int a;
Определение
Глобальная область видимости
Область видимости отдельного модуля
extern int a;
Объявление
a = 10;
Доступ к объекту
из глобальной
области видимости
![Page 96: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии](https://reader030.vdocuments.net/reader030/viewer/2022040310/5f3518ecd356d1697f1cc349/html5/thumbnails/96.jpg)
Резюме
Перед использованием программные объекты должны быть объявлены (нужно компилятору)
Перед использование программные объекты должны быть определены (нужно компоновщику)
Операции обеспечивают элементарные действия над данными
Важно учитывать приоритет, ассоциативность операций и наличие побочных эффектов
Инструкции языка обеспечивают управление порядком выполняемых действий