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