豊田 孝

 本連載は,10行程度の単純なサンプル・プログラムを通して,.NETの基礎を具体的に紹介します。紹介するサンプル・プログラムはC,C++,C#,Visual Basicの4種類の言語で記述し,言語間の相違なども必要に応じて説明していきたいと考えています。

 第1回目の今回は,.NETとはそもそも何のか,を考えます。

図1●マイクロソフトが公開している.NETの定義

本連載における.NETの定義

 「そもそも.NETとは何か」という質問に対して,マイクロソフトは次のような回答文をインターネット上で公開しています(図1[拡大表示])。ただし,対応する英語サイトではこの項目が削除されています。

“簡単に言えば,Microsoft.NETは,ソフトウエアをサービスとして提供するためのMicrosoftの戦略です。”

 この公開回答の内容はかなり抽象的ですが,「ソフトウエアはサービスとなるべきである」という姿勢を明確に打ち出している点は読み取れます。私はこの回答内容を次のように解釈し,本連載における「.NET」定義といたします。

(1)プログラム開発の歴史を振り返ると,従来は「関数」と呼ばれる再利用部品を開発し,それらを組み合わせてソフトウエアを開発していた。

(2)その後,「関数」ではなく,「クラス」と呼ばれる再利用部品を組み合わせる方向にプログラミング・パラダイムがシフトした。

(3)そして現在,インターネットが爆発的に普及するとともに,常時接続環境が日々充実している。このような高度なインターネット社会が到来した今,個々のマシン内に存在するクラスだけではなく,インターネット空間内に散在しているクラスを組み合わせてプログラムを開発しようという流れが出てきた。マイクロソフトはこのような時代における企業戦略を.NETと命名し,インターネット空間に対してクラスを提供するプログラムを「サービス」あるいは「Webサービス」と呼んでいる。

 この.NET定義文を一読した皆さんは,これまでの経験に応じて,さまざまな疑問を持つことでしょう。そのような疑問の中には,次のような項目が含まれているかもしれません。

・「関数」とは何か?
・「再利用部品」とは何か?
・「再利用部品を組み合わせる」ということはどういうことなのか?
・「クラス」とは何か?
・「クラス」が登場したことにより,「関数」は不要になったのか?
・「クラスを組み合わせる」ということはどういうことなのか?
・「インターネット空間に散在するクラスを組み合わせる」ということはどういうことなのか?
・「インターネット空間にクラスを提供する」ということはどういうことなのか?

 皆さんがこれらの疑問の1つでもお持ちでしたら,本連載を最後まで読まれるとよいと思います。それでは,上の.NET定義文をより具体的に理解するために,次のようなコードを見ていただきましょう。


<%@ WebService Language="vb" Codebehind="Service1.asmx.vb"
    Class="WebService1.Service1" %>
<%@ WebService Language="c#" Codebehind="Service1.asmx.cs"
    Class="WebService1.Service1" %>

 皆さんは,このようなコードをどこかで目にしているかもしれません。そのときには,意味が理解できなかったかもしれませんが,このコードは次のようなことをはっきり示しているのです。

“このプログラムはWebサービスであり,インターネット空間に「WebService1.Service1」というクラスを提供する。このクラスは「Service1.asmx.vb」(あるいは「Service1.asmx.cs」)というプログラムに入っている。クラスを含むプログラムはvb(Visual Basic)(あるいはcs(C#))というプログラミング言語で開発している。このプログラムは実際のところはWindows固有のコードであるが,インターネット空間では前面に出ず,私たちWebサービスの後方支援に回っている(CodeBehind)。”

.NETでもクラスは重要

 このコードの意味と,.NET定義の内容,そして,先に挙げた疑問点リストをここでもう一度比較しながら,眺めてください。多くの人は,.NETに対して,次のような結論を得ることができるのではないかと思います。

(1).NETというのはMicrosoftの企業戦略に付けられた呼び名である。このため,この戦略の中から開発されるすべての製品は.NETという文字列を冠するはずである。事実,Visual Studio.NET,ASP.NET,ADO.NET,Visual Basic.NET,Visual C#.NETなどの製品が多数出荷されている。

(2)Webサービスの実体はクラスであることを忘れるべきではない。この視点に立てば,多数の出荷製品は,クラスを効率的に開発し,かつ,それらをインターネット空間に無理なく提供するためのツールにすぎない。大切なのは,クラスの概念,その意味,そして,その役割を,基礎から理解することである。

 今回は連載第1回ということもあり,本連載における「.NET」とは何かを定義しました。最終的に出てきた結論は,クラスの基礎をしっかり身に付けるというものでした。クラスの基礎を身に付けるためには,その前に,「関数」について知っておく必要があります。このため,次回は,C言語プログラムを紹介し,関数とは何かを考えてみるとことにします。次回紹介するC言語プログラムは,第3回連載で.NET環境に対応させる予定です。C言語プログラムと「.NET対応C言語プログラム」との間には,いったいどのような違いがあるのでしょう?

 それでは,次回またお会いいたしましょう。ごきげんよう!