Ada95子子单元可以用于分离代码的可维护性吗?

时间:2016-06-09 13:10:38

标签: ada

我创建了一个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?

2 个答案:

答案 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)在说出

时与我同意
  

使用子包实现子系统

我想这也是你的情况。