- •1. Основные типы данных, объявление пользовательских типов данных typedef
- •Int (целочисленный тип)
- •2. Основные директивы препроцессора. Макросы
- •3. Указатели и динамическая память
- •4. Понятие функций. Механизм вызова функций и передача параметров
- •5. Передача и возврат параметров по значению и по указателю
- •6. Ссылки и ссылочные параметры
- •7. Перегрузка функций
- •8. Использование спецификатора const с указателями.
- •9. Понятие идентификатора. Пространства имен. Ключевое слово namespace
- •10. Анонимные пространства имен. Ключевое слово using.
- •11. Понятие структур. Оператор доступа к полям структуры по указателю.
- •12 . Понятие класса и объекта.
- •13. Время жизни переменных и объектов.
- •14. Область действия класса. Управление доступом к членам класса. Отделение интерфейса от реализации
- •15 . Понятие конструктора. Использование конструктора с аргументами по умолчанию. Конструктор по умолчанию.
- •16. Понятие деструктора. Когда вызываются конструкторы и деструкторы.
- •17. Константные объекты и функции-члены.
- •18. Дружественные функции и дружественные классы.
- •19. Использование указателя this.
- •20. Использование операции new и delete.
- •21. Статические члены класса.
- •25.Функции-операции как члены класса и как дружественные функции.
- •26.Перегрузка операции присваивания. Условия вызова оператора присваивания и конструктора копирования.
- •27. Понятие наследования. Механизм ограничения доступа при наследовании.
- •28.Приведение типа указателя базового класса к указателю производного класса и наоборот.
- •29.Переопределение членов базового класса в производном классе.
- •30. Конструкторы и деструкторы в производных классах
- •32. Неявный вызов конструкторов объектов
- •33. Понятие виртуальной функции
- •34. Понятие полиморфизма (примеры)
- •35. Абстрактные и конкретные базовые классы
- •36. Статическое и динамическое связывание
- •37. Виртуальные деструкторы
- •38. Шаблоны. Шаблонная функция
- •39. Шаблоны классов. Применение. Параметры шаблона типа typename
- •40. Шаблоны классов и наследование.
- •41. Шаблоны. Инстанцирование шаблонов и спецификация шаблонов
- •42. Понятие исключения. Когда должна использоваться обработка исключений.
- •43. Генерация исключений. Повторная генерация исключений
- •44. Перехватывание исключений
- •45. Спецификация исключений. Обработка неожидаемых исключений.
- •46. «Раскручивание» стека. Иерархия исключений стандартной библиотеки
- •47. Конструкторы, деструкторы и обработка исключений. Исключения и наследование.
- •48. Обработка неуспешного выполнения new
- •49. Стандартная библиотека шаблонов (stl). Основные типы контейнеров
- •50. Стандартная библиотека шаблонов (stl). Алгоритмы, методы, итераторы
- •51. Последовательные контейнеры: vector, list, deque. Основные методы и алгоритмы
- •52. Ассоциативные контейнеры: set, multiset, map, multimap. Основные методы и алгоритмы.
- •53. Операторы приведения типов static_cast, reinterpret_cast
- •54. Информация о типе времени выполнения (rtti). Использование функции typeid(). Оператор dynamic cast
- •55. Ключевое слово ехрlicit.Ключевое слово mutable
- •56. Классы-контейнеры и классы-итераторы
- •57. Понятие ооп. Парадигмы ооп (инкапсуляция, наследование, полиморфизм)
- •58. Основные составляющие объектного подхода: абстрагирование, инкапсуляция, модульность
- •59. Природа объекта. Состояние, поведение, идентичность объекта
- •60. Отношения между объектами. Связи. Агрегация
59. Природа объекта. Состояние, поведение, идентичность объекта
Объекты не существуют изолировано, а поддаются влиянию или сами влияют на другие объекты. Влияние одного объекта на другой, с целью вызова соответствующей реакции, называется операцией. Как будет показано ниже, объекты взаимодействуют через посылку сообщений.
Поведение - это то, как объект действует и реагирует; поведение выражается в терминах состояния объекта и передачи сообщений. Другими словами, поведение объекта - это его наблюдаемая и внешне проверяемая деятельность.
Состояние объекта представляет суммарный результат его поведения.
Идентичность- это такое свойство объекта, который отличает его от всех других объектов.
60. Отношения между объектами. Связи. Агрегация
Собственно объекты не представляют никакой интерес: лишь в процессе взаимодействия объектов реализуется система. Отношения двух любых объектов основываются на предположениях, которыми один владеет относительно другого: об операциях, что можно выполнять, и об ожидаемом поведении. Особенный интерес для объектно-ориентированного анализа и проектирования представляют два типа иерархических соотношений объектов: связь и агрегация. Эти два типа отношений можно назвать отношениями старшинства и "отец/потомок" соответственно.
Принимая участие в связи, объект может выполнять одну из следующих трех ролей:
Актер. Объект может влиять на другие объекты, но сам никогда не поддается влиянию других объектов; в определенном содержании это отвечает понятию активный объект;
Сервер. Объект может лишь поддаваться влиянию со стороны других объектов, но он никогда не выступает в роли объекта, который влияет;
Агент. Такой объект может выступать как в активной, так и в пассивной, роли; как правило, объект-агент создается для выполнения операций в интересах
При обеспечении связей между объектами нужно позаботиться об их видимости и синхронизации.
Видимость. Пусть есть два объекта А и В и связь между ними. Для того, чтобы А мог послать сообщение В, нужно, чтобы В был в каком-то содержании видимым для А. Ми можем не заботиться об этом на стадии анализа, но когда дело доходит до реализации системы, мы должны обеспечить видимость связанных объектов.
В принципе есть следующие четыре способа обеспечить видимость.
1. Сервер является глобальным относительно клиента;
2. Сервер (или указание на него) передан клиенту как параметр операции;
3. Сервер является частью клиента.
4. Сервер локально порождается клиентом в ходе выполнения какой-либо операции.
Какой именно из этих способов избрать - зависит от тактики проектирования.
Синхронизация. Когда один объект посылает за связью сообщение другому, связанному с ним, они, как говорят, синхронизируются. В строго последовательном дополнении синхронизация объектов реализуется именно в запуске метода. Однако во много текущей системе объекты требуют более утонченной схемы передачи сообщений, чтобы развязать проблемы взаимного исключения, типові для параллельных систем. Активные объекты собственно выполняются как потоки, потому присутствие других активных объектов на них обычно не влияет. Если же активный объект имеет связь с пассивным, возможны следующие три подхода к синхронизации:
1. Последовательный — семантика пассивного объекта обеспечивается в присутствии лишь одного активного процесса;
2. Защищенный - семантика пассивного объекта обеспечивается в присутствии многих потоков управления, но активные клиенты должны договориться и обеспечить взаимное исключение;
3. Синхронный - семантика пассивного объекта обеспечивается в присутствии многих потоков управления; взаимное исключение обеспечивает сервер.
Агрегация объектов
В то время, как связки помечают равноправные или "клиент-серверные" отношения между объектами, агрегация описывает отношения целого и части, которые приводят к соответствующей иерархии объектов, причем, идя от целого {агрегату), мы можем прийти к его частям (атрибутам).
Выбирая одно из двух - связь или агрегацию - нужно иметь в виду следующее. Агрегация иногда более подавляюще, поскольку позволяет спрятать части в целом. Иногда наоборот более подавляюще связки, поскольку они слабее и менее ограничительные. При агрегации отпадают проблемы видимости и синхронизации. Принимая решение, нужно взвесить все.