Ada:如何组织嵌套包

Ada: How to organise nested packages

假设我们有一辆车,它从 IMU 获取它的位置。 IMU 包由几个私有组件组成,它在 space:

中协调计算车辆状态
with IMU; use IMU;
Package Vehicle is
...
end vehicle; 

Package IMU is

    type Attitude is record
        Lat, Lon: Angle;
        Pitch, Roll, Yaw: Angle;
        GroundSpeed: Speed;
        ...
    end record
    
    function Get_Position return Attitude is ...
    
    Package GPS is
    ...
    end GPS;
    
    Package Accelerometer is
    ...
    end Accelerometer;
    
    Package Gyro is
    ...
    end Gyro;
end IMU;

GPS、加速度计和陀螺仪的内部结构仅在 IMU 环境下才有意义;它们必须完全隐藏在车辆中。

在单个源文件中声明 IMU 及其所有子组件将难以阅读和维护;我希望每个子组件都在它自己的源文件中。如果我在 IMU 级别将它们全部编码,车辆将能够访问 GPS,这是错误的。

构建嵌套包的最佳实践是什么?

有几种方法可以构建代码,但我不会使用嵌套包,而是为每个“组件”使用一个私有子组件。

这样,每个组件都在自己的单元中,并且从其父级及其兄弟实现中可见。

您的代码将是

Package IMU is

    type Attitude is record
        Lat, Lon: Angle;
        Pitch, Roll, Yaw: Angle;
        GroundSpeed: Speed;
        ...
    end record
    
    function Get_Position return Attitude is ...
        
end IMU;

private package IMU.GPS is
    ...
end IMU.GPS;

private package IMU.Accelerometer is
    ...
end IMU.Accelerometer;
    
private package IMU.Gyro is
    ...
end IMU.Gyro;

有关其他示例,请参阅 the wikibook