Javaとは?
•
•
•
•
•
•
•
•
オブジェクト指向プログラミング
マルチプラットフォーム対応
再利用部品の豊富なJava開発キット(JDK)が提供済
ビジネスロジックのパッケージングによる部品化
IDE、フレームワークなど開発環境構築の簡易性
組込系から大規模ネットワークシステムまで開発可能
OOPを理解しているエンジニアの広い開発範囲
部品の再利用や共有化による低い品質コスト
© 2007 Tamaki Nozawa All rights reserved.
ソフトウェア開発者が Java を選ぶ理由
– これまでに専用コミュニティーがテストを繰り返し、改良を重ねて拡張し、実績
を積んできた Java は、 500 万人を超える開発者から支持を得てきた。
Java は汎用性、効率性、移植性に優れているため、開発者にとって次のよう
なことが可能になっている。
• 1 つのプラットフォームで記述したソフトウェアをほかのどのプラットフォームで
も実行する。
• Web ブラウザおよび Web サービスで実行可能なプログラムを作成する。
• オンラインフォーラム、オンラインショップ、オンライン調査、HTML フォーム処理
などに使用するサーバーサイドアプリケーションを開発する。
• Java 言語を使ったアプリケーションやサービスを組み合わせ、高度にカスタマ
イズされたアプリケーションやサービスを作成する。
• 携帯電話や、リモートプロセッサ、低価格消費財など、あらゆるデジタルデバ
イスで実行できる効率的なアプリケーションを開発する。
Sun Microsystems, Inc.,のJavaサイトより引用
© 2007 Tamaki Nozawa All rights reserved.
Java採用のシステム
• 8 億台もの コンピュータ システム
• 15 億台もの携帯電話とその他の携帯デバイス (情報提供:
Ovum)
• 22 億枚ものスマートカード (ICカード)
• セットトップボックス(地上波デジタルや衛星放送用機器)、プ
リンタ、Web カメラ、ゲーム、カーナビゲーションシステム、宝
くじ端末、医療機器、駐車料金支払機、その他家電など多数
Sun Microsystems, Inc.,のJavaサイトより引用
© 2007 Tamaki Nozawa All rights reserved.
Javaの生い立ち
情報家電などの
プログラミング言語として開発
OSを書くために開発
C
Oak
オブジェクト指向の拡張
C++
文法を取り入れ
人工知能用言語として開発
LISP
Java
色々なアイデアを取り入れ
Internet向け言語
© 2007 Tamaki Nozawa All rights reserved.
Javaの利点
• 分かりやすい文法
– C、C++という複雑な言語を簡略化して使いやすくしてある
• Write Once Run Anywhere
– OSなどの環境に依存しないでプログラムが実行できる
• Windows、mac、unix、linux、・・・
• オブジェクト指向( Object Oriented )
– オブジェクトという「部品」を単位にプログラムを構成する
• 安定している
– プログラムは何重にもチェックされた後に動作する。動作中もチェック機能が
働いている
© 2007 Tamaki Nozawa All rights reserved.
Javaプログラムの作成と実行
ByteCode Compiler
Source File (.java)
①
②
Class File (.class)
③
Package
④
Package
© 2007 Tamaki Nozawa All rights reserved.
Java VM
①:拡張子.Javaでプログラムを書く
②:JavacでコンパイルしてByteCode
を作成
③:Javaで読み込んでJVMで実行する
④:必要であればパッケージも読込む
Java VMの役割
• Javaプログラムをマシンに依存させないようにする
ByteCode
OSやハードウェアが異なっていても、
JavaVM(JRE)がByteCodeを解釈実行
(インタープリト)するようになっているの
で、どこでも同じ動作をする
Windows用 Java VM
Solaris用 Java VM
Mac用 Java VM
Windows
Solaris
Mac OS
Pentium / Athlon
Ultra SPARC
PowerPC
© 2007 Tamaki Nozawa All rights reserved.
JavaVMはサン・マイク
ロシステムズによって
その仕様が決められて
いるが、汎用機など
JVMの無いOS等では
Javaプログラムは実行
できない
Javaテクノロジー1
• Java Application
ByteCode
・単独のコンピュータで独立して動作するプログラム
Java VM
OS
Hardware
© 2007 Tamaki Nozawa All rights reserved.
Javaテクノロジー 2
• Java Applet
プログラムはあらかじめWebサーバに格納する
IEなどのブラウザからのリクエストによって、サーバから
レスポンスし、ブラウザで実行される
Browser
Java VM
ByteCode
ByteCode
Web Server
実行はブラウザを通して行われる
ようになっている
OS
OS
Hardware
Hardware
© 2007 Tamaki Nozawa All rights reserved.
Javaテクノロジー 3
• Java Servlet、JSP、JavaBeans
プログラムはあらかじめWebサーバに格納する
ブラウザなどからのリクエストに応じて、サーバ側で実行され、
処理結果がレスポンスされる
Browser
OS
ByteCode
Web Server
サーバでServletやJSP、JavaBeansが
処理した結果をブラウザに表示できるた
め、現在はWebアプリケーション開発の
主流のテクノロジーである
Hardware
© 2007 Tamaki Nozawa All rights reserved.
Java VM
OS
Hardware
Javaテクノロジー 4
• その他のJava
– 大規模なインターネットシステム向け
• EJB(Enterprise JavaBeans)
– 携帯電話、家電、カーナビなどの組込向け
• 携帯電話で広く普及している「MIDP(Mobile Information Device Profile)」
• 自動販売機やセキュリティシステムなどの組み込みデバイス用の「IMP
(Information Module Profile)」
NTT docomo より引用
• NTT DoCoMo社の携帯電話用の「DoJaプロファイル」
• カーナビ などで広く普及している「Foundation Profile」「Personal Basis
Profile」、「Personal Profile」
© 2007 Tamaki Nozawa All rights reserved.
構造化手法からオブジェクト指向へ
• 複雑な物や状態を分かりやすくするための開発手法
– Object Oriented (OO)
• システムやプログラムなどを「目的を持った事象」の集合体と
してとらえる
– ソフトウェアの設計や開発において、操作手順よりも操作対象(オブジェクト)
に重点を置く考え方で、関連する「データ」と、それに対する「手続き」を整理し
「クラス」と呼ばれる一つのまとまりを設計し、その組み合わせによってソフト
ウェアを構築していく手法
• 1970年代から研究され1980年代に実用化され始めた
– Small Talk
– C++
– Etc.
• 1990年代になるとPCの世界へも普及
• 2000年代になると携帯電話、情報家電、自動車分野に拡大
© 2007 Tamaki Nozawa All rights reserved.
非オブジェクト指向システムのイメージ
・情報と機能がバラバラで混沌としているため、再利用も不可能
関数
関数
関数
グローバル
変数
構造体
配列
関数
関数
配列
配列
関数
共有体
ローカル
変数
関数
スコープの範囲
グローバル
変数
ローカル
変数
関数
共有体
© 2007 Tamaki Nozawa All rights reserved.
配列
関数
構造体
オブジェクト指向システムのイメージ
・情報と機能が目的の単位でまとめているため、再利用も可能
変数
変数
配列
メソッド
メソッド
メソッド
変数
配列
メソッド
© 2007 Tamaki Nozawa All rights reserved.
配列
メソッド
変数
変数
メソッド
メソッド
オブジェクト指向設計を行うには
• オブジェクト→「身の回りにあり、ある目的をもった事象」
– その目的のために「状態」と「動作」をひとまとまりにしたもの
• 「ペン」を考える
–
–
–
–
–
ペンには色がある
ペンには太さがある
ペンは直線を描くことができる
ペンは円を描くことができる
Etc.
ペン クラス
色
太さ
直線を描く
円を描く
• オブジェクト内部の用語
– 状態は変数で表し「メンバ変数」という
– 動作を実際のプログラムで書く。これを「メソッド」という
– 状態と動作をひとまとまりにしたものを「クラス」という
• オブジェクトの情報と機能を整理し本質を考える→クラス設計
© 2007 Tamaki Nozawa All rights reserved.
オブジェクト指向プログラミング(OOP)
• オブジェクト指向によって整理された「情報」と「機能」の本質
部分をUMLによってクラス設計する。それをクラスとして記述
するプログラミング技法で、部品としての汎用性を考慮する
ペン クラス
色
太さ
Circle class
直線を描く pi
r
円を描く
calcArea
calcCircumference
© 2007 Tamaki Nozawa All rights reserved.
クラスのインスタンス化1
• クラスからオブジェクト(実体)をインスタンス化する
ヒューマン
鈴木イチロー
性別
性別
男
職業
大リーガー
インスタンス化
職業
働く
シアトルマリナーズで野球をする
・・・・・・
・・・・・・
小西真奈美
クラスに情報を与えオブジェクト(実体)にインスタンス
化することになって動作するようになる
クラスで定義されたメンバ変
数に値が入り、各インスタン
スの具体的な性質が決まる
© 2007 Tamaki Nozawa All rights reserved.
性別
女
職業
アクトレス
ドラマや映画で役柄を演じる
・・・・・・
クラスのインスタンス化2
• クラスは本質だけ、オブジェクトは性質を持った実体と考える
ペン
緑ペン
色
色
緑
太さ
1mm
太さ
インスタンス化
青ペン
直線を描く
直線を描く
色
円を描く
円を描く
太さ
青
0.5 mm
赤ペン直線を描く
色
赤
太さ
2 mm
直線を描く
円を描く
© 2007 Tamaki Nozawa All rights reserved.
円を描く
クラスとインスタンス
• クラスは本質だけ、オブジェクトは性質を持った実体と考える
ペン
緑ペン
色
色
緑
太さ
1mm
太さ
インスタンス化
直線を描く
直線を描く
円を描く
円を描く
青ペン
色
青
太さ
0.5 mm
赤ペン直線を描く
円を描く
色
赤
お絵かきソフト
太さ
2 mm
main
直線を描く
円を描く
© 2007 Tamaki Nozawa All rights reserved.
クラスとインスタンスの関係
•
他のクラスからクラスそのものの性質を決める変数やメソッドを書き換えられると、
他のインスタンス全てに影響が及ぶ
1mm
ペン
色
太さ
緑ペン
色
緑
青ペン
太さ 1mm
色
青
直線を描く
太さ 1mm
円を描く
赤ペン直線を描く
円を描く
色
赤
1mm
直線を描く
円を描く
お絵かきソフト
太さ
main
直線を描く
1mm
円を描く
© 2007 Tamaki Nozawa All rights reserved.
クラスのカプセル化
• オブジェクトの情報を外部から隠蔽する
1mm
ペン
×
色
×
緑ペン
緑
青ペン
3mm
太さ
色
青
直線を描く()
インスタンス化
太さ
0.5 mm
円を描く()
赤ペン直線を描く
円を描く
○
○
色
赤
太さ
直線を描く
円を描く
お絵かきソフト
main
色
○
太さ
2 mm
直線を描く()
円を描く()
© 2007 Tamaki Nozawa All rights reserved.
クラスのカプセル化のメリット
• 外部のクラスからは公開(public)された手続き(メソッド)を利
用させることでしか情報を操作できないようにすることで、オ
ブジェクトの独立性を高める(メソッドへのデータの引数渡し)
他のクラス
赤、2mm
×
赤、2mm
他のクラス
○
© 2007 Tamaki Nozawa All rights reserved.
直線を描く
オブジェクト名:赤ペン
色
赤
クラス名:ペン
円を描く
太さ 2 mm
イン
スタ
ンス
色
太さ
直線を描く(赤、2mm)
直線を描く()
円を描く(赤、2mm )
円を描く()
継承
• 定義済みの別のクラスの仕様を受け継ぎ、さらに機能拡張する
Sub Class
筆ぺん
Super Class
ペン
色
色
太さ
筆圧
太さ
継承
直線を描く
直線を描く
円を描く
円を描く
ぼかす
新しい「筆」クラスは「ペン」クラスを継承して、新しく「筆圧」を表すメンバを追加している
「直線を描く」「円を描く」メソッドは、「筆圧」を利用するように定義し直している
筆には「ぼかす」という描画方法があるので、「ぼかす」というメソッドを追加している
© 2007 Tamaki Nozawa All rights reserved.
ポリモーフィズム
• 多態性
Sub Class
色
Super Class
太さ
筆圧
ペン
色
太さ
直線を描く(長さ)
円を描く(半径)
筆ぺん
継承
直線を描く(長さ)
円を描く(長さ)
オーバーライド
直線を描く(長さ、筆圧)
円を描く(長さ、筆圧)
オーバーロード
ぼかす
オーバーライドは「上書き」のことで、継承時に、スーパークラスで定義されたメソッドと同じ名
前、引数を持つメソッドを、サブクラスでもう一度再定義すること
オーバーロードは、同じクラス内で同名メソッドを複数定義すること(引数のタイプや数が違え
ば可)
同名メソッドが複数あり、状況に応じて適切な処理ができることを、ポリモーフィズムと言う
© 2007 Tamaki Nozawa All rights reserved.
コンストラクタ
• 初期化処理専門メソッド
ペン
直線を描く
ペンのオブジェクト
色
色
赤
太さ
2 mm
太さ
直線を描く
円を描く
インスタンス
円を描く
ペン
直線を描く
円を描く
クラス名と同名のメソッドで、オブジェクトの生成時に呼び
出され、オブジェクトが扱うデータの初期化などをここで行
う(オブジェクトのインスタンス化)
© 2007 Tamaki Nozawa All rights reserved.
抽象クラス
Abstract Class
Sub Class
描く道具
直線を描く
ペン
色
派生
太さ 筆ぺん
円を描く
Sub Class
抽象クラスでは、どのような操作が「ある」
のかという部分のみを決めておく(設計書:
具体的な処理の方法についてはここでは記
述しない)
派生したサブクラスでオーバーライドされ、
具体的な処理方法が定義される。
鉛筆
濃淡
長さ
直線を描く
円を描く
色
直線を描く処理の定義
太さ
円を描く処理の定義
筆圧
直線を描く
円を描く
ぼかす
同じ抽象クラスから派生したクラスは同じメソッドを
持つので、扱いやすくなる。
© 2007 Tamaki Nozawa All rights reserved.
クラスの継承の制限事項
Super Class
Super Class
Sub Class
Super Class
複数のクラスから継承することはできない
Sub Class
Sub Class
1つのクラスから複数のSub Classを派生
させることができる。
© 2007 Tamaki Nozawa All rights reserved.
インタフェース
• 多重継承ができないため、継承できない機能を実装させる
Abstract Class
クラス階層とは独立して共通のメソッ
ドと定数を持たせるために利用する
描く道具
Interface
直線を描く
定数
円を描く
メソッドのインタフェース
Sub Class
派
生
鉛筆
Interface
濃淡
実装
消しゴム
長さ
直線を描く
implements
同じインタフェースを実装したクラスは、
同じメソッドと定数を持つが、メンバ変
数は独自に持つことができる。
© 2007 Tamaki Nozawa All rights reserved.
円を描く処理
消しゴム
extends
IDE(統合開発環境)
• ECLIPSE
– IBMのJava開発用統合ソフトがオープンソースとして広く使われている
© 2007 Tamaki Nozawa All rights reserved.
フレームワーク
• Struts
– Jakartaプロジェクトが開発しているオープンソースのソフトウェアで、Java言
語を用いてWebアプリケーションを開発する際の必要な基盤(フレームワーク)
– MVCというソフトウェア設計モデル(デザインパターン)に基づいており、Java
サーブレットやJSPを組み合わせてアプリケーションを構築する際に必要とな
る諸機能を提供
– ユーザからのリクエストを一括して受信し、開発者が用意する適切なクラスに
割り振るコントローラサーブレットや、JSPで利用するタグライブラリ、
JavaBeansプロパティの自動設定機能、表示の国際化を支援する機能など
– IBM社「Extension for Struts」などソフトベンダーよりStrutsの機能強化版がリ
リースされている (セキュリティ強化、機能強化、生産性強化など)
© 2007 Tamaki Nozawa All rights reserved.
PHP4 素数計算
•
<?php
// 処理開始時間を取得して表示する
list($sec1, $sec2) = explode(“ ”, microtime());
$start = $sec1 + $sec2;
echo ‘start = ’.$start.‘<br>’;
// 10000までの素数を算出して表示する
$max = 10000;
for($i = 2; $i <= max; $i++) {
$divisor = 0;
for($j = 1; $j <= $i; $j++) {
if($i % $j == 0) {
$divisor++;
}
}
if($divisor == 2) {
echo $i.'<br>';
}
}
// 処理終了時間を取得して表示する
list($sec1, $sec2) = explode(" ", microtime());
$end = $sec1 + $sec2;
echo 'end = '.$end.'<br>';
// 処理時間を算出して表示する
$taketime = $end - $start;
echo 'take time = '.$taketime.'秒';
?>
© 2007 Tamaki Nozawa All rights reserved.
Java(JSP) 素数計算
<%@ page contentType=“text/html;charset=Shift_JIS” %>
<%@ page import=“java.util.*” %>
<%
long start = new Date().getTime();
%>
start = <%=start%><br>
<!-- 10000までの素数を算出して表示する -->
<%
int divisor; max=10000;
for(int i = 2; i <= max; i++) {
divisor = 0;
for(int j = 1; j <= i; j++) {
if(i % j == 0) {
divisor++;
}
}
if(divisor == 2) {
%>
<%=i%><br>
<%
}
}
// 処理終了時間を取得して表示する
long end = new Date().getTime();
%>
end = <%=end%><br>
<!-- 処理時間を算出して表示する -->
take time = <%=(float)(end - start) / 1000%>秒
© 2007 Tamaki Nozawa All rights reserved.
結論:なぜJavaを採用する必要があるのか?
•
•
•
•
•
•
世界中でJava開発が行われ技術情報が豊富に存在
汎用的部品の再利用化で、容易な自社限定部品の作成
IDEやフレームワークによる開発コストの低さ
OOP技術者の汎用性の高さ(業務アプリから組込まで対応)
中国やインドでのオフショア開発も可能
JSP + JavaBeansで短期間なプログラマー教育
– PHPエンジニアであればJSP開発はすぐに慣れる
– ビジネスロジックは、JavaBeansとして再利用可能な部品として作成
– JavaBeansは、パッケージング化されるため容易に他システムで利用可
• 低い初期コスト又はメンテナンスコスト
© 2007 Tamaki Nozawa All rights reserved.
EclipseによるJSPの実行(素数計算のデモ)
© 2007 Tamaki Nozawa All rights reserved.
ダウンロード

直線を描く