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
假设我们有一辆车,它从 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