Основным понятием объектно-ориентированного подхода является объект. Объект — это отдельная программная единица, которая содержит набор связанных с ней переменных (данных) и методов (процедур). Вообще говоря, эти переменные и методы извне объекта непосредственно не видны. Вместо этого имеются определенные интерфейсы, позволяющие программам осуществлять доступ к данным и процедурам.
Объект представляет собой некоторую сущность, будь то физический предмет, понятие, программный модуль или нечто динамическое, например виртуальная схема. Значения переменных объекта выражают информацию, известную о той вещи, которая представлена данным объектом. Методы содержат в себе процедуры, выполнение которых влияет на имеющиеся в объекте значения и, возможно, на ту вещь, которую этот объект представляет.
На рис. Б Л и Б.2 проиллюстрированы ключевые концепции объектно- ориентированного подхода.1
Структура объектов
Данные и процедуры, которые содержатся в объекте, обычно называют соответственно переменными и методами. Все, что известно объекту, можно выразить с помощью его переменных, а все, что он может выполнять, — с помощью его методов.
Переменные (variables) объекта, которые также называются атрибутам (attributes), обычно имеют вид простых скаляров или таблиц. Для каждой и переменных задан тип и, возможно, набор значений, которые может принш мать эта переменная; переменная может быть определена как константа ил как переменная (по соглашению термин переменная используется и для констант). Кроме того, могут быть наложены ограничения на использование переменной определенными пользователями, классами пользователей или в определенных ситуациях.
Методы (methods) объекта — это процедуры, которые можно запускать изу вне для выполнения определенных функций. Метод может изменять СОСТОЯН- объекта, обновлять значения некоторых переменных или воздействовать внешние ресурсы, к которым имеет доступ объект.
О бъекты взаимодействуют между собой с помощью сообщений (messages, Сообщение содержит в себе имя объекта-отправителя, имя объекта-получател имя метода в объекте-получателе и прочие уточняющие параметры, необходмые для работы метода. Содержащийся в объекте метод можно вызвать только с помощью сообщения. Получить доступ к хранящимся в объекте данным можно только с помощью методов этого объекта. Таким образом, с помощью метода можно произвести нужное действие или получить доступ к переменным объекта, или выполнить и то, и другое. Отправка сообщения локальному объекту равносильна вызову метода объекта. Для распределенных объектов пересылка сообщения означает именно то, что обычно под этим подразумевается.
Интерфейс объекта представляет собой набор открытых методов, поддерживаемых объектом. По интерфейсу нельзя судить о реализации; объекты разных классов могут иметь различные реализации одних и тех же интерфейсов.
Свойство объекта, состоящее в том, что его единственным связующим звеном с внешним миром являются сообщения, называется инкапсуляцией (encapsulation)
[етоды и переменные объекта являются инкапсулированными, и доступ к ним осу- дествляется только с помощью сообщений. Это свойство дает два преимущества.
Оно защищает переменные объекта от разрушения другими объектами. Эта защита может включать в себя защиту от несанкционированного доступа, а также защиту от таких проблем, возникающих при параллельном доступе, как взаимоблокировка и несогласованные значения.
Оно скрывает внутреннюю структуру объекта, поэтому взаимодействие с ним является сравнительно простым и стандартизированным. Более того, если внутренняя структура или процедуры объекта изменяются без изменения выполняемых им внешних функций, это не влияет на другие объекты.
К лассы объектов
На практике обычно вещи одного типа представлены несколькими объектами. Например, если процесс представлен объектом, то в системе для каждого процесса 5удет присутствовать свой объект. Очевидно, что каждый такой объект нуждается в :воем наборе переменных. Однако если методы объекта являются реентерабельными процедурами, то все похожие объекты могут совместно использовать одни и те же методы. Более того, может оказаться, что для каждого нового, но похожего на предыдущие, объекта неэффективно определять и методы, и переменные.
Чтобы избежать трудностей, нужно научиться различать класс объекта и экземпляр объекта. Класс объекта (object class) — это шаблон, по которому определяются методы и переменные, входящие в объект определенного вида. Экземпляр объекта (object instance) — это сам объект, включающий в себя характеристики того класса, в котором он определен. В экземпляре содержатся значения переменных, определенных в классе объектов.