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

Для версии 7.6 тот же самый класс-конструктор Stock будет записан по-другому, как показано ниже. Наследуемость будет определена на classdef-линии и конструктор будет определен внутри блока methods.

Constructor Function for Version 7.6 (Функция-конструктор для версии 7.6):

   classdef Stock < Asset

                ...

       methods

          function s = Stock(description,...

             num_shares,share_price)

                         % Вызовите суперкласс-конструктор для посылки в него                               % аргументов. Это даст суперкласс-часть создаваемого

                                         %  объекта s:

                 s = s@Asset(description,'stock',...

                    share_price*num_shares);

             s.NumShares = num_shares; % Первое

                                         % дополнение к суперкласс-части объекта s  -

                                 %  автоматическое расширение свойств относительно

                                         %   суперкласс-части.

             s.SharePrice = share_price; % Второе

                                         % дополнение к суперкласс-части объекта s.

                        end % Конец функции.

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

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

NewFeaturesIntroducedwithVersion 7.6 (Новые характеристики, введенные в версию 7.6)

Новые характеристики  для версии 7.6 относятся к следующим основополагающим понятиям:

w Properties (Свойства): How to Use Properties (Как использовать свойства);

w Handle classes (Handle-классы): Comparing Handle and Value Classes (Сравнение handle- и value-классов);

w Events and listeners (События и слушатели): Events and Listeners — Concepts (События и слушатели – концепты);

w Class member attributes (Атрибуты компонентов класса): Attribute Tables (Таблицы атрибутов);

w Abstract classes (Абстрактные классы): Abstract Classes and Interfaces (Абстрактные классы и интерфейсы);

w Dynamic properties (Динамические свойства): Dynamic Properties — Adding Properties to an Instance (Динамические свойства – добавление свойств к инстанции);

w Ability to subclass MATLAB built-in classes (Способность иметь подклассы встроенных MATLAB-классов): Creating Subclasses — Syntax and Techniques (Создание подклассов – синтаксис и техника);

w Packages for scoping functions and classes (Пакеты для ограничения сферы функций и классов): Scoping Classes with Packages (Ограничение сферы  классов пакетами). Пакеты не поддерживаются для классов раньше версии 7.6 (т.е. классов, которые не используют ключевое слово classdef).

Examples of Old and New (Примеры старого и нового)

Исполнения классов в MATLAB версии 7.6 основаны на ряде важных отличий синтаксиса от предыдущих выпусков. Тем не менее, классы, написанные в предыдущих версиях, продолжают работать в этом и будущих вариантах. Большинство кодов, которые вы использовали для создания методов, могут быть сохранены в прежнем виде, исключая те, в которых вы хотите получить преимущества от новых введенных возможностей.

Следующие разделы дают примеры определения классов для нового синтаксиса. Эти же самые классы были использованы в прежней  документации MATLAB-классов и объектов и обеспечивают возможности для сравнения:

Example — A Polynomial Class (Пример – класс полиномов);

Example — A Simple Class Hierarchy (Пример – простая иерархия классов);

Example — Containing Assets into a Portfolio (Пример – содержание активов в portfolio).

ObsoleteDocumentation (Устаревшая документация)

Документация по MATLAB-классам и объектам до версии 7.6 пригодна для данного выпуска в рамках указанных выше ограничений.

MATLAB and Other OO Languages (MATLAB и другие ОО языки)

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

Some Differences from C++ and Sun Java Code (Некоторые отличия от С++ и Sun Java кода);

Common Object-Oriented Techniques (Общая объектно-ориентированная техника).

Some Differences from C++ and Sun Java Code (Некоторые отличия от С++ и Sun Java кода)

Если вы практиковались в программировании на объектно-ориентированных языках С++ и Sun Java, то обнаружите, что  программирование на языке MATLAB отличается по нескольким важным аспектам.

PublicProperties (Общедоступные свойства)

В отличие от полей в языках C++ или the Java вы можете использовать свойства MATLAB-классов для определения общедоступного интерфейса отдельно от хранения данных. Вы вправе обеспечить свободный доступ к свойствам, потому что вы можете определить методы set- и get-доступа, которые выполняются автоматически, когда значения свойств соответственно устанавливаются или запрашиваются посредством внешнего (по отношению к методам объекта) кода. Например, следующий оператор

        myobj.Material = 'plastic';

назначает строку plastic свойству Material объекта myobj. Однако прежде чем осуществить действительное назначение, myobj вызывает свой объектный метод, называемый set.Material (предполагается, что класс объекта myobj определяет этот метод), который может выполнить любую операцию над данными для проверки их правильности, установит новые значения и т.д. Смотрите раздел Controlling Property Access (Контроль доступа к свойствам) для более подробной информации о методах доступа к свойствам.

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

Pass By Reference (Передача по ссылке)

В MATLAB-классах переменные не передаются ссылкой. Однако MATLAB поддерживает два типа классов, которые ведут себя по-разному с учетом ссылочных данных: value-классы (классы величин) и handle-классы (классы имен-меток handle).

Value-классы. Когда пишутся методы value-класса, которые обновляют объект, вы должны вернуть обратно обновленный объект как новый и использовать оператор назначения для переменной, идентифицирующей новый  (обновленный) объект. Например,  следующее исполнение стандартной функции set для свойства PropertyName объекта A value-класса требует, чтобы левой переменной A функцией set был возвращен исходный объект A (правый) как новый с величиной PropertyValue для указанного свойства PropertyName: