- •1)Стандартные операции языка Си.
- •2)Линейные списки, операции с линейными списками.
- •3)Модели жизненного цикла по
- •Итерационная модель
- •Спиральная модель жизненного цикла по
- •II билет)
- •1)Обработка нештатных ситуаций. Объекты исключения. Примеры.
- •Вопрос 1: какова дальнейшая судьба этих ресурсов, будут ли они освобождены?
- •Вопрос 2: как распознавать подобные ситуации и корректно их обрабатывать?
- •2) Основные понятия ооп: абстракция, инкапсуляция, наследование, полифморфизм
- •3)Диаграммы классов. Нотация, отношения.
- •III билет)
- •1)Язык Си: указатели и массивы. Определения, примеры.
- •2)Абстрактные классы. Их назначение, пример.
- •3)Диаграммы прецедентов. Нотация, семантика, примеры.
- •Основные обозначения на диаграммах прецедентов:
- •IV билет)
- •1)Язык Си: объявление функций, передача аргументов. Примеры.
- •2)Язык Си: Работа с файловой системой. Примеры.
- •3)Сценарий выполнения прецедентов(пример).
- •V билет)
- •1)Язык Си: строки и указатели. Определения, примеры.
- •2)Язык Си: Низкоуровневый ввод/вывод. Пример.
- •3) Атрибуты на диаграммах классов. Нотация и семантика. Примеры.
- •VI билет)
- •1)Язык Си: аргументы командной строки. Перегруженные функции. Примеры.
- •2)Альтернативное определение ооп.
- •3)Операции на диаграммах классов. Нотация и семантика. Примеры.
- •VII билет)
- •1)Язык Си: организация ввода/вывода. Пример: слияние файлов.
- •Открытие файла
- •Закрытие файла
- •Ввод из файла
- •Вывод в файл
- •Особые ситуации
- •Пример: слияние файлов
- •2)Объекты классов. Статические, автоматические, динамические. Примеры.
- •3)Полиморфный контейнер(пример).
- •VIII билет)
- •1)Язык Си: структуры. Пример.
- •2)Управление доступом к элементам классов. Пример.
- •3)Двоичные деревья. Алгоритмы обхода, поиска, вставки, сортировки.
- •IX билет)
- •1)Язык Си: Произвольный доступ к файлам. Пример.
- •2) Конструкторы и деструкторы. Их виды. Вызов конструктора при наследовании Примеры.
- •3)Проектирование по и uml. Основные понятия.
- •Uml (основные понятия)
- •Канонические диаграммы языка uml 2.X
- •X билет)
- •1)Язык Си: оператор определения типа. Примеры.
- •2)Наследование классов. Пример с Абстрактными фигурами.
- •XI билет)
- •1)Язык Си: Препроцессор. Директивы препоцессора. Примеры.
- •2)Множественное наследование. Виртуальная схема наследования. Пример.
- •П оскольку классы-потомки наследуют все данные и методы классов-предков, в итоге имеем следующую картину:
- •3)Шаблоны Функций и шаблоны классов. Примеры.
- •XII билет)
- •1)Язык Си: программный стек. Пример работы стека.
- •2)Виртуальные функции. Раннее и позднее связывание.
- •3)Hash-таблицы(Таблицы с перемешиванием).
3)Диаграммы классов. Нотация, отношения.
Диаграмма классов есть логическая модель проектируемой системы.
Диаграмма классов (class diagram) – предназначена для представления статической структуры программной системы в терминах классов ООП.
Диаграмма классов представляет собой граф, узлами которого являются элементы типа «классификатор», которые связаны различными типами структурных отношений.
Классификатор (classifier) – специальное понятие, предназначенное для классификации экземпляров (объектов), которые имеют общие характеристики.
Варианты графического изображения классов на Диаграмме классов
Примеры Диаграммы классов.
Имеет два пакета классов: «Холдинг» и «Персонал».
Класс «Предприятие» многократно ассоциирован с классами «Должность» и «Сотрудник».
Для C++ это значит, что в классе «Предприятие» есть два контейнера указателей на объекты этих классов.
Класс «Сотрудник» содержит объекты классов «ОпытРаботы» и «Квалификация». Также содержит контейнер указателей на объекты класса «Предприятие» (для C++).
Классы «Мужчина» и «Женщина» есть потомки класса «Сотрудник».
Класс «УровеньКвалификации» по сути представляет собой перечислимый тип. Он однократно ассоциирован с классом «Квалификация».
III билет)
1)Язык Си: указатели и массивы. Определения, примеры.
Массив есть набор объектов одного типа, размещённых в смежных областях памяти.
Примеры описания массивов:
float t[256]; первый элемент t[0], последний элемент t[255]
static char code [12]; - статистический массив
extern z[];
Инициализировать можно только статистические и внешние массивы:
static a[5] = {1, 2, 3,4,5};
или так:
static a[] = {1,2,3,4,5};
Компилятор сам определит размерность массива, исходя ищ списка инициализации.
Пример задания двумерного массива:
static b [2][5] = { { 1,2,3,4,5}, {11,12,13,14,15} };
Вопрос: Какова связь между массивами и указателями?
Ответ: Имя массива есть синоним адреса первого элемента массива. Связь между массивами и указателями задаётся принципами адресной арифметики. Адресная арифметика - это приёмы манипулирования с указателями.
Указатели, массивы, строки, функции
пример:
Пусть есть следующие описания:
int d[4], *p; или проще:
p = d;
Тогда
*p <- d[0]
*p(p+1) <-> d[1]
*p(p+2) <-> d[2]
*p(p+3) <-> d[3] и вообще *(p+n) <-> d[n]
Два принципа адресной арифметики:
Пусть р - указатель на объект определенного типа. Тогда р++ указывает на следующий объект в массиве объектов данного типа, а р– указывает на предыдущий объект. Вообще, р+=n указывает на n объектов правее, а p-=n указывает на n объектов левее в массиве объектов данного типа.
Если p и q - два указателя на элементы одного массива, то разность (p-q) равна количеству элементов между ними
Двумерные массивы. Пусть есть описание:
int b [2] [3];
выражение b[ i, j ] - неправильное, b[i][j] - правильное
Двумерной массив рассматривается как массив массивов.
Размещение в памяти:
b, b[0] b[1]
int* p = b;
*(p+1) <-> b[0][1]
*(p+2) <-> b[0][2]
*(p+3) <-> b[1][0]
Вообще в языке Си любое индексное выражение вида
<выражение-1> [ <выражение-2>]
интерпретируется как
* ( <выражение-1> + <выражение-2> )
Передача массивов в качестве аргументов функций.
Одномерного:
f (x) если хотите работать с массивом через индексы
int x[];
{.....}
или
f ( int* x) если хотите работать с массивом через указатели
{.......}
Двумерного:
f (x) если хотите работать с массивом через индексы
int x[][];
{........}
или
f ( int* x[]) комбинированный способ
{............}
Массивы указателей (пример описания):
char* p[]; p - это массив указателей, т.к. приоритет операции [] выше, чем *
char (*p)[]; а вот здесь р - это указатель на массив (имени у массива нет)