Основная цель класса состоит в том, чтобы задать объект, который инкапсулирует данные и операции, выполняемые на этом данные. Например, 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 5
MATLAB добавляет номер 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