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

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

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

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

Примечание

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

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

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

Задайте класс перечисления, чтобы представлять значения RGB цветов в наборе цветов. 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);

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

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

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

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

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

Похожие темы