96
ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ Пышкин Евгений Валерьевич к.т.н., доцент

ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

  • Upload
    others

  • View
    46

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯПышкин Евгений Валерьевич

к.т.н., доцент

Page 2: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Основы теории и технологии программирования

Программирование на языках C и C++, семестр 1 Основание программирования

Структурное проектирование и процедурная парадигма

Типы данных и алгоритмы

Языки C и C++

Функционально-иерархическая декомпозиция и модульная организация

Введение в объектно-ориентированное программирование

Page 3: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Основы теории и технологии программирования

Программирование на языках C и C++, семестр 2 Основные концепции и механизмы объектно-

ориентированного программирования средствами языка C++

Управление сложными типами

Обобщенное программирование

Стандартная библиотека C++

Разработка приложений с графическим интерфейсом пользователя на основе библиотеки Qt

Page 4: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Основы теории и технологии программирования

Технология программирования, 3-й семестр

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

Развитие объектно-ориентированных методов в языке Java

Разработка приложений с графическим интерфейсом пользователя на Java на основе библиотеки Swing

Page 5: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Основы теории и технологии программирования

Java-технологии, 4-й семестр

Разработка приложений для платформы Android (планируется)

Page 6: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Основы теории и технологии программирования

Объектно-ориентированный анализ и проектирование (5-й семестр) Введение в инженерию программного

обеспечения

Объектно-ориентированное моделирование и проектирование средствами UML

Паттерны проектирования

Управление качеством программного обеспечения

Основы коллективной работы и управления проектами

Page 7: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Литература и ресурсы

Страницы курсов на сайте кафедры КСПТ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/... · Основы теории и технологии

Организация курса

Программирование на языке высокого уровня

Page 9: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Организация курса«Программирование на языках C и С++»

1-й семестр Лекции 3 час/нед. Самостоятельная подготовка с использованием

предоставляемых преподавателем материалов

Обсуждение

Контрольные тесты

Практикум (лаб. + к.р. с зачетом)

Самостоятельная работа

Экзамен по курсу По результатам успешной работы в семестре

Выполнение задания на компьютере

Page 10: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Организация курса«Программирование на языках C и С++»

2-й семестр Лекции 2 час/нед. Самостоятельная подготовка с использованием

предоставляемых преподавателем материалов

Обсуждение

Контрольные тесты

Практикум (лаб. + к.р. с зачетом)

Самостоятельная работа

Экзамен по курсу По результатам успешной работы в семестре

Выполнение задания на компьютере

Page 11: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Основание программирования

Программирование на языках C и C++

Page 12: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Необходимые предпосылки

Кодирование и содержание

Системы счисления

Понятие сложности кода

Цифровые вычислительные машины

Двоичный код

Операции над двоичными данными

Page 13: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Понятие информации

Сведения о тех или иных явлениях природы, событиях в общественной жизни и процессах в технических устройствах

Сообщение – информация, воплощенная и зафиксированная в некоторой материальной форме

Символ – минимальный элемент сообщения Цифровые вычислительные машины

Алфавит – множество допустимых символов

Page 14: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Кодирование и декодирование

Кодирование

Декодирование

Информация1

Алфавит

Правила

кодирования

Код

Правила

декодирования

Информация2

Смысл одинаков?

Page 15: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Представление данных

Данные – информация, с которой имеют дело вычислительные машины

Системы счисления – различные формы представления числовых данных

Непозиционные и позиционные системы счисления

Page 16: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Непозиционные системы счисления

Рекламные

агенты

Почтальоны

Воришки

Гости

Page 17: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Позиционные системы счисления

Понятие цифры

Вес цифры зависит от ее положения в записи

Основание системы счисления – число цифр, используемых для записи чисел

q = 10 Десятичная система счисления

Page 18: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Позиционные системы счисления

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/... · Основы теории и технологии

Перевод из одной системы счисления в другую

Из двоичной в десятичную

Из троичной в десятичную

10

0123

2 13120212121101

10

01234

3 208130323132321201

Page 20: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Перевод из одной системы счисления в другую

Общий случай для целых чисел

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/... · Основы теории и технологии

Перевод из одной системы счисления в другую

Пример: 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/... · Основы теории и технологии

Перевод из одной системы счисления в другую

Общий случай с учетом дробной части

В дробной части для выделения отдельных цифр надо умножать на основание

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/... · Основы теории и технологии

Перевод из одной системы счисления в другую

Пример с дробной частью: 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/... · Основы теории и технологии

Шестнадцатеричная система счисления

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/... · Основы теории и технологии

Понятие сложности кода

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/... · Основы теории и технологии

Биты, байты, слова, слова, слова…

Строгое понятие байта несколько сложнее картинки…

1

10110000

1011000000000000

bit

byte

word

2 сигнала

256 комбинаций

65536

комбинаций

2 байта

Page 27: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Сложение двоичных чисел

бит первого слагаемого

бит второго слагаемого

бит суммы бит переноса

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/... · Основы теории и технологии

Сложение двоичных чисел

бит переноса на входе

бит первого

слагаемого

бит второго слагаемого

бит суммы бит переноса на

выходе

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/... · Основы теории и технологии

Сложение двоичных чисел

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/... · Основы теории и технологии

Вычитание целых чисел

123

67

_

.

56

.ba

10001000 ba

10001999 ba

10001)999( ba

Page 31: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Вычитание в десятичном коде

99967

_

932123932

+

1055 1055

1+

1056 1056

1000

56

_

10001)999( ba

Page 32: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Вычитание двоичных чисел

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/... · Основы теории и технологии

Вычитание двоичных чисел

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/... · Основы теории и технологии

Вычитание двоичных чисел

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/... · Основы теории и технологии

Вычитание двоичных чисел

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/... · Основы теории и технологии

Отрицательные числа

00000000

10000000

01000000

11111110

положительные числа

0

1

2

127

11111111

01111111

-1

-2

00000001

-128

отрицательные числа

Page 37: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Отрицательные числа

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/... · Основы теории и технологии

Вычитание в комплементарном коде

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/... · Основы теории и технологии

Операции в двоичном коде

Разрядность кода

Переполнение (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/... · Основы теории и технологии

Резюме: рассмотренные темы

Кодирование информации для компактного хранения и упрощения обработки Как код связан с содержанием

Причины использования двоичного кода в ЭВМ Понятие сложности кода

Комплементарный (дополнительный) кодОсобая роль операции сложения

Биты, байты и слова Разрядность

Операции в двоичном коде Что такое переполнение

Page 41: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Языки программирования

Основные элементы языка

Синтаксис и семантика

Синтаксические диаграммы

Синтаксически-ориентированная трансляция

Виды трансляторов

История выбора языка для изучения в рамках курса теории и технологии программирования

Page 42: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

TIOBE* Community Index: September 2015

* The Importance Of Being Earnest (O.Wilde)

Page 43: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

TIOBE Index: Trends

Page 44: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Языки программирования С и С++

Создание 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/... · Основы теории и технологии

Платформы разработки

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/... · Основы теории и технологии

Алфавит языка

Литеры – символы, используемые для записи программ

Лексемы конструируются из литер в соответствии с правилами языка

идентификаторы

служебные слова (в C и C++ зарезервированы)

литералы

знаки операций

разделители

Page 47: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Синтаксис и семантика

Трансляция программы – перевод программы с языка программирования на «язык» вычислительной системы

Правила составления инструкций языка строго регламентированы: синтаксис

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

Page 48: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Синтаксис и семантика

Программа на языке

программирования

Компилятор

Программа на машинном

языке (объектный код)

Должны иметь один и

тот же смысл

Правила

синтаксиса

Компилятор использует

Программист должен

руководствоваться

Page 49: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Синтаксис и семантика

Семантика в естественных языках

Он встретил ее на лугу с цветами…(*)

(*) Пример проф. Лекарева М.Ф.

Page 50: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Синтаксис и семантика

В формальных языках синтаксические конструкции имеют один строго определенный смысл

Синтаксически ориентированная трансляция

Компилятор

Объектный код:

семантика, вычисленная

транслятором

Позволяет проверить

синтаксические ошибки

при записи текста

Правила

синтаксиса

Семантика,

подразумеваемая

программистом

Текст, выражающий

семантику

Семантика требует

внимания

ПРОГРАММИСТА

Page 51: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Трансляция кода

Интерпретация

Инструкция исходного текста преобразуется в машинный код и сразу выполняется

Компиляция

Транслируется отдельный модуль кода в целом

JIT-компиляция

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

Неиспользуемый код не компилируется

Page 52: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Трансляция кода

Трансляция в исполняемый (native) код

Наиболее эффективна

Трудно осуществлять верификацию кода во время выполнения

Пример: компилятор языка C

Трансляция в промежуточный код

Потери эффективности компенсируются возможностями контроля процесса трансляции из промежуточного кода в исполняемый и исполнения кода

Пример: байт-код и виртуальная машина Java

Page 53: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Синтаксические диаграммы

Начало диаграммы

Конец диаграммы

Нотационная константа

Соединители

Нотационная переменная

десятичная-цифра ::=

0

1 2 3 4 5 6 7 98

идентификатор ::=

латинская-

буква

_

латинская-

буква

десятичная-

цифра

_

Page 54: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Идентификаторы

идентификатор ::=

латинская-

буква

_

латинская-

буква

десятичная-

цифра

_

<идентификатор> ::= { <латинская-буква> | ‘_’ }

[ <латинская-буква> | <десятичная-цифра> | ‘_’]…

Page 55: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Длина идентификаторов

Стандарт 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/... · Основы теории и технологии

Виды идентификаторов

Служебные слова С

Служебные слова C99

auto else

char for

default return

...

_Bool restrict

_Complex inline

_Imaginary const

...

Page 57: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Виды идентификаторов

Служебные слова С++

Поддерживает 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/... · Основы теории и технологии

Виды идентификаторов

Пользовательские имена

Идентификаторы, зарезервированные для нужд системы

Предопределенные идентификаторы (в C99): __func__

static const char __func__[] = "function-name"

Page 59: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Запись программ

Форматирование текста

Определенное правилами языка

Пользовательское форматирование

хотя полезность форматирования «настолько очевидна,

что не оспаривается никем [...],

конкретные правила форматирования были и

остаются предметом дискуссии» (М.Ф.Лекарев)

Page 60: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Форматирование текста программы

Вертикальное форматирование

Горизонтальное форматирование

табуляции

пробелы

Пустые строчки

Одна строка текста – одна инструкция

Форматирование текста как средство визуализации программирования

Page 61: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Комментарии

Заголовочные Блочные

Сопровождающие Констатирующие

/* это - комментарий ANSI C */

/* комментарий Си может

располагаться

на нескольких строчках и заканчивается в любом месте строки */

// Это – однострочный комментарий, продолжающийся до конца строки

// Такой комментарий допускается в C99 и C++

/* При наличии однострочных комментариев возможно

// вот такое вложение комментария.

Это иногда удобно при отладке */

Page 62: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Комментарии

Комментарии, генерируемые системами проектирования

// 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/... · Основы теории и технологии

Комментарии

Документирующие комментарии

// Пример использования документирующих комментариев в языке 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/... · Основы теории и технологии

Комментарии

Документирующие комментарии

C# + embedded XML

Doc Parser

Файлы с исходным

текстом

Описание правил

(XML-Schema)

XML-документация

Документация в

форме связанных

HTML-страниц

Web Report

Generator

Эту роль часто

выполняет

компилятор

Page 65: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Резюме

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

Синтаксис требует соблюдения правил

Семантика требует внимания программиста

Синтаксические диаграммы – наиболее наглядный инструмент определения синтаксиса

Идентификатор – один из основных элементов программы

Правильная форма программы – не менее важный аспект, чем ее содержание

Page 66: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Некоторые важные принципы изучения программирования

Программы пишутся для людей, а не для машин

Не усложняйте простое, не упрощайте сложное, НО:

Учиться легче на простых примерах

Не жертвуйте общими принципами в простых проектах: простота может оказаться обманчивой!

Page 67: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Некоторые важные принципы изучения программирования

Две основные фазы программирования Понять, что требуется

Выразить в терминах имеющихся средств проектирования

Но: Программирование – только часть процесса разработки программного обеспечения

Page 68: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Процесс разработки программного обеспечения

Анализ задачи и предметной области (Subject Domain Analysis)Формальная основа

Существующие подходы и решения

Понимание того, что хочется сделать

Управление требованиями (RequirementsEngineering) Выявление и формулирование требований

Функциональные и нефункциональные требования

Составление технической спецификации

Page 69: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Процесс разработки программного обеспечения

Проектирование (Design) Выбор модели проектирования

Определение структуры системы, построение моделей

Разработка системы типов и алгоритмов

Реализация (Implementation)Другие термины: программирование,

кодирование

Испытания, тестирование, отладка, сопровождение, другие активности…

Page 70: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Некоторые важные принципы изучения программирования

Программы постоянно изменяются => ожидайте изменений

Работающая программа – главный критерий прогресса, НО:

Учитесь систематическому подходу к проектированию

Она действительно работает, или это только кажется?

Page 71: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Преподавание программирования –свои трудности

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/... · Основы теории и технологии

Языки программирования

Язык программирования как формально-логическая модель

ЭВМ

Модель ЭВМ

(виртуальная ЭВМ)

Проблемная

область

Модель

проблемной

области

Решение задачи

Переход к модели,

отражающей наиболее

существенные возможности

ЭВМ на более высоком

уровне абстракции

Решение

модели

задачи

Представление проблемной

области с использованием

абстракций языка

Императивные языкиОбъектно-

ориентированные языки

Императивные языки

суть абстракции

вычислительных машин

Объектно-ориентированный

анализ способствует решению

задачи в терминах, присущих

проблемной области

Page 73: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Языки структурно-императивного программирования

Последовательное изменение состояния вычислителя пошаговым образом

Структурное программирование

Процедурное и модульное программирование

Fortran, Pascal, C, PL/1, …

Язык как модель вычислительной машины

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

Page 74: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Другие абстрактные модели

Объектно-ориентированное программирование Ориентация на построение моделей данных

Java, Eiffel, C++, Object Pascal

Функциональное программирование «Все задачи могут быть решены в форме обработки списков»

LISP

Логическое программирование «Все задачи могут быть решены посредством исчисления

предикатов»

Prolog

Автоматное программирование Задачи логического управления, реактивные системы

SWITCH-технология

Page 75: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Резюме

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

Каждая модель программирования имеет свою концептуальную базу

Важно изучать не только конкретные языки программирования, а концепции проектирования, выражаемые этими языками

«Отличные программы пишут отличные проектировщики» (Ф. Брукс)

Page 76: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

«Алгоритмы + структуры данных = программы» (Н. Вирт)

Описания программных объектов

Определение действий над программными объектами

Понятие об определении и объявлении

Page 77: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Описание переменной

10000000a 00000000 00000000 00000011

4 байта

Дополнительный

код

int

Стандартный целый тип в

32-разрядной архитектуре

int a;

Page 78: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Задачи, решаемые описанием переменной

Определить необходимое количество памяти для хранения этих данных

Определить способ представления значения в памяти компьютера (код и правило декодирования цепочки битов, хранящихся в этой памяти)

Задать символическое имя, соответствующее адресу в памяти. Таким образом, имя переменной выступает в роли символического адреса

Page 79: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Определение действий над программными объектами

Операции (operators) и выражения (expressions)

Классификация операций

Приоритет и группирование

Операции применительно к типам обрабатываемых данных

Присваивание (assignment)

Инструкции языка (statements)

Page 80: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Выражения

Выражение – предложение языка, составленное из операндов, соединяемых знаками операций

int a, b;

printf( "%d", a+b ); // Выражение a+b не имеет

// побочных эффектов

a = a + b; // Один побочный эффект

a = ++b; // Два побочных эффекта

Инструкции программы

Page 81: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Присваивание (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/... · Основы теории и технологии

Присваивание

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/... · Основы теории и технологии

Присваивание (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/... · Основы теории и технологии

Классификация операций 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/... · Основы теории и технологии

Классификация операций 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/... · Основы теории и технологии

Классификация операций C/C++

По действию над двоичным представлением

Операции, действующие над значением в целом

Операции, действующие над отдельными битами

rdy && go a+b

synterm & mask a|b

Page 87: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Классификация операций C/C++

По наличию побочных эффектов

Операции, имеющие побочные эффекты

Операции, не имеющие побочных эффектов

a=b count++ remain--

a+b a << 2 a && b !found

Page 88: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Приоритет операций в выражениях

Определяет порядок выполнения операций

Ссылочные – наивысший приоритет

Одноместные

Двуместные мультипликативные

Двуместные аддитивные

Операции отношений

Логические операции

Присваивание – самый низкий приоритет

d = --a + b*c;

a<b && a<c

Page 89: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Группирование операций (ассоциативность)

Правоассоциативные – вычисляются справа налево

Левоассоциативные – вычисляются слева направо

nextValue = *++next;

a = b = c;

result = a + b + c – d;

Page 90: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Синтаксическое дерево выражения

Структура выражения -

синтаксическое дерево

ЧТЕНИЕ b

* 25

+ a

ЗАПИСЬ a

a=a + b * 25

=

+

*

Порядок выполнения операций

машинного кода

Page 91: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Изменение приоритета

ЧТЕНИЕ a

+ b

* 25

ЗАПИСЬ a

a=a + b * 25

=

+

*

)(

a = (a + b) * 25;

Page 92: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

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

Обеспечивают выполнение наиболее распространенных последовательностей операций

Определяют порядок действий, выполняемых в ходе работы программы

Упрощают запись программ

Простейшая инструкция – выражение (expression statement)

Page 93: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Понятие об определении и объявлении

Описаниепеременной

Определение

Объявление

Page 94: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Понятие об определении и объявлении

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

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

Page 95: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Понятие об определении и объявлении

int a;

Определение

Глобальная область видимости

Область видимости отдельного модуля

extern int a;

Объявление

a = 10;

Доступ к объекту

из глобальной

области видимости

Page 96: ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯkspt.icc.spbstu.ru/media/files/people/pyshkin/... · Основы теории и технологии

Резюме

Перед использованием программные объекты должны быть объявлены (нужно компилятору)

Перед использование программные объекты должны быть определены (нужно компоновщику)

Операции обеспечивают элементарные действия над данными

Важно учитывать приоритет, ассоциативность операций и наличие побочных эффектов

Инструкции языка обеспечивают управление порядком выполняемых действий