作者:横着走觉察生活_915 | 来源:互联网 | 2023-08-22 19:27
假设我们有一辆车,它从 IMU 获取它的位置。IMU 包由几个私有组件组成,它编排这些组件以计算车辆在空间中的状态:
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 环境中有意义;它们必须完全隐藏在 Vehicle 之外。
在单个源文件中声明 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;
有关其他示例,请参阅wikibook