Сгенерируйте код для классов значения 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. Конструктор класса Rhombus подсвечен.

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

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

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

  10. В панели кода, в конструкторе класса Rhombus, указателе перемещения к этой строке:

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