Основная цель класса состоит в том, чтобы задать объект, который инкапсулирует данные и операции, выполняемые на этом данные. Например, BasicClass задает свойство и два метода, которые работают с данными в том свойстве:
Значение Свойство, которое содержит данные, хранившие в объекте класса
roundOff — Метод, который округляет значение свойства к двум десятичным разрядам
multiplyBy — Метод, который умножает значение свойства конкретным количеством
Вот определение BasicClass:
classdef BasicClass properties Value 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(a,3)
ans =
3.1416Можно также вызвать метод с помощью записи через точку:
a.multiplyBy(3)
Не необходимо передать объект явным образом в качестве аргумента при использовании записи через точку. Обозначение использует объект слева от имени метода.
Для получения информации о методах класса см. Методы и Функции
Классы могут задать специальный метод создать объекты, названные конструктором. Методы конструктора позволяют вам передать аргументы конструктору, и подтвердить и присвоить значения свойств. Вот конструктор для класса BasicClass:
methods function obj = BasicClass(val) if nargin > 0 if isnumeric(val) obj.Value = val; else error('Value must be numeric') end end end end
Путем добавления этого конструктора к определению класса можно создать объект за один шаг:
a = BasicClass(pi/3)
a =
BasicClass with properties:
Value: 1.0472Этот конструктор также выполняет тип, проверяющий входной параметр. Например:
a = BasicClass('A character array')Error using BasicClass (line 11) Value must be numeric
Для получения информации о конструкторах см. Методы Конструктора класса
MATLAB® позволяет вам векторизовать операции. Например, можно добавить номер к вектору:
[1 2 3] + 2
ans =
3 4 5MATLAB добавляет номер 2 к каждому из элементов в массиве [1 2 3]. Чтобы векторизовать методы арифметического оператора, заключите ссылку свойства obj.Value в скобках, где obj является объектным массивом.
[obj.Value] + 2
Этот синтаксис позволяет методу работать с массивами объекта. Например, учитывая объекты a1, a2 и a3:
[a1.Value,a2.Value,a3.Value] + 2
При помощи векторного обозначения a может быть массивом:
a(1) = BasicClass(2.7984); a(2) = BasicClass(sin(pi/3)); a(3) = BasicClass(7); roundOff(a)
ans =
2.8000 0.8700 7.0000Классы могут реализовать существующую функциональность, такую как сложение, путем определения метода с тем же именем как существующая функция MATLAB. Например, предположите, что вы хотите добавить два объекта BasicClass. Это целесообразно добавлять значения свойств ObjectValue каждого объекта.
Вот перегрузка функции plus MATLAB. Это задает сложение для этого класса как добавление значений свойств:
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Для получения информации о перегрузке функций смотрите Функции Перегрузки в Определениях классов.
Для получения информации о перегружающихся операторах см. Перегрузку операторов.
Листинг кода BasicClassВот определение BasicClass после добавления опций, обсужденных в этой теме:
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