実装とサーバサイド
Java
第
13講
オブジェクト指向概論
立命館大学
情報理工学部
黄 宏軒
13.1 Javaによる実装
n
フォワードエンジニアリング
qUMLによる表現をプログラミング言語による記述に変換
n
リバースエンジニアリング
qプログラミング言語の情報を
UMLモデルに変換
User -name:String +getName():StringUML
public class User{ private String name; public String getName() {
return name; } }
Javaプログラム
User -name:StringUML
public class User{ private String name; public String getName() {
クラス定義の実装
UML
Java
クラス
class
パッケージ
package
汎化
extends
抽象クラス
abstract class
インタフェース
interface
実現
implements
package sample.domain; public class Cart {}
public interface OrderService { }
public class OrderServiceSupport implements OrderService {
}
public class OrderServiceImpl extends OrderServiceSupport {
属性と関連の実装
1.
属性⇒インスタンス変数またはクラス変数へ
2.
多重度1の関連
public class OrderDetail {
private static int COUNT_MAX = 10; protected int qty;
private int totalPrice; }
public class CartItem {
protected item Item; }
3.
集約,コンポジション⇒(関連と同じように)
インスタンス変数へ
4.
多重度が*の関連⇒配列またはコレクションで
public class Class {
private Teacher teacher; private Student[ ] student; }
5.
多重度が*対*の双方向関連⇒
関連クラスにするのが良い
public class Write {
private Author author; private Book book; public class Author {
private Write[] write; }
n
オブジェクト図を描いているととわかりやすい
著者
書籍
執筆
1 1 0..* 1..*Aさん:著者
Aさん:著者
Bさん:著者
Cさん:著者
ああ:書籍
いい:書籍
うう:書籍
ええ:書籍
おお:書籍
=執筆オブジェクト
操作の実装
n
UMLの操作⇒Javaのメソッド
public class Customer {
public static int ORDER_MAX = 10; private String customerID;
public void addOrder(Order order) { }
public Collection<Order> getOrders() { return this.orders;
n
シーケンス図のメッセージ送信⇒送信先のメソッド
public class OrderService {
public void order(String custID) {
Cart cart = cartDao.findByCustID(custID); Order order = cart.createOrder();
} }
13.2 Webアプリケーション
n
静的
Web
例:ホームページ
n
動的
Web
例:乗換え案内
ページの要求
ページの返却
HTMLファイル
処理の要求
結果の返却
乗車駅・下車駅取得
最短経路探索
結果表示ページ作成
CGI
(
Common Gateway Interface)
n
Webブラウザからの要求に応じて,対応するプログラムを
起動し,実行結果を
Webブラウザに返すしくみ
http://foo.com/
検索入力ページ
search.plプログラム
を起動
キーワード
検索
http://foo.com/cgi.bin/search.pl
検索結果
リスト
ページの枠に
検索結果を埋め込む
検索結果ページ
別プロセスとし
て起動される
利用者
の
PC
サーバー
13.3 Javaサーブレット
サーブレット
スレッドとして
起動される
サーブレットコンテナ
サーブレット
サーブレット
ページの枠に
検索結果を埋め込む
HTTP リクエスト
HTTP レスポンス
Webサーバソフト
n
Apache
qWebサーバ(HTTPリクエストを処理する)ソフト
qCGI機能を持つ
n
Apache Tomcat
qJavaサーブレットやJSPを実行するための
サーブレットコンテナ(エンジン)
qApacheと連携させて動かすこともできる
n
IIS
qMicrosoftが提供するWindows用Webサーバソフト
qASPやASP.NETを実行することができる
Javaサーブレットの例
package jp.hattori.objectdev; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class SampleServlet extends HttpServlet{private static final long serialVersionUID = 1L;
protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=Shift_jis"); request.setCharacterEncoding("Shift_JIS");
String str = request.getParameter("text1"); PrintWriter out = response.getWriter(); out.println("<html><body>"); out.println(str); out.println("<h3>あなたは,<blink>「" + str + "」</blink>と書きました.</h3>"); out.println("</body></html>");
HttpServletクラスを
継承してサーブレットを
作成
HTTPリクエスト(POST)
により起動されるメソッド
HTTPリクエストから
パラメータを取り出す
出力する
ページの作成
出力先の取得
doGet
( )と
doPost
( )
n
HTTPリクエストに対応して実行されるメソッド
半径=
4
送信
Public void doGet (request, response) {
// リクエストからデータを取り出す
request.getParameter(“radius”);
//HTML出力の生成
response.getWriter( );
半径=
4
面積=
50.24
HTTPリクエスト
HTTPレスポンス
デプロイメント記述子
web.xml
<servlet>
<description></description>
<display-name>SampleServlet</display-name>
<servlet-name>SampleServlet</servlet-name>
<servlet-class>jp.hattori.objectdev.SampleServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SampleServlet</servlet-name>
<url-pattern>/sample</url-pattern>
</servlet-mapping>
サーブレットクラス
サーブレット名
サーブレット名
対応する
URL
13.4 JSP
n
Javaサーブレット
q
Javaプログラムの中でHTMLを生成
n
JSP(Java Server Pages)
q