Основной целью класса является определение объекта, который инкапсулирует данные и операции, выполненные с этими данными. Для примера, 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)
Не обязательно передавать объект явным образом как аргумент при использовании записи через точку. Объект используется обозначением слева от имени точки и метода.
Для получения информации о методах классов смотрите Задать методы классов и функции
Классы могут задать специальный метод для создания объектов класса, называемый конструктором. Методы конструктора позволяют вам передать аргументы конструктору, которые можно назначить значениями свойств. The 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