- •Объектно-ориентированная модель проектирования
- •Объекты и классы
- •Вызов методов
- •Переопределение классов
- •Иерархия объектов. Индексация объектов
- •Индексация объектов.
- •Наследование
- •Создание классов с помощью classdef
- •Описание атрибутов свойств
- •Описание атрибутов методов
- •Описание атрибутов событий
Создание классов с помощью classdef
Полное описание класса можно поместить в индивидуальный m-файл. В этом случае определение класса начинается с ключевого слова classdef и заканчивается ключевым словом end. На рис. 3 приведен синтаксис определения класса с помощью classdef. Только комментарии и пустые строки могут предварять ключевое слово classdef.
Рис. 3
После ключевого слова classdef в круглых скобках следует определение атрибутов класса. Далее указывается название класса. После символа «<» указывается список родительских классов.
Классовые атрибуты не наследуются дочерними классами. Синтаксис определения атрибутов:
classdef (Attribute1 = value1, Attribute2 = value2,...) ClassName
...
end
Таблица 2
Описание атрибутов класса
Название |
Тип |
Описание |
Abstract |
logical (default = false) |
Если присвоено значение true, то класс является абстрактным. |
AllowedSubclasses |
объект meta.class или массив ячеек объектов meta.class |
Список классов, которые могут быть произведены от данного класса. Пример: classdef (AllowedSubclasses = {?ClassName1,?ClassName2,...?ClassNameN}) MySuperClass ... end Пустой массив ячеек {}, эквивалентен атрибуту Sealed. |
ConstructOnLoad |
logical (default = false) |
Если true, MATLAB® вызывает конструктор класса при загрузку объекта из MAT-файла. Необходимо определить конструктор класса не выдающего ошибку при вызове конструктора без входных аргументов. |
HandleCompatible |
logical (default = false) для классов «по-значению» |
Если присвоено true, этот класс может быть родительским классом для классов «по-ссылке». |
Hidden |
logical (default = false) |
Если true, этот класс не выводится при вызове функций superclass или help. |
InferiorClasses |
объект meta.class или массив ячеек объектов meta.class |
Список классов имеющих высший приоритет.
|
Sealed |
logical (default = false) |
Если true, то от класса нельзя произвести дочерние классы. |
Пример определения простого класса:
classdef BasicClass
properties
Value
end
methods
function obj = BasicClass(val)
if nargin == 1
if isnumeric(val)
obj.Value = val;
else
error('Value must be numeric')
end
end
end
function r = roundOff(obj)
r = round([obj.Value],2);
end
function r = multiplyBy(obj,n)
r = [obj.Value] * n;
end
function r = plus(o1,o2)
r = [o1.Value] + [o2.Value];
end
end
end
Свойства класса перечисляются в блоке properties … end. Свойства могут иметь значения «по-умолчанию». Доступ к свойствам объекта класса возможен с помощью символа «.»
Методы класса определяются в блоке methods … end
События класса определяются в блоке events … end. При наступлении какого-либо события (например, изменения значения свойства) объект класса рассылает сообщение о его наступлении. Если для данного сообщения существует функция-обработчик, то она вызывается в ответ на данное сообщение.
Свойства, методы и события также могут иметь атрибуты (см. табл. 3-5). Синтаксис определения атрибутов:
classdef (attribute-name = expression, ...) ClassName
properties (attribute-name = expression, ...)
...
end
methods (attribute-name = expression, ...)
...
end
events (attribute-name = expression, ...)
...
end
end
Таблица 3
