Javaの過去、現在、未来

Javaの過去、現在、未来
日比野洋克
[email protected]
Orangesoft Inc.
Copyright (c) 2002 Orangesoft Inc.
自己紹介

1985年頃 某メーカー入社
–
ワープロ用ユーティリティ/ FAXアダプタの開発



1990年頃
–
Windows用アーカイブソフトLHfe開発



VisualBasic1.0 → VC++
他、Drop君、ish.dllの開発
1994年 Orangesoft
–
Windows用メーラーWinbiff開発


80186+CP/M86+C
80186+VRTX+ASM+C
Visual C++
1999年
–
携帯電話用メールブラウザxGate開発

Java
Copyright (c) 2002 Orangesoft Inc.
agenda




Javaの概要
Javaの始まり
Javaの今
Javaの未来
Copyright (c) 2002 Orangesoft Inc.
Javaのあゆみ

1991
–

1994
–

Mosaic登場
1995
–
–

セットボックス用の開発言語として原型が誕生(Oak)
HotJava発表(applet登場)
Netscape Applet対応
1996
–
–
–
–
–
JDK1.0リリース
Servlet発表
JavaBeans発表
Visual J++
JDBC発表
Copyright (c) 2002 Orangesoft Inc.
Javaのあゆみ(cont)

1997
–
–
–
–
–
–
–
–
–
–
–
–
JDK1.1リリース
MS AFC発表
100% PureJava
Enterprize Java Beans
Personal Java/Embedded Java
Java Card
Java Foundation Classes
JNDI
HotSpot
Java3D
Sun Microsoftを提訴/Microsoft Sunを逆提訴
JavaMail
Copyright (c) 2002 Orangesoft Inc.
Javaのあゆみ(cont)

1998
–
–
–
–
–
–
–

Netscapeソースを公開
JDBC2.0
Java Plun-in
Java Cryptography Extension
Servlet API2.1
AOL Netscapeを買収
Java2(JDK1.2)
1999
–
–
–
–
–
–
–
–
Jini
WabaVM(Palmで動作するVM)
一太郎Ark
JSP1.0
JavaPhone
J2EE
J2ME
KVM
Copyright (c) 2002 Orangesoft Inc.
Javaのあゆみ(cont)

2000
–
–
–
–
–

2001
–
–
–
–
–

Java API for XML Parsing
Forte for Java Community Edition(Free)
J2ME CLDC
JDK1.3
C#登場
Docomo 503i登場(iモードJava)
Sun ONE(Open Net Environment )
Jxta(P2P)
JAXR(Java API for XML Registries)
JAXM(Java APIs for XML Messaging)
2002
–
JDK1.4
Copyright (c) 2002 Orangesoft Inc.
Javaの概要
Copyright (c) 2002 Orangesoft Inc.
Javaの特徴

親しみやすい文法
–
–





オブジェクト指向
マルチスレッド
プログラムの信頼性を高める工夫
セキュリティモデル
インタープリタ
–
–

C++ライクな文法
シンプル(過ぎるところも?)
Virtual Machine下での動作
多くの環境(OS,ハード)で動作
ネットワークを強く意識
Copyright (c) 2002 Orangesoft Inc.
オブジェクト指向

基本型を除いて、全てがオブジェクト
–
–
1.add(2); とはできない。C#のほうが偉い
ラッパークラス



Integer one = new Interger(1);
全てのオブジェクトはObjectからの派生クラス
単一継承
–
–
多重継承はサポートしない
Interfaceの登場
Copyright (c) 2002 Orangesoft Inc.
Interface


仕様の記述にはInterfaceを。
COM?
–
–
JavaBean
Enterprize Java Bean - DCOM
interface Runnable{
public void run();
}
class Asimo extends Robot implements Runnable{…}
class Human extends Animal implements Runnable{…}
Copyright (c) 2002 Orangesoft Inc.
マルチスレッド

組み込みサポート
–

同期メカニズムも組み込みサポート
プラットホーム間でのスレッド実装の差異の吸収
Copyright (c) 2002 Orangesoft Inc.
セキュリティモデル

サンドボックスモデル(JDK1.0~)
–
–

電子署名付きapplet(JDK1.1~)
–

appletなどのネットワークからダウンロードされたクラスからの
ローカルリソースへのアクセスを制限
強固な安全性を確保できるが制約も多い。
2者択一(許すか許さない)
アクセス制御機能の追加(JDK1.2~)
–
–
細かな制御が可能
ポリシーをユーザーが設定可能
Copyright (c) 2002 Orangesoft Inc.
プログラムの信頼性を高める工夫

ポインタの排除
–

参照を用いる
例外機構
–
例:ArrayIndexOutOfBoundsException



配列のindexオーバーフロー、アンダーフロー
アサーションの導入(JDK1.4)
ロギングAPI
Copyright (c) 2002 Orangesoft Inc.
アサーション

実行時のチェック
class Hoge {
private void test(int n)
{
assert n != 0 : ゼロで割らないでー!!
return 10/n;
}
…
Copyright (c) 2002 Orangesoft Inc.
ガベージコレクション

使用済みのオブジェクトをシステムが回収、開放
–
–

VBではおなじみ
プログラマからメモリ管理の手間を削減
GCは万能ではない
–
–
掴みっぱなしの開放されないオブジェクト
システムリソースの開放は変わらずプログラマの仕
事


Socket
ウインドウハンドル…
Copyright (c) 2002 Orangesoft Inc.
generics



JDK1.5より
醜いキャストを追放
C++のテンプレート的な使い方が可能
Vector stringVector = new Vector();
stringVector.add(“hoge”);
stringVector.add(new Integer(1));
String s = (String)stringVector.get(0);
String s1 = (String)stringVector.get(0); // runtime error!!
Vector<String> stringVector = new Vector<String>();
stringVector.add(“hoge”);
stringVector.add(new Integer(1)); // compile error!!
String s = stringVector.get(0);
Copyright (c) 2002 Orangesoft Inc.
JavaDoc

コメントからドキュメントの自動生成
/**
* コメントからメッセージをアペンドする
*
* @author Takashi SHIODA
* @param mailboxName メールボックス名
* @param message メール本体
* @param flags フラグ
* @return 成功したときはtrue、失敗したときはfalse
* @exceptions IOException
*/
public boolean appendMessage(String mailboxName, byte[] message, Flag flags)
throws IOException
{…
Copyright (c) 2002 Orangesoft Inc.
etc

プリプロセッサがない
–


サードパーティでサポート
constがない!!
enumがない!!
–
final static で代用
class Hoge
{
//enum {red, green, blue, orange};
final static int red = 0;
final static int green = 1;
final static int blue = 2;
final static int orange = 2; // oops!!
}
Copyright (c) 2002 Orangesoft Inc.
Javaの動作環境

用途と実装先に応じて複数種用意
–
–
–

幻想のwrite once run everywhere
–

J2EE Java2 Enterprise Edition
J2SE Java2 Standard Edition
J2ME Java2 Micro Edition
サブセットでもスーパーセットでもないものもある(J2ME)
それでも使い慣れたAPI、文法が使えるのは便利
Copyright (c) 2002 Orangesoft Inc.
Javaが使われている環境

WEBアプリケーション
–
サーバサイド


–
クライアントサイド


携帯電話

–
i-Appli
家電製品

Personal Java
PCクライアント
–

絶滅状態
組み込み
–

servlet/JSP
Webサービス
Visual J# :-)
すでに“writeonce run everywhere“ではないけれど,着実に普及
Copyright (c) 2002 Orangesoft Inc.
Java技術の変遷
Copyright (c) 2002 Orangesoft Inc.
applet(1994~)

Javaコードをネットワークからダウンロードしてクライアン
トで実行
–
–
インストール不要
JVMが動作していれば、どのような環境でも動作


HotJavaブラウザで登場
–

write once run anywhere.
他のブラウザも次々とサポート
WEBの表現力を高めるツール
–
–
踊るDuke
操作性の改善
Copyright (c) 2002 Orangesoft Inc.
appletの問題点

起動が遅い
–
Javaの起動中は全ての処理が止まってしまった。

–
コードのダウンロード時間が長い




当時はダイヤルアップ接続が基本
貧弱なGUI部品群
サンドボックスモデルによる制約
WEBの表現力を高める別の簡易な手段の登場
–
–
–

多くの人がappletのダウンロードを禁止設定
JavaScript
ActiveXコンポーネント
アニメーションGIF
現時点では、一般のWEBでappletを使うことは稀
–
アプライアンスサーバ製品などの制御コンソールとしては利用も
Copyright (c) 2002 Orangesoft Inc.
SWING


貧弱なGUIへの回答
既存のAWTに替わる高機能GUIライブラリ
–
AWTGUI部品をOSが提供する部品を用いていた
(Heavyweight Components)

–

SWINGは全てをJavaで記述(Lightweight Components)
MVCパターンを用いた柔軟な設計
–
–

動作環境によって見栄えが変わってしまう。
ルック&フィールの切り替え
UIとデータの分離
スタンドアロンアプリケーションで多く利用
Copyright (c) 2002 Orangesoft Inc.
SWING(cont)
JComboBox cmb1 = new JComboBox();
JComboBox cmb2 = new JComboBox();
// モデルを共有することで、コンボボックスの内容を同期
// することができる
ComboBoxModel model = cmb1.getModel();
cmb2.setModel(model);
Copyright (c) 2002 Orangesoft Inc.
servlet(1996~)


WEBの爆発的な普及
CGIに替わるサーバサイドプログラム環境
–
–
–


高性能(マルチスレッド)
JDBCなどによるDBとの接続性
安全性
sample
コードにhtmlを埋め込む
–
–
見通しの悪い、再利用性のないコード
テンプレート、SSI(Server Side include)などの手法を利用
Copyright (c) 2002 Orangesoft Inc.
JSPの登場


言ってしまえば、ASPの真似 :-)
htmlにコードを埋め込む
–
–

servletと反対のアプローチ
このままでは見通しの悪さは変わらない。
EJB(Enterprize Bean)などによる、View・データ・制御
の分離
–
–
MVCモデルのWEBへの拡張
開発支援のため各社がフレームワークを提供
JSP
servlet/bean
data
Copyright (c) 2002 Orangesoft Inc.
フレームワーク



各社、多くの開発グループから種々のフレームワークを
提供
選択は大変かも
IDEと同様DBなどの外部要件により決定されることも多
い
Copyright (c) 2002 Orangesoft Inc.
Webアプリケーション

動作環境
–
–
各社から提供
DBなどの外部要件により決定されることも多い




Tomcat
iPlanet Application Server
Oracle Application Server
JRun
Copyright (c) 2002 Orangesoft Inc.
nonPCへの展開(1997~)

Personal Java/Embedded Java
–

KVM(1999)
–

PalmなどPDAへの実装
iアプリ(2001)
–

J2MEにまとまる
文法はJavaだけど…
家電への搭載
–
VMの実装は日本ベンダが主導
Copyright (c) 2002 Orangesoft Inc.
Javaの未来
Copyright (c) 2002 Orangesoft Inc.
Webサービスへの取り組み

Webサービスを処理するためのAPI群の整備
–
JAXR(Java API for XML Registries)

–
JAXM(Java APIs for XML Messaging)


UDDI:サービスの検出と登録
SOAPメッセージの作成、通信
Webサービスを実現する技術は標準技術
–
–
–
.NETとの相互接続性はある(はず)
目指すものは似ている?
排他的なものではない
Copyright (c) 2002 Orangesoft Inc.
Sun ONE(Sun Open Net
Environment )

謳い文句
–
–
–
–



Sun ONEは、オープン・スタンダードに基づいた Services on
Demand の構築や導入に必要な、ビジョン、アーキテクチャ、プラット
フォーム、および専門性の総称です。
Services on Demand
Service Driven Network
Evolution, Not Revolution
ローカル・ソフトウェア・アプリケーション→Web アプリケーション
→Web サービス
Liberty Alliance Project
Web Services
–
SOAP/UDDI/WSDL/ebXML
Copyright (c) 2002 Orangesoft Inc.
JavaはSunだけのものではない

各社がWebサービス実現へ向けてフレームワー
クを提案
Copyright (c) 2002 Orangesoft Inc.
Evolution, Not Revolution

革新ではなく、改革
Copyright (c) 2002 Orangesoft Inc.
実際の開発
Copyright (c) 2002 Orangesoft Inc.
環境

基本はJDK
–

コマンドラインでコンパイル
業務ならIDE
Copyright (c) 2002 Orangesoft Inc.
IDE

多種多様な開発環境
–
–
–



便利なリファクタリング機能
モデリング機能との融合
バージョン管理システム
–
–
–

JBuilder
VisualAge
Forte Java…
CVS(The Concurrent Versions System)
http://www.cvshome.org/
VSSを使うことのできるIDEも増えている
利用するアプリケーションサーバやDBに依存することも多い
Copyright (c) 2002 Orangesoft Inc.
リファクタリング

ソースを健全に保つ活動の総称
–
–
–

変数/クラス/メソッドの名前の変更
クラス/メソッドへの抽出
メソッドの格上げ
テストが大事
–
テストツール

JUnitなど
Copyright (c) 2002 Orangesoft Inc.
sample
Copyright (c) 2002 Orangesoft Inc.
リソース

Java Developer Connection
–

雑誌
–
–

http://jdc.sun.co.jp/
JAVA PRESS(技術評論社)
JavaWorld(IDG)
多くのOpenSourceライブラリ
–
SourceForge.net

–
Jakarta Project




http://sourceforge.net/
logging(Log4J)
正規表現(ORO、Regexp)
MAKEツール(Ant)
正規表現(java.util.regex)、Logging(java.util.logging),JAXP(XMPパー
サー)のようにJDKに含まれていくことも
Copyright (c) 2002 Orangesoft Inc.