人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Javaのサーバーサイドの技術についてお聞きします。
(1)サーブレットでは、インターフェースをオブジェクトそのもののように扱っているように思えるのですが、どういう仕組みで動いているのでしょうか?「内部的に実装されている」ということらしいのですが、まだうまく理解できません。
(2)ウェブアプリケーションをつくる設計思想(?)としてMVCというものがあることがわかりました。それでは他にどんなものがあるのでしょうか。それらのメリットデメリットなどもあわせて教えてください。

●質問者: javabenkyo
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Java MVC アプリケーション インターフェース ウェブ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● interview
●5ポイント

下記のサイトをご参考いただければと思います。

http://www.javaroad.jp/servletjsp/index.html#servlet

◎質問者からの返答

私の質問があいまいだったせいかと思いますが、ご紹介いただいたサイトを見てもちょっとわかりませんでした。下に書きましたコメントを見ていただきまして再度回答願えればありがたいです。


2 ● b-wind
●60ポイント

(1)単純にインターフェイスと言うものの利点を理解されていないように思えます。

それぞれは普通のクラスのオブジェクトですよ。


Servlet コンテナとしてよく使われる Tomcat の場合、doGet(),doPost() メソッドの引数に渡されるオブジェクトは実際には以下のクラスのインスタンスになります。

Request (Tomcat API Documentation)

Response (Tomcat API Documentation)

当然どのようなオブジェクトが渡されるかはアプリケーションサーバーごとに違います。

メソッドのシグネチャがクラスであるとアプリケーションサーバーを変更するたびに再コンパイルが必要になってしまいます。

これを防ぐ為、必要なメソッドを定義したインターフェイスを用います。


(2)Web アプリケーションでは MVC 以外のパターンはほとんど見受けられません。

◎質問者からの返答

(1):かなりわかった気がしました。つまり、まず各コンテナがHttpServletRequestインターフェースを実装したクラスを用意すると。それでサーブレットクラスのメソッドの引数にインターフェースを書いておき、実際はインターフェースを実装したクラスが渡されていると。インターフェースはそれを実装したクラスのオブジェクトを代入することができるので問題なく使用できる。引数にインターフェースを使用することでコンテナごとにプログラムを書き換える必要がなくなると。こういうふうに理解しました。ありがとうございます。

(2):他の方の意見も一応お聞きしたく思います。


3 ● flashrod
●80ポイント ベストアンサー

(1)オブジェクト指向なプログラミングではインターフェース(仕様)に対してインプリメンテーション(実装)をするものなんです。これは仕様と実装を分離するものなんです。ある仕様が一つ決まっても、実装は複数ありえるわけです。オブジェクトを扱うときはそのオブジェクトを実装したクラス(型)を生で使うのではなく、インターフェースを通じて使います。そうするとインタフェース経由でオブジェクトを使う限り、複数ある実装の違いを意識せずに使うことができます。

インターフェース経由で普通のオブジェクトのように扱えるのが気持ち悪いといわれると困るのですが、そうできるようにするためのものなので気持ちよくなっていただくのが一番です。

サーブレットに限った話ではなく、サーブレットでは良く見かけるだけです。サーブレットコンテナは、J2EEの仕様で決まっているわけですが、J2EEの仕様を満たしていれば、どんなコンテナを作ってもいいわけです。それで各社が様々なサーブレットコンテナの製品を世の中に出すことができます。

(2)プログラムというのは何らかの問題解決をするものです。大きな問題を解決するときは、小さな問題に分割して解決します。MVCはその分割する考え方の一つです。表示する部分(V)と、いろんな表示形式に関係ないモデルの部分(M)と、モデルに変更があったときビューに反映したりビューにインタラクションしたときモデルに反映するなどの部分(C)に分けて考えましょう、というものです。役割り分担をしているわけです。

この「分けて考える」というのはあらゆるプログラミングの基本です。他には上に掲げたように「仕様と実装に分ける」というのもあります。「抽象と具象に分ける」「全体と部分に分ける」「中心的関心事と横断的関心事に分ける」「データ構造とアルゴリズムに分ける」など、いろいろあります。どれも、大きな問題を一発で解決するのは難しくても、小さい問題に分けたら簡単、というものです。

具体的なパターン名はデザインパターン本でも読んでください。

◎質問者からの返答

返信が前後しました。(1)、ありがとうございます。

(2)こちらもありがとうございます。「分けて考える」というプログラムの基本的な考え方ですか、納得しました。最後、急にぶっきらぼうになった気がしますが、「デザインパターン」なる分野の本を読めばわかるということですね。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ