- •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-таблицы(Таблицы с перемешиванием).
XII билет)
1)Язык Си: программный стек. Пример работы стека.
Программный стек - часть памяти компьютера, которая используется
для размещения автоматических переменных и обмена данными между функциями.
Рассмотрим следующий фрагмент кода:
void main(void) { // определение функции main
long a; // три переменные
char *b, c; // с автоматическим классом памяти
…………...
f(a, b, c); // вызов некоторой функции f
……………
} // конец определения функции main
void f(long x, char* y, char z) { // определение функции f
char d, *pd; // две переменные
…………… // с автоматическим классом памяти
} // конец определения функции f
Рисунок, поясняющий работу программного стека:
2)Виртуальные функции. Раннее и позднее связывание.
class
TFigure : public TLocation { //абстрактная
фигура
protected:
bool
Vision; //признак видимости фигуры
на экране
public:
TFigure
(int, int); //конструктор
virtual
~TFigure(); //виртуальный деструктор
virtual void
Show(); //виртуальная функция
virtual void
Hide(); //виртуальная функция
bool
IsVisible(); //получение признака
видимости
void
MoveTo(int, int); //перемещение фигуры по
экрану
};
class TCircle :
public TFigure { //конкретная фигура –
окружность
int R;
//радиус окружности
public:
TCircle(int
a, int b, int r) : TFigure (a, b) {R = r;} //конструктор
virtual
~TCircle(); //виртуальный
деструктор
virtual
void Show(){…} //перекрываем
виртуальную
функцию
Show
virtual
void Hide(){…} //перекрываем
виртуальную функцию Hide
};
В чём суть использования виртуальных функций? Важно это записать и понять.
1. Если в сигнатуре функции-члена класса использовалось слово «virtual» не использовалось, тогда имя функции и исполняемый код функции связываются друг с другом на этапе компиляции. Связывание выполняет компилятор. Данный механизм называется ранним связыванием. Методы потомков перекрывают одноименные методы предков на этапе компиляции кода.
2. Если в сигнатуре функции-члена класса использовалось слово «virtual», тогда имя функции и её исполняемый код связываются друг с другом непосредственно на этапе исполнения кода. Связывание выполняет конструктор объекта. Данный механизм называется поздним связыванием. Методы потомков перекрывают одноименные методы предков только на этапе исполнения кода.
Когда работает механизм позднего связывания, компилятор отыскивает в исходном коде все виртуальные функции и формирует таблицу виртуальных функций, которую упрощенно можно представлять себе так:
< имя-функции > |
<адрес-кода> |
……… |
……… |
……… |
……… |
……… |
……… |
Адреса исполняемого кода в таблицу заносят конструкторы объектов по мере того, как эти объекты создаются. Это и есть полиморфизм. Обеспечивается динамичность и гибкость кода, без его повторной компиляции.