コア・コンピタンス

JAVA開発技術

弊社では、1997年からJavaでのシステム開発に取り組み、同時にJava技術者の育成を行ってきました。
1998年~99年に3名の技術者が、Sunの認定資格である『SUN CERTIFIED DEVELOPER FOR THE JAVA』に合格しました。
その後も、多くの技術者が合格しています。
これからも多くの技術者を育成し、品質の高いシステム開発を行っていきます。

以下では、「Java」「J2EE」「アスペクト指向」について、概要を解説しています。

Java

Javaは、Sun Microsystems社が開発し、1996年頃にリリースされたオブジェクト指向プログラミング言語です。C++の文法をベースに、よりオブジェクト指向開発を行いやすくするための仕組みを備えています。ネットワーク環境で利用されることを意識してつくられたため、強力なセキュリティ機構、豊富なネットワーク関連の機能が、標準で搭載されています。

Javaで開発されたソフトウェアはJVM(Java仮想マシン)上で動作します。JVMがあれば、特定のOSやプロセッサに依存することなく、基本的にどのようなプラットフォームでも動作します。「Write Once, Run Anywhere(一度コードを書けばどんな環境でも動作する)」というキャッチコピー通り、その可搬性の高さは他に類を見ません。

リリース当初は Applet が注目されましたが、現在ではさまざまな分野で使用され、利用する場面に応じて、3種類のEditionが存在しています。

J2SE(Java2 Standard Edition)は、デスクトップシステムの開発を支援するものです。
J2EE(Java2 Enterprise Edition)は、Webを中心としたエンタープライズシステムの開発を支援するものです。
J2ME(Java2 Micro Edition)は、携帯Javaを中心とした組込みシステムの開発を支援するものです。

2006年現在 Genericsや並列プログラミング機能強化、タイプセーフEnumなどが盛り込まれ大きく言語仕様の変更がなされた、J2SE 5.0(Tiger)がリリースされています。このように、Javaは常に進化し続けています。

Javaの利点
  • メモリ管理を(ある程度)意識しないでプログラミングできる
  • 可搬性が高い(WindowsでビルドしたJavaアプリケーションを、Linuxに転送してそのまま実行できる)
  • 開発・実行環境一式が無償で提供されている。
  • 機能豊富で強力なクラスライブラリが標準で付いてくる。
  • デスクトップアプリケーション作成・グラフィックスに強い。
Javaの欠点
  • 細かなメモリ操作ができない。(する必要の無い場合問題にならない)
  • ネイティブなアプリケーションと比べて、動作が遅い。(究極に速度にこだわらなければ、気にならない)
  • C言語で汚いといわれる構文(ぶらさがりelse, 落ちていくswitch文 etc..)を、そのまま引き継いでいる。
  • 宣伝に惑わされ、理解するのに時間がかかる場合がある。(ポインタがない、完全なオブジェクト指向 など)

ページのトップへ

J2EE(Java2 Enterprise Edition)

1998年に発表されたJavaの企業機能用セットであり、J2SEの拡張機能の形で提供されました。主に大規模システム(サーバ用途)向けに、Java Servlet(サーブレット)、JavaServer Pages(JSP)、Enterprise JavaBeans(EJB)、Java Naming and Directory Interface(JNDI)、Java Transaction Architecture(JTA)、Java Message Service(JMS)、JavaMail、J2EE Connector Architecture(J2CA)、およびXML関連のAPI(JAXP等)などの機能をセットにして提供されています。

代表的なものがEnterprise JavaBeans(EJB)で、これにより、トランザクション管理、リモート接続などが容易に行え、サーバサイドシステムの生産性が飛躍的に向上されました。当初のEJBには、『分散オブジェクトのプログラミング・インタフェースを前提とすることから通常のJavaオブジェクトに比べて制約が強く、扱いにくい』との批判もあり、オープンソース・フレームワークである「Spring Framework」や純国産フレームワーク「Seasar」などに人気が集まりました。2006年リリースのEJB3.0では、前述のオープンソース・フレームワークの実績を取り込み大規模な変更が行われました。EJB3.0では、以下のような最新のプログラミング・パラダイムが取り込まれることになったのです。

  • AOP(Aspect Oriented Programming:アスペクト指向プログラミング)
  • DI(Dependency Injection:依存性注入)
  • IoC(Inversion of Control:制御の反転)

これにより、EJBの使い勝手が飛躍的に向上し、今以上に多くのシステムで採用されることになるでしょう。

「バージョン3でブレイクする」というソフトウエア業界のジンクスは、きっとEJBにも当てはまることでしょう。

ページのトップへ

アスペクト指向(AOP)

アスペクト指向プログラミング (AOP:Aspect Oriented Programming)は、従来的な手続き型言語ではうまく分離できない特徴(クラス間を横断(cross-cutting)するような機能)を「アスペクト」とみなし、アスペクト記述言語をもちいて分離して記述することでプログラムに柔軟性をもたせようとする試みであります。

プログラムの保守性・再利用性を高めるためには、できるだけ関連の深いコードを近い場所に集めて、他とは分離して記述すべきです。これを separation of concerns(関心事の分離)と言います。オブジェクト指向言語はデータ構造とそれに深く関連する手続きを1箇所で記述する構文を提供するため、手続き型言語よりも separation of concerns が「うまくできる場合が多く」、そのために広く普及してます。しかし、一般には複数のクラスを横断する形で関連するコードを記述せざるを得ない場合もあります。つまり、現在のオブジェクト指向言語では、separation of concerns が「できない場合もある」のです。

この問題の解決のために『アスペクト指向』という考え方を使用します。ですから、『オブジェクト指向』と『アスペクト指向』は互いに直交する考え方となります。

アスペクトの例としては、ロギングや、トランザクション、セキュリティ、例外処理などがあります。これらは、本来のオブジェクトの振る舞いではなく、実装段階におけるアーキテクトに依存します。本来のオブジェクトからこれらを切り離すことにより、そのオブジェクトはPOJO(Plain Old Java Object)として実装できることになり、生産性はもちろん、再利用性や保守性も高くなります。

ページのトップへ