exponenta event banner

Создание простого класса

Класс проектирования

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

Векторизация метода 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

Связанные темы