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