おんぶろぐ ver.2

おんぶろぐがインチキだらけなので改心しました

学んできたプログラミング言語 - Java

Java

今まで学んできたプログラミング言語に関して書いてゆきたいと思います。僕が最初に触れたのはJavaです。Javaオブジェクト指向の言語で、当時は比較的新鋭の言語でした。今となっては枯れ切った言語なんですけどね。

もっともその当時の自分はJavaの長所を理解した上でJavaを選択した訳ではありません。会社でJavaを使っていたのでJavaを覚えただけです。主体性のない流れですね。

とはいえJavaは当時から何やら可能性の高そうな言語ではありました。もっとも当時の僕にとって、Javaの長所に関する理解は曖昧です。話には色々と聞くものの実感がありません。

Javaの長所

例えば、Javaの長所と言えば次のような点があります。

マルチプラットフォーム

1つ目のマルチプラットフォームに関する感動は希薄です。何事もそうですが、課題に突き当たる前に解決策を提示されてもその有り難みは理解できないですよね。

事前にマルチプラットフォームではない他の言語でも齧っておけば、あるいはWindow以外のOSと触れ合う機会が多かったら、感動もあったのかも知れませんが、それらに乏しかった自分には「便利なことは聞いています」という程度の認識です。

オブジェクト指向のサポート

さて、暫く使ってみると、Javaはなかなか使い勝手のよい言語です。どの使い勝手が良いのかといえば第二の長所として挙げたオブジェクト指向のあたりです。最初は何の魅力も感じられなかったこの機能ですが、理解し始めるととても強力なものでした。

これの何がすごいって、プログラムの整理が格段と楽になるのです。現実の世界に見立ててプログラムを組み立てるだけですから。プログラムの構造も設計しやすいし、出来上がったコードも直感的です。

ただ難点を言えば、現実の世界を正しく捉えられていればという条件が付きます。当たり前の事ですが、人が違えば同じものも違って見えます。物事を程よい抽象度と適切な観点から観察する力は身につけるのが難しく、それまでは見についていないことにすら気づけないものです。

Javaを通じて学べたこと

この辺になってくると、Javaという言語自体よりもむしろDDDを含めたデザインの話になってくるのですが、注目すべきはJavaにはその分析結果をスッとプログラムに落とせるだけの表現力があるということです。

表現力とはインターフェスや抽象クラスを使った抽象化や、カプセル化や委譲を使った制御も含むのですが、一番重要なのはクラスで対象の状態と振る舞いを定義でき、newするだけでそれをオブジェクトとして量産できるという点です。

デザインパターン

現実を模倣したオブジェクトの活用はそれ自体でも価値あることなのですが、時間が経つとコレを活用してシステムの抽象的な動きまで表現しようという動きが拡がります。いわゆるデザインパターンの出現です。

デザインパターンと言えば C++から生まれた GoFのパターンが有名ですが、Javaを使ってもそれらを表現することができます。業界に入って数年目の頃にはデザインパターンを学んでは試用し、といったことを繰り返していました。

残念ながら今となってはフレームワークや軽量コンテナが強力になり、自分でデザインパターンを駆使しながら基盤プログラムをデザインする必要性や機会も少なくなりましたが、当時は一般的なパターンくらいは知らないとまともな基盤プログラムは作りづらかったわけです。

リファクタリング

次に必要性が出てきたのがリファクタリングです。デザインパターンが主にインターフェイス・クラス単位での最適化だとすれば、こちらは変数・メソッド単位での最適化となります。