MATLAB R2008a. Классы. Часть1: Учебное пособие, страница 13

Если вы хотите специфицировать атрибуты для изолированного метода (проблема заключается в том, что файл изолированного метода не содержит блока methods, где, собственно, и устанавливаются атрибуты метода), вы должны включить сигнатуру (ключевые слова methods и  end)  метода в блок classdef. Для примера следующий код показывает установку атрибута Access (Доступ) метода myFunc как private в субблоке methods блока classdef, но сам метод определен в отдельном файле. Не включайте связную группу ключевых слов function - end в такой блок методов:

classdef class_name

                methods (Access = private) % Начало сигнатуры метода.

                        output = myFunc(obj,arg1,arg2) % Вызов функции

                                 % myFunc изолированного метода класса для объекта

                        % obj при обработке данных arg1,arg2; результат

                                 % обработки возвращается  переменной  output.

                end% Конец сигнатуры метода.

                ... % Последующее содержание блока classdef.

end% Конец блока classdef.

В файле myFunc.m, расположенном на  @-директории данного класса (после файла  определения класса), для рассматриваемого примера задайте функцию-метод, как было сказано, без ключевого слова methods:

function output = myFunc(obj,arg1,arg2)

                ... % Содержание функции-метода myFunc.

end

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

Defining Private Methods (Определение приватных методов)

Используйте атрибут доступа  Access для создания приватного метода. В этом случае вам не нужно для защиты кода от внешнего воздействия создавать приватную директорию.

Смотрите раздел Method Attributes (Атрибуты методов) для ознакомления со списком регламентированных атрибутов методов.

More Detailed Information On Methods (Более подробная информация о методах)

Смотрите раздел Class Methods (Методы классов) для более подробного знакомства с методами.

Specifying Events and Listeners (Спецификация событий и слушателей)

Чтобы определить свое (user-defined) событие, вы просто декларируете его имя (name) в блоке событий events. Затем один из методов класса - метод извещения notify, который наследован из  класса handle (абстрактный класс, который сам непосредственно не создает объекты и из которого выводятся конкретные классы – подклассы), запускает событие. Только классы  (handle-классы), выведенные из класса handle или его последующих производных форм, могут определять события. Например, нижеследующий классclass_name:

w Определяет user-defined-событие, названное StateChange;

w Запускает событие, используя унаследованный метод notify:

classdef class_name < handle % Здесь class_name

                        % подкласс     (handle-класс) суперкласса handle.

                events % Начало блока событий.

                        StateChange % Имя определяемого события (для

                                 % изменения состояния некоторого объекта).

                end % Конец блока событий.

                ... % Последующее содержание блока classdef.

                methods % Начало блока методов.

                        function upDataGUI(obj) % Начало определения

                                 % метода, принимающего объект  obj и производящего

                                 % с ним некоторые действия.

                                 ...     % Исполнительный код функции-метода.

               notify(obj,'StateChange'); % Оператор

                                         % извещения о событии изменения состояния (из-за

                                 % действий метода upDataGUI) объекта obj;

                                 % метод notify не определяется в данном блоке

                                 % classdef,  так как унаследован от суперкласса

                                 % handle.

          end% Конец определения функции-метода.

       end% Конец блока методов.

end% Конец блока classdef.

Listening for the Event (Восприятие события)

Любое число объектов может быть приемниками-слушателями  (listeners) событий. Для выполнения некоторых действий по событиям (при наличии сообщения notify) служат специальные функции вызова (callbacks), которым посылается метка (handle) объекта, генерирующего событие, и особые информационные данные о событии. Слушатели и их callback-функции (listener callbacks) заранее регистрируются (создаются). Для создания слушателя и его  callback-функции (фактически callback-функция и есть слушатель-listener) на время существования объекта - генератора события  используется метод addlistener (добавить слушателя) класса handle. 

Смотрите раздел Defining Events and Listeners — Syntax and Techniques (Определение событий и слушателей – синтаксис и техника).

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

Для просмотра атрибутов классов, свойств, методов и событий смотрите раздел Attribute Tables (Таблицы атрибутов).

Атрибуты определяют поведение (состояние) классов и их компонентов  (свойств, методов и событий). Атрибуты позволяют вам задавать нужные характеристики поведения без написания сложных кодов. Например, вы можете создать только читаемое свойство установкой его атрибута SetAccess (Доступ на установку) в private (конфиденциальный), оставив атрибут GetAccess (Доступ на запрос) как public (свободный доступ, по умолчанию):

properties (SetAcess = private)% Значения свойств этого

                % блока не могут быть заданы извне класса и его инстанций-

                        % объектов.

                ScreenSize = getScreenSize; % Установка величины

                        % getScreenSize для свойства ScreenSize.

end

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