Copyright (c) 2002 Orangesoft Inc. Java の過去、現在、未来 日比野洋克 Orangesoft Inc.
Copyright (c) 2002 Orangesoft Inc. 自己紹介 1985 年頃 某メーカー入社 – ワープロ用ユーティリティ / FAX アダプタの開発 CP/M86+C VRTX+ASM+C 1990 年頃 – Windows 用アーカイブソフト LHfe 開発 VisualBasic1.0 → VC++ 他、 Drop 君、 ish.dll の開発 1994 年 Orangesoft – Windows 用メーラー Winbiff 開発 Visual C 年 – 携帯電話用メールブラウザ xGate 開発 Java
Copyright (c) 2002 Orangesoft Inc. agenda Java の概要 Java の始まり Java の今 Java の未来
Copyright (c) 2002 Orangesoft Inc. Java のあゆみ 1991 – セットボックス用の開発言語として原型が誕生 (Oak) 1994 – Mosaic 登場 1995 – 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 – Java API for XML Parsing – Forte for Java Community Edition(Free) – J2ME CLDC – JDK1.3 – C# 登場 2001 – 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 などのネットワークからダウンロードされたクラス からのローカルリソースへのアクセスを制限 – 強固な安全性を確保できるが制約も多い。 電子署名付き applet(JDK1.1 ~ ) – 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 stringVector = new Vector (); stringVector.add(“hoge”); stringVector.add(new Integer(1)); // compile error!! String s = stringVector.get(0);
Copyright (c) 2002 Orangesoft Inc. JavaDoc コメントからドキュメントの自動生成 /** * コメントからメッセージをアペンドする * Takashi SHIODA mailboxName メールボックス名 message メール本体 flags フラグ 成功したときは true 、失敗したときは false IOException */ public boolean appendMessage(String mailboxName, byte[] message, Flag flags) throws IOException {…
Copyright (c) 2002 Orangesoft Inc. etc 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!! } プリプロセッサがない – サードパーティでサポート const がない !! enum がない !! – final static で代用
Copyright (c) 2002 Orangesoft Inc. Java の動作環境 用途と実装先に応じて複数種用意 – J2EE Java2 Enterprise Edition – J2SE Java2 Standard Edition – J2ME Java2 Micro Edition 幻想の write once run everywhere – サブセットでもスーパーセットでもないものもある ( J2ME ) それでも使い慣れた API 、文法が使えるのは便利
Copyright (c) 2002 Orangesoft Inc. Java が使われている環境 WEB アプリケーション – サーバサイド servlet/JSP Web サービス – クライアントサイド 絶滅状態 組み込み – 携帯電話 i-Appli – 家電製品 Personal Java PC クライアント – Visual J# :-) すでに “writeonce run everywhere“ ではないけれど, 着実に普及
Copyright (c) 2002 Orangesoft Inc. Java 技術の変遷
Copyright (c) 2002 Orangesoft Inc. applet ( 1994 ~ ) Java コードをネットワークからダウンロードしてク ライアントで実行 – インストール不要 – JVM が動作していれば、どのような環境でも動作 write once run anywhere. HotJava ブラウザで登場 – 他のブラウザも次々とサポート WEB の表現力を高めるツール – 踊る Duke – 操作性の改善
Copyright (c) 2002 Orangesoft Inc. applet の問題点 起動が遅い – Java の起動中は全ての処理が止まってしまった。 多くの人が applet のダウンロードを禁止設定 – コードのダウンロード時間が長い 当時はダイヤルアップ接続が基本 貧弱な GUI 部品群 サンドボックスモデルによる制約 WEB の表現力を高める別の簡易な手段の登場 – 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 への拡張 – 開発支援のため各社がフレームワークを提供 JSPservlet/beandata
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 – J2ME にまとまる KVM(1999) – Palm など PDA への実装 i アプリ (2001) – 文法は Java だけど … 家電への搭載 – VM の実装は日本ベンダが主導 VM の実装は日本ベンダが主導
Copyright (c) 2002 Orangesoft Inc. Java の未来
Copyright (c) 2002 Orangesoft Inc. Web サービスへの取り組み Web サービスを処理するための API 群の整備 – JAXR(Java API for XML Registries) UDDI :サービスの検出と登録 – JAXM(Java APIs for XML Messaging) 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) – – VSS を使うことのできる IDE も増えている 利用するアプリケーションサーバや DB に依存することも多い
Copyright (c) 2002 Orangesoft Inc. リファクタリング ソースを健全に保つ活動の総称 – 変数 / クラス / メソッドの名前の変更 – クラス / メソッドへの抽出 – メソッドの格上げ テストが大事 – テストツール JUnit など
Copyright (c) 2002 Orangesoft Inc. sample
Copyright (c) 2002 Orangesoft Inc. リソース Java Developer Connection – 雑誌 – JAVA PRESS( 技術評論社) – JavaWorld ( IDG) 多くの OpenSource ライブラリ – SourceForge.net – Jakarta Project logging(Log4J) 正規表現 (ORO 、 Regexp ) MAKE ツール (Ant) 正規表現 (java.util.regex) 、 Logging(java.util.logging),JAXP(XMP パー サー ) のように JDK に含まれていくことも