Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Одиноков / МиИПиС_асп_13г / MATLAB R2008a. КЛАССЫ_ЧАСТЬ 3_12г.doc
Скачиваний:
35
Добавлен:
15.04.2015
Размер:
771.58 Кб
Скачать

Inheritance of Properties (Наследование свойств)

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

Specifying Property Attributes (Спецификация атрибутов свойств)

Атрибуты, специфицированные в properties-блоке, относятся ко всем свойствам данного блока. Если вы хотите добавить установку атрибутов к другим определенным свойствам, создайте новый properties-блок для этих свойств.

Например, следующий код показывает атрибут SetAccess, установленный как private для свойств IndependentVar и Order, но не для свойства Coefficients:

Эти свойства (и любые другие, входящие в данный блок) имеют приватный допуск на установку

Property Attributes (Атрибуты свойств)

В этом разделе:

Table of Property Attributes (Таблица атрибутов свойств)

Table of Property Attributes (Таблица атрибутов свойств)

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

Таблица атрибутов свойств

Имя атрибута

Класс

Описание

Abstract

logical

по умолчанию =

= false

Если true, свойство не исполняется, но конкретный класс должен переопределить это свойство без атрибута Abstract, установленного в true.

  • Абстрактные свойства не могут определять set- или get-методы доступа. Смотрите Controlling Property Access (Контроль доступа к свойствам).

  • Абстрактные свойства не могут инициализировать величины. Смотрите Assigning an Initial Value (Назначение начальной величины).

Таблица атрибутов свойств (продолжение)

Имя атрибута

Класс

Описание

  • Все подклассы должны специфицировать для свойств те же самые величины атрибутов SetAccess и GetAccess, которые определил суперкласс.

  • Abstract = true должен быть использован с атрибутом класса Sealed = false (по умолчанию)

Constant

logical

по умолчанию =

= false

Установите в true, если вы хотите только одну величину для этого свойства во всех инстанциях этого класса:

  • Подклассы наследуют постоянные свойства, но не могут изменить их;

  • Постоянные свойства не могут быть Dependent;

  • SetAccess игнорируется

Dependent

logical

по умолчанию = = false

Если false, величина свойства хранится в объекте. Если true, величина свойства не хранится в объекте и set- и get-функции не могут иметь доступа к свойству посредством индексирования в объекте, использующем имя свойства.

Смотрите Property Get Methods (Get-методы свойств)

GetAccess

(Доступ на запрос)

char

по умолчанию = = public

public — неограниченный доступ.

protected – доступ из класса или подкласса.

private — доступ только из компонентов класса (его объектов)

Таблица атрибутов свойств (окончание)

Имя атрибута

Класс

Описание

GetObservable

(Доступный для

запроса)

logical

по умолчанию = = false

Если true и это свойство handle-класса, слушатели могут быть созданы для доступа к этому свойству. Слушатели могут быть вызваны всегда, когда величины свойств запрашиваются. Смотрите Property-Set and Query Events (События установки и запроса свойств)

Hidden

(Скрытый)

logical

по умолчанию = = false

Определяет, нужно ли показать свойство в списке (например, Property Inspector - Инспектор свойств, вызов на установку или запрос и т.д.)

SetAccess

char

по умолчанию = = public

public — неограниченный доступ.

protected -- доступ из класса или подкласса.

private — доступ только из компонентов класса (его объектов)

SetObservable

(Доступный для установки)

logical

по умолчанию = = false

Если true и это свойство handle-класса, слушатели могут быть созданы для доступа к этому свойству. Слушатели могут быть вызваны всегда, когда величины свойств изменяются. Смотрите Property-Set and Query Events (События установки и запроса свойств)

Transient

(Временный)

logical

по умолчанию = = false

Если true, величина свойства не сохраняется, когда объект сохраняется в файле. Смотрите Saving and Loading Objects (Сохранение и загрузка объектов) для изучения сохранения и загрузки объектов

Controlling Property Access (Контроль допуска к свойствам)

В этом разделе:

Property Access Methods (Методы допуска к свойствам);

Property Set Methods (Set-методы свойств);

Property Get Methods (Get-методы свойств);

Set and Get Method Execution and Property Events (Выполнение set- и get-методов и события свойств);

Access Methods and Subscripted Reference and Assignment (Методы допуска и индексированные ссылки и назначения);

Performing Additional Steps with Property Access Methods (Выполнение дополнительных шагов с методами доступа к свойствам).

Property Access Methods (Методы доступа к свойствам)

Методы доступа к свойствам дают возможность выполнить код всегда, когда идет ссылка на свойства или им назначается новая величина. Эти методы позволяют вам:

  • Выполнить код прежде, чем назначение величин свойствам будет произведено, - для установки пределов ограничения, контроля правильности типов и размерностей, обработки ошибок и т.д.;

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

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

Замечание. Рассматриваемые здесь (нестандартные) set- и get-методы доступа к свойствам, разрабатываемые пользователями (user-defined), но не используемые лично ими (эти методы вызываются только классами), не эквивалентны стандартным пользовательским (используемым ими в виде команд) set- и get-методам, предоставляемым системой MATLAB. Смотрите Implementing a Set/Get Interface for Properties (Исполнение set/get-интерфейса для свойств) для получения информации о стандартных (используемых как команды) set- и get-методах.

Рассматриваемые методы допуска имеют специальные имена, которые включают имя свойства. Поэтому get.PropertyName выполняется всегда, когда есть запрос на свойство (его значение) PropertyName, а set.PropertyName - всегда, когда свойству PropertyName назначается новая величина.

Вы должны определить методы доступа к свойствам в блоке methods, в котором не специфицируются атрибуты. Вы не можете сами вызывать (использовать) эти методы (т.е. они - не пользовательские), они вызываются автоматически, когда к свойствам получают доступ. Поэтому такие методы доступа к свойствам не возвращаются встроенной общей MATLAB-командой methods и не включаются в свойство Methods meta-объектов класса meta.class, соответствующих любым обычным классам. Однако свойство SetMethod объектов класса meta.property, соответствующих каждому свойству обычного класса, содержит директорию специального формата (handle-директорию) вместе с именем set-метода этого свойства, а свойство GetMethod этих объектов – handle-директорию с именем get-метода (такие директории можно рассматривать как специальные handle-метод-функции).

Например, если обычный класс myClass определяет set-метод set.Text для своего свойства Text, вы можете получить указание на эту функцию (handle-директорию) из meta.property-объекта для данного свойства Text класса myClass:

m = ?myClass; % Формирование meta.class-объекта m для класса

% myClass; meta.class-объект m предоставляет, в частности,

% информацию о meta.property-объектах для класса myClass:

m.Properties{1}.SetMethod % Assuming Text is the first property

% in the cell array (Предположим, что Text является первым

% свойством в массиве ячеек) – запрос на значение свойства

% SetMethod meta-объекта m.Properties{1} (первый в массиве

% meta.property-объектов для свойств класса myClass),

% соответствующего свойству Text. Ответ (пример):

ans =

@\mydir\@myClass\myClass.m>myClass.set.Text

% This is a function handle (Это есть handle-функция) –

% handle-директория set-метода set.Text).

Отметим, что порядок элементов массива (ячеек) meta.property-объектов, содержащихся в meta.class-объекте, отражает порядок свойств в определении действительного класса (здесь myClass).

Obtaining Information About Classes with Meta-Classes (Получение информации о классах с помощью meta-классов) содержит сведения об использовании meta-классов.

Function Handles (Handle-функции) рассматривает использование handle-функций.

Property Set Methods (Set-методы свойств)

Set-методы свойств имеют следующий синтаксис, где PropertyName есть имя свойства:

methods % No method attributes (Нет атрибутов методов).

function obj = set.PropertyName(obj,value)

end

Здесь obj есть объект, свойству PropertyName которого будет назначена новая величина value.

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

Set-метод свойства может выполнить такие действия, как контроль входной величины, до каких-либо операций по сохранению новой величины свойства:

function obj = set.PropertyName(obj,value)

if ~(value > 0)% Проверка правильности нового значения.

error('Property value must be positive')

% Стандартная функция error при наличии ошибки

% выводит сообщение: «Величина свойства должна быть

% положительной».

else % Иначе (если значение value существует:

obj.PropertyName = value; % Назначение новой

% величины свойству PropertyName.

end

end

Смотрите Restricting Properties to Specific Values (Ограничение свойств специальными величинами) как пример set-метода свойства.

Set Method Behavior (Поведение set-метода)

MATLAB вызывает set-метод свойства всякий раз при назначении ему величины, если set-метод для этого свойства существует. Однако set-методы свойств не вызываются в случаях:

  • Назначения величины свойства из собственного set-метода для предотвращения рекурсии вызова;

  • Назначения свойству его собственного начального значения;

  • Спецификации начальных значений в определении класса;

  • Копирования для value-объекта (т.е. не handle-объекта). При копировании величин свойств из одного объекта в другой не используются ни set-, ни get-методы.

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

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

Property Get Methods (Get-методы свойств)

Get-метод свойства вызывается каждый раз, когда запрашивается величина свойства. Например, обращение к величине свойства XYData в следующем выражении вызывает метод get.XYData, если таковой существует:

plot(obj.XYData)

Get-методы свойств имеют следующий синтаксис, где PropertyName есть имя свойства. Заметьте, что функция должна вернуть величину свойства:

methods % No method attributes (Нет атрибутов методов).

function value = get.PropertyName(obj)

end

Dependent Properties — Values Not Stored (Зависимые свойства – величины не хранятся)

Одно из применений get-метода состоит в вычислении (определении) значения свойства только тогда, когда это необходимо, что делает ненужным его хранение. Чтобы этого добиться, установите атрибут Dependent свойства в true:

properties (Dependent = true)

PropertyName

end

Теперь get-метод для свойства PropertyName должен определить (рассчитать) величину этого свойства внутри себя:

function value = get.PropertyName(obj)% Функция для

% определения значения свойства PropertyName объекта

% obj.

value = calculateValue; % Расчет величины value

% посредством вызова метода calculateValue.

...

end

Эта get-функция вызывает статический метод calculateValue для расчета величины свойства и возвращает переменную value коду, который затребовал доступ к свойству. Get-метод внутри себя может производить любые необходимые действия для продуцирования выходной величины.

Dependent Properties (Зависимые свойства) дает пример get-метода свойства.

Set and Get Method Execution and Property Events (Выполнение set- и get-методов и события свойств)

MATLAB генерирует предопределенные события (до и после set- и get-операций), которые могут быть использованы для уведомления слушателей о том, что величины свойств запрошены или назначены. Get-события такого рода и их синхронизация даны ниже:

  • PreGet — до вызова get-метода свойства;

  • PostGet — после того, как get-метод свойства вернет величину.

Если величина свойства рассчитывается (атрибут Dependent = true), поведение таких же set-событий аналогично get-событиям:

  • PreSet — до вызова set-метода свойства;

  • PostSet — после вызова set-метода.

Если свойство не рассчитывается (Dependent = false по умолчанию), set-события генерируются внутри set-метода как:

  • PropertyPreSet – до назначения новой величины внутри set-метода;

  • PropertyPostSet – после назначения новой величины внутри set- метода.

Events and ListenersConcepts (События и слушатели – концепты) дает основные сведения о событиях и слушателях.

Creating Property Listeners (Создание слушателей для свойств) предоставляет информацию об использовании событий свойств.