甲府方重信Blog

...Shigenobu Koufugatas Blog

  • Increase font size
  • Default font size
  • Decrease font size
Error
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
Home 業務日誌 Adaプログラミング Adaチュートリアル セクション12.7 - アクセス変数 ひとつにまとめる

Adaチュートリアル セクション12.7 - アクセス変数 ひとつにまとめる

E-mail Print PDF

セクション 12.7 - アクセス変数: すべてをまとめる

この時点でプログラマーは、たくさんの異なった機能について見てきました。プログラマーは、アクセス変数についての情報も見てきましたし、前のレッスンにおいては制御された型とジェネリックについての情報について見てきました。ここで疑問となるのは。どのようのこれら全てを動かしたらよいのか、ということです。

これらの異なった機能を組み合わせてどのように動かすかをプログラマーに見せるために、私はこれらの違った概念を組み合わせたサンプルパッケージを作成しました。私はプログラマーに十分な情報を与えるように配慮してはいますが、プログラマーは現時点では、全ての細かなニュアンスを理解する必要はありません。 このサンプルパッケージを最初に読む時には、大きな絵を理解するように集中してください。

私が開発したこのサンプルパッケージは、ジェネリックなスタックパッケージです。これは。私たちがジェネリックスのセクションで見たサンプルコードに似ています。さて、しかしながら、私たちはunboundedなスタックを実装するためのアクセス型を使うことが出来ます。 - 私たちはもはや、いかなる特定のサイズにも制限される必要がないのです。私たちは、ユーザーにスタックに他のスタックを割り当てることを許す事が必要な場合があります。その場合、私たちは「Ada.Finalization」を使い、制御された型の子としてStack型を実装し、そこで私たちはどのように代入と、ファイナライズが起きるかを制御することができます。(制御された型については、レッスン7の最後のセクションで議論しています)

私たちは、以前とおなじようにプッシュとポップの操作を持たせる事にしましょう。ここに、スタックの内容を消去するために「Empty」操作を付け加えましょう。そして、論理関数「Is_Empty」は、そのスタックがデータを持っていない際にTrueを返すことにしましょう。さらに、私たちは2つのスタックが等しければTrueを返す「=」操作を付け加えることにしましょう。ここで等しいというのは。それぞれが同じ長さ。同じ順序で同じデータを持っている場合を指します)

再利用可能なデータ型を入れ替えるための「swap」操作を付け加えることを常に検討することを推奨しておきます。 [Wheeler 1992]のペーパーでは、swap操作はアクセス型を利用すれば非常に効果的に実装することが可能となるのです。さらに、「Length」操作もプログラマーがスタック上にいくつのアイテムがあるかを調べることができるように定義しておきましょう。新しい型「Natural」に注意してください。 Naturalは、ゼロで始まる整数型の事前定義のサブ型です。私たちは、スタック上にマイナス数のオブジェクトを持つことはできないので、整数型を返すよりも。Naturalを返す方がより適切なのです。

プログラマーがunboundedな型を実装するときは、、ほぼ常にデフォルトのAdjustとFinalizeプロシージャーを上書きするべきです。 - もしそうしていないなら、プログラマーは何が間違えている可能性があります。私たちがAdjustを上書きしない場合は、代入は2つの「異なった」スタックに同じデータノードを指すことになります。結果として、私たちが行う全ての後でのファイナライズは、他のスタックに影響することになります。もしそれらが、そうであるべきでないかもしれなくても。もし私たちがFinalaizeを上書きしなかった場合には、私たちは解放すべきデータノードを解放できない可能性があります。

上記の条件が与えられた後。ここではGeneric_Stackに対するジェネリック・パッケージのスペックを掲載します。


ここで行われたトリッキーな事に注意してください。 - ノードは、パッケージの内部では完全に定義さえされていません。ノードは、何かを入れたり出したりもしていませんので、私たちは不完全な型定義のままにしておくことが出来ます。そして。ジェネリックパッケージのボディにおいて定義を完成するのです。

これはジェネリックですので、私たちはこれを利用するために特定の型にジュネリックを実体化しなければなりません。テストの目的のために、整数をスタックするようにジェネリックを実体化してみましょう。


そして最後に、短いテストプログラムでこのジェネリックのスタックを使ったデモンストレーションを試してみます。


このジェネリックパッケージのボディは、私たちが議論してきたアクセス型を使ってジェネリック・パッケージ宣言によって定義された操作を実装しています。自由にこのpackage body of Generic_Stackを試して、そのpackage specificationおよびsample instantiation (that creates a Stack of Integers)あるいは、他の instantiation (creating a Stack of Stacks of Integers)、およびshort demonstration programlonger test programを比較し、その程度を通じてスタックに入れてみてください。

出典: http://www.adahome.com/Tutorials/Lovelace/s12sf.htm

Last Updated on Thursday, 10 May 2012 12:54  

ニュース速報

ウェブサイトについてひとつ言えば、それは常に変化するということです!Joomla!は記事やコンテンツ、イメージやビデオ等の追加を簡単に行えます。サイト管理者は'コンテンツ内'に表示される '編集' リンクをクリックすることでコンテンツを編集し管理することができます。ウェブマスターはまた、サイトを完全にコントロールできるグラフィカルなコントロールパネルからコンテンツを編集できます。