- Объектно – ориентированное программирование
Алан Кей – фундаментальные характеристики ООП [Кау 1993]:
- Алан Кей – фундаментальные характеристики ООП [Кау 1993]:
- Все является объектом.
- Объект как хранит информацию, так и способен ее преобразовывать. Любой элемент решаемой задачи (дом, собака, услуга, химическая реакция, город, космический корабль и т. д.) может представлять собой объект. Объект можно представить себе как швейцарский нож: он является набором различных ножей и «открывашек» (хранение), но в то же самое время им мы можем резать или открывать что-либо (преобразование).
Программа — совокупность объектов, указывающих друг другу что делать.
- Программа — совокупность объектов, указывающих друг другу что делать.
- Для обращения к одному объекту другой объект «посылает ему сообщение».
- Возможно и «ответное сообщение». Программу можно представить себе как совокупность к примеру 3 объектов: писателя, ручки и листа бумаги. Писатель «посылает сообщение» ручке, которая в свою очередь «посылает сообщение» листу бумаги — в результате мы видим текст (посыл сообщения от листа к писателю).
Каждый объект имеет свою собственную «память», состоящую из других объектов.
- Каждый объект имеет свою собственную «память», состоящую из других объектов.
- Таким образом программист может скрыть сложность программы за довольно простыми объектами.
- Пример: дом (сложный объект) состоит из дверей, комнат, окон, проводки и отопления. Дверь может состоять из собственно двери, ручки, замка и петель. Проводка состоит из проводов, розеток, щитка.
У каждого объекта есть тип (класс).
- У каждого объекта есть тип (класс).
- Класс (тип) определяет какие сообщения объекты могут посылать друг другу.
- Например, аккумуляторная батарея может передавать электролампе ток, а вот физическое усилие - нет.
- Каждый объект является представителем класса, который выражает общие свойства объектов (таких, как целые числа или списки).
В классе задается поведение (функциональность) объекта.
- В классе задается поведение (функциональность) объекта.
- Тем самым все объекты, которые являются экземплярами одного класса, могут выполнять одни и те же действия.
- Все объекты одного типа могут получать одинаковые сообщения.
- Например, есть 2 объекта: синяя и красная кружки разные по форме и материалу. Но из обеих мы можем пить (или не пить, если они пустые). В данном случае кружка — это тип объекта.
Классы организованы в единую древовидную структуру с общим корнем, называемую иерархией наследования.
- Классы организованы в единую древовидную структуру с общим корнем, называемую иерархией наследования.
- Память и поведение, связанное с экземплярами определенного класса, автоматически доступны любому классу, расположенному ниже в иерархическом дереве.
1ый принцип ОО подхода - способ задания действий.
- 1ый принцип ОО подхода - способ задания действий.
- Действие в ООП инициируется посредством передачи сообщений агенту (объекту), ответственному за действия.
- Сообщение содержит запрос на осуществление действия и сопровождается дополнительной информацией (аргументами), необходимой для его выполнения.
- Получатель - это агент, посылается сообщение. Если он принимает сообщение, то на него автоматически возлагается ответственность за выполнение указанного действия.
- В качестве реакции на сообщение получатель запустит некоторый метод, чтобы удовлетворить принятый запрос.
2ой принцип ООП:
Все объекты являются представителями (экземплярами) классов. Метод активизируемый объектом в ответ на сообщение, определяется классом, к которому принадлежит получатель сообщения. Все объекты одного класса используют одни и те же методы в ответ на одинаковые сообщения.
- 2ой принцип ООП: Все объекты являются представителями (экземплярами) классов. Метод активизируемый объектом в ответ на сообщение, определяется классом, к которому принадлежит получатель сообщения. Все объекты одного класса используют одни и те же методы в ответ на одинаковые сообщения.
- Весь мир - это объекты, которые передают друг другу сообщения
3ий принцип, в соответствии с которым знание о более общей категории разрешается использовать для более узкой категории, называется
наследованием.
- 3ий принцип, в соответствии с которым знание о более общей категории разрешается использовать для более узкой категории, называется наследованием.
- Классы могут быть организованы в иерархическую структуру
- с наследованием свойств. Дочерний класс (подкласс) наследует атрибуты родительского класса (надкласса), расположенного выше в иерархическом дереве.
Определение ООП
- ООП - совокупность принципов разработки программ, понятий и элементов языка, позволяющих успешно создавать программы большого объема.
- ООП базируется на связи в единое целое свойств и поведения предмета или процесса.
- Свойства предмета - это данные, которые его характеризуют. Поведение задается функциями.
Преимущества ООП
- Преимущества (при создании больших программ):
- использование при программировании понятий, более близких к предметной области;
- локализация свойств и поведения объекта о одном месте, позволяющая лучше структурировать и отлаживать программу;
- возможность создания библиотеки объектов и создания программы из готовых частей;
- исключение избыточного кода - можно многократно не описывать повторяющиеся действия;
- простая возможность внесения изменений в программу без изменения уже написанных частей, а в ряде случаев и без их перекомпиляции.
Недостатки ООП
- Недостатки ООП:
- снижение быстродействия программы, связанное с использованием виртуальных методов;
- идеи ООП не просты для понимания и в особенности для практического использования;
- для эффективного использования существующих ОО систем требуется большой объем первоначальных знаний.
Свойства ООП
- Инкапсуляция - скрытие деталей реализации; объединение данных и действий над ними.
- Наследование позволяет создавать иерархию объектов, в которой объекты-потомки наследуют все свойства своих предков. Свойства при наследовании повторно не описываются. Кроме унаследованных, потомок обладает собственными свойствами. Объект в C++ может иметь сколько угодно потомков и предков.
- Полиморфизм - возможность определения единого по имени действия, применимого ко всем объектам иерархии, причем каждый объект реализует это действие собственным способом.
- Класс (объект) – инкпасулированная абстракция с четким протоколом доступа
Объекты
- Объект - конкретное представление абстракции. Объект обладает индивидуальностью, состоянием и поведением.
- Структура и поведение подобных объектов определены в их общем классе.
- Термины «экземпляр класса» и «объект» взаимозаменяемы.
Индивидуальность - это характеристика объекта, которая отличает его от всех других объектов.
- Индивидуальность - это характеристика объекта, которая отличает его от всех других объектов.
- Состояние объекта характеризуется перечнем всех свойств объекта и текущими значениями каждого из этих свойств
|
|
- Стоимость
- Вес
- Размеры
- Положение
- Цвет
|
|
- Купить()
- Продать()
- Взвесить()
- Переместить()
- Покрасить()
|
|
Объекты не существуют изолированно друг от друга. Они подвергаются воздействию или сами воздействуют на другие объекты.
- Объекты не существуют изолированно друг от друга. Они подвергаются воздействию или сами воздействуют на другие объекты.
- Поведение характеризует то, как объект воздействует на другие объекты (или подвергается воздействию) в терминах изменений его состояния и передачи сообщений.
- Поведение объекта является функцией как его состояния, так и выполняемых им операций (Купить, Продать, Взвесить, Переместить, Покрасить).
- Говорят, что состояние объекта представляет суммарный результат его поведения.
Операция обозначает обслуживание, которое объект предлагает своим клиентам.
- Операция обозначает обслуживание, которое объект предлагает своим клиентам.
- 5 видов операций клиента над объектом:
- 1) модификатор (изменяет состояние объекта);
- 2) селектор (дает доступ к состоянию, но не изменяет его);
- 3) итератор (доступ к содержанию объекта по частям, в строго определенном порядке);
- 4) конструктор (создает объект и инициализирует его состояние);
- 5) деструктор (разрушает объект и освобождает занимаемую им память).
Примеры операций:
- Примеры операций:
- Вид операции Пример операции
- Модификатор Пополнеть (кг)
- Селектор КакойВес (): integer
- Итератор Показать Ассортимент Товаров (): string
- Конструктор СоздатьРобот (параметры)
- Деструктор УничтожитьРобот ()
В чистых ОО ЯП операции могут объявляться только как методы - элементы классов, экземплярами которых являются объекты.
- В чистых ОО ЯП операции могут объявляться только как методы - элементы классов, экземплярами которых являются объекты.
- Гибридные языки (C++, Ada 95) позволяют писать операции как свободные подпрограммы (вне классов).
- В общем случае все методы и свободные подпрограммы, ассоциированные с конкретным объектом, образуют его протокол. Таким образом, протокол определяет оболочку допустимого поведения объекта и поэтому заключает в себе цельное (статическое и динамическое) представление объекта.
Большой протокол разделяют на логические группировки поведения.
- Большой протокол разделяют на логические группировки поведения.
- Эти группировки, разделяющие пространство поведения объекта, обозначают роли, которые может играть объект.
С точки зрения внешней среды важное значение имеет понятие - обязанности объекта.
- С точки зрения внешней среды важное значение имеет понятие - обязанности объекта.
- Обязанности означают обязательства объекта обеспечить определенное поведение.
- Обязанностями объекта являются все виды обслуживания, которые он предлагает клиентам. В мире объект играет определенные роли, выполняя свои обязанности.
Активный объект имеет собственный канал (поток) управления, пассивный - нет.
- Активный объект имеет собственный канал (поток) управления, пассивный - нет.
- Активный объект автономен, он может проявлять свое поведение без воздействия со стороны других объектов.
- Пассивный объект, наоборот, может изменять свое состояние только под воздействием других объектов.
Виды отношений между объектами
- В поле зрения разработчика ПО находятся не объекты-одиночки, а взаимодействующие объекты, именно взаимодействие объектов реализует поведение системы.
- Г. Буч (цитата из Галла): «Самолет - это набор элементов, каждый из которых по своей природе стремится упасть на землю, но ценой совместных непрерывных усилий преодолевает эту тенденцию».
- Отношения между парой объектов основываются на взаимной информации о разрешенных операциях и ожидаемом поведении.
- Интересны два вида отношений между объектами: связи и агрегация.
Связи
- Связь - это физическое или понятийное соединение между объектами. Объект сотрудничает с другими объектами через соединяющие их связи. Связь обозначает соединение, с помощью которого:
- объект-клиент вызывает операции объекта-поставщика;
- один объект перемещает данные к другому объекту.
- Связи являются рельсами между станциями-объектами, по которым ездят «трамвайчики сообщений».
Как участник связи объект может играть одну из трех ролей:
- Как участник связи объект может играть одну из трех ролей:
- актер - объект, который может воздействовать на другие объекты, но никогда не подвержен воздействию других объектов;
- сервер - объект, который никогда не воздействует на другие объекты, он только используется другими объектами;
- агент - объект, который может как воздействовать на другие объекты, так и пользоваться ими. Агент создается для выполнения работы от имени актера или другого агента.
Видимость объектов
- Рассмотрим два объекта, А и В, между которыми имеется связь. Для того чтобы объект А мог послать сообщение в объект В, надо, чтобы В был виден для А.
- 4 формы видимости между объектами.
- 1. Объект-поставщик (сервер) глобален для клиента.
- 2. Объект-поставщик (сервер) является параметром операции клиента.
- 3. Объект-поставщик (сервер) является частью объекта-клиента.
- 4. Объект-поставщик (сервер) является локально объявленным объектом в операции клиента.
- На этапе анализа вопросы видимости обычно опускают. На этапах проектирования и реализации вопросы видимости по связям обязательно должны рассматриваться.
Агрегация
- Связи обозначают равноправные (клиент-серверные) отношения между объектами. Агрегация обозначает отношения объектов в иерархии «целое/часть». Агрегация обеспечивает возможность перемещения от целого (агрегата) к его частям (свойствам).
- Агрегация может обозначать, а может и не обозначать физическое включение части в целое.
- При выборе вида отношения - учитывать факторы:
- связи обеспечивают низкое сцепление между объектами;
- агрегация инкапсулирует части как секреты целого.
- Пример физического включения (композиции) частей (Двигателя, Сидений, Колес) в агрегат Автомобиль - части включены в агрегат по величине.
Пример нефизического включения частей (Студента, Преподавателя) в агрегат Вуз. Студент и Преподаватель являются элементами Вуза, но они не входят в него физически. Части включены в
агрегат по ссылке.
- Пример нефизического включения частей (Студента, Преподавателя) в агрегат Вуз. Студент и Преподаватель являются элементами Вуза, но они не входят в него физически. Части включены в агрегат по ссылке.
Классы
- Понятия объекта и класса тесно связаны.
- Важное различие:
- Класс - это абстракция существенных характеристик объекта.
- Класс - описание множества объектов, которые разделяют одинаковые свойства, операции, отношения и семантику (смысл).
- Любой объект - просто экземпляр класса.
Различают внутреннее представление класса (реализацию) и внешнее представление класса (интерфейс).
- Различают внутреннее представление класса (реализацию) и внешнее представление класса (интерфейс).
- Интерфейс объявляет возможности (услуги) класса, но скрывает его структуру и поведение.
- Интерфейс демонстрирует внешнему миру абстракцию класса, его внешний облик.
- Интерфейс состоит из объявлений всех операций, применимых к экземплярам класса. Он может включать объявления типов, переменных, констант и исключений, необходимых для полноты данной абстракции.
Интерфейс - 3 части:
- Интерфейс - 3 части:
- 1. публичная (public) - объявления доступны всем клиентам;
- 2. защищенная (protected) - объявления доступны только самому классу, его подклассам и друзьям;
- 3. приватная (private) - объявления доступны только самому классу и его друзьям.
- Друг класса - класс, который имеет доступ ко всем частям класса (публичной, защищенной и приватной). От друга у класса нет секретов. Реализация класса описывает секреты поведения класса. Она включает реализации всех операций, определенных в интерфейсе класса.