
- •Часть 3
- •Введение
- •Indexing Functions (Индексирующие функции);
- •1 12 3 4 % Данные double-части объекта md.
- •InPutNames % cell array of strings (массив ячеек строк) – имена
- •Interfaces and Abstract Classes (Интерфейсы и абстрактные классы)
- •Interface Properties and Methods (Интерфейс свойств и методов)
- •Interface Guides Class Design (Интерфейс руководит разработкой класса)
- •Implementing the zoom Method (Исполнение метода zoom)
- •Inheritance of Properties (Наследование свойств)
- •Implementing the PostSet Property Event and Listener (Исполнение PostSet-события свойства и слушателя) показывает пример слушателя свойств.
- •Приложение
- •Implementing a Set/Get Interface for Properties (Исполнение set/get-интерфейса для свойств)…....12
- •Indexing Functions (Индексирующие
- •Inheritance of Properties (Наследование событий)…..........................................................................................54
- •Часть3 Редактор р.К. Мангутова
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.
|
Таблица атрибутов свойств (продолжение)
Имя атрибута |
Класс |
Описание |
|
|
|
|
|
Constant |
logical
по умолчанию = = false |
Установите в true, если вы хотите только одну величину для этого свойства во всех инстанциях этого класса:
|
|
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 Listeners — Concepts (События и слушатели – концепты) дает основные сведения о событиях и слушателях.
Creating Property Listeners (Создание слушателей для свойств) предоставляет информацию об использовании событий свойств.