Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Философия ООП.docx
Скачиваний:
54
Добавлен:
10.04.2015
Размер:
107.89 Кб
Скачать

Концепция объекта в ооп

Вопросы:

  1. Программирование как моделирование реальности.

  2. Понятие объекта в ООП.

  3. Объектная нотация UML.

Программирование как моделирование реальности

Окружающий мир состоит из объектов (object), пребывающих в состоянии (state), которое определяется текущими значениями атрибутов объекта.

Например, кружка на столе находится в состоянии filled (наполнена), поскольку она приспособлена для хранения жидкостей и в ней все еще есть кофе. Когда в ней нет больше кофе, состояние кружки можно определить как empty (пуста). Если она упадет на пол и разобьется, она перейдет в состояние broken (разбита).

Моя кофейная чашка, конечно, пассивна – она не обладает собственным поведением (behavior). Однако, этого нельзя сказать о моей собаке или березе за моим окном. Моя собака лает, дерево растет и т.д. Итак, некоторые объекты реального мира обладают поведением.

Все объекты реального мира обладают также уникальностью (identity) – постоянным свойством, с помощью которого мы отличаем один объект от другого. Если на моем столе стоят две чашки из одного набора, я могу сказать, что они одинаковые, но не идентичные. Чашки одинаковые, потому что значения их свойств совпадают (они одинакового размера и формы, черного цвета и пустые). Однако, на объектно-ориентированном языке они не идентичны, поскольку их две, и у меня есть выбор, которую из них использовать.

Реальные объекты, обладающие тремя свойствами (состояние, поведение, идентичность), образуют системы с естественным поведением. Естественные системы безусловно являются самыми сложными системами из всех известных. Никакая компьютерная система не может сравниться по сложности с животным или заводом.

Несмотря на сложность, естественные системы способны работать: они демонстрируют интересное поведение, могут приспосабливаться к внешним и внутренним изменениям, могут эволюционировать со временем и т.д. Вывод очевиден. Наверное, мы должны конструировать искусственные системы с помощью моделирования структуры и поведения естественных систем.

Искусственные системы являются моделью реальности. Кофейная чашка на экране моего компьютера всего лишь модель реальной «сущности» так же, как собака или береза на моем экране. Кофейная чашка может быть, таким образом, смоделирована с помощью поведенческих свойств. Она может, к примеру, упасть на пол, если ее уронить. Действие «падения» можно смоделировать как поведенческую операцию (operation) чашки. Еще одним логическим «действием» чашки может быть операция «разбиться» при ударе об пол. Большинство, если не все, объекты в компьютерной системе «оживают» – они обладают поведением.

Понятие объекта

Объект – это экземпляр (instance) некоей «сущности». Он может быть одним из множества экземпляров одной и той же «сущности». Моя чашка – экземпляр множества всевозможных чашек.

Общее описание «сущности» называется классом (class). Поэтому объект является экземпляром класса.

По определению будем называть объектом понятие, абстракцию или любой предмет с четко очерченными границами, имеющий смысл в контексте рассматриваемой прикладной проблемы. Введение объектов преследует две цели:

  • понимание прикладной задачи (проблемы);

  • введение основы для реализации на компьютере.

Примеры объектов: форточка, Банк "Империал", Петр Сидоров, дело № 7461, сберкнижка и т.д.

Каждый объект имеет определенное время жизни. В процессе выполнения программы, или функционирования какой-либо реальной системы, могут создаваться новые объекты и уничтожаться уже существующие.

Гради Буч дает следующее определение объекта:

Объект - это мыслимая или реальная сущность, обладающая характерным поведением и отличительными характеристиками и являющаяся важной в предметной области].

Каждый объект имеет состояние, обладает четко определенным поведением и уникальной идентичностью.

Состояние

Рассмотрим пример. Любой человек может находиться в некотором положении (состоянии): стоять, сидеть, лежать, и - в то же время совершать какие либо действия.

Например, человек может прыгать, если он стоит, и не может - если он лежит, для этого ему потребуется сначала встать. Также в объектно-ориентированном программировании состояние объекта может определяться наличием или отсутствием связей между моделируемым объектом и другими объектами. (Более подробно все возможные связи между объектами будут рассмотрены в разделе "Типы отношений между классами".)

Например, если у человека есть удочка (у него есть связь с объектом "Удочка"), он может ловить рыбу, а если удочки нет, то такое действие невозможно. Из этих примеров видно, что набор действий, которые может совершать человек, зависит от параметров объекта, его моделирующего.

Для рассмотренных выше примеров такими характеристиками, или атрибутами, объекта «Человек» являются:

  • текущее положение человека (стоит, сидит, лежит);

  • наличие удочки (есть или нет).

В конкретной задаче могут появиться и другие свойства, например, физическое состояние, здоровье (больной человек обычно не прыгает).

Состояние (state) - совокупный результат поведения объекта: одно из стабильных условий, в которых объект может существовать, охарактеризованных количественно; в любой момент времени состояние объекта включает в себя перечень (обычно статический) свойств объекта и текущие значения (обычно динамические) этих свойств.

Состояние объекта характеризуется перечнем всех свойств объекта и текущими значениями каждого из этих свойств

Поведение

Какие действия можно производить с объектом? (Любые или есть ограничения?)

Для каждого объекта существует определенный набор действий, которые с ним можно произвести.

Например, назовите возможные действия с некоторым файлом операционной системы ПК:

  • создать;

  • открыть;

  • читать из файла;

  • писать в файл;

  • закрыть;

  • удалить.

Всегда ли эти действия можно производить?

Результат выполнения действий зависит от состояния объекта на момент совершения действия, т.е. нельзя, например, удалить файл, если он открыт кем-либо (заблокирован). В то же время действия могут менять внутреннее состояние объекта - при открытии или закрытии файла свойство «открыт» принимает значения «да» или «нет», соответственно.

Программа, написанная с использованием ООП, обычно состоит из множества объектов, и все эти объекты взаимодействуют между собой. Обычно говорят, что взаимодействие между объектами в программе происходит посредством передачи сообщений между ними.

В терминологии объектно-ориентированного подхода понятия «действие», «сообщение» и «метод» являются синонимами. Т.е. выражения «выполнить действие над объектом», «вызвать метод объекта» и «послать сообщение объекту для выполнения какого-либо действия» эквивалентны. Последняя фраза появилась из следующей модели. Программу, построенную по технологии ООП, можно представить себе как виртуальное пространство, заполненное объектами, которые условно «живут» некоторой жизнью. Их активность проявляется в том, что они вызывают друг у друга методы, или посылают друг другу сообщения. Описание того, какие сообщения он может принимать – это набор его методов или внешний интерфейс объекта.

Поведение (behavior) - действия и реакции объекта, выраженные в терминах передачи сообщений и изменения состояния; видимая извне и воспроизводимая активность объекта.

Уникальность

Уникальность - это то, что отличает объект от других объектов. Например, у вас может быть несколько одинаковых монет. Даже если абсолютно все их свойства (атрибуты) одинаковы (год выпуска, номинал и т.д.) и при этом вы можете использовать их независимо друг от друга, они по-прежнему остаются разными монетами.

В машинном представлении под параметром уникальности объекта чаще всего понимается адрес размещения объекта в памяти.

Identity (уникальность) объекта состоит в том, что всегда можно определить, указывают две ссылки на один и тот же объект, или на разные объекты. При этом два объекта могут во всем быть похожими, их образ в памяти может представляться одинаковыми последовательностями байтов, но, тем не менее, их Identity может быть различна.

Наиболее распространенной ошибкой является понимание уникальности как имени ссылки на объект.

Это неверно, т.к. на один объект может указывать несколько ссылок, и ссылки могут менять свои значения (ссылаться на другие объекты).

Уникальность (identity) - свойство объекта; то, что отличает его от других объектов (некоторые авторы переводят этот термин как индивидуальность и даже идентичность, но мы будем говорить уникальность)

Идентифицкация объектов

Вопрос состоит в том, каким образом объект узнает об уникальности другого объекта, которому требуется отправить сообщение. Каким образом объект Order узнает свой объект Shipment так, чтобы сообщение shipOrder попало к своему адресату?

Ответ заключается в том, что каждому объекту при создании присваивается идентификатор объекта (object identifierOID). Идентификатор объекта (OID) представляет собой дескриптор (handle) объекта – уникальный номер, который остается с объектом на протяжении всего времени его существования. Если объекту X необходимо отправить сообщение объекту Y, объект X каким-либо образом должен узнать OID объекта Y.

На практике для установления связи по OID между объектами существует два подхода, каждому из которых соответствует определенный тип связи.

  • Постоянная связь по OID.

  • Временная связь по OID.

Различие между этими видами связи определяется продолжительностью существования объекта. Время жизни некоторых объектов не превышает времени выполнения программы – они создаются программой и уничтожаются во время выполнения программы или по ее завершении. Это так называемые временные объекты (transmit object). Другие объекты «переживают» выполнение программы – после завершения программы они запоминаются в долговременной дисковой памяти и доступны при следующем выполнении программы. Это так называемые постоянные объекты (persistent object).

(Временные объекты называют также короткоживущими, а постоянные – долгоживущими, постоянного хранения или энергонезависимыми. Последнее название связано с тем, что объекты этого типа не исчезают при отключении питания компьютера, сохраняясь в энергонезависимой памяти, как правило, на дисковых устройствах.