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

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

Основная цель класса состоит в том, чтобы задать объект, который инкапсулирует данные и операции, выполняемые на тех данных. Например, BasicClass задает свойство и два метода, которые работают с данными в том свойстве:

  • Значение Свойство, которое содержит данные, хранимые в объекте класса

  • roundOff — Метод, который округляет значение свойства к двум десятичным разрядам

  • multiplyBy — Метод, который умножает значение свойства конкретным количеством

Вот определение BasicClass:

classdef BasicClass
   properties
      Value
   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: []

Первоначально, значение свойства пусто.

Access Properties

Присвойте значение свойству Value с помощью переменной объекта и точки перед именем свойства:

a.Value = pi/3;

Чтобы получить доступ к значению свойства, используйте запись через точку без присвоения:

a.Value
ans =

    1.0472

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

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

Вызовите метод roundOff на объекте a:

roundOff(a)
ans =

    1.0500

Передайте объект в качестве первого аргумента к методу, который берет несколько аргументов:

multiplyBy(a,3)
ans =

    3.1416

Можно также вызвать метод с помощью записи через точку:

a.multiplyBy(3)

Не необходимо передать объект явным образом в качестве аргумента при использовании записи через точку. Обозначение использует объект слева от имени метода.

Для получения информации о методах класса см. Методы и Функции

Добавление конструктора

Классы могут задать специальный метод создать объекты, названные конструктором. Методы конструктора позволяют вам передать аргументы конструктору, и подтвердить и присвоить значения свойств. Вот конструктор для класса BasicClass:

methods
   function obj = BasicClass(val)
      if nargin > 0
         if isnumeric(val)
            obj.Value = val;
         else
            error('Value must be numeric')
         end
      end
   end
end

Путем добавления этого конструктора в определение класса можно создать объект за один шаг:

a = BasicClass(pi/3)
a = 

  BasicClass with properties:

    Value: 1.0472

Этот конструктор также выполняет тип, проверяющий входной параметр. Например:

a = BasicClass('A character array')
Error using BasicClass (line 11)
Value must be numeric

Для получения информации о конструкторах см. Методы Конструктора класса

Векторизация методов

MATLAB® позволяет вам векторизовать операции. Например, можно добавить номер в вектор:

[1 2 3] + 2
ans =

     3     4     5

MATLAB добавляет номер 2 в каждый из элементов в массиве [1 2 3]. Чтобы векторизовать методы арифметического оператора, заключите ссылку свойства obj.Value в скобках, где obj является объектным массивом.

[obj.Value] + 2

Этот синтаксис позволяет методу работать с массивами объекта. Например, учитывая объекты a1, a2 и a3:

[a1.Value,a2.Value,a3.Value] + 2

При помощи векторного обозначения a может быть массивом:

a(1) = BasicClass(2.7984);
a(2) = BasicClass(sin(pi/3));
a(3) = BasicClass(7);
roundOff(a)
ans =

    2.8000    0.8700    7.0000

Функции перегрузки

Классы могут реализовать существующую функциональность, такую как сложение, путем определения метода с тем же именем как существующая функция MATLAB. Например, предположите, что вы хотите добавить два объекта BasicClass. Это целесообразно добавлять значения свойств ObjectValue каждого объекта.

Вот перегрузка функции plus MATLAB. Это задает сложение для этого класса как добавление значений свойств:

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

Сопутствующая информация

Для получения информации о перегрузке функций смотрите Функции Перегрузки в Определениях классов.

Для получения информации о перегружающихся операторах см. Перегрузку операторов.

Листинг кода BasicClass

Вот определение BasicClass после добавления опций, обсужденных в этой теме:

classdef BasicClass
   properties
      Value
   end
   methods
      function obj = BasicClass(val)
         if nargin == 1
            if isnumeric(val)
               obj.Value = val;
            else
               error('Value must be numeric')
            end
         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

Похожие темы