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

Разработка класса

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

Для получения информации о свойствах класса смотрите Class Properties.

Вызов методов

Вызовите 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

Похожие темы