Представление оборудования с классами

Цель

Этот пример реализует класс, чтобы представлять оптическую мультиплексную карту. Эти карты обычно имеют несколько входных портов и выходной порт. Класс MuxCard представляет порты именами порта и уровнями данных порта. Норма выработки мультиплексной карты является суммой скоростей передачи данных входного порта.

Почему Выводят от int32

Класс MuxCard выводит от класса int32, потому что 32-битные целые числа представляют скорости передачи данных входного порта. Класс MuxCard наследовал методы класса int32, который упрощает реализацию этого подкласса. Например, индексация числового массива и арифметические операции работают над объектами MuxCard, потому что класс наследовал эти операции от класса int32.

Реализация

Вот определение класса MuxCard. Заметьте, что уровни входного порта инициализируют фрагмент int32 класса.

classdef MuxCard < int32
   properties
      InPutNames 
      OutPutName 
   end
   
   properties (Dependent = true)
      OutPutRate
   end
   
   methods
      function obj = MuxCard(inptnames, inptrates, outpname)
         obj = obj@int32(inptrates); 
         obj.InPutNames = inptnames;
         obj.OutPutName = outpname;
      end
      
      function x = get.OutPutRate(obj)
         x = sum(obj); 
      end
      
      function x = subsref(card, s)
         if strcmp(s(1).type,'.')
            base = subsref@int32(card, s(1));
            if isscalar(s)
               x = base;
            else
               x = subsref(base, s(2:end));
            end
         else
            x = subsref(int32(card), s);
         end
      end
   end
end

Построение объекта MuxCard

Конструктор берет три аргумента:

  • inptnames — Массив ячеек имен входного порта

  • inptrates — Вектор уровней входного порта

  • outpname — Назовите для выходного порта

omx = MuxCard({'inp1','inp2','inp3','inp4'},[3 12 12 48],'outp')
omx = 

  1x4 MuxCard array with properties:

    InPutNames: {'inp1'  'inp2'  'inp3'  'inp4'}
    OutPutName: 'outp'
    OutPutRate: 75

  int32 data:
           3          12          12          48

Вызов Методов int32

Используйте объект MuxCard как массив значений int32. Например, этот оператор индексации получает доступ к данным в объекте определить имена входных портов, которые имеют уровень 12:

omx.InPutNames(omx==12)
ans = 
    'inp2'    'inp3'

Оператор индексации генерирует индекс логического массива:

omx == 12
ans =

     0     1     1     0

Индексация доступов к объекту MuxCard вектор int32 уровней входного порта:

omx(1:2)
ans =
           3          12

Свойство OutPutRate заставляет использование метода доступа sum суммировать уровни выходного порта:

omx.OutPutRate
ans =
    75

Похожие темы