Java応用

GUI

Swingとは

Swingは、Pure Javaで書かれたJavaGUIツールキット。
Javaは"Write once, run anywhere"というスローガンを売りにしている。これは、Javaで書かれたコードはどのOS・どのプラットフォームにおいても、一度書けばどこでも動く、というJavaの理念。
Swingは、そのようなJava仮想マシンで同じように動く「Pure Java」なGUIツールキットとして知られる。
OS依存のコードを使っていないため、OSのルック・フィールとは異なる見た目になる。これは、.NET FrameworkWindows.Formsとは異なる特徴で、たとえWindowsでもLinuxでも、Windows/Linuxネイティブなアプリケーションとは異なる見た目を持つ。
また、OS依存のコードを使っていないため、コードの見た目や開発の手法も異なる。リスナーと呼ばれる「メッセージループライクな継承システム」によって、イベントにメソッドを登録する形で開発する。GTK+VBよりも、Windows APIやXlibに近い開発方法である。
マルチテキストなどのコンポーネントも、一切OSの仕組みを使わず、Pure Javaで独自に実装されている。
こうした点は、デスクトップアプリケーションをどのOSでも動かせる、という点で優れている。たとえば、Swingで書かれたアプリケーションは、Windowsで動けばLinuxでも同じように動く。
また、もっと小型のモバイルなシステムでJava MEを使う場合でも、Swingが動くような環境がもしあるのであれば、WindowsでSwingで開発したアプリケーションをモバイル機器でも動かせる。

SWT

Eclipseによるウィジェットツールキット。SwingがPure Javaで書かれているのに対して、SWTはOSのコントロールと密接に結びついて作られている。そのため、ルック・フィールがOS標準のコントロールに近く、また動作も速く軽量である。IBMEclipseSWTで開発することで、EclipseNetBeansなどの同様のIDEよりも高速で安定した製品にした。
逆に、Pure Javaではないため、Java VMが動く環境全てのプラットフォームでは動かない。あらゆるプラットフォームで動く、というSunのJavaの理想から言えば後退と言える。

JavaFX

Java仮想マシンで動作するリッチインターネットアプリケーション向けGUIフレームワーク
Adobe FlexAdobe Flash Player上で動作する)や、Microsoft Silverlightと同様の技術である。
SwingはJavaFXによってリプレースされる予定だとか、らしい。

サーブレット

Javaサーブレットとは

Javaサーブレットとは、サーバー側で動作しHTMLを吐き出す、CGIPHPと同様のJavaによる技術。
Apacheのようなサーバーソフトウェアと、Tomcatのようなサーブレットコンテナ(アプリケーションサーバー)を使って構築する。
Perl/CGIPHPと異なる点は、プログラミング言語Javaであり、静的型付けの言語で使えるということや、IBMなどがメインフレームでもWebSphereなどをサポートしており、「高度なインフラシステムとしても利用できる」という点がある。
多くの場合PHPやWebフレームワーク技術のあるRubyなどで作られることの多いWebサーバーサイド技術だが、「Javaでもいける」という点では優れている。Javaの優れたクラスライブラリを使うことができ、JavaVMの高パフォーマンスでクロスプラットフォーム仮想マシンを使うこともできる。特にJSPを使うことで、PHPと同様にHTMLの中にJavaコードを埋め込むことができる。
ちなみに、ブラウザ上でプラグインによって動くJavaアプレットとは本質的に異なる技術であるため、混同しないように注意しよう。

クロスプラットフォームバイトコード

Javaサーブレットは、クロスプラットフォームJavaの「バイトコード」の特徴を活かしている。
CGIプログラムは、C言語で書くこともできる。だが、この場合、再コンパイルしなければ動かない。サーバーマシンでわざわざ再コンパイルするのは、難しい。
サーバープログラムに、PerlPHPなどを用いると、スクリプトをアップロードすることで動くため、コンパイルしなくても良い。だが、この場合、C/C++よりも実行速度が遅くなる。
ここで出てくるのが、Javaサーブレットである。Javaバイトコードコンパイルされると同時にクロスプラットフォームなため、サーバーでできるだけ速度を犠牲にせず、その上でローカル環境で開発することができる。
Javaサーブレットはサーバー開発のある意味での理想である。

AltJava

Java代替言語とは

Java代替言語とは、Javaと同様にJava仮想マシン(JavaVM)上で動くようにコンパイルされ、Javaのクラスライブラリをそのまま利用でき、言語的な要素だけを簡素化あるいは機能追加した、「Javaに代わる言語」のこと。
Javaの優れたクラスライブラリをそのまま利用でき、Javaと同様のクロスプラットフォームJITコンパイル型の高パフォーマンスな性能を持ちながら、「言語・文法的な部分」だけをすげかえた、いわば「Javaの変種」である。
もともとは動的スクリプト言語のGroovyにはじまり、GroovyはJavaよりもスクリプト言語に近い文法で、Java代替言語を構築した。
最近では、ScalaとKotlinが広く使われている。Scalaは大型のデータセンターから小型のシステムまで使える「スケーラブル」な言語として有名で、前はRailsで作られていたツイッターのシステムも今はScalaで動いている。またKotlinはロシア製の言語であり、Androidの公式開発言語として採用されている。
Microsoft.NET Frameworkのような位置づけにも近い。.NETでは.NET Frameworkのクラスライブラリを用いながら、C#, VB.NET, Managed C++, F#などの言語を使ってプログラミングを行うことができる。だが、Oracle公式ではなく、サードパーティが自由に作っていることなどが異なる。.NET FrameworkでもIronPythonIronRubyなど「Python/Rubyを.NETで動かす」という試みがされているが、これに対してJavaではJythonJRubyなど「Python/RubyJavaで動かす」という試みがされている。Javaと.NETの永遠の「言語戦争」がここに表される。
ただし、思ったほど.NETやJavaの代替言語は普及していない。.NETではC#VBで記述するのが一般的であり、Javaも公式のJava言語を使うことが多い。これは実績や知名度がないなどの理由がある。ただし最先端のJava界ではKotlinが流行っており、「Kotlinを一度触るとJavaには戻れない」とまで言われている。KotlinはJavaでまだ正式に採用されていない最先端の機能を多数取り込み、JetBrains社(IntelliJ IDEAで有名)が作っていることもあって大流行している。

Kotlinは次の学ぶべき言語になる

ネットを見ていると、Kotlinがとても流行っています。「Kotlinを触るとJavaには戻れない」とも。
JetBrains社(IntelliJ IDEAで知られるとてもJava界では有名な会社)のロシアの研究所で生まれ、オープンソース化されたKotlinは、Androidの公式開発言語としても知られる。
行末がセミコロン無しとか型宣言を「変数名 : 型名」で行うとか、あるいは「静的なNull安全の保証」という出来るエンジニアには嬉しい機能があり、Javaの開発中の機能やScalaなどから取り入れた機能などを盛り込んでいる。
見ていると、本当に次に来るべき言語となることが分かる。「Railsを捨ててKotlinへ」と言う人も多い中、ハーウェイへのAurora OS提供などでも取り出さされる「ロシアのIT技術」に期待がかかる。

Android開発ならKotlin

最近のAndroidアプリ開発では、Android Studioを用いてKotlinでプログラミングを行うのが普通になりました。
Kotlinを作ったのも、Android StudioのベースになったIntelliJ IDEAも、JetBrains社の製品です。
言ってしまえば、今のIT業界は「JetBrains社の時代」であると言えます。
僕は、Androidアプリの開発を、XUL2ちゃんねる専用ブラウザとよく似ていると思います。それは「リッチなモバイルインターフェースからネットワークサーバーに接続してクライアントから利用する」からです。XUL2ch専用ブラウザがやっていたことを、再度真似しているように思えてしまいます。日本のガラパゴスインターネット界が昔歩んだ道を、アメリカやロシアも同じように歩んでいるのです。

Spring Framework

Spring Framework

JavaによるWebフレームワークの一つ。依存性の排除とアスペクト指向プログラミングで有名。
Javaフレームワークのめんどくさい点は、多くがフルスタックフレームワークではなく、専門用途のフレームワークを組み合わせて統合して使うこと。柔軟性はあるが面倒くさい。Springは複数のコンポーネントの集合体であり、その全体をフルスタックフレームワークとして使うことができる。
SpringではDI(依存性注入)という考え方を持ち、DIとAOPを柱とする大規模なフレームワークを利用する。
DIでは「コンポーネント間の依存関係をプログラムのソースコードから排除し、外部の設定ファイルなどで注入できるようにするソフトウェアパターン」という考え方をする。

依存性注入(DI: Dependency Injection)とは

また、LaravelやSpringなどで最近言われるようになった概念として、「依存性注入」というのがある。
これは、たとえばクラスの中にインスタンスが含まれていた場合、そのクラスはそのインスタンスである別のクラスに「依存」している。
それに対して、依存性注入では、クラスにインスタンスを「外部から、あとからぶち込む(注入する)」ことで、依存性の解決を図る。
外部の設定ファイルで「このクラスのオブジェクトを注入しなさい」と指示するやり方を「DIコンテナ」と呼ぶ。

デザインパターン

デザインパターンとは

デザインパターンは、Javaのようなオブジェクト指向と相性が良い。
特に、クラスライブラリを使うだけのプログラミングから、クラスとインスタンス、継承と実装、そしてスレッドを用いた、オブジェクト指向のプログラム設計が出来るようになる。
たくさんのパターンを知っておくことで、プログラム要件が来た時に、どのようにすれば実装出来るか、事前に準備しておくことが出来る。
いわば、「設計のネタ帳」である。

特におすすめなのはBuilderパターン

特におすすめなのはBuilderパターンです。

アスペクト指向

アスペクト指向とは

アスペクト指向とは、複数のクラスを横断する「横断的関心事」と呼ばれる処理を、ひとつの「アスペクト」と呼ばれるモジュールに記述することのできるプログラミングパラダイム
従来のオブジェクト指向では、複数のクラスで同一の処理を行う場合、処理を「実行する場所」に書かなければならない。
そのため、たとえば「全てのメソッドでログをとりたい(ロギング)」と言った場合に、それぞれのメソッドにロギングのコードを記述することが必要になる。
これでは、「ロギングの処理を変えたい」といった時に、全てのコードの処理を書き換えなければならない。
アスペクト指向では、そうした処理をアスペクトと呼ばれる外部のモジュールにまとめ、アスペクトの側で「このクラスとこのクラスのメソッドが実行される時」といったように「時」を指定してやることで、コードをまとめて編集しやすくする。

簡単な説明

Java応用

Swing

SwingはPure Javaで書かれたJavaのツールキットであり、Javaの理想通り、どんな環境でも同じ見た目になる
その代わり、独自のフラットな魔術的な雰囲気のする見た目(ルック・フィール)になる
indowsネイティブのルック・フィールがいいなら、IBMEclipse向けに開発したSWTJavaでネイティブGUIが開発できる)を使うか、VB.NETC#MicrosoftJavaという位置づけの.NET Framework向け言語)でWindows.Formsを使った方が良い

AltJava

AltJavaとは「Java代替言語」のことで、JavaVMの上で動き、Javaのクラスライブラリを使用しながら、動的型付けなど独自の文法でプログラミングができる

Scala

スケーラブルを重視したAltJavaで、Kotlinが登場する以前は「AltJavaの最前線」であるとみなされていた

Kotlin

IntelliJ IDEAで有名なJetBrains社のロシアの研究所が開発したロシア製のAltJava言語で、Androidアプリ開発の標準

サーブレット

Javaアプリケーションサーバで動かす
3階層型システムのWebサーバ、APサーバ、DBサーバで言えばAPサーバ
エンタープライズ開発ではJavaサーブレットは非常に普及している
単なるPHPの代替としても使える

Webフレームワーク

JavaのWebフレームワークはフルスタックフレームワークではなく、用途によってさまざまなシステムを組み合わせて使う
Strutsが標準だが、多くの人々から「オブジェクト指向Javaらしくない」と言って嫌われている

Eclipse

IBMによって開発されたオープンソースIDE

IntelliJ IDEA

JetBrainsによる有料IDE(機能制限されたオープンソース版もある)
Android Studioのベース

デザインパターン

23種類の設計のネタ帳
有名なものにBuilderパターンなど
イテレータやアダプタのような単純なパターンから、抽象ファクトリーや状態・記憶や代理人を扱ったりする設計上のデザイン、ミニ言語などの高度なパターンもあるので、一度目を通しておこう