
- •1. Объектно-ориентированное программирование (oop). Объектно-ориентированная технология (oot) программирования.
- •2. Свойства оор.
- •3. Объектно-ориентированный подход (ооп). Определение составляющих объектного подхода: ооа, ood, оор.
- •4. Компоненты оор.
- •5. Объект. Основные понятия: определение объекта, его состояние, поведение, индивидуальность. Взаимодействие объектов. Отношения между объектами.
- •6. Класс. Отношения между классами. Классификация. Методы классификации.
- •7. Вопросы качества абстракция и выбора операций при создании классов и объектов.
- •9. Ссылки и параметры-ссылки. Объявления переменных.
- •10. Встраиваемые функции. Операции new и delete.
- •11. Функции-члены и данные-члены.
- •12. Интерфейсы и реализация.
- •13. Конструкторы и инициализация. Конструктор без параметров (по умолчанию). Конструктор копирования.
- •14. Деструкторы и очистка.
- •Статические члены: функции и данные.
- •16. Структуры и объединения.
- •17. Константные члены-функции и константные объекты.
- •18. Дружественные функции и перегрузка операций.
- •19. Перегрузка new, delete.
- •Void *operator new (size_f size);
- •Void operator delete (void *); //void * - указатель на область памяти, //выделяемую под объект
- •20. Преобразование типов, определяемых пользователем с помощью конструкторов и операций преобразования.
- •22. Друзья-функции и друзья-классы
- •24. Производные классы. Базы прямые, непрямые
- •25. Конструкторы, деструкторы и наследование
- •26. Множественное наследование
- •27. Виртуальные базовые классы. Иерархия классов. Виртуальные функции
- •Virtual void draw();
- •Void draw();
- •28. Полиморфизм
- •29. Абстрактные классы и чистые виртуальные функции.
- •30. Заголовочные файлы. Предопределенные объекты и потоки.
- •31. Операции помещения и извлечения. Манипуляторы
- •Int main()
- •33. Конструкторы файловых потоков. Ввод-вывод в файлы.
- •34 Параметризированные типы и функции
- •35 Шаблоны функций. Параметры шаблонов. Шаблоны классов
- •36. Контейнеры. Итераторы
- •37. Использование assert, кодов возврата, сигналов, setjmp и longjmp.
- •38. Объектно-ориентированная обработка исключений. Применение try, catch, throw.
6. Класс. Отношения между классами. Классификация. Методы классификации.
Класс – своеобразный шаблон объекта. Отношение между классами рассматривают по двум причинам: отношения классов могут указать на вид общности и могут влиять на семантику связи между ними.
Существуют 3 основных типа отношений между классами:
разновидность – отражает степень общности;
составная часть – отражает агрегирование объектов;
ассоциативность – отражение смысловых связей классов, не связанных никак иначе.
О и ОО языки реализуют механизмы этих трех типов следующим образом: посредством наследования, использования, наполнения и на основе понятия метакласса.
В языке C++ метод абстрактного класса может быть заблокирован с помощью его инициализации в подкласс нулевым или пустым значением. Такой метод называется чисто виртуальной функцией.
Самый общий класс в структуре классов называется базовым. В зависимости от типа языка их бывает несколько и они могут быть классифицированы. Для любого класса различают 2 вида пользователей: экземпляры данного класса и экземпляры производных подклассов.
Множественное наследование наиболее полно реализовано в C++, CLOS. Разработка структуры классов на основе множественного наследования – сложная задача, т.к. необходимо согласовать взаимодействие объектов разных классов. Проблемы: повторное наследование, наличие неопределенности объектов различных суперклассов. Отношение использования между классами в двух вариациях:
- когда в интерфейсной части одного класса должен быть использован другой класс;
- другой класс используется в реализации.
Виды отношения использования:
- 1:1;
- один ко многим.
7. Вопросы качества абстракция и выбора операций при создании классов и объектов.
Связь класса и объекта проявляется на этапе ООА при решении двух основных задач: выявление классов и объектов и построение структур, обеспечивающих их взаимодействие.
Критерии оценки качества классов и объектов:
- взаимосвязанность (степень глубины связи между отдельными модулями);
- связанность (степень взаимосвязи между отдельными элементами отдельного модуля; наиболее желательной является функциональная связанность);
- достаточность;
- полнота (наличие в интерфейсной части класса всех необходимых характеристик абстракции);
- простота, безызбыточность.
Т.обр., цель ООА – отождествление сущности реального мира с абстракциями, которые используются при построении информационной системы.
8. Прототипы функций. Перегрузка функций. Значения формальных параметров по умолчанию.
struct Data
{
int d, m, y;
};
void set(Data&, int, int, int);
void add_y(Data&, int);
void add_m(Data&, int);
В данном примере нет явной связи между типом данных и функциями. Такую связь можно установить, объявив функции компонентами структуры:
struct Data
{
int d, m, y;
void set(int, int, int);
void add_y(int);
…
};
В данном примере в структуре Data функции set и add_y были объявлены с помощью прототипов.
Прототип функции – объявление функции, которое не содержит тело функции, но указывает имя функции, арность, типы аргументов и возвращаемый тип данных, в то время как определение функции описывает, что именно делает функция, прототип функции может восприниматься как описание её интерфейса.
Объектный подход позволяет определить новые методы со старыми именами, переопределив тем самым методы класса родителя. Т.е. перегрузка процедур и функций – возможность использования одноименных подпрограмм в языках программирования.
Функции могут иметь параметры по умолчанию. В таком случае, при объявлении параметры, имеющие значение по умолчанию, записываются в конце. Рассмотрим примеры на языке C++. Пусть функция med подсчитывает среднее арифметическое между оценками студента.
float med(int a, int b=50, int c=50)
{
return (a+b+c)/3;
}
В данном примере параметры b и с по умолчанию имеют значение 50. Исходя из этого, при вызове функции в виде med(a) параметры b и c будут иметь значение 50, а при вызове med(45,45) параметры a и b будут иметь значение 45, параметр с будет равен 50. Вызов med(45,,45) будет являться ошибкой.