Основной целью класса является определение объекта, инкапсулирующего данные, и операций, выполняемых с этими данными. Например, BasicClass определяет свойство и два метода, которые работают с данными в этом свойстве:
Value - Свойство, содержащее числовые данные, хранящиеся в объекте класса
roundOff - Метод округления значения свойства до двух десятичных разрядов
multiplyBy - Метод, умножающий значение свойства на указанное число
Вот определение BasicClass:
classdef BasicClass properties Value {mustBeNumeric} end methods function r = roundOff(obj) r = round([obj.Value],2); end function r = multiplyBy(obj,n) r = [obj.Value] * n; end end end
Краткое описание синтаксиса класса см. в разделе classdef.
Для использования класса:
Сохранение определения класса в .m с тем же именем, что и у класса.
Создайте объект класса.
Доступ к свойствам для назначения данных.
Вызовите методы для выполнения операций с данными.
Создайте объект класса, используя имя класса:
a = BasicClass
a =
BasicClass with properties:
Value: []Первоначально значение свойства пусто.
Назначение значения Value с использованием переменной объекта и точки перед именем свойства:
a.Value = pi/3;
Чтобы вернуть значение свойства, используйте точечную нотацию без назначения:
a.Value
ans =
1.0472
Сведения о свойствах класса см. в разделе Свойства класса.
Позвоните в roundOff метод для объекта a:
roundOff(a)
ans =
1.0500Передайте объект в качестве первого аргумента методу, который принимает несколько аргументов, как в этом вызове multiplyBy способ:
multiplyBy(a,3)
ans =
3.1416Можно также вызвать метод с помощью точечной нотации:
a.multiplyBy(3)
Нет необходимости передавать объект явно в качестве аргумента при использовании точечной нотации. Нотация использует объект слева от точки и имени метода.
Дополнительные сведения о методах классов см. в разделе Определение методов и функций классов.
Классы могут определять специальный метод создания объектов класса, называемый конструктором. Методы конструктора позволяют передавать аргументы конструктору, который можно назначить в качестве значений свойств. BasicClass
Value свойство ограничивает его возможные значения с помощью mustBeNumeric функция.
Вот конструктор для BasicClass класс. При вызове конструктора с входным аргументом он назначается Value собственность. При вызове конструктора без входного аргумента Value свойство имеет пустое значение по умолчанию ([]).
methods
function obj = BasicClass(val)
if nargin == 1
obj.Value = val;
end
end
endДобавив этот конструктор в определение класса, можно создать объект и задать значение свойства за один шаг:
a = BasicClass(pi/3)
a =
BasicClass with properties:
Value: 1.0472Конструктор может выполнять другие операции, связанные с созданием объектов класса.
Сведения о конструкторах см. в разделе Методы конструктора классов
MATLAB ® позволяет выполнять векторизацию операций. Например, можно добавить число к вектору:
[1 2 3] + 2
ans =
3 4 5MATLAB добавляет номер 2 каждому из элементов массива [1 2 3]. Для векторизации методов арифметических операторов заключите obj.Value ссылка на свойство в скобках.
[obj.Value] + 2
Этот синтаксис позволяет методу работать с массивами объектов. Например, создайте массив объектов с помощью индексированного назначения.
obj(1) = BasicClass(2.7984); obj(2) = BasicClass(sin(pi/3)); obj(3) = BasicClass(7);
Затем это выражение:
[obj.Value] + 2
Эквивалентно этому выражению:
[obj(1).Value obj(2).Value obj(3).Value] + 2
Потому что roundOff способ векторизируется, он может работать на массивах:
roundOff(obj)
ans =
2.8000 0.8700 7.0000Классы могут реализовать существующие функциональные возможности, такие как добавление, путем определения метода с тем же именем, что и существующая функция MATLAB. Например, предположим, что требуется добавить два BasicClass объекты. Имеет смысл добавить значения Value свойств каждого объекта.
Вот перегруженная версия MATLAB plus функция. Он определяет добавление для BasicClass класс как добавление значений свойств:
method function r = plus(o1,o2) r = [o1.Value] + [o2.Value]; end end
Путем реализации метода с именем plus, вы можете использовать "+"оператор с объектами BasicClass.
a = BasicClass(pi/3); b = BasicClass(pi/4); a + b
ans =
1.8326Векторизация метода plus позволяет работать с массивами объектов.
a = BasicClass(pi/3); b = BasicClass(pi/4); c = BasicClass(pi/2); ar = [a b]; ar + c
ans =
2.6180 2.3562Сведения о перегрузке функций см. в разделе Функции перегрузки в определениях классов.
Сведения об операторах перегрузки см. в разделе Перегрузка оператора.
BasicClass Список кодовВот BasicClass определение после добавления элементов, рассмотренных в этом разделе:
classdef BasicClass properties Value {mustBeNumeric} end methods function obj = BasicClass(val) if nargin == 1 obj.Value = val; 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