私はAdaでプライベート宣言を使用する方法を学び、パッケージングについても理解しようとしています。私は自分のコードをできるだけ短くしようとしました。
メインファイルから始めますrectangular_Form.ads
with Rectangular_Method_1;
package Rectangular_Form renames Rectangular_Method_1;
-- with Rectangular_Method_2;
-- package Rectangular_Form renames Rectangular_Method_2;
これは、2つの実装が可能であり、今のところRectangular_Method_1
選択されていることを示しています。
次に、仕様ファイルがありますRectangular_Method_1.ads
。
package Rectangular_Method_1 is
type Rectangular is private;
procedure Vector_Basis_r (A : in Long_Float; D : out Rectangular);
procedure Set_Horz (R : in out Rectangular; H : Long_Float);
function Get_Horz (R : Rectangular) return Long_Float;
private
type Rectangular is
record
Horz, Vert: Long_Float;
end record;
end Rectangular_Method_1;
とその体Rectangular_Method_1.adb
:
with Ada.Numerics.Long_Elementary_Functions;
use Ada.Numerics.Long_Elementary_Functions;
package body Rectangular_Method_1 is
procedure Vector_Basis_r (A : in Long_Float; D : out Rectangular) is
begin
D.Horz := Cos (A, Cycle => 360.0);
D.Vert := Sin (A, Cycle => 360.0);
end Vector_Basis_r;
procedure Set_Horz (R : in out Rectangular; H : Long_Float) is
begin
R.Horz := H;
end Set_Horz;
function Get_Horz (R : Rectangular) return Long_Float is
begin
return R.Horz;
end Get_Horz;
end Rectangular_Method_1;
そして最後にテストスクリプトtest_rectangular_form.adb
::
with Ada.Long_Float_Text_IO;
with Ada.Text_IO; use Ada.Text_IO;
with Rectangular_Form;
use type Rectangular_Form.Rectangular;
procedure Test_Rectangular_Form is
Component_Horz, Component_Vert, Theta : Long_Float;
Basis_r : Rectangular_Form.Rectangular;
begin
Ada.Text_IO.Put("Enter the angle ");
Ada.Long_Float_Text_IO.Get (Item => theta);
--Vector basis
Rectangular_Form.Vector_Basis_r (A => Theta, D => Basis_r);
Ada.Text_IO.New_Line;
Ada.Text_IO.Put("rhat_min_theta = ");
Ada.Long_Float_Text_IO.Put (Item => Rectangular_Form.Get_Horz (Basis_r), Fore => 3, Aft => 5, Exp => 0);
Ada.Text_IO.Put(" ihat + ");
Ada.Long_Float_Text_IO.Put (Item => Rectangular_Form.Get_Vert (Basis_r), Fore => 3, Aft => 5, Exp => 0);
Ada.Text_IO.Put (" jhat ");
end Test_Rectangular_Form;
質問(に適用test_rectangular_form.adb
):
A.Horz
コンポーネントを入手してA.Vert
直接使用しています
Rectangular_Form.Vector_Basis_r (A => Theta, D => Basis_r);
後で使用するだけで水平コンポーネントと垂直コンポーネントにアクセスできます
Rectangular_Form.Get_Horz (Basis_r)
と
Rectangular_Form.Get_Vert (Basis_r)
メソッドGet_Horz
を使用していて、プライベートの長方形の水平コンポーネントと垂直コンポーネントGet_Vert
にアクセスして いるので、これは問題ないようです。ただし、コマンドラインから直接変数を読み取り、を使用してその水平成分と垂直成分を見つけています Theta
Rectangular_Form.Vector_Basis_r (A => Theta, D => Basis_r);
長方形のコンポーネントA.Horz
とA.Vert
私が定義したようにプライベートである場合、コマンドを発行する前にメソッドを使用する必要がないのはなぜですか?set_Horz(A)
set_Vert(A)
Rectangular_Form.Vector_Basis_r (A => Theta, D => Basis_r);
PS:コードを短くするためにSet_Vert
との関数Get_Vert
は省略されました。
どうもありがとう...