- •Введение в ооп
- •Алгоритмическое и объектно-ориентированное программирование
- •3.Основные понятия объектно-ориентированного программирования
- •4. Объекты и их атрибуты
- •5. Структура визуальной среды
- •4. Страж кода (Code Guard).
- •7. Синтаксис и семантика классов
- •8. Доступ к элементам класса (объекта)
- •10. Создание экземпляров класса. Конструктор
- •9. Встраиваемые функции-элементы
- •Создание объекта в динамической памяти
- •11. Уничтожение объектов класса. Деструктор
- •12. Статические компоненты класса
- •13. Постоянные и модифицируемые элементы-данные
- •14. Передача адреса объекта компонентной функции. Указатель this
- •15. Конструктор копии
- •16. Перегрузка функций и операций
- •17. Операция присваивания для объектов
- •18. Функции преобразования типа объекта
- •19. Наследование. Общие положения
- •Влияние ключа доступа при наследовании
- •20. Простое наследование
- •21. Множественное наследование
- •22. Виртуальное наследование
- •23. Виртуальные функции
- •24. Динамический полиморфизм
- •25. Абстрактные классы
- •26. Дружественные функции и классы
- •27. Шаблоны
- •28. Стандартная библиотека шаблонов. Общие положения
- •29. Примеры контейнеров
- •30. Обработка исключительных ситуаций. Общие положения
- •Синтаксис и семантика генерации и обработки исключительных ситуаций
- •32. Использование объекта класса для возврата параметров исключений
- •33. Ограничение перечня возбуждаемых исключительных ситуаций
- •34. Повторное возбуждение исключительной ситуации. Вложенные блоки try
- •35. Организация проектировани и документирования разработки объектно-ориентированных программ
- •1. Отображение классов.
- •2. Отображение отношений между классами
3.Основные понятия объектно-ориентированного программирования
Объектно-ориентированное программирование – это методология программирования, основанная на организации программы в виде совокупности объектов, каждый из которых является представителем определенного класса, а классы образуют иерархию наследования.
К основным понятиям ООП относятся: объект, класс, абстракция, инкапсуляция, наследование, полиморфизм, реализация.
Объект (экземпляр класса)– это программная модель реального или искусственно созданного объекта. Как любая модель, объект отражает существенные свойства реального объекта, то есть те свойства, которые влияют на качество системы и степень достижения ею цели. Объект обладает свойствами, состоянием, поведением и идентичностью. Программная реализация объекта представляет собой именованная совокупность ячеек оперативной памяти и совокупность операций (функций), закрепленных за объектом.
Свойство (характеристика) объекта – это то, что отличает объект от других объектов или позволяет установить сходство с ними. В объекте свойства реализуются конкретным содержимым закрепленных за объектом ячеек оперативной памяти (значения компонентных данных).
Состояние объекта характеризуется перечнем (обычно, статическим) всех свойств данного объекта и текущими (обычно, динамическими) значениями каждого из этих свойств. Каждый объект обладает (в изолированной системе) определенной совокупностью состояний. Переход из одного состояния в другое происходит под воздействием других объектов. Действия (операции) могут быть инициированы и самим объектом. Для каждого объекта перечень возможных действий над ним ограничен. Действие в отношении объекта реализуется путем передачи ему сообщения, то есть реализации определенной операции, которая выполняется путем вызова компонентной функции класса, к которому принадлежит объект. Таким образом, термины: действие, операции, метод, сообщение, компонентная функция – взаимозаменяемы.
Поведение – это последовательная смена состояний объекта. Поведение может быть различным в зависимости от исходного состояния объекта. Таки образом состояние это совокупный результат поведения объекта.
Таким образом, совокупность операций над объектом определяется перечнем компонентных функций, описываемых в классе. С точки зрения воздействия одного объекта A на другой объект B отдельные операции могут быть замаскированы. В этом случае говорят, что объект B играет определенную роль для объекта A.
Объект может быть пассивным и активным.
Объект может выступать в роли конечного автомата, то есть автоматически переходить из одного состояния в другое.
Типы операций над объектом (типы компонентных функций):
Модификатор – меняет состояние объекта;
Селектор – считывает состояние объекта;
Итератор – организует доступ к любому компонентному данному объекта в строго определенной последовательности;
Конструктор – обеспечивает создание объекта в стековой области памяти и инициализацию компонентных данных объекта;
Деструктор – удаляет объект из оперативной памяти.
Являясь элементом связанной системы объектов, объект может выступать в одной из следующих ролей:
Актер (клиент) – активный объект, инициирующий передачу сообщения другому, пассивному в данный момент, объекту;
Сервер – пассивный объект, предоставляющий информационные и программные ресурсы клиенту;
Агент. Может выступать в роли как активного, так и пассивного объекта.
Идентичность объекта – это такое свойство, которое отличает его от других объектов.
Отношения между объектами бывают двух типов: связь и агрегация.
Связь – передача сообщений. В этом смысле говорят, что один объект использует другой, то есть первый является активным, второй – пассивным.
Агрегация – один объект является частью другого, то есть первый является компонентным в классе второго, то есть служит для задания его свойств.
Класс – это множество объектов, имеющих одинаковую структуру, то есть общий перечень свойств. Иначе говоря, класс это совокупность объектов, обладающих общими свойствами.
Как программная конструкция класс – это абстракция, содержащая структуру свойств и методов, отражающих спектр поведения объектов класса.
Семантика класса представляет собой совокупность компонентных данных и функций. Класс характеризуется интерфейсом и реализацией.
Интерфейс – это внешний вид класса, объекта или модуля, выделяющий его существенные черты и не показывающий внутреннего устройства и секретов поведения. Иными словами, интерфейс это то, посредством чего экземпляр класса (объект) взаимодействует с другими экземплярами данного класса или других классов, то есть это совокупность методов, доступных вне класса.
Реализация – это внутренняя структура класса, недоступная для других классов и внешних функций. Это те элементы структуры объектов и их поведения, которые должны быть недоступны для программистов. Это позволяет с одной стороны стандартизировать отдельные элементы, а с другой, при необходимости изменять эти элементы сразу у всех объектов всех программных систем, изменив их в описании класса
Отношения между классами:
Ассоциация. Наличие логической связи между двумя классами.
Наследование. Один класс наследует свойства и методы другого (одного или нескольких). Подклассы (производные классы) обычно дополняют или переопределяют унаследованную структуру и поведение.
Агрегация. Один класс содержит свойства другого, то есть включает другой класс, причем один является целым, другой частью, которая не может существовать отдельно (компонентное данное типа класса).
Использование. Один класс пользуется услугами другого класса (клиент-сервер).
Инстацирование. Подстановка параметров шаблона обобщенного или параметризированного класса; в результате создается конкретный класс, который может иметь экземпляры.
Объектно-ориентированное программирование основано на трех важнейших принципах: инкапсуляция, наследование и полиморфизм.
Инкапсуляция есть объединение в единое целое данных и алгоритмов их обработки. В рамках объектно-ориентированного программирования данные называются полями объекта, алгоритмы – объектными методами.
Инкапсуляция позволяет в максимальной степени изолировать объект от внешнего окружения. Она существенно повышает надежность разрабатываемых программ, так как локализованные в объекте алгоритмы обмениваются с программой сравнительно небольшим объемом данных, причем количество и тип этих данных обычно тщательно контролируются. В результате замена или модификация алгоритмов и данных, инкапсулированных в объект, как правило, не влечет за собой плохо прослеживаемых последствий для программы в целом.
Инкапсуляция позволяет стандартизировать поведение родственных объектов, а наследование обеспечивает разнообразие их свойств и поведения.
Наследование есть свойство объектов порождать своих потомков. Объект – потомок автоматически наследует от родителя все поля и методы, может дополнять объекты новыми полями и методами, а так же заменять (перекрывать) методы родителя.
Принцип наследования хорошо согласуется с методом пошаговой детализации при проектировании программ (нисходящее проектирование или проектирование «сверху – вниз»).
Полиморфизм – это свойство родственных объектов (т.е. объектов, имеющих одного общего родителя) решать схожие по смыслу задачи разными способами. Изменяя алгоритм того или иного метода в потомках объекта, программист может придавать этим потомкам отсутствующие у родителя специфические поведенческие свойства. Иначе говоря, объекты базового и производных классов, вызывая одноименные методы (операции, функции), производят различные действия или одни и те же действия реализуют по-разному.
Поскольку в объектно-ориентированной модели объекты обмениваются сообщениями, то полиморфность поведения родственных объектов заключается в их способности по-разному реагировать на одноименное сообщение, т.е. способности выбирать алгоритм передачи на основе типов данных, передаваемых в сообщении (типов параметров функции-элемента).
Полиморфное поведение объектов обеспечивается через механизмы виртуальных функций, перегрузку функций и операций.
