Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
08.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
392.7 Кб
Скачать

Создание классов с помощью 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]