Главная Случайная страница


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Объекты и сообщения





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

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

- имя;

- состояние (атрибуты, структура объекта);

- методы (операции, действия над объектами).

Интерфейс объекта с его окружением полностью определен методами: использование объекта возможно только путем использования его методов. Объект является представлением некоторой реально существующей сущности (реального объекта, процесса и т.п.). Объекты образуют в целом некоторую вычислительную среду, в которой они обрабатываются, обмениваясь сообщениями.

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

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

Реакция объекта на сообщение может зависеть от его состояния. Так, объект Файл, получив сообщение «Добавить запись», прежде, чем добавлять запись, должен проверить, открыт ли соответствующий файл, и при закрытом файле должен выдать пользователю отказ на выполнение операции добавления.

Состояние объекта характеризуется набором конкретных значений его возможных свойств. Например, состояние объекта «Колонка» может характеризоваться:

- скоростью обслуживания машин;

- занятостью бензоколонки;

- временем завершения обслуживания очередной машины.

Как правило, перечень характеристик в процессе функционирования не изменяется, могут изменяться лишь конкретные значения этих характеристик.

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

Объекты, обладающие сходными состояниями и поведением с точки зрения решаемой задачи, образуют группу (например, объекты Колонки). Свойства объекта, которые отличают его от всех других объектов группы, составляют его индивидуальность. Так, каждая колонка может иметь собственную пропускную способность.

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

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

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

Полный список возможных операций над объектами выглядит следующим образом (рис. 6):

• создание объекта;

• уничтожение объекта;

• модификация - изменение состояния объекта;

• селекция - доступ для определения состояния;

• итерация - доступ к содержимому объекта по частям в определенной последовательности (используется при наличии в объекте некоторых однотипных компонентов).

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

Рис. 6. Типы операций над объектом

Например, «Активизировать» для интерфейсного элемента, в зависимости от типа реализации (статической или динамической), может означать либо создание объекта - при динамической реализации, либо его модификацию - «видимый» вместо «невидимый» при статической реализации.

Рис. 7. Типы отношений между объектами

При выполнении объектной декомпозиции устанавливаются отношения между объектами, которые бывают двух типов.

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

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

Виды операций над объектами и типы отношений между ними определяют особенности реализации объектов.

Классы

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

Для представления абстракций объектов используется специальный определяемый программистом тип данных - класс.

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

Применительно к классам такие процедуры и функции получили название методов.

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

Рис. 8. Соответствие объекта-абстракции классу и объектам-переменным

В программах используются переменные типа класса. Такие переменные принято называть объектами.

Создавая объекты типа Окно, инициализируя их в соответствии с условием и посылая им сообщение «Нарисовать окно», получим разные окна на экране, причем параметры этих окон будут храниться в объектах.

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

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

<имя объекта>.<имя поля> или <имя объекта>.<имя метода>.

Все методы объекта обязательно имеют доступ ко всем полям своего объекта. В рассматриваемых далее языках программирования это достигается через неявную передачу в метод специального параметра - ссылки или адреса области данных конкретного объекта (ссылка Self- в Паскале и адрес this - в C++), Таким образом, уменьшается количество параметров, явно передаваемых в метод.

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

Класс <имя класса>

интерфейс

<объявление полей и методов класса,

к которым возможно обращение извне>

реализация

<объявление полей и методов класса,

к которым невозможно обращение извне>

Конец описания.

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

Наличие интерфейса обеспечивает уменьшение возможности «разрушения» (несанкционированного изменения значений полей) объекта извне. Сокрытие особенностей реализации, кроме того, упрощает внесение изменений в реализацию класса как в процессе отладки, так и при модификации программы. Таким образом, класс определяет существование глобальной области данных внутри объекта, доступной методам объекта. С другой стороны, доступ к объекту регламентируется и должен выполняться через специальный интерфейс (рис. 9).

Рис. 9. Интерфейс и реализация класса

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

Статическое создание объектов выполняется в процессе компиляции программы, а статическое уничтожение - при завершении программы: объект удаляется из памяти вместе с программой.

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

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

Date: 2015-06-06; view: 1021; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.007 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию