exponenta event banner

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

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

Классы перечисления могут определять свойства для хранения значений данных. Элементы перечисления представляют конкретные значения для этих свойств, которые 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

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