背景

《効能》アナログ思考からディジタル思考への扉を開く


地デジ化と同様に、アナログ思考(Java)からディジタル思考(Jython)へのパラダイムシフトは、まだ先…と諦めていませんか?受講者のみなさんの準備はいかがですか。

  • 古典的なプログラミングスタイル(if 文、for 文、配列など)を卒業して、要求仕様の変更にも柔軟に対処できる、簡潔で見通しの良いコードを記述できる。
  • ハイブリッド型の OOP の典型である Java の呪縛から解放されて、Jython の特徴である「純粋な OOP」の醍醐味を堪能できる。
  • GoF の隘路を開いて(Java の問題点を解消するため)Jython の特徴である「洗練された OOP」を習得できる。
《背景》Jython を導入したのは:Java/Eclipse の隘路

Jython を導入したのは「Java/Eclipse の生産性の低さ」に業を煮やしてのものです。以前は Smalltalk で開発していただけに、そのギャップは痛烈でした。加えて、統合開発環境とは名ばかりの JBuilder/Eclipse には、キャンプ生活と違って、電気/ガス/水道が整備された恩恵(Smalltalk)に浴していただけに不満が募ります。

アプリケーションを実行中に、その機能を自由に拡張して、その場で検証できるのは、要求仕様の変更にも迅速/柔軟に対処できる術を必要とするシステム開発の現場では、欠かせない機能のひとつです。また、初心者にも、Java の学習環境として、Jythonインタープリター(対話モード)は重宝します。

Java に限らず)機能の強化/拡張に伴い、複雑を通り越して肥大化する傾向にある「言語仕様のメタボリック症候群」の処方箋として、Java と同等のコードをより簡潔に表現できるだけでなく、言語仕様の拡張を待たずに、同等の機能を先行してシステム開発に導入できるのも魅力です。さらに、システム開発と要求仕様の変更が同時進行するときに、求められる術とは何か。その可能性を模索するヒントが得られます。

《背景》何が問題か

Jython には、伝統的な(C言語風の)for/switch 文がありません。それには、理由があります。それを理解しないまま、C++/Java で記述したコードを Python に置き換えたツケは、後に清算を余儀なくされます。なぜなら、伝統的な if/for 文や配列の境界問題などによって、コードは汚染され、要求仕様が変更されるたびに「メンテナンスの悪夢」が待ち受けているからです。

OOP の本質を理解して、デザインパターンを効果的に導入すると、コードの汚染問題を解消できます。そして、簡潔で見通しの良いコードを記述できるだけでなく、要求仕様の変更にも柔軟に対処できるようになります。

《背景》GoF を反面教師に

デザインパターンを導入するときによくある落とし穴は「GoF を鵜呑み」にして「損」をしていることです。C++/Java の事例を踏襲したまま Jython を導入しても、簡潔で見通しの良いコードは記述できません。パターンの表現(how)を踏襲しただけで、パターンの本質(what)を伝承していないコードをよく見掛けます。

たとえば「我が輩は猫である」を「I am a cat.」と訳したらどうでしょう。構文はそのままに単語を「置き換える」だけでも「意味は通じる」かもしれません。しかし、そこからは原文の趣を再現できません。本来の趣を損なわず、英語らしい表現にしたいと願うなら、原文の背景を理解できているかが鍵になります。

同様に、C++/Java で記述したままのコードを Python に「置き換える」だけでも「プログラムは動く」かもしれません。しかし、そこからはパターンの趣を再現できません。ともすると、実現方法に依存する問題を抱え込んだまま、それが後になって露呈したりするものです。本来の趣を損なわず、Python らしい表現にしたいと願うなら、パターンの背景を理解できているかが鍵になります。

デザインパターン聖典として〈GoF〉が引用されます。しかし、それは先人の功績を示すカタログにすぎません。みなさんは、日本人講師と外国人講師のどちらから、外国語を学びたいと思いますか。同様に、パターンの本質を学びたいなら、そのルーツに触れることで、〈GoF〉が何を伝え、何を伝えなかったかが分かります。

《余録》構成の詳細
(1)はじめの一歩:GoF を反面教師に Java の隘路を開く

GoF〉の事例を鵜呑みにしたコードが抱える問題を提起します。典型的な Java のコードをもとに、if/for 文や配列の境界問題によって、 コードが汚染 される様子を提示します。連載で完成されるプログラムの仕様に沿って、学習の指針を提示します。

(2)Iterator パターンの隘路:for と別れる50の方法

Python には伝統的な(C言語風の)for 文がありません。それには理由があります。〈GoF〉で例示されたプロトコルは、 データ構造に依存 する情報は隠蔽してあるものの、特定の プロトコルに依存 するコードの汚染につながります。Python では、抽象表現を可能にする、特殊メソッド __iter__ を規定することで、この問題を解消します。

(3)Composite パターンの導入:配列と別れる50の方法

配列が抱える境界問題は、 バグの温床 になりがちです。単一オブジェクトと複合オブジェクトとを統一的に扱えないことが、コードの汚染につながります。この問題を解消する定石として〈GoF〉では Composite パターンを紹介しています。

(4)Command パターンの隘路:if と別れる50の方法

Python には伝統的な switch 文がありません。それには理由があります。Java では、すべてを first-class object として 統一的に扱えない ことが、コードの汚染につながります。Python では、抽象表現を可能にする、特殊メソッド __iter__ を規定することで、この問題を解消します。クラスやメソッドも first-class object として統一的に扱える、Jython の魅力を紹介します。

(5)Visitor パターンの隘路:動的スキーマの適用

すべての 問題解決を静的にしか行えない ことが、コードの汚染につながります。この問題を解消する定石として〈GoF〉では Visitor パターンを紹介しています。すると、Iterator/Composite パターンを導入したコードが、さらに洗練された形に収まる相乗効果が期待できます。さらに、メタプログラミングを導入して、Java では困難なリファクタリングを可能にする、Jython の魅力を紹介します。

(6)末の千里:次に目指すのは…明日のためにその2

過去のセミナー受講者や読者から寄せられた、FAQ などを提示します。より発展的な学習を支援するために、Python 以外のプログラミング言語で実現するときの問題点や、 Python 自身の隘路 についても解説します。最後に、さらなるステップアップを目指して、今後の学習の指針を示します。


》作業中です《

《効能》ゴールにたどり着く2つのルート

  • (A)古典的なスタイル(Java)を踏襲したアプリケーションを構築した後で、その問題点を検証しながら、Jython の特徴を活かしたデザインパターンを注入していく。
  • (B)デザインパターンGoF)を踏襲したフレームワークを構築した後で、その問題点を検証しながら、アプリケーションに固有のコンテキストを注入していく。

どちらのルートをたどっても、ゴールは同じです。

  • (A)コースは、Java で構築されたレガシーシステムを、Jython などで再構築(再構成)する過程を想定しています。
  • (B)コースは、理論(技術研修)から実践(OJT)へと、新人プログラマーが育成される過程を想定しています。

Last updated♪09/06/14