我对 ADA 语言非常陌生,在我的学习过程中,我看到了很多使用此 ADA 功能的示例。在我看来,它可能仅对单元测试有用,以便能够测试父包的私有类型和方法,但我认为以这种方式编码没有任何优势,似乎破坏了封装。
除了单元测试之外,使用它们是一个好习惯吗?
子包可以看作是其父包的扩展。
例如,它可用于提供不直接链接到您的基础包的功能。
典型的例子是 Input-Output 包。
想象一下以下包:
package Temperature is
type Kelvin_Temp is private;
type Celsius_Temp is private;
function build (temp : Positive) return Kelvin_Temp;
function build (temp : Integer) return Celsius_Temp;
function to_celsius (temp : in Kelvin_Temp) return Celsius_Temp;
function to_kelvin (temp : in Celsius_Temp) return Kelvin_Temp;
private
type Kelvin_Temp is 0.0 .. 10_000.0;
type Celsius_Temp is -273.0 .. 10_000.0;
end Temperature;
Run Code Online (Sandbox Code Playgroud)
这个包提供了直接链接到定义的类型的基本操作。
如果您想扩展它以提供文本格式的 I/O 怎么办?您可以决定将操作放在Temperature包中,但是如果您想添加其他类型的 I/O,例如数据库 I/O,您将拥有许多未直接链接到同一文件中的类型的函数。
你可以定义
package Temperature.Text_IO is
procedure Put(temp : Celsius_Temp);
procedure Put(temp : Kelvin_Temp);
end Temperature.Text_IO;
Run Code Online (Sandbox Code Playgroud)
和
package Temperature.Database_IO is
procedure insert (Temp : in Celsius_Temp);
procedure insert (Temp : in Kelvin_Temp);
end Temperature.Database_IO;
Run Code Online (Sandbox Code Playgroud)
标准库中的IO就是这样做的
从封装的角度来看,您的私有类型将在包层次结构之外保持私有,因此您不会破坏封装。
| 归档时间: |
|
| 查看次数: |
112 次 |
| 最近记录: |