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