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

   properties(ME)% Вызов функции propertiesс конкретным,

                % ранее созданным объектом-аргументом ME.

Результат вызова функции propertiesна экране монитора:

   Properties for class MException (Свойства класса                      MException):

identifier – идентификатор (сообщения)

message – сообщение (об ошибке))

cause - причина (сообщения)

stack - папка (данных)– см. ниже.

ObjectsOrganizeData (Объекты организуют данные)

Организация хранения данных в свойствах объектов во многом подобна полям MATLAB-структур. Поэтому при обращении к свойствам необходимо использовать dot-нотацию (точки), например, ME.message. При запросах это приводит к возвращению и, при необходимости, отображению запрашиваемых характеристик свойства. Например, запрос на тип класса свойства message объекта ME имеет вид:

   class(ME.message) % Вызов стандартной MATLAB-функции

                % class(класс аргумента) с аргументом ME.message.

Результат вызова функции classна экране для предыдущего объекта ME (вывод представлен в виде стандартной MATLAB-переменной ans):

   ans = % Стандартный идентификатор, его значение:

char% Класс аргумента  ME.message.

Ответ на обращение class(ME.message) показывает, что запрашиваемая характеристика (класс величины) свойства message для нашего объекта MEесть массив класса char(текстовая строка). Другое свойство (stack) объекта ME содержит MATLAB-структуру с именем stack. Запрос на характеристику данной структуры имеет вид:

   ME.stack % Обращение к свойству stack (к структуре stack)

                % объекта ME.

Результат последнего запроса выводится в виде значений полей file (файл), name (имя) и  line (строка) структуры stack:

   ans =

                file: 'C:\Program Files\MATLAB\R2008a\...

             toolbox\matlab\graph3d\surf.m'% Значение

                % элемента file(поле file структуры stack)свойства stack

                % указывает путь к файлу  surf.m,содержащему функцию

                % surf (директория на экране дается непрерывной строкой, здесь

                % строка разделена на две части из-за ограниченной ширины

                        % листа).

       name: 'surf' % Содержание поля nameструктуры stack –

                        % имя функции, генерирующей ошибку.

       line: 50 % Содержание (номер строки кода функции, указанной

                        % в поле name) поляline структуры stack (в строке 50 для              %surf дан оператор вызова функции  error, определяющей

                %сообщение об ошибке)

Можно трактовать обращение к свойству ME.stackобъекта ME просто как  ссылку к одноименной структуре stackи обычным образом вызывать её поля. Например (применительно к  полю file):

   ME.stack.file % Обращение к части  file свойства stack

                % (обращение к полю file одноименной структуры

                % stack в данном свойстве) объекта ME.

Результат обращения для нашего случая – вышеприведенная директория:

   ans =

                C:\Program Files\MATLAB\R2008a\toolbox\...

             matlab\graph3d\surf.m

Очевидно, что поле fileструктуры, содержащейся в свойстве  stack, является массивом символов. Это можно проверить командой:

   class(ME.stack.file) % Запрос на тип класса аргумента

                % ME.stack.file.

Ответ на запрос:

        ans =

       char % Символьный тип.

Ссылку на свойство можно использовать в какой-либо MATLAB-функции. Например, обращение к полю name структуры stack объекта ME с помощью стандартной функции strcmp (сравнение строк символов) может иметь вид:

   strcmp(ME.stack.name,'surf') % Вызов функции strcmp для

                % сравнения символов в поле name и словеsurf.

Результат вызова функции strcmp для прежнего объекта ME:

   ans =

1  % Значение переменной  ans, показывающее, что          

                        % сравниваемые  строки одинаковые, поскольку для

                        % рассматриваемого    случая содержание поля  name есть

                        % само имя функции surf.

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

ObjectsManageTheirOwnData (Объекты управляют своими собственными данными)

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

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

Чтобы увидеть, какие существуют методы класса, наследуемые созданными объектами класса MException, используйте встроенную функцию  methods. Например:

   methods(ME) % Запрос на методы класса, наследуемые                     % предварительно созданным MException-объектом ME.

Результат запроса:

Methods for class MException     (Методы для класса

MException):

addCause       eq             isequal    rethrow       

ctranspose     fieldnames     ne         throw