Встроенные числовые типы подкласса для создания настроенных типов данных, наследующих функциональность встроенного типа. Добавьте функциональные возможности суперкласса с помощью методов класса. Подклассы без свойств хранят числовые данные как тип суперкласса. Если проект подкласса не требует свойств для хранения других данных, реализация проще, потому что вам не нужно задавать методы индексации и конкатенации.
Для получения дополнительной информации смотрите Подклассы встроенных типов MATLAB.
В этом примере показан класс, полученный из встроенного uint8
класс. Этот класс упрощает процесс поддержания набора данных изображений интенсивности, заданных uint8
значения. Основные операции класса включают:
Возможность преобразовать различные классы данных изображений в uint8
чтобы уменьшить объем хранения данных объекта.
Метод для отображения изображений интенсивности, содержащихся в объектах подкласса.
Возможность использовать все методы, поддерживаемые uint8
данные (для примера, size
, индексация, reshape
, bitshift
, cat
, fft
, арифметические операторы и так далее).
Данные класса являются матрицами данных изображений интенсивности, сохраненными в части суперкласса объекта подкласса. Этот подход не требует никаких свойств.
The DocUint8
класс сохраняет данные изображения, который преобразует данные, при необходимости:
classdef DocUint8 < uint8 methods function obj = DocUint8(data) if nargin == 0 data = uint8(0); end obj = obj@uint8(data); % Store data on superclass end function h = showImage(obj) data = uint8(obj); figure; colormap(gray(256)) h = imagesc(data,[0 255]); axis image brighten(.2) end end end
The DocUint8
класс предоставляет метод для отображения всех изображений, хранимых как DocUint8
объекты последовательным образом. Для примера:
cir = imread('circuit.tif');
img1 = DocUint8(cir);
img1.showImage;
Потому что DocUint8
подклассы uint8
, вы можете использовать любой uint8
методы. Для примера,
size(img1)
ans = 280 272
возвращает размер данных изображения.
Унаследованные методы выполняют операции индексации, но возвращают объекты того же класса, что и подкласс.
Поэтому можно индексировать в данные изображения и вызвать подкласс метода:
showImage(img1(100:200,1:160));
Подписанные опорные операции (управляемые унаследованным subsref
метод) возвращает DocUint8
объект.
Индексированным элементам можно присвоить значения:
img1(100:120,140:160) = 255; img1.showImage;
Подписанные операции назначения (управляемые унаследованным subsasgn
метод) возвращает DocUint8
объект.
Операции конкатенации работают над DocUint8
объекты, поскольку этот класс наследует uint8
horzcat
и vertcat
методы, которые возвращают DocUint8
объект:
showImage([img1 img1]);
Методы, которые работают с значениями данных, такими как арифметические операторы, всегда возвращают объект встроенного типа (не типа подкласса). Для примера умножение DocUint8
объекты возвращают uint8
объект, так называемый showImage
выдает ошибку:
a = img1.*1.8; showImage(a);
Check for missing argument or incorrect argument data type in call to function 'showImage'.
Чтобы выполнить операции этого типа, реализуйте подкласс метода, чтобы переопределить унаследованный метод. The times
метод реализует умножение массива (элемент за элементом).
Добавьте этот метод к DocUint8
класс:
function o = times(obj,val) u8 = uint8(obj).*val; o = DocUint8(u8); end
Когда вы переопределяете uint8
метод, MATLAB® вызывает подкласс, а не базовый класс. Подкласс метода должен:
Вызовите uint8
times
метод на DocUint8
данные объекта.
Создайте новую DocUint8
объект с использованием uint8
данные.
После добавления times
метод к DocUint8
класс, выход выражений умножения является объектом DocUint8
класс:
showImage(img1.*1.8);