- •Ф.Ф. Павлов языки программирования
- •Санкт-Петербург
- •230201 - Информационные системы и технологии
- •Тема 2 посвящена изучению жизненного цикла программы и основным этапам решения задач на эвм.
- •Тема 4 изучает типы пользовательских интерфейсов, классификацию диалогов и основные компоненты графических пользовательских интерфейсов.
- •Тема 8 посвящена структурам данных фиксированного размера (массивы), а также типам данных, определяемых пользователем (структуры, объединения, перечисления).
- •Тема 10 изучает динамические структуры данных: виды и способы реализации списков, динамическое выделение памяти.
- •Тема 12 затрагивает вопросы обработки файлов данных: понятия записи, файла данных и способы доступа, операции и средства обработки файлов, контроль операций обработки файлов.
- •Тема 14 вводит в технологию объектно-ориентированного программирования.
- •Раздел I Принципы программирования на языках высокого уровня
- •Тема 1. Эволюция языков программирования
- •1.1. Неструктурированное, «стихийное» программирование
- •1.2. Процедурное (модульное) программирование
- •1.3. Объектно-ориентированное программирование
- •1.4. Компонентные технологии программирования
- •Тема 2. Жизненный цикл программы и основные
- •2.1. Дружественность, жизненный цикл программы
- •2.2. Постановка задачи и спецификация программы
- •2.3. Проектирование и реализация программы
- •2.4. Способы записи алгоритма
- •2.5. Критерии качества программы
- •3.1. Классификация программных продуктов
- •3.3. Модели программирования в ms-dos и Windows
- •Тема 4. Диалоговые программы
- •4.1. Типы пользовательских интерфейсов
- •4.2. Классификация диалогов и их реализация
- •4.3. Основные компоненты графических
- •Тема 5. Программа на языке высокого уровня
- •5.1. Структура программы и функции
- •5.2. Стандартные типы данных и операции над ними
- •5.3. Адресные типы данных: указатели и ссылки
- •5.4. Стандартные библиотеки языка
- •5.5. Классы памяти
- •Раздел 2 Управляющие структуры и структуры данных
- •Тема 6. Представление управляющих структур
- •6.1. Структура следования
- •6.2. Структуры ветвления
- •6.3. Структуры повторения
- •Int kol, //счетчик введенных оценок
- •Int god; //число лет
- •Тема 7. Адресные типы данных
- •7.1. Указатели
- •7.2. Ссылки
- •Тема 8. Структуры данных фиксированного размера
- •8.1. Массивы
- •8.2. Типы данных, определяемые пользователем
- •Тема 9. Функции (процедуры)
- •9.1. Определение, прототип и вызов функции
- •9.2. Передача параметров
- •9.3. Программирование рекурсивных алгоритмов
- •Тема 10. Динамические структуры данных
- •10.1. Списки: основные виды и способы реализации
- •10.2. Динамическое выделение памяти
- •Раздел 3 Процедурное программирование
- •Тема 11. Ввод/вывод данных
- •11.1. Видеофункции библиотеки conio.H
- •11.2. Функции библиотеки потокового ввода/вывода
- •Тема 12. Обработка файлов данных
- •12.1. Записи и файлы данных
- •12.2. Операции и средства обработки файлов
- •12.3. Контроль операций обработки файлов
- •Тема 13 Технология процедурного программирования
- •13.1. Способы конструирования программ
- •13.2. Проектирование программы: методы декомпозиции и и модульного программирования
- •13.3. Реализация программы: методы структурного
- •Тема 14. Введение в технологию объектно-
- •14.1. Основные понятия объектно-ориентированного
- •14.2. Проектирование программы
- •14.3. Реализация программы
- •Утверждаю
- •Рабочая программа
- •Технология программирования
- •Санкт-Петербург
- •Тема 1. Технология программирования и этапы ее
- •Тема 2. Жизненный цикл программы и основные этапы
5.5. Классы памяти
Классы памяти предназначены для выделения памяти объектам данных (значениям переменных и др.). Класс памяти определяет место хранения объекта памяти: сегмент данных, сегмент стека, регистр процессора, динамическая память (heap – куча).
Для объекта данных класс памяти задает два параметра: область действия (сфера действия) и время жизни.
Областью действия объекта называется часть программы, в которой доступен этот объект. Существуют следующие области действия: блок, файл, вся программа.
Время жизни объекта называется период времени, в течение которого значение этого объекта доступно для использования. Существуют следующие виды времени жизни: статическая (время жизни всей программы), локальная (время жизни блока), динамическая (время жизни от функции резервирования памяти new до функции освобождения памяти delete).
В языке C++ можно выделить 6 классов памяти:
внешний класс (extern);
внешний статический класс (static);
автоматический класс (auto);
регистровый класс (register);
внутренний статический класс (static);
динамический класс.
Термин «внешний» говорит, что данные определяются внешним образом по отношению к функциям, т.е. определены и объявлены вне функций. Данные внешнего класса определены в одном файле кодов и объявлены с префиксом extern в других файлах кодов. Определение создает объект данных, т.е. резервирует объекту память и связывает идентификатор с этим объектом, а объявление создает ссылку на этот объект. Префикс extern сообщает, что данные определены где-то в другом файле кодов. Область действия данных внешнего класса – вся программа.
Данные внешнего статического класса памяти определены с префиксом static. Область их действия – только файл, в котором они определены. Объекты данных внешнего и внешнего статического классов памяти хранятся в сегменте данных программы. Поэтому, время жизни таких данных – статическая, т.е. время жизни всей программы. Эти данные называют глобальными. Функции по умолчанию являются внешними, префикс static не обязателен.
Данные автоматического, регистрового и внутреннего статического классов памяти определяются внутри блока. Область их действия – блок, в котором они определены. Класс памяти задается с помощью префиксов. По умолчанию подразумевается auto.
Автоматические объекты данных хранятся в стеке. Они создаются при входе в блок и уничтожаются при выходе. Следовательно, их время жизни – локальное (время жизни блока). Параметры функции имеют автоматический класс памяти.
Регистровые объекты данных хранятся в регистрах процессора, их время жизни – тоже локальное. Этот класс памяти используется для повышения быстродействия программ (например, для счетчиков).
Объекты внутренних статических данных хранятся в сегменте данных. Их время жизни – статическое. Эти объекты создаются однократно и сохраняют свои значения между повторными входами в блок, в котором они определены. Данные автоматического и регистрового классов памяти называют локальными.
Пример скелета программы из двух файлов:
//файл f1.cpp
extern int max; //объявление max, внешний класс памяти
extern float vvod(int);
etxtern void vyvod(float);
char menu();
main()
{…
char ch; //автоматический класс
ch=menu();
}
char menu()
{…
char ch; //автоматический класс
float rez; //автоматический класс
int n=10; //автоматический класс
rez=vvod(n);
vyvod (rez);
…return(ch);
}
//файл f2.cpp
int max; //определение max, внешний класс
static float rez; //внешний статический класс
float vvod(int n)
{…
register int j; //регистровый класс
static float m[max]; //внутренний статический класс
float x; //автоматический класс
return (rez);
}
void vyvod (float y)
{…
static int i; //внутренний статический класс
i++;
register int j; //регистровый класс
}
Контрольные вопросы
Охарактеризуйте структуру программы.
Охарактеризуйте структуру функции.
Перечислите стандартные типы данных.
Перечислите операции над стандартными типами данных.
Что такое указатели?
Чем отличаются ссылки от указателей?
Приведите стандартные библиотеки языка.
Объясните классы памяти.