1.修正方法1(パーツCoulomb)

必要なフィーチャー・ソース・コードだけを生成し、コーディングする場合

(見栄えの悪いソース・コードの作成)

第8章で作成したパーツCoulombでは、アクションcalc(int n)の引数によって、

下記のように求める値を指定していた。

  n=1の場合、forceが求められる。
  n=2の場合、charge1が求められる。
  n=3の場合、charge2が求められる。
  n=4の場合、distanceが求められる。
  n=5の場合、dielectricが求められる。

しかし、n値とそれぞれとの関係が直感的に分からないため、下記のように

変更する。

  s="F"の場合、forceが求められる。
  s="Q1"の場合、charge1が求められる。
  s="Q2"の場合、charge2が求められる。
  s="R"の場合、distanceが求められる。
  s="Epsi"の場合、dielectricが求められる。

 

1.WorkFrame IDEアイコンをダブルクリック後、「既存のプロジェクトをオープンします」を

  クリックする。

  ElectMag.IWPをダブルクリックする。

2.WorkFrameのElectMag.vbbをダブルクリックし、ビジュアル・ビルダーを起動する。

3.非ビジュアル・パーツのCoulombをダブルクリックする。

4.「パーツ・インターフェース・エディター」のアクションを選び、calcを削除する。

5.calcと入力し、「デフォルト」をクリックする。

6.アクション・メンバー関数の引数にIString sと入力する。

  [ virtual int calc(IString s)とする。]

7.優先のページで、アクションcalcを追加する。

8.「ファイル」->「保管および生成」->「フィーチャー・ソース」をクリックする。

9.「Coulomb−フィーチャー・ソース・コードを作成します」ダイアログにおいて、

  今回追加するのはアクションcalcだけであるので、メンバー関数の

  virtual int calc(IString s)だけを選択し、「選択されたものの生成」を

  クリックする。

10.「プロジェクト」->「編集」をクリックし、Coulomb.hpvを開く。

   下記のようなコードが書かれている。

   // Feature source code generation begins here...

    古いコードが書かれている。

   // Feature source code generation ends here.

   // Feature source code generation begins here...

    public:

    virtual int Coulomb::calc(IString s)

   // Feature source code generation ends here.

   最初の部分が以前に生成されたコードであり、下が今回作成されたアクション

   calc(IString s)に関するコードである。

   このように、VisualAge C++ではコードが追加される。

11.古いのコードのvirtual int calc(int n)を削除する。

12.セーブする。

13.Coulomb.cpvを開く。

14.下記に追加されたコードを示す。

   

15.最初のコードint Coulomb::calc(int n)の{ }内をコピーし、

   下記のように修正する。

// Feature source code generation begins here...
 
int Coulomb::calc(IString s)
{
 double epsilon0=8.85418e-12; // F/m
 double pi=3.1415927;
 
 if( s=="F" ) // 力を求める    修正個所
 {                
修正個所
  if( iDistance==0.0 || iDielectric==0.0 ) // 距離または比誘電率がゼロのとき、
  { // 下記のコメントのダイアログを表示する
   IString errorTxet = IString("距離または比誘電率がゼロです。");
   IException exc( errorText, 0, IException::unrecoverable );
   ITHROW( exc );
  }
  setForce( iCharge1*iCharge2/4.0/pi/epsilon0/iDielectric/iDistance/iDistance );
 }                
修正個所
 
 if( s=="Q1" ) // 電荷1を求める  
修正個所
 {                 
修正個所
  if( iChrage2==0.0 ) // 電荷2がゼロのとき、
  { // 下記のコメントのダイアログを表示する
   IString errorTxet = IString("電荷2がゼロです。");
   IException exc( errorText, 0, IException::unrecoverable );
   ITHROW( exc );
  }
  setCharge1( 4.0*pi*epsilon0*iDielectric*iDistance*iDistance/iCharge2 );
 }                 
修正個所
 
 if( s=="Q2" ) // 電荷2を求める  
修正個所
 {                 
修正個所
  if( iChrage1==0.0 ) // 電荷1がゼロのとき、
  { // 下記のコメントのダイアログを表示する
   IString errorTxet = IString("電荷1がゼロです。");
   IException exc( errorText, 0, IException::unrecoverable );
   ITHROW( exc );
  }
  setCharge2( 4.0*pi*epsilon0*iDielectric*iDistance*iDistance/iCharge1 );
 }                 
修正個所
 
 if( s=="R" ) // 距離を求める   
修正個所
 {                
修正個所
  if( iForce==0.0 || iDielectric==0.0 ) // 力または比誘電率がゼロのとき、
  { // 下記のコメントのダイアログを表示する
   IString errorTxet = IString("力または比誘電率がゼロです。");
   IException exc( errorText, 0, IException::unrecoverable );
   ITHROW( exc );
  }
  setDistance( sqrt( fabs(iCharge1*iCharge2/4.0/pi/epsilon0/iDielectric/iForce) ) );
 }                 
修正個所
 
 if( s="Epsi" ) // 比誘電率を求める 
修正個所
 {                 
修正個所
  if( iDistance==0.0 || iForce==0.0 ) // 距離または力がゼロのとき、
  { // 下記のコメントのダイアログを表示する
   IString errorTxet = IString("距離または力がゼロです。");
   IException exc( errorText, 0, IException::unrecoverable );
   ITHROW( exc );
  }
  setDielectric( fabs(iCharge1*iCharge2/4.0/pi/epsilon0/iForce/iDistance/iDistance) );
 }                 
修正個所
 return 0;
}
 
// Feature source code generation ends here.

16.最初のコードint Coulomb::calc(int n)全体を削除する。

17.セーブする。

18.今後パーツCoulombを利用できるように、覚え書きCoulomb.htmlを下記のように

   修正する。

パーツCoulombの説明

クーロンの法則

 force=charge1*charge2/(4*pi*epsilon0*dielectric*distance*distance)

  変数

   電磁力:force [N]
   電荷1:charge1 [C]
   電荷2:charge2 [C]
   距離:distance [m]
   比誘電率:dielectric

  定数

   円周率:pi=3.1415927
   真空誘電率:epsilon0=8.85418e-12

 

五つの変数のうち、四つを与え、残りの一つが求められる。

 

Coulombパーツ

属性

タイプ

コメント

優先

force

double

電磁力

O

charge1

double

電荷1

O

charge2

double

電荷2

O

distance

double

距離

O

dielectric

double

比誘電率

O

アクション

タイプ

パラメータ

 

calc

int

IString s

O

 

calc(IString s)について

  s="F"の場合、forceが求められる。
  s="Q1"の場合、charge1が求められる。
  s="Q2"の場合、charge2が求められる。
  s="R"の場合、distanceが求められる。
  s="Epsi"の場合、dielectricが求められる。

 すべてにおいて、分母がゼロになる場合、例外処理を行う。

 計算に成功すると0を戻す。

 例外処理のメッセージが含まれている。

 

必要なファイル

ElectMag.vbb

Coulomb.cpv

Coulomb.hpv