甲府方重信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チュートリアル セクション16.4 - JavaとAda

Adaチュートリアル セクション16.4 - JavaとAda

E-mail Print PDF

セクション 16.4 - JavaとAda

SunのJava技術は、「ホット」なトピックになりつつあります。JavaはWebをブラウジングするだけで、ユーザーにプログラムを実行させることが可能となっています。Javaを使うと、Webユーザーは、洗練されたユーザー・インターフェースと任意のデータ・フォーマットを取り扱うことが出来るようになります。 (データと、そのデータを取り扱うプログラムを同時に送信することが出来るのです。) Javaはコンピューター・プラットフォームに独立したソフトウェアを配布するために使用することが出来ます。(例えば、IBM互換PC、アップル・マッキントッシュ、任意のUnixマシン上で同じソフトウェアを動作させることが出来ます。)

Adaを使用して、Javaプログラムを作成することが出来ることがわかっています。 これが何を意味するのか理解するために、私たちは最初にいくつかの用語を定義する必要があります。

Javaの用語

プログラマーは、Javaを使用してアプリケーションとアプレットを開発することができます。:

  1. アプリケーションは、従来型のプログラムです。ユーザーは、Javaアプリケーションを他のアプリケーションと同じような方法でインストールします。そして、Javaアプリケーションは、ファイルを読んだり、書いたりすることができます。ひとつのJavaアプリケーションで、多くの異なったコンピューター・プラットフォーム上で動作させることが可能です。
  2. アプレットとは、アプレットを含むページを見たWebユーザーは、自動的にアプレットが立ち上がるようなプログラムです。ユーザーは、アプレットをインストールすることはありません。; 実際のところ、ユーザーは、アプレットを動作させるかどうかを尋ねられることすらありません。セキュリティの問題になることから、このままにしておくと、アプレットは特定のタスクの実行からは制限されます。この時点では、アプレットは、ローカル・ディスクのファイルへの読み書きは通常出来ません。また、印刷も出来ません。そして、アプレットができるのは、アプレットがダウンロードされたコンピューターとのネットワーク通信のみに限定されます。特定のケースでは、ユーザーはアプレットに付加的な権限を許可することがあります。; 鍵となるのは、アプレットは通常、セキュリティの問題になる事柄からは制限されているということです。

Sunによって開発されたJavaテクノロジーは、四つのコンポーネントに分割することが出来ます。:

  1. Java仮想マシン(JVM)とクラス・ファイルに関する仕様。このJVMは、「クラス」ファイルに格納されたプログラムを実行する抽象的なコンピューターです。このJVMは、多くの異なる方法によって実際のコンピューターに実装することができます。そして次の点があります。: この抽象的なコンピューターをあなたのコンピューターが公正に再作成する限りにおいて、JVMはクラス・ファイルに格納されたプログラムを実行することが出来ます。例えば、JVMがWebブラウザーに作りつけられたインタープリターとして実装されたとしても、あるいは、クラスファイルを解釈する分かれたプログラムとして実装されたとしても。プログラマーのコンピューターは、クラス・ファイルを実行の直前にそのマシンに対して特定の実行プログラムに変換されることによって実装されているかもしれません。(これは、「ジャスト・イン・タイム」コンパイラーと呼ばれています)。実際、プログラマーのコンピューターのハードウェアは、JVMを直接に使用するかもしれません。プログラマーは、JVMの実装を持っている限り、Javaプログラムを実行することが出来ますし、それはJavaプログラムがクラス・ファイルに格納されているからなのです。クラス・ファイルは、別名Jコード・ファイルと呼ばれることがあります。
  2. Java言語。Java言語は、オブジェクト指向のコンピューター・プログラミング言語で、C++とObjective-Cの書式に似ています。また、Java言語はAdaにも安全性の点において非常によく似ています。 (たとえば、どちらもポインターを持ちません)そして、強いSmalltalkの影響がはっきりと感じられます。
  3. コンパイラーは、クラスファイルを生成します。 JVMはクラス・ファイルを実行します。そのため、プログラマーはクラス・ファイルを生成する方法が必要です。Sunは開発者を擁しており、コンパイラーにJava言語で書かれたプログラムをJavaのクラス・ファイルを生成するようにコンパイルさせるのです。その他のベンダーは、またも同じようにクラス・ファイルを生成するコンパイラーを開発しています。
  4. Javaライブラリー。Javaテクノロジーは、他の有益なコンポーネントと同様に、シンプルなプラットフォーム独立のグラフィカル・ユーザー・インターフェース(GUI)に対するコンポーネントのセットを含んでいます。

多くの人々は、「Java」という用語を、これらの異なったコンポーネントや、テクノロジー全体に対して、それぞれ使っています。プログラマーは、これらの文脈によってどのような意味なのかを見極める必要があります。鍵となるポイントは、人々が「Javaプログラムを実行する」時、彼らは実際には、自分たちのバージョンのJVMの上でクラス・ファイルの集合を実行しているのだということです。

Adaを用いて、Javaのプログラムを生成することが可能なので、Adaコンパイラーは、Adaコードをその入力として受付け、Javaのクラス・ファイルを生成します。 Intermetrics社のAda compiler、AppletMagic、がそうです。その他のAdaコンパイラーも後に続くでしょう。

Javaのクラス・ファイルを通じて、プログラム同士はお互いのことについて知るのみなので、Java言語で書かれたプログラムとAda言語で書かれたプログラムはお互い自由に通信することが出来ます。Javaプログラムは、彼らのクラス・ファイルを見ることにより、Adaプログラムを容易に呼び出すことが出来ます。Adaプログラムに既存のJavaプログラムを呼び出すことを許すためには、AdaプログラムはAdaスペックが必要となります。AppletMagicは、java2adaと呼ばれるツールを含んでおり、クラス・ファイルからAdaのスペックを生成します。そして、他のAdaからJavaのコンパイラーもおそらく、同じようなツールを含んでいるでしょう。

[Relationship of Java Technology Components]

JavaとAdaの対応

AdaとJavaでは多くの概念がかなり近いです。Javaのプリミティブ・データ型は、通常単にAdaの型に対応します。: Javaの「boolean」はAdaの「Boolean」に対応し、Javaの「float」はAdaの「Float」に対応し、Javaの「char」はAdaの「Wide_Character」に対応し、Javaの「int」はAdaの「Integer」に対応します。その他全てのJavaのデータ型は、参照渡しであり、これはAdaのアクセス型を通じたデータ渡しに対応します。AdaもJavaも階層型パッケージをサポートします。

Javaのライブラリーは、Javaテクノロジーの心臓部です。そのため、どのようにAdaプログラムがJavaのライブラリー・コンポーネントを呼び出すことができるかを定義する標準記法が必要になります。これにより、プログラマーがJavaブックにおいてJavaライブラリー・コンポーネントについて調べる時、プログラマーはどのようにAdaから呼び出すかを容易に決めることが出来ます。AppletMagicによって使われている記法は、Javaパッケージ「P」におけるJavaクラス「C」をAdaパッケージに変換する際には、Adaパッケージ「P.C」という名前を使っています。Adaパッケージの内部では、C_Objという名前のAdaのタグ付け型とC_Ptrという名前のアクセス型を使っています。返り値のないJavaのメソッド(Javaのメソッド名ではvoidを前においています)は、Adaのプロシージャーとなります。一方、何か返り値があるJavaのメソッド(メソッド名の前になにかしらの型を取ります)はAdaの関数となります。Javaのメソッドは、「static」として定義されない限り、取り扱うオブジェクトを識別する初期パラメーターを明示的に持ちます。; これは、最初の追加されたパラメーターの型が「access CLASS_BEING_DEFINED_Obj」であるAdaのサブプログラムに変換されます。その他全ての引数は、Javaのプリミティブ型であれば対応するAdaの型に、もしJavaのクラスであれば、CLASS_NAME_Ptrとなります。

たとえば、Javaパッケージ「java.applet」におけるJavaクラス「Applet」の省略形の定義を示します。「applet」というフレーズが二つの意味で使われているので、混同しないようにしてください。; Javaパッケージ「java.applet」は、一連のクラスを含みます。そのクラスには「Applet」クラスが含まれます。Java言語では、Appletクラスは次のようになります。:

 package java.applet;
 public class Applet extends Panel {
   public void init();  // initialize the Applet.
   public boolean IsActive();
   public void resize(int width, int height);
   public Image getImage(URL url);
   public void showStatus(String msg);
 }

これは、次のAdaパッケージに翻訳されます。:

 with java.awt.Panel; use java.awt.Panel;  -- Package with Parent Type.
 with java.lang.String; use java.lang.String;  -- Java Strings.
 with java.net.URL; use java.net.URL;

 package java.applet.Applet is
  type Applet_Obj is new Panel_Obj with null record;
  type Applet_Ptr is access all Applet_Obj'Class;

  procedure init(Obj : access Applet_Obj); -- initialize the Applet.
  function isActive(Obj : access Applet_Obj) return Boolean;
  procedure resize(Obj : access Applet_Obj; width : Integer; height : Integer);
  function getImage(Obj : access Applet_Obj; url : URL_Ptr) return Image_Ptr;
  procedure showStatus(Obj : access Applet_Obj; msg : String_Ptr);
 end java.applet.Applet;

さて、プログラマーはこれらがどのように対応するかを見てきたわけですが、プログラマーは、AdaからJavaライブラリーのルーチンを呼び出したり、上書きしたりすることが出来るようになります。私が示唆しているのは、プログラマーがAdaでJavaプログラムを書こうとするなら、自身のパッケージに対して同じ規約を使うように心がけるべきだということです。; 一方で、多くの場合、それは必要ないのですが、同じ規約を使うことは自身のプログラムのフォームを統一し、理解しやすくすることにつながります。ここで記述した対応は、AppletMagicからのものではありますが、しかしそれは他のあらゆるAdaコンパイラーにおいても、Javaを生成する際に、同じ規約を用いるべきであるというのは合理的なのです。 (これらの規約は、Ada 95の設計者によって定義されたものです。)

コンストラクタについての情報を含む、JavaとAdaの対応についてのより仕様に関する対応は、次の論文に記述されています。Tucker Taft [1996]JavaライブラリへのAdaインターフェースについての文書が公開されています。さらに詳しい、Ada/Javaの情報は、Home of the Brave Ada Programmers' Java sectionSIGAda Web Working group pageに見ることが出来ます。上記に記述したように、Intermetrics社のAppletMagicについての情報も有効です。Javaについての一般的な情報については、 Java FAQSun's Java siteに見ることが出来ます。Javaアプレットのサンプルの巨大なコレクションが、Gamelanで公開されています。

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

Last Updated on Wednesday, 22 August 2012 17:31  

ニュース速報

とりあえず、「改訂第二版 CentOSサーバー構築バイブル」の12章にCentOSでのSELinuxの設定方法について記述がある。

一般的に、使い込むうちに覚えるものだと思うが、この本だけだと、仕組みについてはよくわからない。

2004年頃の書物なら出版されているのだが、もう中古でないと手に入らない模様。