Сгенерируйте код для классов значений MATLAB

В этом примере показано, как сгенерировать код для MATLAB® Значение класса, а затем просмотрите сгенерированный код в отчете генерации кода.

  1. В папке с возможностью записи создайте класс значений MATLAB, Shape. Сохраните код следующим Shape.m.

    classdef Shape 
    % SHAPE Create a shape at coordinates 
    % centerX and centerY
        properties
            centerX;
            centerY;
        end
        properties (Dependent = true)
            area;
        end
        methods 
            function out = get.area(obj)
                out =  obj.getarea();
            end
            function obj = Shape(centerX,centerY)
                obj.centerX = centerX;
                obj.centerY = centerY;
            end
        end
        methods(Abstract = true)
            getarea(obj);
        end
        methods(Static)
            function d = distanceBetweenShapes(shape1,shape2)
                xDist = abs(shape1.centerX - shape2.centerX);
                yDist = abs(shape1.centerY - shape2.centerY);
                d = sqrt(xDist^2 + yDist^2);
            end
        end
    end  
  2. В той же папке создайте класс Square, то есть подкласс Shape. Сохраните код следующим Square.m.

    classdef Square < Shape 
    % Create a Square at coordinates center X and center Y 
    % with sides of length of side
        properties
            side;
        end
        methods
            function obj = Square(side,centerX,centerY)
                obj@Shape(centerX,centerY);
                obj.side = side;
            end
            function Area = getarea(obj)
                Area = obj.side^2;
            end
        end
    end
  3. В той же папке создайте класс Rhombus, то есть подкласс Shape. Сохраните код следующим Rhombus.m.

    classdef Rhombus < Shape
        properties
            diag1;
            diag2;
        end
        methods
            function obj = Rhombus(diag1,diag2,centerX,centerY)
                obj@Shape(centerX,centerY);
                obj.diag1 = diag1;
                obj.diag2 = diag2;
            end
            function Area = getarea(obj)
                Area = 0.5*obj.diag1*obj.diag2;
            end
        end
    end
  4. Написание функции, которая использует этот класс.

    function [TotalArea, Distance] =   use_shape
    %#codegen
    s = Square(2,1,2);
    r = Rhombus(3,4,7,10);
    TotalArea  = s.area + r.area;
    Distance = Shape.distanceBetweenShapes(s,r);  
  5. Сгенерируйте статическую библиотеку для use_shape и сгенерируйте отчет генерации кода.

    codegen -config:lib -report use_shape

    codegen генерирует статическую библиотеку на C с именем по умолчанию, use_shapeи вспомогательные файлы в папке по умолчанию, codegen/lib/use_shape.

  6. Щелкните ссылку View report.

  7. Чтобы увидеть Rhombus определение класса, на панели MATLAB Source, в разделе Rhombus.m, нажмите Rhombus. The Rhombus конструктор классов подсвечивается.

  8. Перейдите на вкладку Variables. Вы видите, что переменная obj является объектом Rhombus класс. Чтобы увидеть его свойства, разверните obj.

  9. На панели MATLAB Source нажмите Call Tree.

    Представление Call Tree показывает, что use_shape вызывает Rhombus конструктор и что Rhombus конструктор вызывает Shape конструктор.

  10. В области кода, в Rhombus конструктор классов, переместите указатель на эту линию:

    obj@Shape(centerX,centerY)
    The Rhombus конструктор классов вызывает Shape метод базового Shape класс. Чтобы просмотреть Shape определение класса, в obj@Shape, дважды кликните Shape.