- •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-таблицы(Таблицы с перемешиванием).
2)Линейные списки, операции с линейными списками.
Множество узлов, объединенных с помощью ссылок (направленный граф)
Каждый узел устроен так:
Списки
Линейный односвязный
Двунаправленный (двусвязный)
Циклический список(кольца)
Линейные списки служат для представления в компьютере абстрактных структур данных(последовательностей, множеств, графов и др.).
Описание узла линейного списка:
typedef struct node {
OBJECT* ptr;
node* next;
} L, *Lp;
Lp first = NULL;
Пустой список
Lp first = NULL;
Список из одного элемента
продвижение вперед на 1 элемент
if (p) p = p -> next;
или
if (p != NULL) p = p-> next;
Операции с линейными списками
Итеративный обход списка в прямом направлении
Lp p = first;
while (p != NULL){
R(p -> ptr); // обработка объекта в узле
p = p -> next;
}
Рекурсивный обход списка в прямом направлении
void w1(Lp p) {
if (p != NULL) R(p -> ptr); // обработка объекта в узле
w1(p -> next);
}
Рекурсивный обход списка в обратном направлении
void w2(Lp p){
if ( p != NULL) w2(p->next);
R(p -> ptr); // обработка объекта в узле
}
Вставка узла в начало списка
Lp q = new L; // здесь q - указатель на новый узел списка
q -> next = first; // бывший первый узел станет вторым
first = q; // новый узел становится первым узлом списка
Удаление из начала списка
if(first != NULL) first = first -> next;
Вставка узла в произвольное место списка(список не должен быть пуст)
Lp q = new L; // q - указатель на новый узел списка
q -> next = p -> next; // здесь p - указатель на произвольный узел списка
p -> next = q; // узел q вставляется после узла p
Описание узла двусвязного списка:
typedef struct node {
OBJECT* ptr;
node* next;
node* back;
} L, *Lp;
Поиск в списке.
Пусть задан некий <образец> для поиска.
Lp p = first;
while ((p != NULL) && (*p -> ptr != <образец>)) p = p -> next;
if (p == NULL) {<искомого элемента в списке нет>}
else {<p есть указатель на нужный узел списка>}
Удаление узла из произвольного места списка:
// пусть p - указатель на произвольный узел списка
if (p != NULL && p -> next != NULL)
p -> next = p -> next -> next; // удаляется узел, следующий за p
3)Модели жизненного цикла по
Под жизненным циклом программного обеспечения (ПО) понимается период разработки и эксплуатации ПО, в котором выделяют следующие этапы:
1. Спецификация требований к ПО.
2. Проектирование ПО.
3. Реализация ПО (кодирование).
4. Отладка и тестирование ПО.
5. Внедрение ПО (ввод в эксплуатацию).
6. Эксплуатация и сопровождение ПО.
Артефакты — это любые информационные сущности и документы, которые порождаются в течение жизненного цикла ПО.
Итерационная модель
Спиральная модель жизненного цикла по
II билет)
1)Обработка нештатных ситуаций. Объекты исключения. Примеры.
В качестве введения в тему рассмотрим два фрагмента кода.
Фрагмент 1
File* f1() { // функция ММ пытается открыть некий файл
File* fp; // возможна нештатная ситуация - ошибка открытия файла
if((fp=fopen(...,...))==NULL) — // возникла ошибка открытия файла
{ cerr << “file open err’; return NULL;} // сообщение и аварийный выход.
return fp; } // успех, нормальный выход
При ошибке открытия файла неплохо бы проанализировать причины неудачи и предпринять некоторые разумные действия для исправления ситуации.
Фрагмент 2
class X : public Y {......... // нештатная ситуация при создании объекта
X (int size) { // конструктор Х вызывает конструктор У
char *p = new char[size]; // конструктор Х пытается получить память,
if (!p) cerr << “obj create err”; } // неудача! и аварийный return невозможен
…..}; // а конструктор У уже отработал ...
Объект класса Х был создан неудачно, но конструктор объекта-предка успешно отработал и мог получить (заблокировать) некоторые системные ресурсы.