## Generate Code for MATLAB Value Classes

This example shows how to generate code for a MATLAB® value class and then view the generated code in the code generation report.

1. In a writable folder, create a MATLAB value class, `Shape`. Save the code as `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. In the same folder, create a class, `Square`, that is a subclass of `Shape`. Save the code as `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. In the same folder, create a class, `Rhombus`, that is a subclass of `Shape`. Save the code as `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. Write a function that uses this class.

```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. Generate a static library for `use_shape` and generate a code generation report.

`codegen -config:lib -report use_shape`

`codegen` generates a C static library with the default name, `use_shape`, and supporting files in the default folder, `codegen/lib/use_shape`.

6. Click the View report link.

7. To see the `Rhombus` class definition, on the MATLAB Source pane, under `Rhombus.m`, click `Rhombus`. The `Rhombus` class constructor is highlighted.

8. Click the Variables tab. You see that the variable `obj` is an object of the `Rhombus` class. To see its properties, expand `obj`.

9. In the MATLAB Source pane, click Call Tree.

The Call Tree view shows that `use_shape` calls the `Rhombus` constructor and that the `Rhombus` constructor calls the `Shape` constructor.

10. In the code pane, in the `Rhombus` class constructor, move your pointer to this line:

``obj@Shape(centerX,centerY)``
The `Rhombus` class constructor calls the `Shape` method of the base `Shape` class. To view the `Shape` class definition, in `obj@Shape`, double-click `Shape`.