我创建了一个Ada类,其实现变得非常大。我有一个多体的方法,我想移动到一个单独的文件,以实现可维护性/可读性。
我对Ada95 Separates的理解是每个文件只能有一个方法。我有大约20种方法要分开,但我不希望为此功能创建20个单独的文件。
要分开我认为可以创建子包的代码。然后父体可以调用子类。
Q.1 In Ada, Is it wrong/undesirable for a Parent Body unit to depend on a child Unit?
编辑:上述问题过于模糊,任何答案都是主观的。
Q.2 How can I divide my code into separate files without creating an over abundance of files?
答案 0 :(得分:4)
实际上,您可以为包,受保护和任务类型以及子程序设置separate
个主体。
所以你可以说
package Large is
procedure A;
procedure B;
end Large;
package body Large is
package Implementation is
procedure A;
procedure B;
end Implementation;
package body Implementation is separate;
procedure A renames Implementation.A;
procedure B renames Implementation.B;
end Large;
with Ada.Text_IO; use Ada.Text_IO;
separate (Large)
package body Implementation is
procedure A is
begin
Put_Line ("large.implementation.a");
end A;
procedure B is
begin
Put_Line ("large.implementation.b");
end B;
end Implementation;
并检查
with Large;
procedure Check_Separate_Implementation is
begin
Large.A;
Large.B;
end Check_Separate_Implementation;
同样,您可以将Implementation
作为子包:
private package Large.Implementation is
procedure A;
procedure B;
end Large.Implementation;
with Large.Implementation;
package body Large is
procedure A renames Implementation.A;
procedure B renames Implementation.B;
end Large;
我能看到的唯一区别是Large
的其他子包可以在子包版本中看到Implementation
但在单独的版本中看不到。
Program Structure section of the Ada Style Guide (2005 edition)强烈建议使用子包而不是子单元,并说(回答你的风格问题)
优先于在包体中嵌套,使用私有子并将其与父体一起使用。
但是,正如您所料,意见会有所不同。您可以阅读本指南的 Rationale 部分,了解它如何适合您的特定情况。
答案 1 :(得分:-1)
关于"正确性"有一个正文(不是规范,你会得到循环依赖)取决于子包,我一直使用它,我发现它非常方便,尤其是实现我的包内部使用的一些复杂的数据结构/服务。 Ada Style guide (2005)在说出
时与我同意使用子包实现子系统
我想这也是你的情况。