Перечисления , которые инкапсулируют данные

Классы перечисления со свойствами

Классы перечисления могут задать свойства для хранения значений данных. Представители перечисления представляют определенные значения для этих свойств, которые MATLAB® присваивает в конструкторе классов. Для получения информации об определении классов перечисления смотрите Задать классы перечисления.

Хранение данных в свойствах

Примечание

Классы перечисления, которые подклассируют встроенные числовые или логические классы, не могут определять или наследовать свойства. Для получения дополнительной информации об этом виде класса перечисления смотрите Перечисления, выведенные из встроенных классов.

Задайте свойства в классе перечисления, если вы хотите связать определенные данные с представителями перечисления, но не должны наследовать арифметику, упорядоченное расположение или другие операции, которые MATLAB задает для определенных встроенных классов.

Представление цветов

Задайте класс перечисления, чтобы представлять значения RGB цветов в наборе цветов. The Colors класс задает имена для цветов, каждый из которых использует значения RGB в качестве аргументов для конструктора классов:

classdef Colors
   properties
      R = 0
      G = 0
      B = 0
   end
   methods
      function c = Colors(r, g, b)
         c.R = r; c.G = g; c.B = b;
      end
   end
   enumeration
      Blueish   (18/255,104/255,179/255)
      Reddish   (237/255,36/255,38/255)
      Greenish  (155/255,190/255,61/255)
      Purplish  (123/255,45/255,116/255)
      Yellowish (1,199/255,0)
      LightBlue (77/255,190/255,238/255)
   end
end

Вы можете получить доступ к значениям свойств через представителя перечисления:

Colors.Reddish.R
ans =

    0.9294

Предположим, что вы хотите создать график с новым оттенком красного цвета с именем Reddish:

a = Colors.Reddish;
[a.R,a.G,a.B]
ans =

    0.9294    0.1412    0.1490

Используйте эти значения путем доступа к свойствам представителя перечисления. Для примера, myPlot функция принимает Colors Представитель перечисления как входной параметр. Функция обращается к значениям RGB, определяющим цвет из значений свойств.

function h = myPlot(x,y,LineColor)
   h = line('XData',x,'YData',y);
   r = LineColor.R;
   g = LineColor.G;
   b = LineColor.B;
   h.Color = [r g b];
end

Создать график с помощью красноватой цветовой линии:

h = myPlot(1:10,1:10,Colors.Reddish);

The Colors класс инкапсулирует определения стандартного набора цветов. Вы можете изменить определение классов перечисления цветов и не влиять на функции, которые используют перечисления.

Перечисления, определяющие категории

The Cars класс определяет категории, используемые для инвентаризации автомобилей. The Cars класс выводится из CarPainter класс, который происходит от handle. Абстрактная CarPainter класс задает paint метод, который изменяет Color свойство, когда автомобиль окрашен в другой цвет.

The Cars класс использует Colors представители перечисления для задания конечного набора доступных цветов. Точное определение любого заданного цвета может измениться независимо от Cars класс.

classdef Cars < CarPainter
   enumeration
      Hybrid (2,'Manual',55,Colors.Reddish)
      Compact(4,'Manual',32,Colors.Greenish)
      MiniVan(6,'Automatic',24,Colors.Blueish)
      SUV    (8,'Automatic',12,Colors.Yellowish)
   end
   properties  (SetAccess = private)
      Cylinders
      Transmission
      MPG
      Color
   end
   methods
      function obj = Cars(cyl,trans,mpg,colr)
         obj.Cylinders = cyl;
         obj.Transmission = trans;
         obj.MPG = mpg;
         obj.Color = colr;
      end
      function paint(obj,colorobj)
         if isa(colorobj,'Colors')
            obj.Color = colorobj;
         else
            [~,cls] = enumeration('Colors');
            disp('Not an available color')
            disp(cls)
         end
      end
   end
end

The CarPainter класс требует, чтобы его подклассы определяли метод, называемый paint:

classdef CarPainter < handle
   methods (Abstract)
      paint(carobj,colorobj)
   end
end

Задайте образец Cars класс:

c1 = Cars.Compact;

Цвет этого автомобиля Greenish, как определено в Colors.Greenish перечисление:

c1.Color
ans = 

    Greenish 

Используйте paint метод изменения цвета автомобиля:

c1.paint(Colors.Reddish)
c1.Color
ans = 

    Reddish

Похожие темы